payservedb 6.4.8 → 6.5.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.
Files changed (139) hide show
  1. package/.env +2 -2
  2. package/index.js +275 -275
  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 -35
  10. package/src/models/assetsAssignment.js +64 -64
  11. package/src/models/auditlog.js +83 -83
  12. package/src/models/bankdetails.js +40 -40
  13. package/src/models/billerAddress.js +119 -119
  14. package/src/models/booking_invoice.js +151 -151
  15. package/src/models/bookinganalytics.js +63 -63
  16. package/src/models/bookingconfig.js +45 -45
  17. package/src/models/bookingproperty.js +122 -122
  18. package/src/models/bookingreservation.js +192 -192
  19. package/src/models/bookingrevenuerecord.js +84 -84
  20. package/src/models/budget.js +95 -95
  21. package/src/models/budgetCategory.js +19 -19
  22. package/src/models/campaigns.js +78 -78
  23. package/src/models/cashpayment.js +264 -264
  24. package/src/models/combinedUnits.js +62 -62
  25. package/src/models/common_area_electricity.js +38 -38
  26. package/src/models/common_area_generator.js +41 -41
  27. package/src/models/common_area_utility_alert.js +37 -37
  28. package/src/models/common_area_water.js +39 -39
  29. package/src/models/communication_status.js +33 -33
  30. package/src/models/company.js +53 -53
  31. package/src/models/country_tax.js +42 -42
  32. package/src/models/currency_settings.js +39 -39
  33. package/src/models/customer.js +208 -208
  34. package/src/models/default_payment_details.js +17 -17
  35. package/src/models/deliveryTimeMarks.js +18 -18
  36. package/src/models/{dutyRoasterChecklist.js → dutyRosterChecklist.js} +250 -250
  37. package/src/models/dutyroster.js +136 -136
  38. package/src/models/email.js +37 -37
  39. package/src/models/email_sms_queue.js +61 -61
  40. package/src/models/entry_exit.js +53 -53
  41. package/src/models/expense.js +99 -99
  42. package/src/models/expense_category.js +45 -45
  43. package/src/models/facility.js +61 -61
  44. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  45. package/src/models/facility_departements.js +20 -20
  46. package/src/models/facility_payment_details.js +20 -20
  47. package/src/models/facilityasset.js +25 -25
  48. package/src/models/faq.js +18 -18
  49. package/src/models/gl_account_double_entries.js +25 -25
  50. package/src/models/gl_accounts.js +56 -56
  51. package/src/models/gl_entries.js +49 -49
  52. package/src/models/goodsReceivedNotes.js +115 -115
  53. package/src/models/guard.js +47 -47
  54. package/src/models/handover.js +246 -246
  55. package/src/models/invoice.js +336 -336
  56. package/src/models/item_inspection.js +67 -67
  57. package/src/models/leaseagreement.js +252 -252
  58. package/src/models/leasetemplate.js +17 -17
  59. package/src/models/levy.js +206 -206
  60. package/src/models/levy_invoice_settings.js +26 -26
  61. package/src/models/levycontract.js +117 -117
  62. package/src/models/levytype.js +23 -23
  63. package/src/models/maintenance_service_vendor.js +38 -38
  64. package/src/models/maintenance_services.js +17 -17
  65. package/src/models/maintenancerequisition.js +31 -31
  66. package/src/models/master_workplan.js +32 -32
  67. package/src/models/master_workplan_child.js +34 -34
  68. package/src/models/message.js +38 -38
  69. package/src/models/module.js +21 -21
  70. package/src/models/notification.js +44 -44
  71. package/src/models/paymentTermsMarks.js +19 -19
  72. package/src/models/penalty.js +76 -76
  73. package/src/models/pendingCredentials.js +32 -32
  74. package/src/models/powerMeterCustomerAccount.js +78 -78
  75. package/src/models/powerMeterCustomerBand.js +14 -14
  76. package/src/models/powerMeterDailyReading.js +30 -30
  77. package/src/models/powerMeterMonthlyReading.js +34 -34
  78. package/src/models/powerMeterPowerCharges.js +53 -53
  79. package/src/models/powerMeterSettings.js +138 -138
  80. package/src/models/powerMeterSingleDayReading.js +32 -32
  81. package/src/models/powerMeters.js +65 -65
  82. package/src/models/powerMetersManufacturer.js +14 -14
  83. package/src/models/propertyManagerContract.js +556 -556
  84. package/src/models/propertyManagerRevenue.js +195 -195
  85. package/src/models/purchaseOrderInvoice.js +74 -74
  86. package/src/models/purchase_order.js +213 -213
  87. package/src/models/purchase_request.js +110 -110
  88. package/src/models/refresh_token.js +23 -23
  89. package/src/models/reminder.js +197 -197
  90. package/src/models/report.js +13 -13
  91. package/src/models/resident.js +121 -121
  92. package/src/models/rfq_details.js +131 -131
  93. package/src/models/rfq_response.js +153 -153
  94. package/src/models/service_charge_invoice_upload.js +42 -42
  95. package/src/models/service_charge_payments.js +27 -27
  96. package/src/models/servicerequest.js +55 -55
  97. package/src/models/settings.js +62 -62
  98. package/src/models/smart_meter_daily_consumption.js +44 -44
  99. package/src/models/sms_africastalking.js +20 -20
  100. package/src/models/sms_balance_notification.js +26 -26
  101. package/src/models/sms_meliora.js +20 -20
  102. package/src/models/staff.js +36 -36
  103. package/src/models/stocksandspare.js +34 -34
  104. package/src/models/suppliers.js +74 -74
  105. package/src/models/tickets.js +121 -121
  106. package/src/models/unitManagementTemplate.js +44 -44
  107. package/src/models/unitasset.js +25 -25
  108. package/src/models/units.js +117 -117
  109. package/src/models/user.js +186 -186
  110. package/src/models/valueaddedservices.js +79 -79
  111. package/src/models/vas_invoices_upload.js +50 -50
  112. package/src/models/vas_payments.js +24 -24
  113. package/src/models/vasinvoice.js +192 -192
  114. package/src/models/vasvendor.js +57 -57
  115. package/src/models/visitLog.js +86 -86
  116. package/src/models/visitor.js +67 -67
  117. package/src/models/waitlist.js +45 -45
  118. package/src/models/wallet.js +44 -44
  119. package/src/models/wallet_transactions.js +50 -50
  120. package/src/models/water_invoice.js +281 -281
  121. package/src/models/water_meter_Command_Queue.js +33 -33
  122. package/src/models/water_meter_account.js +78 -78
  123. package/src/models/water_meter_billing.js +58 -58
  124. package/src/models/water_meter_communication.js +17 -17
  125. package/src/models/water_meter_communication_logs.js +30 -30
  126. package/src/models/water_meter_concentrator.js +66 -66
  127. package/src/models/water_meter_daily_history.js +32 -32
  128. package/src/models/water_meter_iot_cards.js +34 -34
  129. package/src/models/water_meter_manufacturer.js +35 -35
  130. package/src/models/water_meter_monthly_history.js +36 -36
  131. package/src/models/water_meter_negative_amounts.js +38 -38
  132. package/src/models/water_meter_settings.js +156 -156
  133. package/src/models/water_meter_single_day_history.js +34 -34
  134. package/src/models/water_meter_size.js +15 -15
  135. package/src/models/water_meters.js +123 -123
  136. package/src/models/water_meters_delivery.js +76 -76
  137. package/src/models/water_prepaid_credit.js +47 -47
  138. package/src/models/water_prepaid_debit.js +50 -50
  139. package/src/models/workorder.js +49 -49
