payservedb 8.3.8 → 8.3.9

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