payservedb 7.9.4 → 7.9.5

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 (160) hide show
  1. package/.env +2 -2
  2. package/.idea/material_theme_project_new.xml +11 -11
  3. package/.idea/modules.xml +7 -7
  4. package/.idea/psdb.iml +11 -11
  5. package/.idea/vcs.xml +5 -5
  6. package/index.js +287 -289
  7. package/package.json +17 -17
  8. package/src/models/account.js +35 -35
  9. package/src/models/apilog.js +18 -18
  10. package/src/models/approvalsWorkflows.js +49 -49
  11. package/src/models/archivedapilog.js +18 -18
  12. package/src/models/asset.js +92 -92
  13. package/src/models/assetsAssignment.js +64 -64
  14. package/src/models/auditTrail.js +346 -346
  15. package/src/models/bankdetails.js +43 -43
  16. package/src/models/billerAddress.js +124 -124
  17. package/src/models/booking_invoice.js +151 -151
  18. package/src/models/bookinganalytics.js +63 -63
  19. package/src/models/bookingconfig.js +45 -45
  20. package/src/models/bookingproperty.js +122 -122
  21. package/src/models/bookingreservation.js +192 -192
  22. package/src/models/bookingrevenuerecord.js +84 -84
  23. package/src/models/budget.js +95 -95
  24. package/src/models/budgetCategory.js +19 -19
  25. package/src/models/campaigns.js +94 -94
  26. package/src/models/cashpayment.js +264 -264
  27. package/src/models/combinedUnits.js +62 -62
  28. package/src/models/common_area_electricity.js +38 -38
  29. package/src/models/common_area_generator.js +41 -41
  30. package/src/models/common_area_utility_alert.js +37 -37
  31. package/src/models/common_area_water.js +39 -39
  32. package/src/models/communication_status.js +33 -33
  33. package/src/models/company.js +53 -53
  34. package/src/models/coreBaseSettings.js +16 -16
  35. package/src/models/coreInvoiceSettings.js +100 -100
  36. package/src/models/country_tax.js +42 -42
  37. package/src/models/currency_settings.js +39 -39
  38. package/src/models/customer.js +208 -208
  39. package/src/models/dailyChecklist.js +312 -312
  40. package/src/models/default_payment_details.js +17 -17
  41. package/src/models/deliveryTimeMarks.js +18 -18
  42. package/src/models/dutyRosterChecklist.js +250 -250
  43. package/src/models/dutyroster.js +136 -136
  44. package/src/models/email.js +37 -37
  45. package/src/models/email_sms_queue.js +61 -61
  46. package/src/models/entry_exit.js +53 -53
  47. package/src/models/expense.js +99 -99
  48. package/src/models/expense_category.js +45 -45
  49. package/src/models/facility.js +62 -62
  50. package/src/models/facilityInvoice.js +223 -218
  51. package/src/models/facilityInvoiceRecipient.js +32 -32
  52. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  53. package/src/models/facility_departements.js +20 -20
  54. package/src/models/facility_payment_details.js +20 -20
  55. package/src/models/facilityasset.js +25 -25
  56. package/src/models/faq.js +18 -18
  57. package/src/models/gl_account_double_entries.js +25 -25
  58. package/src/models/gl_accounts.js +56 -56
  59. package/src/models/gl_entries.js +49 -49
  60. package/src/models/goodsReceivedNotes.js +115 -115
  61. package/src/models/guard.js +47 -47
  62. package/src/models/handover.js +246 -246
  63. package/src/models/invoice.js +336 -336
  64. package/src/models/item_inspection.js +67 -67
  65. package/src/models/leaseagreement.js +226 -226
  66. package/src/models/leasetemplate.js +17 -17
  67. package/src/models/levy.js +206 -206
  68. package/src/models/levy_invoice_settings.js +26 -26
  69. package/src/models/levycontract.js +168 -168
  70. package/src/models/levytype.js +23 -23
  71. package/src/models/maintenance_service_vendor.js +38 -38
  72. package/src/models/maintenance_services.js +17 -17
  73. package/src/models/maintenancerequisition.js +31 -31
  74. package/src/models/master_workplan.js +32 -32
  75. package/src/models/master_workplan_child.js +34 -34
  76. package/src/models/message.js +38 -38
  77. package/src/models/module.js +21 -21
  78. package/src/models/notification.js +44 -44
  79. package/src/models/paymentTermsMarks.js +19 -19
  80. package/src/models/penalty.js +76 -76
  81. package/src/models/pendingCredentials.js +32 -32
  82. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  83. package/src/models/powerMeterCustomerAccount.js +78 -78
  84. package/src/models/powerMeterCustomerBand.js +14 -14
  85. package/src/models/powerMeterDailyReading.js +30 -30
  86. package/src/models/powerMeterGateways.js +40 -40
  87. package/src/models/powerMeterMonthlyReading.js +34 -34
  88. package/src/models/powerMeterPowerCharges.js +85 -85
  89. package/src/models/powerMeterSettings.js +159 -159
  90. package/src/models/powerMeterSingleDayReading.js +32 -32
  91. package/src/models/powerMeters.js +116 -116
  92. package/src/models/powerMetersManufacturer.js +14 -14
  93. package/src/models/power_meter_account.js +81 -81
  94. package/src/models/power_meter_command_logs.js +30 -30
  95. package/src/models/power_meter_command_queue.js +33 -33
  96. package/src/models/power_meter_negative_balance.js +44 -44
  97. package/src/models/power_prepaid_credits.js +47 -47
  98. package/src/models/power_prepaid_debits.js +50 -50
  99. package/src/models/power_prepaid_orders.js +78 -78
  100. package/src/models/power_sms_notification.js +26 -26
  101. package/src/models/propertyManagerContract.js +556 -556
  102. package/src/models/propertyManagerRevenue.js +195 -195
  103. package/src/models/purchaseOrderInvoice.js +74 -74
  104. package/src/models/purchase_order.js +213 -213
  105. package/src/models/purchase_request.js +110 -110
  106. package/src/models/refresh_token.js +23 -23
  107. package/src/models/reminder.js +197 -197
  108. package/src/models/report.js +13 -13
  109. package/src/models/resident.js +121 -121
  110. package/src/models/rfq_details.js +131 -131
  111. package/src/models/rfq_response.js +153 -153
  112. package/src/models/service_charge_invoice_upload.js +42 -42
  113. package/src/models/service_charge_payments.js +27 -27
  114. package/src/models/servicerequest.js +55 -55
  115. package/src/models/settings.js +62 -62
  116. package/src/models/smart_meter_daily_consumption.js +44 -44
  117. package/src/models/sms_africastalking.js +20 -20
  118. package/src/models/sms_balance_notification.js +26 -26
  119. package/src/models/sms_meliora.js +20 -20
  120. package/src/models/staff.js +36 -36
  121. package/src/models/stocksandspare.js +161 -161
  122. package/src/models/suppliers.js +74 -74
  123. package/src/models/tickets.js +121 -121
  124. package/src/models/unitManagementTemplate.js +44 -44
  125. package/src/models/unitasset.js +25 -25
  126. package/src/models/units.js +117 -117
  127. package/src/models/user.js +186 -186
  128. package/src/models/valueaddedservices.js +79 -79
  129. package/src/models/vas_invoices_upload.js +50 -50
  130. package/src/models/vas_payments.js +24 -24
  131. package/src/models/vasinvoice.js +192 -192
  132. package/src/models/vasvendor.js +57 -57
  133. package/src/models/visitLog.js +95 -95
  134. package/src/models/visitor.js +67 -67
  135. package/src/models/waitlist.js +45 -45
  136. package/src/models/wallet.js +44 -44
  137. package/src/models/wallet_transactions.js +50 -50
  138. package/src/models/water_invoice.js +351 -351
  139. package/src/models/water_meter_Command_Queue.js +33 -33
  140. package/src/models/water_meter_account.js +82 -82
  141. package/src/models/water_meter_billing.js +58 -58
  142. package/src/models/water_meter_communication.js +17 -17
  143. package/src/models/water_meter_communication_logs.js +39 -39
  144. package/src/models/water_meter_concentrator.js +66 -66
  145. package/src/models/water_meter_daily_history.js +32 -32
  146. package/src/models/water_meter_high_risk.js +36 -36
  147. package/src/models/water_meter_iot_cards.js +34 -34
  148. package/src/models/water_meter_manufacturer.js +35 -35
  149. package/src/models/water_meter_monthly_history.js +36 -36
  150. package/src/models/water_meter_negative_amounts.js +44 -44
  151. package/src/models/water_meter_settings.js +276 -261
  152. package/src/models/water_meter_single_day_history.js +34 -34
  153. package/src/models/water_meter_size.js +15 -15
  154. package/src/models/water_meters.js +133 -133
  155. package/src/models/water_meters_delivery.js +76 -76
  156. package/src/models/water_prepaid_credit.js +47 -47
  157. package/src/models/water_prepaid_debit.js +50 -50
  158. package/src/models/workorder.js +49 -49
  159. package/src/models/facilityBillingPrices.js +0 -30
  160. package/src/models/facilityInvoicePayment.js +0 -47
