payservedb 8.9.2 → 8.9.3

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 (193) hide show
  1. package/.env +2 -2
  2. package/ZOHO_INTEGRATION_SCHEMA.md +644 -644
  3. package/index.js +326 -327
  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 +165 -165
  20. package/src/models/bookinganalytics.js +63 -63
  21. package/src/models/bookingconfig.js +45 -45
  22. package/src/models/bookingproperty.js +179 -179
  23. package/src/models/bookingreservation.js +239 -239
  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 +290 -290
  29. package/src/models/combinedUnits.js +62 -62
  30. package/src/models/combined_invoice.js +424 -424
  31. package/src/models/common_area_electricity.js +38 -38
  32. package/src/models/common_area_generator.js +41 -41
  33. package/src/models/common_area_utility_alert.js +37 -37
  34. package/src/models/common_area_water.js +39 -39
  35. package/src/models/communication_status.js +33 -33
  36. package/src/models/communication_user_opt.js +32 -32
  37. package/src/models/community_guidelines.js +35 -35
  38. package/src/models/company.js +53 -53
  39. package/src/models/coreBaseSettings.js +16 -16
  40. package/src/models/coreInvoiceSettings.js +100 -100
  41. package/src/models/counter_schema.js +21 -21
  42. package/src/models/country_tax.js +42 -42
  43. package/src/models/currency_settings.js +39 -39
  44. package/src/models/customer.js +214 -214
  45. package/src/models/customer_preference.js +52 -52
  46. package/src/models/customer_satisfaction_survey.js +297 -297
  47. package/src/models/customer_surveys.js +139 -139
  48. package/src/models/customer_tickets.js +237 -237
  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/email_thread.js +35 -35
  58. package/src/models/entry_exit.js +53 -53
  59. package/src/models/expense.js +99 -99
  60. package/src/models/expense_category.js +45 -45
  61. package/src/models/facility.js +76 -76
  62. package/src/models/facilityBillingPrices.js +29 -29
  63. package/src/models/facilityInvoice.js +240 -240
  64. package/src/models/facilityInvoicePayment.js +52 -52
  65. package/src/models/facilityInvoiceRecipient.js +32 -32
  66. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  67. package/src/models/facility_departements.js +20 -20
  68. package/src/models/facility_payment_details.js +20 -20
  69. package/src/models/facility_rating.js +78 -78
  70. package/src/models/facilityasset.js +25 -25
  71. package/src/models/faq.js +14 -14
  72. package/src/models/gl_account_double_entries.js +25 -25
  73. package/src/models/gl_accounts.js +56 -56
  74. package/src/models/gl_entries.js +49 -49
  75. package/src/models/goodsReceivedNotes.js +115 -115
  76. package/src/models/guard.js +47 -47
  77. package/src/models/handover.js +258 -258
  78. package/src/models/inspection_category.js +38 -38
  79. package/src/models/invoice.js +480 -484
  80. package/src/models/invoice_generation_approval.js +86 -86
  81. package/src/models/invoicing_schedule.js +40 -40
  82. package/src/models/item_inspection.js +96 -96
  83. package/src/models/knowledge_base.js +109 -109
  84. package/src/models/knowledge_base_rating.js +44 -44
  85. package/src/models/leaseagreement.js +243 -243
  86. package/src/models/leasetemplate.js +17 -17
  87. package/src/models/levy.js +212 -223
  88. package/src/models/levy_invoice_settings.js +26 -26
  89. package/src/models/levycontract.js +216 -216
  90. package/src/models/levytype.js +23 -23
  91. package/src/models/maintenance_service_vendor.js +38 -38
  92. package/src/models/maintenance_services.js +17 -17
  93. package/src/models/maintenancerequisition.js +31 -31
  94. package/src/models/master_workplan.js +32 -32
  95. package/src/models/master_workplan_child.js +34 -34
  96. package/src/models/message.js +38 -38
  97. package/src/models/module.js +21 -21
  98. package/src/models/movein_application.js +29 -29
  99. package/src/models/movein_landlord.js +18 -18
  100. package/src/models/movein_user.js +15 -15
  101. package/src/models/notification.js +44 -44
  102. package/src/models/paymentTermsMarks.js +19 -19
  103. package/src/models/penalty.js +76 -76
  104. package/src/models/pendingCredentials.js +32 -32
  105. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  106. package/src/models/powerMeterCustomerAccount.js +78 -78
  107. package/src/models/powerMeterCustomerBand.js +14 -14
  108. package/src/models/powerMeterDailyReading.js +30 -30
  109. package/src/models/powerMeterGateways.js +40 -40
  110. package/src/models/powerMeterMonthlyReading.js +34 -34
  111. package/src/models/powerMeterPowerCharges.js +85 -85
  112. package/src/models/powerMeterSettings.js +159 -159
  113. package/src/models/powerMeterSingleDayReading.js +32 -32
  114. package/src/models/powerMeters.js +116 -116
  115. package/src/models/powerMetersManufacturer.js +14 -14
  116. package/src/models/power_meter_account.js +81 -81
  117. package/src/models/power_meter_command_logs.js +30 -30
  118. package/src/models/power_meter_command_queue.js +33 -33
  119. package/src/models/power_meter_negative_balance.js +44 -44
  120. package/src/models/power_prepaid_credits.js +47 -47
  121. package/src/models/power_prepaid_debits.js +53 -53
  122. package/src/models/power_prepaid_orders.js +78 -78
  123. package/src/models/power_sms_notification.js +26 -26
  124. package/src/models/privacy_policy.js +19 -19
  125. package/src/models/propertyManagerContract.js +556 -556
  126. package/src/models/propertyManagerRevenue.js +195 -195
  127. package/src/models/purchaseOrderInvoice.js +74 -74
  128. package/src/models/purchase_order.js +213 -213
  129. package/src/models/purchase_request.js +110 -110
  130. package/src/models/quickbooks_config.js +52 -52
  131. package/src/models/refresh_token.js +23 -23
  132. package/src/models/reminder.js +197 -197
  133. package/src/models/report.js +13 -13
  134. package/src/models/resident.js +121 -121
  135. package/src/models/rfq_details.js +131 -131
  136. package/src/models/rfq_response.js +153 -153
  137. package/src/models/service_charge_invoice_upload.js +42 -42
  138. package/src/models/service_charge_payments.js +27 -27
  139. package/src/models/servicerequest.js +55 -55
  140. package/src/models/settings.js +62 -62
  141. package/src/models/short_urls.js +21 -21
  142. package/src/models/smart_meter_daily_consumption.js +44 -44
  143. package/src/models/sms_africastalking.js +20 -20
  144. package/src/models/sms_balance_notification.js +26 -26
  145. package/src/models/sms_meliora.js +20 -20
  146. package/src/models/staff.js +36 -36
  147. package/src/models/stocksandspare.js +161 -161
  148. package/src/models/suppliers.js +74 -74
  149. package/src/models/terms_and_conditions.js +19 -19
  150. package/src/models/tickets.js +186 -186
  151. package/src/models/tickets_category.js +72 -72
  152. package/src/models/unitManagementTemplate.js +44 -44
  153. package/src/models/unitasset.js +25 -25
  154. package/src/models/units.js +130 -130
  155. package/src/models/user.js +186 -186
  156. package/src/models/valueaddedservices.js +21 -21
  157. package/src/models/vas_invoices_upload.js +50 -50
  158. package/src/models/vas_payments.js +24 -24
  159. package/src/models/vasinvoice.js +192 -192
  160. package/src/models/vasvendor.js +52 -52
  161. package/src/models/visitLog.js +95 -95
  162. package/src/models/visitor.js +67 -67
  163. package/src/models/waitlist.js +45 -45
  164. package/src/models/wallet.js +44 -44
  165. package/src/models/wallet_transactions.js +50 -50
  166. package/src/models/water_invoice.js +351 -351
  167. package/src/models/water_meter_Command_Queue.js +33 -33
  168. package/src/models/water_meter_account.js +86 -86
  169. package/src/models/water_meter_billing.js +58 -58
  170. package/src/models/water_meter_combined_accounts.js +92 -92
  171. package/src/models/water_meter_communication.js +17 -17
  172. package/src/models/water_meter_communication_logs.js +39 -39
  173. package/src/models/water_meter_concentrator.js +70 -70
  174. package/src/models/water_meter_daily_history.js +32 -32
  175. package/src/models/water_meter_high_risk.js +36 -36
  176. package/src/models/water_meter_iot_cards.js +34 -34
  177. package/src/models/water_meter_loan_deduction.js +134 -134
  178. package/src/models/water_meter_manufacturer.js +35 -35
  179. package/src/models/water_meter_monthly_history.js +36 -36
  180. package/src/models/water_meter_negative_amounts.js +44 -44
  181. package/src/models/water_meter_settings.js +290 -290
  182. package/src/models/water_meter_single_day_history.js +34 -34
  183. package/src/models/water_meter_size.js +15 -15
  184. package/src/models/water_meters.js +176 -176
  185. package/src/models/water_meters_delivery.js +76 -76
  186. package/src/models/water_prepaid_credit.js +47 -47
  187. package/src/models/water_prepaid_debit.js +50 -50
  188. package/src/models/whatsapp_conversation.js +23 -23
  189. package/src/models/workorder.js +49 -49
  190. package/src/models/zohoAccount.js +453 -453
  191. package/src/models/zohoIntegration.js +262 -262
  192. package/src/models/zohoItem.js +504 -504
  193. package/src/models/power_invoice.js +0 -471
