payservedb 6.8.9 → 6.9.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.
Files changed (148) hide show
  1. package/.env +2 -2
  2. package/index.js +284 -284
  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/asset.js +92 -92
  9. package/src/models/assetsAssignment.js +64 -64
  10. package/src/models/auditTrail.js +346 -346
  11. package/src/models/bankdetails.js +40 -40
  12. package/src/models/billerAddress.js +119 -119
  13. package/src/models/booking_invoice.js +151 -151
  14. package/src/models/bookinganalytics.js +63 -63
  15. package/src/models/bookingconfig.js +45 -45
  16. package/src/models/bookingproperty.js +122 -122
  17. package/src/models/bookingreservation.js +192 -192
  18. package/src/models/bookingrevenuerecord.js +84 -84
  19. package/src/models/budget.js +95 -95
  20. package/src/models/budgetCategory.js +19 -19
  21. package/src/models/campaigns.js +94 -94
  22. package/src/models/cashpayment.js +264 -264
  23. package/src/models/combinedUnits.js +62 -62
  24. package/src/models/common_area_electricity.js +38 -38
  25. package/src/models/common_area_generator.js +41 -41
  26. package/src/models/common_area_utility_alert.js +37 -37
  27. package/src/models/common_area_water.js +39 -39
  28. package/src/models/communication_status.js +33 -33
  29. package/src/models/company.js +53 -53
  30. package/src/models/coreBaseSettings.js +16 -16
  31. package/src/models/coreInvoiceSettings.js +100 -100
  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 +312 -312
  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 +62 -62
  46. package/src/models/facilityContractPricing.js +51 -51
  47. package/src/models/facilityInvoice.js +222 -222
  48. package/src/models/facilityInvoiceContract.js +268 -254
  49. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  50. package/src/models/facility_departements.js +20 -20
  51. package/src/models/facility_payment_details.js +20 -20
  52. package/src/models/facilityasset.js +25 -25
  53. package/src/models/faq.js +18 -18
  54. package/src/models/gl_account_double_entries.js +25 -25
  55. package/src/models/gl_accounts.js +56 -56
  56. package/src/models/gl_entries.js +49 -49
  57. package/src/models/goodsReceivedNotes.js +115 -115
  58. package/src/models/guard.js +47 -47
  59. package/src/models/handover.js +246 -246
  60. package/src/models/invoice.js +336 -336
  61. package/src/models/item_inspection.js +67 -67
  62. package/src/models/leaseagreement.js +226 -226
  63. package/src/models/leasetemplate.js +17 -17
  64. package/src/models/levy.js +206 -206
  65. package/src/models/levy_invoice_settings.js +26 -26
  66. package/src/models/levycontract.js +168 -168
  67. package/src/models/levytype.js +23 -23
  68. package/src/models/maintenance_service_vendor.js +38 -38
  69. package/src/models/maintenance_services.js +17 -17
  70. package/src/models/maintenancerequisition.js +31 -31
  71. package/src/models/master_workplan.js +32 -32
  72. package/src/models/master_workplan_child.js +34 -34
  73. package/src/models/message.js +38 -38
  74. package/src/models/module.js +21 -21
  75. package/src/models/notification.js +44 -44
  76. package/src/models/paymentTermsMarks.js +19 -19
  77. package/src/models/penalty.js +76 -76
  78. package/src/models/pendingCredentials.js +32 -32
  79. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  80. package/src/models/powerMeterCustomerAccount.js +78 -78
  81. package/src/models/powerMeterCustomerBand.js +14 -14
  82. package/src/models/powerMeterDailyReading.js +30 -30
  83. package/src/models/powerMeterGateways.js +37 -37
  84. package/src/models/powerMeterMonthlyReading.js +34 -34
  85. package/src/models/powerMeterPowerCharges.js +53 -53
  86. package/src/models/powerMeterSettings.js +138 -138
  87. package/src/models/powerMeterSingleDayReading.js +32 -32
  88. package/src/models/powerMeters.js +104 -104
  89. package/src/models/powerMetersManufacturer.js +14 -14
  90. package/src/models/power_meter_account.js +81 -81
  91. package/src/models/power_meter_command_logs.js +30 -30
  92. package/src/models/propertyManagerContract.js +556 -556
  93. package/src/models/propertyManagerRevenue.js +195 -195
  94. package/src/models/purchaseOrderInvoice.js +74 -74
  95. package/src/models/purchase_order.js +213 -213
  96. package/src/models/purchase_request.js +110 -110
  97. package/src/models/refresh_token.js +23 -23
  98. package/src/models/reminder.js +197 -197
  99. package/src/models/report.js +13 -13
  100. package/src/models/resident.js +121 -121
  101. package/src/models/rfq_details.js +131 -131
  102. package/src/models/rfq_response.js +153 -153
  103. package/src/models/service_charge_invoice_upload.js +42 -42
  104. package/src/models/service_charge_payments.js +27 -27
  105. package/src/models/servicerequest.js +55 -55
  106. package/src/models/settings.js +62 -62
  107. package/src/models/smart_meter_daily_consumption.js +44 -44
  108. package/src/models/sms_africastalking.js +20 -20
  109. package/src/models/sms_balance_notification.js +26 -26
  110. package/src/models/sms_meliora.js +20 -20
  111. package/src/models/staff.js +36 -36
  112. package/src/models/stocksandspare.js +161 -161
  113. package/src/models/suppliers.js +74 -74
  114. package/src/models/tickets.js +121 -121
  115. package/src/models/unitManagementTemplate.js +44 -44
  116. package/src/models/unitasset.js +25 -25
  117. package/src/models/units.js +117 -117
  118. package/src/models/user.js +186 -186
  119. package/src/models/valueaddedservices.js +79 -79
  120. package/src/models/vas_invoices_upload.js +50 -50
  121. package/src/models/vas_payments.js +24 -24
  122. package/src/models/vasinvoice.js +192 -192
  123. package/src/models/vasvendor.js +57 -57
  124. package/src/models/visitLog.js +95 -95
  125. package/src/models/visitor.js +67 -67
  126. package/src/models/waitlist.js +45 -45
  127. package/src/models/wallet.js +44 -44
  128. package/src/models/wallet_transactions.js +50 -50
  129. package/src/models/water_invoice.js +305 -305
  130. package/src/models/water_meter_Command_Queue.js +33 -33
  131. package/src/models/water_meter_account.js +82 -82
  132. package/src/models/water_meter_billing.js +58 -58
  133. package/src/models/water_meter_communication.js +17 -17
  134. package/src/models/water_meter_communication_logs.js +30 -30
  135. package/src/models/water_meter_concentrator.js +66 -66
  136. package/src/models/water_meter_daily_history.js +32 -32
  137. package/src/models/water_meter_iot_cards.js +34 -34
  138. package/src/models/water_meter_manufacturer.js +35 -35
  139. package/src/models/water_meter_monthly_history.js +36 -36
  140. package/src/models/water_meter_negative_amounts.js +44 -39
  141. package/src/models/water_meter_settings.js +227 -227
  142. package/src/models/water_meter_single_day_history.js +34 -34
  143. package/src/models/water_meter_size.js +15 -15
  144. package/src/models/water_meters.js +134 -134
  145. package/src/models/water_meters_delivery.js +76 -76
  146. package/src/models/water_prepaid_credit.js +47 -47
  147. package/src/models/water_prepaid_debit.js +50 -50
  148. package/src/models/workorder.js +49 -49