@@ -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,226 +1,226 @@
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
- billerAddressId: {
30
- type: mongoose.Schema.Types.ObjectId,
31
- ref: 'BillerAddress'
32
- },
33
- // GL Account configurations
34
- invoiceDoubleEntryAccount: {
35
- type: mongoose.Schema.Types.ObjectId,
36
- ref: 'GLAccountDoubleEntries'
37
- },
38
- paymentDoubleEntryAccount: {
39
- type: mongoose.Schema.Types.ObjectId,
40
- ref: 'GLAccountDoubleEntries'
41
- },
42
- // GL Account direct configurations (used when creating double entry records)
43
- glAccounts: {
44
- invoice: {
45
- debit: {
46
- type: mongoose.Schema.Types.ObjectId,
47
- ref: 'GLAccount'
48
- },
49
- credit: {
50
- type: mongoose.Schema.Types.ObjectId,
51
- ref: 'GLAccount'
52
- }
53
- },
54
- payment: {
55
- debit: {
56
- type: mongoose.Schema.Types.ObjectId,
57
- ref: 'GLAccount'
58
- },
59
- credit: {
60
- type: mongoose.Schema.Types.ObjectId,
61
- ref: 'GLAccount'
62
- }
63
- }
64
- },
65
- leaseTerms: {
66
- startDate: { type: Date, required: true },
67
- endDate: { type: Date, required: true },
68
- duration: { type: Number, required: true },
69
- autoRenewal: { type: Boolean, default: false }
70
- },
71
- isNewTenant: { type: Boolean, default: false },
72
- financialTerms: {
73
- monthlyRent: { type: Number, required: true },
74
- paymentDueDate: { type: Number, required: true },
75
- paymentMethods: [{
76
- type: {
77
- type: String,
78
- required: true,
79
- enum: ['Bank Transfer', 'Cash', 'Cheque']
80
- },
81
- details: {
82
- bankName: String,
83
- accountName: String,
84
- accountNumber: String,
85
- branch: String,
86
- swiftCode: String,
87
- bankToDraft: String,
88
- chequeAccountNumber: String,
89
- preferredCashLocation: String
90
- },
91
- isPrimary: { type: Boolean, default: false }
92
- }],
93
- securityDeposit: { type: Number, required: true },
94
- balanceBroughtForward: { type: Number, required: true, default: 0 },
95
- penaltyId: {
96
- type: mongoose.Schema.Types.ObjectId,
97
- ref: 'Penalty'
98
- },
99
- mpesaEnabled: {
100
- type: Boolean,
101
- default: false
102
- },
103
- mpesaDetails: {
104
- businessNumber: String,
105
- accountNumber: String,
106
- phoneNumber: String
107
- },
108
- escalations: [{
109
- _id: { type: mongoose.Schema.Types.ObjectId, auto: true },
110
- effectiveDate: { type: Date, required: true },
111
- type: {
112
- type: String,
113
- enum: ['percentage', 'fixed'],
114
- required: true
115
- },
116
- value: { type: Number, required: true },
117
- status: {
118
- type: String,
119
- enum: ['scheduled', 'applied', 'cancelled'],
120
- default: 'scheduled'
121
- }
122
- }]
123
- },
124
- billingCycle: {
125
- frequency: {
126
- type: String,
127
- enum: ['Monthly', 'Quarterly', 'Annually'],
128
- required: true
129
- },
130
- nextInvoiceDate: { type: Date },
131
- autoSend: { type: Boolean, default: false },
132
- lastInvoiceDate: { type: Date }
133
- },
134
- invoices: [
135
- { type: mongoose.Schema.Types.ObjectId, ref: 'Invoice' }
136
- ],
137
- leaseTemplate: {
138
- type: mongoose.Schema.Types.ObjectId,
139
- ref: 'LeaseTemplate',
140
- required: true
141
- },
142
- leaseDocuments: [
143
- {
144
- fileName: { type: String },
145
- fileUrl: { type: String },
146
- uploadedAt: { type: Date, default: Date.now }
147
- }
148
- ],
149
- reminders: [
150
- {
151
- reminderId: {
152
- type: mongoose.Schema.Types.ObjectId,
153
- ref: 'Reminder'
154
- },
155
- status: {
156
- type: String,
157
- enum: ['Pending', 'Sent'],
158
- default: 'Pending'
159
- }
160
- }
161
- ],
162
- status: {
163
- type: String,
164
- enum: ['Active', 'Pending', 'Expired', 'Terminated'],
165
- default: 'Active'
166
- },
167
- requireLandlordApproval: {
168
- type: Boolean,
169
- default: false
170
- },
171
- payments: [
172
- {
173
- invoiceId: {
174
- type: mongoose.Schema.Types.ObjectId,
175
- ref: 'Invoice',
176
- required: true
177
- },
178
- method: {
179
- type: {
180
- type: String,
181
- enum: ['Bank Transfer', 'Cash', 'Cheque', 'MPESA'],
182
- required: true
183
- },
184
- details: {
185
- bankName: String,
186
- accountNumber: String,
187
- transactionId: String,
188
- chequeNumber: String,
189
- mpesaTransactionId: String,
190
- mpesaPhoneNumber: String
191
- }
192
- },
193
- amount: { type: Number, required: true },
194
- receivedBy: {
195
- type: mongoose.Schema.Types.ObjectId,
196
- ref: 'User',
197
- required: true
198
- },
199
- receivedAt: { type: Date, default: Date.now }
200
- }
201
- ],
202
- // New field to track lease edit history
203
- editHistory: [
204
- {
205
- editedBy: {
206
- type: mongoose.Schema.Types.Mixed,
207
- ref: 'User'
208
- },
209
- editedAt: { type: Date, default: Date.now },
210
- reason: { type: String, required: true },
211
- changes: { type: Object } // Optional: Store what fields were changed
212
- }
213
- ],
214
- createdBy: {
215
- type: mongoose.Schema.Types.ObjectId,
216
- ref: 'User'
217
- }
218
- }, {
219
- timestamps: true
220
- });
221
-
222
- leaseAgreementSchema.index({ facilityId: 1 });
223
-
224
- const LeaseAgreement = mongoose.model('LeaseAgreement', leaseAgreementSchema);
225
-
226
- 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
+ billerAddressId: {
30
+ type: mongoose.Schema.Types.ObjectId,
31
+ ref: 'BillerAddress'
32
+ },
33
+ // GL Account configurations
34
+ invoiceDoubleEntryAccount: {
35
+ type: mongoose.Schema.Types.ObjectId,
36
+ ref: 'GLAccountDoubleEntries'
37
+ },
38
+ paymentDoubleEntryAccount: {
39
+ type: mongoose.Schema.Types.ObjectId,
40
+ ref: 'GLAccountDoubleEntries'
41
+ },
42
+ // GL Account direct configurations (used when creating double entry records)
43
+ glAccounts: {
44
+ invoice: {
45
+ debit: {
46
+ type: mongoose.Schema.Types.ObjectId,
47
+ ref: 'GLAccount'
48
+ },
49
+ credit: {
50
+ type: mongoose.Schema.Types.ObjectId,
51
+ ref: 'GLAccount'
52
+ }
53
+ },
54
+ payment: {
55
+ debit: {
56
+ type: mongoose.Schema.Types.ObjectId,
57
+ ref: 'GLAccount'
58
+ },
59
+ credit: {
60
+ type: mongoose.Schema.Types.ObjectId,
61
+ ref: 'GLAccount'
62
+ }
63
+ }
64
+ },
65
+ leaseTerms: {
66
+ startDate: { type: Date, required: true },
67
+ endDate: { type: Date, required: true },
68
+ duration: { type: Number, required: true },
69
+ autoRenewal: { type: Boolean, default: false }
70
+ },
71
+ isNewTenant: { type: Boolean, default: false },
72
+ financialTerms: {
73
+ monthlyRent: { type: Number, required: true },
74
+ paymentDueDate: { type: Number, required: true },
75
+ paymentMethods: [{
76
+ type: {
77
+ type: String,
78
+ required: true,
79
+ enum: ['Bank Transfer', 'Cash', 'Cheque']
80
+ },
81
+ details: {
82
+ bankName: String,
83
+ accountName: String,
84
+ accountNumber: String,
85
+ branch: String,
86
+ swiftCode: String,
87
+ bankToDraft: String,
88
+ chequeAccountNumber: String,
89
+ preferredCashLocation: String
90
+ },
91
+ isPrimary: { type: Boolean, default: false }
92
+ }],
93
+ securityDeposit: { type: Number, required: true },
94
+ balanceBroughtForward: { type: Number, required: true, default: 0 },
95
+ penaltyId: {
96
+ type: mongoose.Schema.Types.ObjectId,
97
+ ref: 'Penalty'
98
+ },
99
+ mpesaEnabled: {
100
+ type: Boolean,
101
+ default: false
102
+ },
103
+ mpesaDetails: {
104
+ businessNumber: String,
105
+ accountNumber: String,
106
+ phoneNumber: String
107
+ },
108
+ escalations: [{
109
+ _id: { type: mongoose.Schema.Types.ObjectId, auto: true },
110
+ effectiveDate: { type: Date, required: true },
111
+ type: {
112
+ type: String,
113
+ enum: ['percentage', 'fixed'],
114
+ required: true
115
+ },
116
+ value: { type: Number, required: true },
117
+ status: {
118
+ type: String,
119
+ enum: ['scheduled', 'applied', 'cancelled'],
120
+ default: 'scheduled'
121
+ }
122
+ }]
123
+ },
124
+ billingCycle: {
125
+ frequency: {
126
+ type: String,
127
+ enum: ['Monthly', 'Quarterly', 'Annually'],
128
+ required: true
129
+ },
130
+ nextInvoiceDate: { type: Date },
131
+ autoSend: { type: Boolean, default: false },
132
+ lastInvoiceDate: { type: Date }
133
+ },
134
+ invoices: [
135
+ { type: mongoose.Schema.Types.ObjectId, ref: 'Invoice' }
136
+ ],
137
+ leaseTemplate: {
138
+ type: mongoose.Schema.Types.ObjectId,
139
+ ref: 'LeaseTemplate',
140
+ required: true
141
+ },
142
+ leaseDocuments: [
143
+ {
144
+ fileName: { type: String },
145
+ fileUrl: { type: String },
146
+ uploadedAt: { type: Date, default: Date.now }
147
+ }
148
+ ],
149
+ reminders: [
150
+ {
151
+ reminderId: {
152
+ type: mongoose.Schema.Types.ObjectId,
153
+ ref: 'Reminder'
154
+ },
155
+ status: {
156
+ type: String,
157
+ enum: ['Pending', 'Sent'],
158
+ default: 'Pending'
159
+ }
160
+ }
161
+ ],
162
+ status: {
163
+ type: String,
164
+ enum: ['Active', 'Pending', 'Expired', 'Terminated'],
165
+ default: 'Active'
166
+ },
167
+ requireLandlordApproval: {
168
+ type: Boolean,
169
+ default: false
170
+ },
171
+ payments: [
172
+ {
173
+ invoiceId: {
174
+ type: mongoose.Schema.Types.ObjectId,
175
+ ref: 'Invoice',
176
+ required: true
177
+ },
178
+ method: {
179
+ type: {
180
+ type: String,
181
+ enum: ['Bank Transfer', 'Cash', 'Cheque', 'MPESA'],
182
+ required: true
183
+ },
184
+ details: {
185
+ bankName: String,
186
+ accountNumber: String,
187
+ transactionId: String,
188
+ chequeNumber: String,
189
+ mpesaTransactionId: String,
190
+ mpesaPhoneNumber: String
191
+ }
192
+ },
193
+ amount: { type: Number, required: true },
194
+ receivedBy: {
195
+ type: mongoose.Schema.Types.ObjectId,
196
+ ref: 'User',
197
+ required: true
198
+ },
199
+ receivedAt: { type: Date, default: Date.now }
200
+ }
201
+ ],
202
+ // New field to track lease edit history
203
+ editHistory: [
204
+ {
205
+ editedBy: {
206
+ type: mongoose.Schema.Types.Mixed,
207
+ ref: 'User'
208
+ },
209
+ editedAt: { type: Date, default: Date.now },
210
+ reason: { type: String, required: true },
211
+ changes: { type: Object } // Optional: Store what fields were changed
212
+ }
213
+ ],
214
+ createdBy: {
215
+ type: mongoose.Schema.Types.ObjectId,
216
+ ref: 'User'
217
+ }
218
+ }, {
219
+ timestamps: true
220
+ });
221
+
222
+ leaseAgreementSchema.index({ facilityId: 1 });
223
+
224
+ const LeaseAgreement = mongoose.model('LeaseAgreement', leaseAgreementSchema);
225
+
226
+ 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