@@ -1,217 +1,217 @@
1
- const mongoose = require('mongoose');
2
- const Schema = mongoose.Schema;
3
-
4
- const LevyContractSchema = new Schema(
5
- {
6
- contractName: {
7
- type: String,
8
- required: [true, 'Contract name is required']
9
- },
10
- levyId: {
11
- type: mongoose.Schema.Types.ObjectId,
12
- ref: 'Levy',
13
- required: [true, 'Levy ID is required']
14
- },
15
- customerId: {
16
- type: mongoose.Schema.Types.ObjectId,
17
- ref: 'Customer',
18
- required: [true, 'Customer ID is required']
19
- },
20
- unitId: {
21
- type: mongoose.Schema.Types.ObjectId,
22
- ref: 'Unit',
23
- required: [true, 'Unit ID is required']
24
- },
25
- amount: {
26
- type: Number,
27
- required: [true, 'Amount is required'],
28
- min: [0, 'Amount cannot be negative']
29
- },
30
- startDate: {
31
- type: Date,
32
- required: [true, 'Start date is required']
33
- },
34
- endDate: {
35
- type: Date,
36
- required: [true, 'End date is required']
37
- },
38
- status: {
39
- type: String,
40
- enum: ['Active', 'Inactive', 'Completed', 'Suspended', 'Terminated'],
41
- default: 'Active',
42
- required: [true, 'Status is required']
43
- },
44
- balanceBroughtForward: {
45
- type: Number,
46
- default: 0
47
- },
48
- taxEnabled: {
49
- type: Boolean,
50
- default: true
51
- },
52
- enabledTaxes: [
53
- {
54
- type: mongoose.Schema.Types.ObjectId,
55
- ref: 'CountryTaxRate'
56
- }
57
- ],
58
- paymentFrequency: {
59
- type: String,
60
- enum: ['Daily', 'Weekly', 'Bi-Weekly', 'Monthly', 'Quarterly', 'Semi-Annually', 'Annually'],
61
- default: 'Monthly'
62
- },
63
- facilityId: {
64
- type: mongoose.Schema.Types.ObjectId,
65
- ref: 'Facility',
66
- required: [true, 'Facility ID is required']
67
- },
68
- lastInvoiceDate: {
69
- type: Date
70
- },
71
- createdBy: {
72
- type: mongoose.Schema.Types.ObjectId,
73
- ref: 'User'
74
- },
75
- updatedBy: {
76
- type: mongoose.Schema.Types.ObjectId,
77
- ref: 'User'
78
- },
79
- // New termination-specific fields
80
- terminationDate: {
81
- type: Date
82
- },
83
- terminationReason: {
84
- type: String
85
- },
86
- terminatedBy: {
87
- type: mongoose.Schema.Types.ObjectId,
88
- ref: 'User'
89
- },
90
- // Disable/reactivation tracking
91
- disabledDate: {
92
- type: Date
93
- },
94
- disabledBy: {
95
- type: mongoose.Schema.Types.ObjectId,
96
- ref: 'User'
97
- },
98
- disabledReason: {
99
- type: String
100
- },
101
- reactivatedDate: {
102
- type: Date
103
- },
104
- reactivatedBy: {
105
- type: mongoose.Schema.Types.ObjectId,
106
- ref: 'User'
107
- },
108
- lastInvoiceYearMonth: {
109
- type: String,
110
- default: null
111
- // Format: "2025-09", "2025-10", etc.
112
- },
113
- // Upfront payment fields
114
- upfrontPayment: {
115
- enabled: {
116
- type: Boolean,
117
- default: false
118
- },
119
- amount: {
120
- type: Number,
121
- default: 0,
122
- min: [0, 'Upfront amount cannot be negative']
123
- },
124
- billingPeriods: {
125
- type: [String],
126
- default: []
127
- },
128
- collectionFrequency: {
129
- type: String,
130
- enum: ['Monthly', 'Quarterly', 'Semi-Annually', 'Annually'],
131
- default: 'Monthly'
132
- },
133
- remainingAmount: {
134
- type: Number,
135
- default: 0
136
- },
137
- processedPeriods: {
138
- type: [String],
139
- default: []
140
- },
141
- createdAt: {
142
- type: Date,
143
- default: Date.now
144
- }
145
- }
146
- },
147
- {
148
- timestamps: true,
149
- toJSON: { virtuals: true },
150
- toObject: { virtuals: true }
151
- }
152
- );
153
-
154
- // Virtual populate for Levy details
155
- LevyContractSchema.virtual('levy', {
156
- ref: 'Levy',
157
- localField: 'levyId',
158
- foreignField: '_id',
159
- justOne: true
160
- });
161
-
162
- // Virtual populate for Customer details
163
- LevyContractSchema.virtual('customer', {
164
- ref: 'Customer',
165
- localField: 'customerId',
166
- foreignField: '_id',
167
- justOne: true
168
- });
169
-
170
- // Virtual populate for Unit details
171
- LevyContractSchema.virtual('unit', {
172
- ref: 'Unit',
173
- localField: 'unitId',
174
- foreignField: '_id',
175
- justOne: true
176
- });
177
-
178
- // Pre-save middleware to ensure endDate is after startDate
179
- LevyContractSchema.pre('save', function (next) {
180
- if (this.startDate && this.endDate && this.startDate >= this.endDate) {
181
- next(new Error('End date must be after start date'));
182
- } else {
183
- next();
184
- }
185
- });
186
-
187
- // Pre-save middleware to handle termination and disable date logic
188
- LevyContractSchema.pre('save', function (next) {
189
- // Set termination date when status changes to Terminated
190
- if (this.status === 'Terminated' && !this.terminationDate) {
191
- this.terminationDate = new Date();
192
- }
193
-
194
- // Set disabled date when status changes to Inactive
195
- if (this.status === 'Inactive' && !this.disabledDate && this.isModified('status')) {
196
- this.disabledDate = new Date();
197
- }
198
-
199
- // Set reactivated date when status changes from Inactive to Active
200
- if (this.status === 'Active' && this.isModified('status') && this.disabledDate) {
201
- this.reactivatedDate = new Date();
202
- }
203
-
204
- next();
205
- });
206
-
207
- // Index for efficient queries
208
- LevyContractSchema.index({ levyId: 1, unitId: 1, status: 1 });
209
- LevyContractSchema.index({ facilityId: 1 });
210
- LevyContractSchema.index({ customerId: 1 });
211
- LevyContractSchema.index({ status: 1 });
212
- LevyContractSchema.index({ terminationDate: 1 });
213
-
214
- module.exports = {
215
- schema: LevyContractSchema,
216
- name: 'LevyContract'
1
+ const mongoose = require('mongoose');
2
+ const Schema = mongoose.Schema;
3
+
4
+ const LevyContractSchema = new Schema(
5
+ {
6
+ contractName: {
7
+ type: String,
8
+ required: [true, 'Contract name is required']
9
+ },
10
+ levyId: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ ref: 'Levy',
13
+ required: [true, 'Levy ID is required']
14
+ },
15
+ customerId: {
16
+ type: mongoose.Schema.Types.ObjectId,
17
+ ref: 'Customer',
18
+ required: [true, 'Customer ID is required']
19
+ },
20
+ unitId: {
21
+ type: mongoose.Schema.Types.ObjectId,
22
+ ref: 'Unit',
23
+ required: [true, 'Unit ID is required']
24
+ },
25
+ amount: {
26
+ type: Number,
27
+ required: [true, 'Amount is required'],
28
+ min: [0, 'Amount cannot be negative']
29
+ },
30
+ startDate: {
31
+ type: Date,
32
+ required: [true, 'Start date is required']
33
+ },
34
+ endDate: {
35
+ type: Date,
36
+ required: [true, 'End date is required']
37
+ },
38
+ status: {
39
+ type: String,
40
+ enum: ['Active', 'Inactive', 'Completed', 'Suspended', 'Terminated'],
41
+ default: 'Active',
42
+ required: [true, 'Status is required']
43
+ },
44
+ balanceBroughtForward: {
45
+ type: Number,
46
+ default: 0
47
+ },
48
+ taxEnabled: {
49
+ type: Boolean,
50
+ default: true
51
+ },
52
+ enabledTaxes: [
53
+ {
54
+ type: mongoose.Schema.Types.ObjectId,
55
+ ref: 'CountryTaxRate'
56
+ }
57
+ ],
58
+ paymentFrequency: {
59
+ type: String,
60
+ enum: ['Daily', 'Weekly', 'Bi-Weekly', 'Monthly', 'Quarterly', 'Semi-Annually', 'Annually'],
61
+ default: 'Monthly'
62
+ },
63
+ facilityId: {
64
+ type: mongoose.Schema.Types.ObjectId,
65
+ ref: 'Facility',
66
+ required: [true, 'Facility ID is required']
67
+ },
68
+ lastInvoiceDate: {
69
+ type: Date
70
+ },
71
+ createdBy: {
72
+ type: mongoose.Schema.Types.ObjectId,
73
+ ref: 'User'
74
+ },
75
+ updatedBy: {
76
+ type: mongoose.Schema.Types.ObjectId,
77
+ ref: 'User'
78
+ },
79
+ // New termination-specific fields
80
+ terminationDate: {
81
+ type: Date
82
+ },
83
+ terminationReason: {
84
+ type: String
85
+ },
86
+ terminatedBy: {
87
+ type: mongoose.Schema.Types.ObjectId,
88
+ ref: 'User'
89
+ },
90
+ // Disable/reactivation tracking
91
+ disabledDate: {
92
+ type: Date
93
+ },
94
+ disabledBy: {
95
+ type: mongoose.Schema.Types.ObjectId,
96
+ ref: 'User'
97
+ },
98
+ disabledReason: {
99
+ type: String
100
+ },
101
+ reactivatedDate: {
102
+ type: Date
103
+ },
104
+ reactivatedBy: {
105
+ type: mongoose.Schema.Types.ObjectId,
106
+ ref: 'User'
107
+ },
108
+ lastInvoiceYearMonth: {
109
+ type: String,
110
+ default: null
111
+ // Format: "2025-09", "2025-10", etc.
112
+ },
113
+ // Upfront payment fields
114
+ upfrontPayment: {
115
+ enabled: {
116
+ type: Boolean,
117
+ default: false
118
+ },
119
+ amount: {
120
+ type: Number,
121
+ default: 0,
122
+ min: [0, 'Upfront amount cannot be negative']
123
+ },
124
+ billingPeriods: {
125
+ type: [String],
126
+ default: []
127
+ },
128
+ collectionFrequency: {
129
+ type: String,
130
+ enum: ['Monthly', 'Quarterly', 'Semi-Annually', 'Annually'],
131
+ default: 'Monthly'
132
+ },
133
+ remainingAmount: {
134
+ type: Number,
135
+ default: 0
136
+ },
137
+ processedPeriods: {
138
+ type: [String],
139
+ default: []
140
+ },
141
+ createdAt: {
142
+ type: Date,
143
+ default: Date.now
144
+ }
145
+ }
146
+ },
147
+ {
148
+ timestamps: true,
149
+ toJSON: { virtuals: true },
150
+ toObject: { virtuals: true }
151
+ }
152
+ );
153
+
154
+ // Virtual populate for Levy details
155
+ LevyContractSchema.virtual('levy', {
156
+ ref: 'Levy',
157
+ localField: 'levyId',
158
+ foreignField: '_id',
159
+ justOne: true
160
+ });
161
+
162
+ // Virtual populate for Customer details
163
+ LevyContractSchema.virtual('customer', {
164
+ ref: 'Customer',
165
+ localField: 'customerId',
166
+ foreignField: '_id',
167
+ justOne: true
168
+ });
169
+
170
+ // Virtual populate for Unit details
171
+ LevyContractSchema.virtual('unit', {
172
+ ref: 'Unit',
173
+ localField: 'unitId',
174
+ foreignField: '_id',
175
+ justOne: true
176
+ });
177
+
178
+ // Pre-save middleware to ensure endDate is after startDate
179
+ LevyContractSchema.pre('save', function (next) {
180
+ if (this.startDate && this.endDate && this.startDate >= this.endDate) {
181
+ next(new Error('End date must be after start date'));
182
+ } else {
183
+ next();
184
+ }
185
+ });
186
+
187
+ // Pre-save middleware to handle termination and disable date logic
188
+ LevyContractSchema.pre('save', function (next) {
189
+ // Set termination date when status changes to Terminated
190
+ if (this.status === 'Terminated' && !this.terminationDate) {
191
+ this.terminationDate = new Date();
192
+ }
193
+
194
+ // Set disabled date when status changes to Inactive
195
+ if (this.status === 'Inactive' && !this.disabledDate && this.isModified('status')) {
196
+ this.disabledDate = new Date();
197
+ }
198
+
199
+ // Set reactivated date when status changes from Inactive to Active
200
+ if (this.status === 'Active' && this.isModified('status') && this.disabledDate) {
201
+ this.reactivatedDate = new Date();
202
+ }
203
+
204
+ next();
205
+ });
206
+
207
+ // Index for efficient queries
208
+ LevyContractSchema.index({ levyId: 1, unitId: 1, status: 1 });
209
+ LevyContractSchema.index({ facilityId: 1 });
210
+ LevyContractSchema.index({ customerId: 1 });
211
+ LevyContractSchema.index({ status: 1 });
212
+ LevyContractSchema.index({ terminationDate: 1 });
213
+
214
+ module.exports = {
215
+ schema: LevyContractSchema,
216
+ name: 'LevyContract'
217
217
  };