@@ -1,68 +1,68 @@
1
- const mongoose = require('mongoose');
2
-
3
- // Define the schema for inspection items
4
- const inspectionItemSchema = new mongoose.Schema({
5
- name: {
6
- type: String,
7
- required: [true, 'Item name is required'],
8
- trim: true
9
- },
10
- category: {
11
- type: String,
12
- required: [true, 'Category is required'],
13
- trim: true
14
- },
15
- subcategory: {
16
- type: String,
17
- trim: true,
18
- default: null
19
- },
20
- description: {
21
- type: String,
22
- trim: true
23
- },
24
- possibleConditions: {
25
- type: [String],
26
- default: ['Excellent', 'Good', 'Fair', 'Poor', 'Damaged', 'Non-functional'],
27
- validate: {
28
- validator: function(v) {
29
- return v.length > 0;
30
- },
31
- message: 'At least one possible condition is required'
32
- }
33
- },
34
- defaultCondition: {
35
- type: String,
36
- default: 'Good'
37
- },
38
- isRequired: {
39
- type: Boolean,
40
- default: true
41
- },
42
- defaultQuantity: {
43
- type: Number,
44
- default: 1,
45
- min: [1, 'Default quantity must be at least 1']
46
- },
47
- active: {
48
- type: Boolean,
49
- default: true
50
- },
51
- facilityId: {
52
- type: mongoose.Schema.Types.ObjectId,
53
- ref: 'Facility',
54
- required: true
55
- }
56
- }, {
57
- timestamps: true
58
- });
59
-
60
- // Add indexes for common queries
61
- inspectionItemSchema.index({ facilityId: 1 });
62
- inspectionItemSchema.index({ facilityId: 1, category: 1 });
63
- inspectionItemSchema.index({ facilityId: 1, active: 1 });
64
-
65
- // Create InspectionItem model
66
- const InspectionItem = mongoose.model('InspectionItem', inspectionItemSchema);
67
-
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define the schema for inspection items
4
+ const inspectionItemSchema = new mongoose.Schema({
5
+ name: {
6
+ type: String,
7
+ required: [true, 'Item name is required'],
8
+ trim: true
9
+ },
10
+ category: {
11
+ type: String,
12
+ required: [true, 'Category is required'],
13
+ trim: true
14
+ },
15
+ subcategory: {
16
+ type: String,
17
+ trim: true,
18
+ default: null
19
+ },
20
+ description: {
21
+ type: String,
22
+ trim: true
23
+ },
24
+ possibleConditions: {
25
+ type: [String],
26
+ default: ['Excellent', 'Good', 'Fair', 'Poor', 'Damaged', 'Non-functional'],
27
+ validate: {
28
+ validator: function(v) {
29
+ return v.length > 0;
30
+ },
31
+ message: 'At least one possible condition is required'
32
+ }
33
+ },
34
+ defaultCondition: {
35
+ type: String,
36
+ default: 'Good'
37
+ },
38
+ isRequired: {
39
+ type: Boolean,
40
+ default: true
41
+ },
42
+ defaultQuantity: {
43
+ type: Number,
44
+ default: 1,
45
+ min: [1, 'Default quantity must be at least 1']
46
+ },
47
+ active: {
48
+ type: Boolean,
49
+ default: true
50
+ },
51
+ facilityId: {
52
+ type: mongoose.Schema.Types.ObjectId,
53
+ ref: 'Facility',
54
+ required: true
55
+ }
56
+ }, {
57
+ timestamps: true
58
+ });
59
+
60
+ // Add indexes for common queries
61
+ inspectionItemSchema.index({ facilityId: 1 });
62
+ inspectionItemSchema.index({ facilityId: 1, category: 1 });
63
+ inspectionItemSchema.index({ facilityId: 1, active: 1 });
64
+
65
+ // Create InspectionItem model
66
+ const InspectionItem = mongoose.model('InspectionItem', inspectionItemSchema);
67
+
68
68
  module.exports = InspectionItem;
