payservedb 8.3.4 → 8.3.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 (177) hide show
  1. package/.env +2 -2
  2. package/index.js +306 -306
  3. package/package.json +17 -17
  4. package/src/models/account.js +52 -52
  5. package/src/models/agent_departments.js +59 -59
  6. package/src/models/agent_notifications.js +53 -53
  7. package/src/models/agent_performance.js +127 -127
  8. package/src/models/agent_roles.js +77 -77
  9. package/src/models/agents.js +154 -154
  10. package/src/models/apilog.js +18 -18
  11. package/src/models/approvalsWorkflows.js +49 -49
  12. package/src/models/archivedapilog.js +18 -18
  13. package/src/models/asset.js +92 -92
  14. package/src/models/assetsAssignment.js +64 -64
  15. package/src/models/auditTrail.js +346 -346
  16. package/src/models/bankdetails.js +43 -47
  17. package/src/models/billerAddress.js +124 -124
  18. package/src/models/booking_invoice.js +151 -151
  19. package/src/models/bookinganalytics.js +63 -63
  20. package/src/models/bookingconfig.js +45 -45
  21. package/src/models/bookingproperty.js +122 -122
  22. package/src/models/bookingreservation.js +192 -192
  23. package/src/models/bookingrevenuerecord.js +84 -84
  24. package/src/models/budget.js +95 -95
  25. package/src/models/budgetCategory.js +19 -19
  26. package/src/models/campaigns.js +108 -108
  27. package/src/models/cashpayment.js +264 -264
  28. package/src/models/combinedUnits.js +62 -62
  29. package/src/models/common_area_electricity.js +38 -38
  30. package/src/models/common_area_generator.js +41 -41
  31. package/src/models/common_area_utility_alert.js +37 -37
  32. package/src/models/common_area_water.js +39 -39
  33. package/src/models/communication_status.js +33 -33
  34. package/src/models/communication_user_opt.js +32 -32
  35. package/src/models/company.js +53 -53
  36. package/src/models/coreBaseSettings.js +16 -16
  37. package/src/models/coreInvoiceSettings.js +100 -100
  38. package/src/models/counter_schema.js +21 -21
  39. package/src/models/country_tax.js +42 -42
  40. package/src/models/currency_settings.js +39 -39
  41. package/src/models/customer.js +210 -210
  42. package/src/models/customer_satisfaction_survey.js +278 -278
  43. package/src/models/customer_surveys.js +139 -139
  44. package/src/models/customer_tickets.js +239 -239
  45. package/src/models/dailyChecklist.js +312 -312
  46. package/src/models/default_payment_details.js +17 -17
  47. package/src/models/deliveryTimeMarks.js +18 -18
  48. package/src/models/document_type.js +19 -19
  49. package/src/models/dutyRosterChecklist.js +250 -250
  50. package/src/models/dutyroster.js +136 -136
  51. package/src/models/email.js +37 -37
  52. package/src/models/email_sms_queue.js +61 -61
  53. package/src/models/entry_exit.js +53 -53
  54. package/src/models/expense.js +99 -99
  55. package/src/models/expense_category.js +45 -45
  56. package/src/models/facility.js +62 -62
  57. package/src/models/facilityBillingPrices.js +29 -29
  58. package/src/models/facilityInvoice.js +240 -223
  59. package/src/models/facilityInvoicePayment.js +52 -47
  60. package/src/models/facilityInvoiceRecipient.js +32 -32
  61. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  62. package/src/models/facility_departements.js +20 -20
  63. package/src/models/facility_payment_details.js +20 -20
  64. package/src/models/facilityasset.js +25 -25
  65. package/src/models/faq.js +18 -18
  66. package/src/models/gl_account_double_entries.js +25 -25
  67. package/src/models/gl_accounts.js +56 -56
  68. package/src/models/gl_entries.js +49 -49
  69. package/src/models/goodsReceivedNotes.js +115 -115
  70. package/src/models/guard.js +47 -47
  71. package/src/models/handover.js +247 -247
  72. package/src/models/inspection_category.js +38 -38
  73. package/src/models/invoice.js +387 -387
  74. package/src/models/invoicing_schedule.js +36 -36
  75. package/src/models/item_inspection.js +96 -96
  76. package/src/models/knowledge_base.js +109 -109
  77. package/src/models/knowledge_base_rating.js +44 -44
  78. package/src/models/leaseagreement.js +243 -236
  79. package/src/models/leasetemplate.js +17 -17
  80. package/src/models/levy.js +223 -223
  81. package/src/models/levy_invoice_settings.js +26 -26
  82. package/src/models/levycontract.js +173 -173
  83. package/src/models/levytype.js +23 -23
  84. package/src/models/maintenance_service_vendor.js +38 -38
  85. package/src/models/maintenance_services.js +17 -17
  86. package/src/models/maintenancerequisition.js +31 -31
  87. package/src/models/master_workplan.js +32 -32
  88. package/src/models/master_workplan_child.js +34 -34
  89. package/src/models/message.js +38 -38
  90. package/src/models/module.js +21 -21
  91. package/src/models/notification.js +44 -44
  92. package/src/models/paymentTermsMarks.js +19 -19
  93. package/src/models/penalty.js +76 -76
  94. package/src/models/pendingCredentials.js +32 -32
  95. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  96. package/src/models/powerMeterCustomerAccount.js +78 -78
  97. package/src/models/powerMeterCustomerBand.js +14 -14
  98. package/src/models/powerMeterDailyReading.js +30 -30
  99. package/src/models/powerMeterGateways.js +40 -40
  100. package/src/models/powerMeterMonthlyReading.js +34 -34
  101. package/src/models/powerMeterPowerCharges.js +85 -85
  102. package/src/models/powerMeterSettings.js +159 -159
  103. package/src/models/powerMeterSingleDayReading.js +32 -32
  104. package/src/models/powerMeters.js +116 -116
  105. package/src/models/powerMetersManufacturer.js +14 -14
  106. package/src/models/power_meter_account.js +81 -81
  107. package/src/models/power_meter_command_logs.js +30 -30
  108. package/src/models/power_meter_command_queue.js +33 -33
  109. package/src/models/power_meter_negative_balance.js +44 -44
  110. package/src/models/power_prepaid_credits.js +47 -47
  111. package/src/models/power_prepaid_debits.js +53 -53
  112. package/src/models/power_prepaid_orders.js +78 -78
  113. package/src/models/power_sms_notification.js +26 -26
  114. package/src/models/propertyManagerContract.js +556 -556
  115. package/src/models/propertyManagerRevenue.js +195 -195
  116. package/src/models/purchaseOrderInvoice.js +74 -74
  117. package/src/models/purchase_order.js +213 -213
  118. package/src/models/purchase_request.js +110 -110
  119. package/src/models/refresh_token.js +23 -23
  120. package/src/models/reminder.js +197 -197
  121. package/src/models/report.js +13 -13
  122. package/src/models/resident.js +121 -121
  123. package/src/models/rfq_details.js +131 -131
  124. package/src/models/rfq_response.js +153 -153
  125. package/src/models/service_charge_invoice_upload.js +42 -42
  126. package/src/models/service_charge_payments.js +27 -27
  127. package/src/models/servicerequest.js +55 -55
  128. package/src/models/settings.js +62 -62
  129. package/src/models/short_urls.js +21 -21
  130. package/src/models/smart_meter_daily_consumption.js +44 -44
  131. package/src/models/sms_africastalking.js +20 -20
  132. package/src/models/sms_balance_notification.js +26 -26
  133. package/src/models/sms_meliora.js +20 -20
  134. package/src/models/staff.js +36 -36
  135. package/src/models/stocksandspare.js +161 -161
  136. package/src/models/suppliers.js +74 -74
  137. package/src/models/tickets.js +173 -173
  138. package/src/models/tickets_category.js +72 -72
  139. package/src/models/unitManagementTemplate.js +44 -44
  140. package/src/models/unitasset.js +25 -25
  141. package/src/models/units.js +118 -118
  142. package/src/models/user.js +186 -186
  143. package/src/models/valueaddedservices.js +79 -79
  144. package/src/models/vas_invoices_upload.js +50 -50
  145. package/src/models/vas_payments.js +24 -24
  146. package/src/models/vasinvoice.js +192 -192
  147. package/src/models/vasvendor.js +57 -57
  148. package/src/models/visitLog.js +95 -95
  149. package/src/models/visitor.js +67 -67
  150. package/src/models/waitlist.js +45 -45
  151. package/src/models/wallet.js +44 -44
  152. package/src/models/wallet_transactions.js +50 -50
  153. package/src/models/water_invoice.js +351 -351
  154. package/src/models/water_meter_Command_Queue.js +33 -33
  155. package/src/models/water_meter_account.js +82 -82
  156. package/src/models/water_meter_billing.js +58 -58
  157. package/src/models/water_meter_communication.js +17 -17
  158. package/src/models/water_meter_communication_logs.js +39 -39
  159. package/src/models/water_meter_concentrator.js +70 -70
  160. package/src/models/water_meter_daily_history.js +32 -32
  161. package/src/models/water_meter_high_risk.js +36 -36
  162. package/src/models/water_meter_iot_cards.js +34 -34
  163. package/src/models/water_meter_manufacturer.js +35 -35
  164. package/src/models/water_meter_monthly_history.js +36 -36
  165. package/src/models/water_meter_negative_amounts.js +44 -44
  166. package/src/models/water_meter_settings.js +276 -283
  167. package/src/models/water_meter_single_day_history.js +34 -34
  168. package/src/models/water_meter_size.js +15 -15
  169. package/src/models/water_meters.js +133 -133
  170. package/src/models/water_meters_delivery.js +76 -76
  171. package/src/models/water_prepaid_credit.js +47 -47
  172. package/src/models/water_prepaid_debit.js +50 -50
  173. package/src/models/workorder.js +49 -49
  174. package/.idea/material_theme_project_new.xml +0 -12
  175. package/.idea/modules.xml +0 -8
  176. package/.idea/psdb.iml +0 -12
  177. package/.idea/vcs.xml +0 -6
@@ -1,237 +1,244 @@
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
-
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
+
237
244
  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