@@ -1,23 +1,23 @@
1
- const mongoose = require('mongoose');
2
-
3
- // Define the schema for LevyType
4
- const levyTypeSchema = new mongoose.Schema({
5
- name: {
6
- type: String,
7
- required: true,
8
- trim: true,
9
- minlength: [1, 'Levy type name must be at least 1 character long']
10
- },
11
- facilityId: {
12
- type: mongoose.Schema.Types.ObjectId,
13
- ref: 'Facility',
14
- required: [true, 'Facility ID is required']
15
- }
16
- }, {
17
- timestamps: true // Automatically add createdAt and updatedAt fields
18
- });
19
-
20
- // Compile the model from the schema
21
- const LevyType = mongoose.model('LevyType', levyTypeSchema);
22
-
23
- module.exports = LevyType;
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define the schema for LevyType
4
+ const levyTypeSchema = new mongoose.Schema({
5
+ name: {
6
+ type: String,
7
+ required: true,
8
+ trim: true,
9
+ minlength: [1, 'Levy type name must be at least 1 character long']
10
+ },
11
+ facilityId: {
12
+ type: mongoose.Schema.Types.ObjectId,
13
+ ref: 'Facility',
14
+ required: [true, 'Facility ID is required']
15
+ }
16
+ }, {
17
+ timestamps: true // Automatically add createdAt and updatedAt fields
18
+ });
19
+
20
+ // Compile the model from the schema
21
+ const LevyType = mongoose.model('LevyType', levyTypeSchema);
22
+
23
+ module.exports = LevyType;
@@ -1,38 +1,38 @@
1
- const mongoose = require('mongoose');
2
-
3
- const serviceVendorSchema = new mongoose.Schema({
4
- name: {
5
- type: String,
6
- required: true,
7
- },
8
- service: {
9
- type: String,
10
- required: true,
11
- },
12
- agreement: {
13
- type: String,
14
- },
15
- dates: {
16
- type: [Date],
17
- },
18
- assignedAssets: [{
19
- type: mongoose.Schema.Types.ObjectId,
20
- ref: 'Asset',
21
- }],
22
- facilityId: {
23
- type: mongoose.Schema.Types.ObjectId,
24
- ref: 'Facility',
25
- required: true,
26
- },
27
- phone: {
28
- type: String,
29
- required: true,
30
- },
31
- email: {
32
- type: String,
33
- },
34
- }, {
35
- timestamps: true,
36
- });
37
-
38
- module.exports = mongoose.model('ServiceVendor', serviceVendorSchema);
1
+ const mongoose = require('mongoose');
2
+
3
+ const serviceVendorSchema = new mongoose.Schema({
4
+ name: {
5
+ type: String,
6
+ required: true,
7
+ },
8
+ service: {
9
+ type: String,
10
+ required: true,
11
+ },
12
+ agreement: {
13
+ type: String,
14
+ },
15
+ dates: {
16
+ type: [Date],
17
+ },
18
+ assignedAssets: [{
19
+ type: mongoose.Schema.Types.ObjectId,
20
+ ref: 'Asset',
21
+ }],
22
+ facilityId: {
23
+ type: mongoose.Schema.Types.ObjectId,
24
+ ref: 'Facility',
25
+ required: true,
26
+ },
27
+ phone: {
28
+ type: String,
29
+ required: true,
30
+ },
31
+ email: {
32
+ type: String,
33
+ },
34
+ }, {
35
+ timestamps: true,
36
+ });
37
+
38
+ module.exports = mongoose.model('ServiceVendor', serviceVendorSchema);
@@ -1,17 +1,17 @@
1
- const mongoose = require('mongoose');
2
-
3
- const maintenanceServicesSchema = new mongoose.Schema({
4
- name: {
5
- type: String,
6
- required: true,
7
- },
8
- facilityId: {
9
- type: mongoose.Schema.Types.ObjectId,
10
- ref: 'Facility',
11
- required: true,
12
- },
13
- }, {
14
- timestamps: true,
15
- });
16
-
17
- module.exports = mongoose.model('MaintenanceServices', maintenanceServicesSchema);
1
+ const mongoose = require('mongoose');
2
+
3
+ const maintenanceServicesSchema = new mongoose.Schema({
4
+ name: {
5
+ type: String,
6
+ required: true,
7
+ },
8
+ facilityId: {
9
+ type: mongoose.Schema.Types.ObjectId,
10
+ ref: 'Facility',
11
+ required: true,
12
+ },
13
+ }, {
14
+ timestamps: true,
15
+ });
16
+
17
+ module.exports = mongoose.model('MaintenanceServices', maintenanceServicesSchema);
@@ -1,31 +1,31 @@
1
- const mongoose = require('mongoose');
2
-
3
- const requisitionSchema = new mongoose.Schema({
4
- facilityId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'Facility',
7
- required: [true, 'Facility ID is required']
8
- },
9
- stockId: {
10
- type: mongoose.Schema.Types.ObjectId,
11
- ref: 'Stocksandspare',
12
- required: [true, 'stock ID is required']
13
- },
14
- workId: {
15
- type: mongoose.Schema.Types.ObjectId,
16
- ref: 'WorkOrder'
17
- },
18
- description: {
19
- type: String,
20
- required: true,
21
- },
22
- quantity: {
23
- type: Number,
24
- required: true,
25
- min: 1,
26
- }
27
- }, {
28
- timestamps: true,
29
- });
30
-
31
- module.exports = mongoose.model('StockRequisition', requisitionSchema);
1
+ const mongoose = require('mongoose');
2
+
3
+ const requisitionSchema = new mongoose.Schema({
4
+ facilityId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'Facility',
7
+ required: [true, 'Facility ID is required']
8
+ },
9
+ stockId: {
10
+ type: mongoose.Schema.Types.ObjectId,
11
+ ref: 'Stocksandspare',
12
+ required: [true, 'stock ID is required']
13
+ },
14
+ workId: {
15
+ type: mongoose.Schema.Types.ObjectId,
16
+ ref: 'WorkOrder'
17
+ },
18
+ description: {
19
+ type: String,
20
+ required: true,
21
+ },
22
+ quantity: {
23
+ type: Number,
24
+ required: true,
25
+ min: 1,
26
+ }
27
+ }, {
28
+ timestamps: true,
29
+ });
30
+
31
+ module.exports = mongoose.model('StockRequisition', requisitionSchema);