@@ -1,252 +1,252 @@
1
- const mongoose = require('mongoose');
2
-
3
- const leaseAgreementSchema = new mongoose.Schema({
4
- facilityId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'Facility',
7
- required: true
8
- },
9
- currency: {
10
- type: mongoose.Schema.Types.ObjectId,
11
- ref: 'Currency',
12
- required: true
13
- },
14
- unitNumber: {
15
- type: mongoose.Schema.Types.ObjectId,
16
- ref: 'Unit',
17
- required: true
18
- },
19
- tenant: {
20
- type: mongoose.Schema.Types.ObjectId,
21
- ref: 'Customer',
22
- required: true
23
- },
24
- landlord: {
25
- type: mongoose.Schema.Types.ObjectId,
26
- ref: 'Customer',
27
- required: true
28
- },
29
-
30
- // *** NEW FIELD: Add billing address support ***
31
- billerAddressId: {
32
- type: mongoose.Schema.Types.ObjectId,
33
- ref: 'BillerAddress'
34
- },
35
-
36
- // GL Account configurations
37
- invoiceDoubleEntryAccount: {
38
- type: mongoose.Schema.Types.ObjectId,
39
- ref: 'GLAccountDoubleEntries'
40
- },
41
- paymentDoubleEntryAccount: {
42
- type: mongoose.Schema.Types.ObjectId,
43
- ref: 'GLAccountDoubleEntries'
44
- },
45
- // GL Account direct configurations (used when creating double entry records)
46
- glAccounts: {
47
- invoice: {
48
- debit: {
49
- type: mongoose.Schema.Types.ObjectId,
50
- ref: 'GLAccount'
51
- },
52
- credit: {
53
- type: mongoose.Schema.Types.ObjectId,
54
- ref: 'GLAccount'
55
- }
56
- },
57
- payment: {
58
- debit: {
59
- type: mongoose.Schema.Types.ObjectId,
60
- ref: 'GLAccount'
61
- },
62
- credit: {
63
- type: mongoose.Schema.Types.ObjectId,
64
- ref: 'GLAccount'
65
- }
66
- }
67
- },
68
- leaseTerms: {
69
- startDate: { type: Date, required: true },
70
- endDate: { type: Date, required: true },
71
- duration: { type: Number, required: true },
72
- autoRenewal: { type: Boolean, default: false }
73
- },
74
- isNewTenant: { type: Boolean, default: false },
75
- financialTerms: {
76
- monthlyRent: { type: Number, required: true },
77
- paymentDueDate: { type: Number, required: true },
78
- paymentMethods: [{
79
- type: {
80
- type: String,
81
- required: true,
82
- enum: ['Bank Transfer', 'Cash', 'Cheque']
83
- },
84
- details: {
85
- bankName: String,
86
- accountName: String,
87
- accountNumber: String,
88
- branch: String,
89
- swiftCode: String,
90
- bankToDraft: String,
91
- chequeAccountNumber: String,
92
- preferredCashLocation: String
93
- },
94
- isPrimary: { type: Boolean, default: false }
95
- }],
96
- securityDeposit: { type: Number, required: true },
97
- balanceBroughtForward: { type: Number, required: true, default: 0 },
98
- penaltyId: {
99
- type: mongoose.Schema.Types.ObjectId,
100
- ref: 'Penalty'
101
- },
102
-
103
- // *** ENHANCED: Add payment configuration flags ***
104
- bankPayment: {
105
- type: Boolean,
106
- default: false
107
- },
108
- mobilePayment: {
109
- type: Boolean,
110
- default: false
111
- },
112
-
113
- // *** ENHANCED: Add structured payment method references ***
114
- bankAccountId: {
115
- type: mongoose.Schema.Types.ObjectId,
116
- ref: 'BankAccount'
117
- },
118
- paymentMethodId: {
119
- type: mongoose.Schema.Types.ObjectId,
120
- ref: 'PaymentMethod'
121
- },
122
-
123
- // Existing M-Pesa fields (keep for backward compatibility)
124
- mpesaEnabled: {
125
- type: Boolean,
126
- default: false
127
- },
128
- mpesaDetails: {
129
- businessNumber: String,
130
- accountNumber: String,
131
- phoneNumber: String
132
- },
133
-
134
- escalations: [{
135
- _id: { type: mongoose.Schema.Types.ObjectId, auto: true },
136
- effectiveDate: { type: Date, required: true },
137
- type: {
138
- type: String,
139
- enum: ['percentage', 'fixed'],
140
- required: true
141
- },
142
- value: { type: Number, required: true },
143
- status: {
144
- type: String,
145
- enum: ['scheduled', 'applied', 'cancelled'],
146
- default: 'scheduled'
147
- }
148
- }]
149
- },
150
- billingCycle: {
151
- frequency: {
152
- type: String,
153
- enum: ['Monthly', 'Quarterly', 'Annually'],
154
- required: true
155
- },
156
- nextInvoiceDate: { type: Date },
157
- autoSend: { type: Boolean, default: false },
158
- lastInvoiceDate: { type: Date }
159
- },
160
- invoices: [
161
- { type: mongoose.Schema.Types.ObjectId, ref: 'Invoice' }
162
- ],
163
- leaseTemplate: {
164
- type: mongoose.Schema.Types.ObjectId,
165
- ref: 'LeaseTemplate',
166
- required: true
167
- },
168
- leaseDocuments: [
169
- {
170
- fileName: { type: String },
171
- fileUrl: { type: String },
172
- uploadedAt: { type: Date, default: Date.now }
173
- }
174
- ],
175
- reminders: [
176
- {
177
- reminderId: {
178
- type: mongoose.Schema.Types.ObjectId,
179
- ref: 'Reminder'
180
- },
181
- status: {
182
- type: String,
183
- enum: ['Pending', 'Sent'],
184
- default: 'Pending'
185
- }
186
- }
187
- ],
188
- status: {
189
- type: String,
190
- enum: ['Active', 'Pending', 'Expired', 'Terminated'],
191
- default: 'Active'
192
- },
193
- requireLandlordApproval: {
194
- type: Boolean,
195
- default: false
196
- },
197
- payments: [
198
- {
199
- invoiceId: {
200
- type: mongoose.Schema.Types.ObjectId,
201
- ref: 'Invoice',
202
- required: true
203
- },
204
- method: {
205
- type: {
206
- type: String,
207
- enum: ['Bank Transfer', 'Cash', 'Cheque', 'MPESA'],
208
- required: true
209
- },
210
- details: {
211
- bankName: String,
212
- accountNumber: String,
213
- transactionId: String,
214
- chequeNumber: String,
215
- mpesaTransactionId: String,
216
- mpesaPhoneNumber: String
217
- }
218
- },
219
- amount: { type: Number, required: true },
220
- receivedBy: {
221
- type: mongoose.Schema.Types.ObjectId,
222
- ref: 'User',
223
- required: true
224
- },
225
- receivedAt: { type: Date, default: Date.now }
226
- }
227
- ],
228
- // New field to track lease edit history
229
- editHistory: [
230
- {
231
- editedBy: {
232
- type: mongoose.Schema.Types.Mixed,
233
- ref: 'User'
234
- },
235
- editedAt: { type: Date, default: Date.now },
236
- reason: { type: String, required: true },
237
- changes: { type: Object } // Optional: Store what fields were changed
238
- }
239
- ],
240
- createdBy: {
241
- type: mongoose.Schema.Types.ObjectId,
242
- ref: 'User'
243
- }
244
- }, {
245
- timestamps: true
246
- });
247
-
248
- leaseAgreementSchema.index({ facilityId: 1 });
249
-
250
- const LeaseAgreement = mongoose.model('LeaseAgreement', leaseAgreementSchema);
251
-
252
- module.exports = LeaseAgreement;
1
+ const mongoose = require('mongoose');
2
+
3
+ const leaseAgreementSchema = new mongoose.Schema({
4
+ facilityId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'Facility',
7
+ required: true
8
+ },
9
+ currency: {
10
+ type: mongoose.Schema.Types.ObjectId,
11
+ ref: 'Currency',
12
+ required: true
13
+ },
14
+ unitNumber: {
15
+ type: mongoose.Schema.Types.ObjectId,
16
+ ref: 'Unit',
17
+ required: true
18
+ },
19
+ tenant: {
20
+ type: mongoose.Schema.Types.ObjectId,
21
+ ref: 'Customer',
22
+ required: true
23
+ },
24
+ landlord: {
25
+ type: mongoose.Schema.Types.ObjectId,
26
+ ref: 'Customer',
27
+ required: true
28
+ },
29
+
30
+ // *** NEW FIELD: Add billing address support ***
31
+ billerAddressId: {
32
+ type: mongoose.Schema.Types.ObjectId,
33
+ ref: 'BillerAddress'
34
+ },
35
+
36
+ // GL Account configurations
37
+ invoiceDoubleEntryAccount: {
38
+ type: mongoose.Schema.Types.ObjectId,
39
+ ref: 'GLAccountDoubleEntries'
40
+ },
41
+ paymentDoubleEntryAccount: {
42
+ type: mongoose.Schema.Types.ObjectId,
43
+ ref: 'GLAccountDoubleEntries'
44
+ },
45
+ // GL Account direct configurations (used when creating double entry records)
46
+ glAccounts: {
47
+ invoice: {
48
+ debit: {
49
+ type: mongoose.Schema.Types.ObjectId,
50
+ ref: 'GLAccount'
51
+ },
52
+ credit: {
53
+ type: mongoose.Schema.Types.ObjectId,
54
+ ref: 'GLAccount'
55
+ }
56
+ },
57
+ payment: {
58
+ debit: {
59
+ type: mongoose.Schema.Types.ObjectId,
60
+ ref: 'GLAccount'
61
+ },
62
+ credit: {
63
+ type: mongoose.Schema.Types.ObjectId,
64
+ ref: 'GLAccount'
65
+ }
66
+ }
67
+ },
68
+ leaseTerms: {
69
+ startDate: { type: Date, required: true },
70
+ endDate: { type: Date, required: true },
71
+ duration: { type: Number, required: true },
72
+ autoRenewal: { type: Boolean, default: false }
73
+ },
74
+ isNewTenant: { type: Boolean, default: false },
75
+ financialTerms: {
76
+ monthlyRent: { type: Number, required: true },
77
+ paymentDueDate: { type: Number, required: true },
78
+ paymentMethods: [{
79
+ type: {
80
+ type: String,
81
+ required: true,
82
+ enum: ['Bank Transfer', 'Cash', 'Cheque']
83
+ },
84
+ details: {
85
+ bankName: String,
86
+ accountName: String,
87
+ accountNumber: String,
88
+ branch: String,
89
+ swiftCode: String,
90
+ bankToDraft: String,
91
+ chequeAccountNumber: String,
92
+ preferredCashLocation: String
93
+ },
94
+ isPrimary: { type: Boolean, default: false }
95
+ }],
96
+ securityDeposit: { type: Number, required: true },
97
+ balanceBroughtForward: { type: Number, required: true, default: 0 },
98
+ penaltyId: {
99
+ type: mongoose.Schema.Types.ObjectId,
100
+ ref: 'Penalty'
101
+ },
102
+
103
+ // *** ENHANCED: Add payment configuration flags ***
104
+ bankPayment: {
105
+ type: Boolean,
106
+ default: false
107
+ },
108
+ mobilePayment: {
109
+ type: Boolean,
110
+ default: false
111
+ },
112
+
113
+ // *** ENHANCED: Add structured payment method references ***
114
+ bankAccountId: {
115
+ type: mongoose.Schema.Types.ObjectId,
116
+ ref: 'BankAccount'
117
+ },
118
+ paymentMethodId: {
119
+ type: mongoose.Schema.Types.ObjectId,
120
+ ref: 'PaymentMethod'
121
+ },
122
+
123
+ // Existing M-Pesa fields (keep for backward compatibility)
124
+ mpesaEnabled: {
125
+ type: Boolean,
126
+ default: false
127
+ },
128
+ mpesaDetails: {
129
+ businessNumber: String,
130
+ accountNumber: String,
131
+ phoneNumber: String
132
+ },
133
+
134
+ escalations: [{
135
+ _id: { type: mongoose.Schema.Types.ObjectId, auto: true },
136
+ effectiveDate: { type: Date, required: true },
137
+ type: {
138
+ type: String,
139
+ enum: ['percentage', 'fixed'],
140
+ required: true
141
+ },
142
+ value: { type: Number, required: true },
143
+ status: {
144
+ type: String,
145
+ enum: ['scheduled', 'applied', 'cancelled'],
146
+ default: 'scheduled'
147
+ }
148
+ }]
149
+ },
150
+ billingCycle: {
151
+ frequency: {
152
+ type: String,
153
+ enum: ['Monthly', 'Quarterly', 'Annually'],
154
+ required: true
155
+ },
156
+ nextInvoiceDate: { type: Date },
157
+ autoSend: { type: Boolean, default: false },
158
+ lastInvoiceDate: { type: Date }
159
+ },
160
+ invoices: [
161
+ { type: mongoose.Schema.Types.ObjectId, ref: 'Invoice' }
162
+ ],
163
+ leaseTemplate: {
164
+ type: mongoose.Schema.Types.ObjectId,
165
+ ref: 'LeaseTemplate',
166
+ required: true
167
+ },
168
+ leaseDocuments: [
169
+ {
170
+ fileName: { type: String },
171
+ fileUrl: { type: String },
172
+ uploadedAt: { type: Date, default: Date.now }
173
+ }
174
+ ],
175
+ reminders: [
176
+ {
177
+ reminderId: {
178
+ type: mongoose.Schema.Types.ObjectId,
179
+ ref: 'Reminder'
180
+ },
181
+ status: {
182
+ type: String,
183
+ enum: ['Pending', 'Sent'],
184
+ default: 'Pending'
185
+ }
186
+ }
187
+ ],
188
+ status: {
189
+ type: String,
190
+ enum: ['Active', 'Pending', 'Expired', 'Terminated'],
191
+ default: 'Active'
192
+ },
193
+ requireLandlordApproval: {
194
+ type: Boolean,
195
+ default: false
196
+ },
197
+ payments: [
198
+ {
199
+ invoiceId: {
200
+ type: mongoose.Schema.Types.ObjectId,
201
+ ref: 'Invoice',
202
+ required: true
203
+ },
204
+ method: {
205
+ type: {
206
+ type: String,
207
+ enum: ['Bank Transfer', 'Cash', 'Cheque', 'MPESA'],
208
+ required: true
209
+ },
210
+ details: {
211
+ bankName: String,
212
+ accountNumber: String,
213
+ transactionId: String,
214
+ chequeNumber: String,
215
+ mpesaTransactionId: String,
216
+ mpesaPhoneNumber: String
217
+ }
218
+ },
219
+ amount: { type: Number, required: true },
220
+ receivedBy: {
221
+ type: mongoose.Schema.Types.ObjectId,
222
+ ref: 'User',
223
+ required: true
224
+ },
225
+ receivedAt: { type: Date, default: Date.now }
226
+ }
227
+ ],
228
+ // New field to track lease edit history
229
+ editHistory: [
230
+ {
231
+ editedBy: {
232
+ type: mongoose.Schema.Types.Mixed,
233
+ ref: 'User'
234
+ },
235
+ editedAt: { type: Date, default: Date.now },
236
+ reason: { type: String, required: true },
237
+ changes: { type: Object } // Optional: Store what fields were changed
238
+ }
239
+ ],
240
+ createdBy: {
241
+ type: mongoose.Schema.Types.ObjectId,
242
+ ref: 'User'
243
+ }
244
+ }, {
245
+ timestamps: true
246
+ });
247
+
248
+ leaseAgreementSchema.index({ facilityId: 1 });
249
+
250
+ const LeaseAgreement = mongoose.model('LeaseAgreement', leaseAgreementSchema);
251
+
252
+ module.exports = LeaseAgreement;
@@ -1,18 +1,18 @@
1
- const mongoose = require("mongoose");
2
-
3
- const LeaseTemplateSchema = new mongoose.Schema({
4
- name: { type: String, required: true },
5
- description: { type: String, required: true },
6
- templateContent: { type: String, required: true },
7
- leaseAgreementId: {
8
- type: mongoose.Schema.Types.ObjectId,
9
- ref: 'LeaseAgreement',
10
- required: false
11
- },
12
- createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
13
- createdAt: { type: Date, default: Date.now },
14
- });
15
-
16
- module.exports = mongoose.model('LeaseTemplate', LeaseTemplateSchema);
17
-
1
+ const mongoose = require("mongoose");
2
+
3
+ const LeaseTemplateSchema = new mongoose.Schema({
4
+ name: { type: String, required: true },
5
+ description: { type: String, required: true },
6
+ templateContent: { type: String, required: true },
7
+ leaseAgreementId: {
8
+ type: mongoose.Schema.Types.ObjectId,
9
+ ref: 'LeaseAgreement',
10
+ required: false
11
+ },
12
+ createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
13
+ createdAt: { type: Date, default: Date.now },
14
+ });
15
+
16
+ module.exports = mongoose.model('LeaseTemplate', LeaseTemplateSchema);
17
+
18
18