payservedb 8.3.3 → 8.3.4

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