@@ -1,254 +1,268 @@
1
- const mongoose = require("mongoose");
2
-
3
- const facilityInvoiceContractSchema = new mongoose.Schema(
4
- {
5
- facility: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: "Facility",
8
- required: true,
9
- },
10
- pricing: {
11
- type: mongoose.Schema.Types.ObjectId,
12
- ref: "FacilityContractPricing",
13
- required: true,
14
- },
15
- name: {
16
- type: String,
17
- required: true,
18
- trim: true,
19
- },
20
- phone: {
21
- type: String,
22
- required: true,
23
- trim: true,
24
- },
25
- email: {
26
- type: String,
27
- required: true,
28
- trim: true,
29
- lowercase: true,
30
- match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
31
- },
32
- paymentInterval: {
33
- type: String,
34
- enum: ["monthly", "quarterly", "yearly"],
35
- default: "monthly",
36
- },
37
- paymentType: {
38
- type: String,
39
- enum: ["prepaid", "postpaid", "cash"],
40
- default: "cash",
41
- },
42
- invoiceDueAfterDays: {
43
- type: Number,
44
- required: true,
45
- min: [0, "Invoice due days cannot be negative"],
46
- },
47
- overdueAfterDays: {
48
- type: Number,
49
- required: true,
50
- min: [0, "Overdue days cannot be negative"],
51
- default: 7,
52
- },
53
- prorate: {
54
- type: Boolean,
55
- default: false,
56
- },
57
- items: [
58
- {
59
- itemType: {
60
- type: String,
61
- required: true,
62
- enum: [
63
- "unit",
64
- "license",
65
- "powerMeters",
66
- "hotWaterMeters",
67
- "coldWaterMeters",
68
- ],
69
- trim: true,
70
- },
71
- name: {
72
- type: String,
73
- required: true,
74
- trim: true,
75
- },
76
- description: {
77
- type: String,
78
- required: true,
79
- trim: true,
80
- },
81
- price: {
82
- type: Number,
83
- required: true,
84
- min: [0, "Price cannot be negative"],
85
- },
86
- quantity: {
87
- type: Number,
88
- required: true,
89
- min: [1, "Quantity must be at least 1"],
90
- },
91
- },
92
- ],
93
- reminders: [
94
- {
95
- frequency: {
96
- type: String,
97
- required: true,
98
- enum: ["daily", "custom"],
99
- default: "daily",
100
- },
101
- customDays: {
102
- type: Number,
103
- required: function () {
104
- return this.frequency === "custom";
105
- },
106
- min: [1, "Custom days must be at least 1"],
107
- default: null,
108
- },
109
- startDate: {
110
- type: Date,
111
- required: true,
112
- },
113
- status: {
114
- type: String,
115
- enum: ["sent", "pending"],
116
- default: "pending",
117
- },
118
- },
119
- ],
120
- dates: {
121
- startDate: {
122
- type: Date,
123
- required: true,
124
- },
125
- endDate: {
126
- type: Date,
127
- required: true,
128
- },
129
- invoiceGeneratedDate: {
130
- type: Date,
131
- required: true,
132
- },
133
- invoiceDueDate: {
134
- type: Date,
135
- required: true,
136
- },
137
- },
138
- signedContractDocument: {
139
- type: String,
140
- required: true,
141
- },
142
- status: {
143
- type: String,
144
- enum: ["pending", "signed", "rejected"],
145
- default: "pending",
146
- },
147
- active: {
148
- type: Boolean,
149
- default: true,
150
- },
151
- header: {
152
- companyName: {
153
- type: String,
154
- required: true,
155
- trim: true,
156
- },
157
- companyAddress: {
158
- type: String,
159
- required: true,
160
- trim: true,
161
- },
162
- companyPhone: {
163
- type: String,
164
- trim: true,
165
- },
166
- companyEmail: {
167
- type: String,
168
- trim: true,
169
- lowercase: true,
170
- match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
171
- },
172
- companyWebsite: {
173
- type: String,
174
- trim: true,
175
- match: [/^https?:\/\/[^\s$.?#].[^\s]*$/, "Please enter a valid URL"],
176
- },
177
- taxNumber: {
178
- type: String,
179
- trim: true,
180
- },
181
- logo: {
182
- type: String,
183
- default: null,
184
- },
185
- },
186
- footer: {
187
- bankName: {
188
- type: String,
189
- trim: true,
190
- },
191
- accountName: {
192
- type: String,
193
- trim: true,
194
- },
195
- accountNumber: {
196
- type: String,
197
- trim: true,
198
- },
199
- swiftCode: {
200
- type: String,
201
- trim: true,
202
- },
203
- paymentTerms: {
204
- type: String,
205
- trim: true,
206
- default: "Net 30 days",
207
- },
208
- latePaymentFee: {
209
- type: String,
210
- trim: true,
211
- },
212
- taxRate: {
213
- type: String,
214
- trim: true,
215
- },
216
- additionalNotes: {
217
- type: String,
218
- trim: true,
219
- },
220
- supportEmail: {
221
- type: String,
222
- trim: true,
223
- lowercase: true,
224
- match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
225
- },
226
- supportPhone: {
227
- type: String,
228
- trim: true,
229
- },
230
- termsAndConditions: {
231
- type: String,
232
- trim: true,
233
- },
234
- },
235
- createdAt: {
236
- type: Date,
237
- default: Date.now,
238
- },
239
- updatedAt: {
240
- type: Date,
241
- default: Date.now,
242
- },
243
- },
244
- {
245
- timestamps: true,
246
- },
247
- );
248
-
249
- const FacilityInvoiceContract = mongoose.model(
250
- "FacilityInvoiceContract",
251
- facilityInvoiceContractSchema,
252
- );
253
-
254
- module.exports = FacilityInvoiceContract;
1
+ const mongoose = require("mongoose");
2
+
3
+ const facilityInvoiceContractSchema = new mongoose.Schema(
4
+ {
5
+ facility: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: "Facility",
8
+ required: true,
9
+ },
10
+ pricing: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ ref: "FacilityContractPricing",
13
+ required: true,
14
+ },
15
+ name: {
16
+ type: String,
17
+ required: true,
18
+ trim: true,
19
+ },
20
+ phone: {
21
+ type: String,
22
+ required: true,
23
+ trim: true,
24
+ },
25
+ email: {
26
+ type: String,
27
+ required: true,
28
+ trim: true,
29
+ lowercase: true,
30
+ match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
31
+ },
32
+ paymentInterval: {
33
+ type: String,
34
+ enum: ["monthly", "quarterly", "yearly"],
35
+ default: "monthly",
36
+ },
37
+ paymentType: {
38
+ type: String,
39
+ enum: ["prepaid", "postpaid", "cash"],
40
+ default: "cash",
41
+ },
42
+ invoiceDueAfterDays: {
43
+ type: Number,
44
+ required: true,
45
+ min: [0, "Invoice due days cannot be negative"],
46
+ },
47
+ overdueAfterDays: {
48
+ type: Number,
49
+ required: true,
50
+ min: [0, "Overdue days cannot be negative"],
51
+ default: 7,
52
+ },
53
+ prorate: {
54
+ type: Boolean,
55
+ default: false,
56
+ },
57
+ items: [
58
+ {
59
+ itemType: {
60
+ type: String,
61
+ required: true,
62
+ enum: [
63
+ "unit",
64
+ "license",
65
+ "powerMeters",
66
+ "hotWaterMeters",
67
+ "coldWaterMeters",
68
+ ],
69
+ trim: true,
70
+ },
71
+ name: {
72
+ type: String,
73
+ required: true,
74
+ trim: true,
75
+ },
76
+ description: {
77
+ type: String,
78
+ required: true,
79
+ trim: true,
80
+ },
81
+ price: {
82
+ type: Number,
83
+ required: true,
84
+ min: [0, "Price cannot be negative"],
85
+ },
86
+ quantity: {
87
+ type: Number,
88
+ required: true,
89
+ min: [1, "Quantity must be at least 1"],
90
+ },
91
+ },
92
+ ],
93
+ reminders: [
94
+ {
95
+ frequency: {
96
+ type: String,
97
+ required: true,
98
+ enum: ["daily", "custom"],
99
+ default: "daily",
100
+ },
101
+ customDays: {
102
+ type: Number,
103
+ required: function () {
104
+ return this.frequency === "custom";
105
+ },
106
+ min: [1, "Custom days must be at least 1"],
107
+ default: null,
108
+ },
109
+ startDate: {
110
+ type: Date,
111
+ required: true,
112
+ },
113
+ status: {
114
+ type: String,
115
+ enum: ["sent", "pending"],
116
+ default: "pending",
117
+ },
118
+ },
119
+ ],
120
+ dates: {
121
+ startDate: {
122
+ type: Date,
123
+ required: true,
124
+ },
125
+ endDate: {
126
+ type: Date,
127
+ required: true,
128
+ },
129
+ invoiceGeneratedDate: {
130
+ type: Date,
131
+ required: true,
132
+ },
133
+ invoiceDueDate: {
134
+ type: Date,
135
+ required: true,
136
+ },
137
+ },
138
+ signedContractDocument: {
139
+ type: String,
140
+ required: false, // Changed from required: true
141
+ default: null, // Added default value
142
+ },
143
+ status: {
144
+ type: String,
145
+ enum: ["pending", "signed", "rejected"],
146
+ default: "pending",
147
+ },
148
+ active: {
149
+ type: Boolean,
150
+ default: false, // Changed default to false since contracts start inactive
151
+ },
152
+ header: {
153
+ companyName: {
154
+ type: String,
155
+ required: true,
156
+ trim: true,
157
+ },
158
+ companyAddress: {
159
+ type: String,
160
+ required: true,
161
+ trim: true,
162
+ },
163
+ companyPhone: {
164
+ type: String,
165
+ trim: true,
166
+ },
167
+ companyEmail: {
168
+ type: String,
169
+ trim: true,
170
+ lowercase: true,
171
+ match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
172
+ },
173
+ companyWebsite: {
174
+ type: String,
175
+ trim: true,
176
+ match: [/^https?:\/\/[^\s$.?#].[^\s]*$/, "Please enter a valid URL"],
177
+ },
178
+ taxNumber: {
179
+ type: String,
180
+ trim: true,
181
+ },
182
+ logo: {
183
+ type: String,
184
+ default: null,
185
+ },
186
+ },
187
+ footer: {
188
+ bankName: {
189
+ type: String,
190
+ trim: true,
191
+ },
192
+ accountName: {
193
+ type: String,
194
+ trim: true,
195
+ },
196
+ accountNumber: {
197
+ type: String,
198
+ trim: true,
199
+ },
200
+ swiftCode: {
201
+ type: String,
202
+ trim: true,
203
+ },
204
+ paymentTerms: {
205
+ type: String,
206
+ trim: true,
207
+ default: "Net 30 days",
208
+ },
209
+ latePaymentFee: {
210
+ type: String,
211
+ trim: true,
212
+ },
213
+ taxRate: {
214
+ type: String,
215
+ trim: true,
216
+ },
217
+ additionalNotes: {
218
+ type: String,
219
+ trim: true,
220
+ },
221
+ supportEmail: {
222
+ type: String,
223
+ trim: true,
224
+ lowercase: true,
225
+ match: [/^\S+@\S+\.\S+$/, "Please enter a valid email address"],
226
+ },
227
+ supportPhone: {
228
+ type: String,
229
+ trim: true,
230
+ },
231
+ termsAndConditions: {
232
+ type: String,
233
+ trim: true,
234
+ },
235
+ },
236
+ createdAt: {
237
+ type: Date,
238
+ default: Date.now,
239
+ },
240
+ updatedAt: {
241
+ type: Date,
242
+ default: Date.now,
243
+ },
244
+ },
245
+ {
246
+ timestamps: true,
247
+ },
248
+ );
249
+
250
+ // Add validation middleware to ensure signed contracts have documents
251
+ facilityInvoiceContractSchema.pre("save", function (next) {
252
+ if (this.status === "signed" && !this.signedContractDocument) {
253
+ return next(
254
+ new Error("Signed contracts must have a signed contract document"),
255
+ );
256
+ }
257
+ if (this.active === true && this.status !== "signed") {
258
+ return next(new Error("Only signed contracts can be active"));
259
+ }
260
+ next();
261
+ });
262
+
263
+ const FacilityInvoiceContract = mongoose.model(
264
+ "FacilityInvoiceContract",
265
+ facilityInvoiceContractSchema,
266
+ );
267
+
268
+ module.exports = FacilityInvoiceContract;