payservedb 4.2.0 → 4.2.2
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.
- package/.env +2 -2
- package/index.js +151 -151
- package/package.json +17 -17
- package/src/models/account.js +36 -36
- package/src/models/analog_water_billing.js +58 -58
- package/src/models/analog_water_meter.js +68 -68
- package/src/models/apilog.js +18 -18
- package/src/models/archivedapilog.js +18 -18
- package/src/models/archivedauditlog.js +83 -83
- package/src/models/asset.js +34 -34
- package/src/models/auditlog.js +83 -83
- package/src/models/bankdetails.js +40 -40
- package/src/models/budget.js +33 -33
- package/src/models/budgetCategory.js +19 -19
- package/src/models/cashpayment.js +185 -185
- package/src/models/combinedUnits.js +62 -62
- package/src/models/company.js +53 -53
- package/src/models/country_tax.js +42 -42
- package/src/models/currency_settings.js +39 -39
- package/src/models/customer.js +178 -178
- package/src/models/default_payment_details.js +17 -17
- package/src/models/dutyroster.js +39 -39
- package/src/models/email.js +24 -24
- package/src/models/entry_exit.js +53 -53
- package/src/models/expense.js +55 -55
- package/src/models/facility.js +58 -58
- package/src/models/facility_payment_details.js +20 -20
- package/src/models/facilityasset.js +25 -25
- package/src/models/faq.js +18 -18
- package/src/models/guard.js +47 -47
- package/src/models/handover.js +241 -241
- package/src/models/invoice.js +209 -209
- package/src/models/leaseagreement.js +156 -162
- package/src/models/leasetemplate.js +17 -17
- package/src/models/levy.js +72 -72
- package/src/models/levy_invoice_settings.js +26 -26
- package/src/models/levycontract.js +65 -65
- package/src/models/levytype.js +23 -23
- package/src/models/maintenance_service_vendor.js +38 -38
- package/src/models/maintenance_services.js +17 -17
- package/src/models/maintenancerequisition.js +31 -31
- package/src/models/message.js +38 -38
- package/src/models/module.js +21 -21
- package/src/models/notification.js +24 -24
- package/src/models/penalty.js +76 -76
- package/src/models/refresh_token.js +23 -23
- package/src/models/reminder.js +161 -161
- package/src/models/report.js +13 -13
- package/src/models/resident.js +121 -121
- package/src/models/service_charge_invoice_upload.js +42 -42
- package/src/models/service_charge_payments.js +27 -27
- package/src/models/servicerequest.js +55 -55
- package/src/models/settings.js +62 -62
- package/src/models/smart_meter_daily_consumption.js +44 -44
- package/src/models/smart_water_meter.js +85 -85
- package/src/models/sms_africastalking.js +20 -20
- package/src/models/sms_meliora.js +16 -16
- package/src/models/staff.js +36 -36
- package/src/models/stocksandspare.js +34 -34
- package/src/models/tickets.js +109 -109
- package/src/models/unitasset.js +25 -25
- package/src/models/units.js +70 -70
- package/src/models/user.js +94 -94
- package/src/models/user_account.js +80 -80
- package/src/models/valueaddedservices.js +36 -36
- package/src/models/vas_invoices_upload.js +50 -50
- package/src/models/vas_payments.js +24 -24
- package/src/models/vasinvoice.js +159 -159
- package/src/models/vasvendor.js +57 -57
- package/src/models/visitLog.js +86 -86
- package/src/models/visitor.js +63 -63
- package/src/models/waitlist.js +45 -45
- package/src/models/water_invoice.js +192 -192
- package/src/models/water_meter_communication.js +17 -17
- package/src/models/water_meter_concentrator.js +59 -59
- package/src/models/water_meter_iot_cards.js +34 -34
- package/src/models/water_meter_manufacturer.js +35 -35
- package/src/models/water_meter_settings.js +88 -84
- package/src/models/water_meter_size.js +15 -15
- package/src/models/water_meters_delivery.js +76 -76
- package/src/models/workorder.js +49 -49
package/src/models/vasinvoice.js
CHANGED
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
2
|
-
|
|
3
|
-
// Define the schema for VasInvoices
|
|
4
|
-
const vasInvoiceSchema = new mongoose.Schema({
|
|
5
|
-
invoiceNumber: {
|
|
6
|
-
type: String,
|
|
7
|
-
required: true,
|
|
8
|
-
unique: true,
|
|
9
|
-
},
|
|
10
|
-
accountNumber: {
|
|
11
|
-
type: String,
|
|
12
|
-
required: true,
|
|
13
|
-
unique: true
|
|
14
|
-
},
|
|
15
|
-
facilityId: {
|
|
16
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
17
|
-
required: true
|
|
18
|
-
},
|
|
19
|
-
serviceId: {
|
|
20
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
21
|
-
required: true
|
|
22
|
-
},
|
|
23
|
-
customerId: {
|
|
24
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
25
|
-
required: true
|
|
26
|
-
},
|
|
27
|
-
dueDate: {
|
|
28
|
-
type: Date,
|
|
29
|
-
required: true,
|
|
30
|
-
},
|
|
31
|
-
invoiceNote: {
|
|
32
|
-
type: String,
|
|
33
|
-
default: "Payment is due within 30 days",
|
|
34
|
-
},
|
|
35
|
-
status: {
|
|
36
|
-
type: String,
|
|
37
|
-
required: true,
|
|
38
|
-
enum: ['Pending', 'Paid', 'Partially Paid', 'Cancelled', 'Overdue', 'Unpaid'],
|
|
39
|
-
default: 'Pending'
|
|
40
|
-
},
|
|
41
|
-
unit: {
|
|
42
|
-
type: String,
|
|
43
|
-
required: true
|
|
44
|
-
},
|
|
45
|
-
serviceName: {
|
|
46
|
-
type: String,
|
|
47
|
-
default: 'Service Fee'
|
|
48
|
-
},
|
|
49
|
-
amountPaid: {
|
|
50
|
-
type: Number,
|
|
51
|
-
default: 0
|
|
52
|
-
},
|
|
53
|
-
subTotal: {
|
|
54
|
-
type: Number,
|
|
55
|
-
required: true,
|
|
56
|
-
},
|
|
57
|
-
tax: {
|
|
58
|
-
type: Number,
|
|
59
|
-
default: 0
|
|
60
|
-
},
|
|
61
|
-
amount: {
|
|
62
|
-
type: Number,
|
|
63
|
-
required: true
|
|
64
|
-
},
|
|
65
|
-
currency: {
|
|
66
|
-
id: {
|
|
67
|
-
type: mongoose.Schema.Types.ObjectId
|
|
68
|
-
},
|
|
69
|
-
name: {
|
|
70
|
-
type: String,
|
|
71
|
-
default: 'Kenyan Shilling'
|
|
72
|
-
},
|
|
73
|
-
code: {
|
|
74
|
-
type: String,
|
|
75
|
-
default: 'KES'
|
|
76
|
-
},
|
|
77
|
-
symbol: {
|
|
78
|
-
type: String,
|
|
79
|
-
default: 'KSh'
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
items: [{
|
|
83
|
-
description: {
|
|
84
|
-
type: String,
|
|
85
|
-
required: true
|
|
86
|
-
},
|
|
87
|
-
quantity: {
|
|
88
|
-
type: Number,
|
|
89
|
-
default: 1
|
|
90
|
-
},
|
|
91
|
-
unitPrice: {
|
|
92
|
-
type: Number,
|
|
93
|
-
required: true
|
|
94
|
-
}
|
|
95
|
-
}],
|
|
96
|
-
reconciliationHistory: [{
|
|
97
|
-
date: {
|
|
98
|
-
type: Date,
|
|
99
|
-
default: Date.now
|
|
100
|
-
},
|
|
101
|
-
amount: {
|
|
102
|
-
type: Number,
|
|
103
|
-
required: true
|
|
104
|
-
},
|
|
105
|
-
type: {
|
|
106
|
-
type: String,
|
|
107
|
-
default: 'Manual'
|
|
108
|
-
},
|
|
109
|
-
paymentReference: String,
|
|
110
|
-
paymentCompletion: {
|
|
111
|
-
type: String,
|
|
112
|
-
default: 'Completed'
|
|
113
|
-
},
|
|
114
|
-
sourceInvoice: String,
|
|
115
|
-
destinationInvoice: String,
|
|
116
|
-
notes: String,
|
|
117
|
-
remainingBalance: Number
|
|
118
|
-
}],
|
|
119
|
-
customerInfo: {
|
|
120
|
-
fullName: {
|
|
121
|
-
type: String,
|
|
122
|
-
default: 'Customer'
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
paymentDetails: {
|
|
126
|
-
paymentStatus: {
|
|
127
|
-
type: String,
|
|
128
|
-
enum: ['Pending', 'Completed', 'Failed', 'Partial'],
|
|
129
|
-
default: 'Pending'
|
|
130
|
-
},
|
|
131
|
-
paymentMethod: String,
|
|
132
|
-
paymentDate: Date,
|
|
133
|
-
transactionId: String,
|
|
134
|
-
mobilePayment: {
|
|
135
|
-
type: Boolean,
|
|
136
|
-
default: false
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
overpay: {
|
|
140
|
-
type: Number,
|
|
141
|
-
default: 0
|
|
142
|
-
}
|
|
143
|
-
}, {
|
|
144
|
-
timestamps: true
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Add pre-save middleware to check if invoice is overdue
|
|
148
|
-
vasInvoiceSchema.pre('save', function (next) {
|
|
149
|
-
if (this.isModified('dueDate') || this.isNew) {
|
|
150
|
-
const today = new Date();
|
|
151
|
-
if (this.dueDate < today && this.status === 'Pending') {
|
|
152
|
-
this.status = 'Overdue';
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
next();
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
const VasInvoice = mongoose.model('VasInvoice', vasInvoiceSchema);
|
|
159
|
-
|
|
1
|
+
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
// Define the schema for VasInvoices
|
|
4
|
+
const vasInvoiceSchema = new mongoose.Schema({
|
|
5
|
+
invoiceNumber: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: true,
|
|
8
|
+
unique: true,
|
|
9
|
+
},
|
|
10
|
+
accountNumber: {
|
|
11
|
+
type: String,
|
|
12
|
+
required: true,
|
|
13
|
+
unique: true
|
|
14
|
+
},
|
|
15
|
+
facilityId: {
|
|
16
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
17
|
+
required: true
|
|
18
|
+
},
|
|
19
|
+
serviceId: {
|
|
20
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
21
|
+
required: true
|
|
22
|
+
},
|
|
23
|
+
customerId: {
|
|
24
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
25
|
+
required: true
|
|
26
|
+
},
|
|
27
|
+
dueDate: {
|
|
28
|
+
type: Date,
|
|
29
|
+
required: true,
|
|
30
|
+
},
|
|
31
|
+
invoiceNote: {
|
|
32
|
+
type: String,
|
|
33
|
+
default: "Payment is due within 30 days",
|
|
34
|
+
},
|
|
35
|
+
status: {
|
|
36
|
+
type: String,
|
|
37
|
+
required: true,
|
|
38
|
+
enum: ['Pending', 'Paid', 'Partially Paid', 'Cancelled', 'Overdue', 'Unpaid'],
|
|
39
|
+
default: 'Pending'
|
|
40
|
+
},
|
|
41
|
+
unit: {
|
|
42
|
+
type: String,
|
|
43
|
+
required: true
|
|
44
|
+
},
|
|
45
|
+
serviceName: {
|
|
46
|
+
type: String,
|
|
47
|
+
default: 'Service Fee'
|
|
48
|
+
},
|
|
49
|
+
amountPaid: {
|
|
50
|
+
type: Number,
|
|
51
|
+
default: 0
|
|
52
|
+
},
|
|
53
|
+
subTotal: {
|
|
54
|
+
type: Number,
|
|
55
|
+
required: true,
|
|
56
|
+
},
|
|
57
|
+
tax: {
|
|
58
|
+
type: Number,
|
|
59
|
+
default: 0
|
|
60
|
+
},
|
|
61
|
+
amount: {
|
|
62
|
+
type: Number,
|
|
63
|
+
required: true
|
|
64
|
+
},
|
|
65
|
+
currency: {
|
|
66
|
+
id: {
|
|
67
|
+
type: mongoose.Schema.Types.ObjectId
|
|
68
|
+
},
|
|
69
|
+
name: {
|
|
70
|
+
type: String,
|
|
71
|
+
default: 'Kenyan Shilling'
|
|
72
|
+
},
|
|
73
|
+
code: {
|
|
74
|
+
type: String,
|
|
75
|
+
default: 'KES'
|
|
76
|
+
},
|
|
77
|
+
symbol: {
|
|
78
|
+
type: String,
|
|
79
|
+
default: 'KSh'
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
items: [{
|
|
83
|
+
description: {
|
|
84
|
+
type: String,
|
|
85
|
+
required: true
|
|
86
|
+
},
|
|
87
|
+
quantity: {
|
|
88
|
+
type: Number,
|
|
89
|
+
default: 1
|
|
90
|
+
},
|
|
91
|
+
unitPrice: {
|
|
92
|
+
type: Number,
|
|
93
|
+
required: true
|
|
94
|
+
}
|
|
95
|
+
}],
|
|
96
|
+
reconciliationHistory: [{
|
|
97
|
+
date: {
|
|
98
|
+
type: Date,
|
|
99
|
+
default: Date.now
|
|
100
|
+
},
|
|
101
|
+
amount: {
|
|
102
|
+
type: Number,
|
|
103
|
+
required: true
|
|
104
|
+
},
|
|
105
|
+
type: {
|
|
106
|
+
type: String,
|
|
107
|
+
default: 'Manual'
|
|
108
|
+
},
|
|
109
|
+
paymentReference: String,
|
|
110
|
+
paymentCompletion: {
|
|
111
|
+
type: String,
|
|
112
|
+
default: 'Completed'
|
|
113
|
+
},
|
|
114
|
+
sourceInvoice: String,
|
|
115
|
+
destinationInvoice: String,
|
|
116
|
+
notes: String,
|
|
117
|
+
remainingBalance: Number
|
|
118
|
+
}],
|
|
119
|
+
customerInfo: {
|
|
120
|
+
fullName: {
|
|
121
|
+
type: String,
|
|
122
|
+
default: 'Customer'
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
paymentDetails: {
|
|
126
|
+
paymentStatus: {
|
|
127
|
+
type: String,
|
|
128
|
+
enum: ['Pending', 'Completed', 'Failed', 'Partial'],
|
|
129
|
+
default: 'Pending'
|
|
130
|
+
},
|
|
131
|
+
paymentMethod: String,
|
|
132
|
+
paymentDate: Date,
|
|
133
|
+
transactionId: String,
|
|
134
|
+
mobilePayment: {
|
|
135
|
+
type: Boolean,
|
|
136
|
+
default: false
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
overpay: {
|
|
140
|
+
type: Number,
|
|
141
|
+
default: 0
|
|
142
|
+
}
|
|
143
|
+
}, {
|
|
144
|
+
timestamps: true
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Add pre-save middleware to check if invoice is overdue
|
|
148
|
+
vasInvoiceSchema.pre('save', function (next) {
|
|
149
|
+
if (this.isModified('dueDate') || this.isNew) {
|
|
150
|
+
const today = new Date();
|
|
151
|
+
if (this.dueDate < today && this.status === 'Pending') {
|
|
152
|
+
this.status = 'Overdue';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
next();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
const VasInvoice = mongoose.model('VasInvoice', vasInvoiceSchema);
|
|
159
|
+
|
|
160
160
|
module.exports = VasInvoice;
|
package/src/models/vasvendor.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
2
|
-
|
|
3
|
-
// Define the schema for VasVendor
|
|
4
|
-
const vasVendorSchema = new mongoose.Schema({
|
|
5
|
-
facilityId: {
|
|
6
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
7
|
-
ref: 'Facility',
|
|
8
|
-
required: true,
|
|
9
|
-
},
|
|
10
|
-
name: {
|
|
11
|
-
type: String,
|
|
12
|
-
required: true,
|
|
13
|
-
trim: true
|
|
14
|
-
},
|
|
15
|
-
location: {
|
|
16
|
-
type: String,
|
|
17
|
-
required: true,
|
|
18
|
-
trim: true
|
|
19
|
-
},
|
|
20
|
-
jobDescription: {
|
|
21
|
-
type: String,
|
|
22
|
-
required: true,
|
|
23
|
-
trim: true
|
|
24
|
-
},
|
|
25
|
-
offers: [{
|
|
26
|
-
serviceId: {
|
|
27
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
28
|
-
ref: 'Service', // Reference to the Service model
|
|
29
|
-
required: true
|
|
30
|
-
},
|
|
31
|
-
amount: {
|
|
32
|
-
type: Number,
|
|
33
|
-
required: true,
|
|
34
|
-
min: [0, 'Amount must be a positive number']
|
|
35
|
-
}
|
|
36
|
-
}],
|
|
37
|
-
contactDetails: {
|
|
38
|
-
name: {
|
|
39
|
-
type: String,
|
|
40
|
-
required: true
|
|
41
|
-
},
|
|
42
|
-
phone: {
|
|
43
|
-
type: String,
|
|
44
|
-
required: true
|
|
45
|
-
},
|
|
46
|
-
email: {
|
|
47
|
-
type: String,
|
|
48
|
-
required: true,
|
|
49
|
-
match: [/.+\@.+\..+/, 'Please provide a valid email address']
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}, {
|
|
53
|
-
timestamps: true // This will automatically add createdAt and updatedAt fields
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
const VasVendor = mongoose.model('VasVendor', vasVendorSchema);
|
|
57
|
-
|
|
1
|
+
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
// Define the schema for VasVendor
|
|
4
|
+
const vasVendorSchema = new mongoose.Schema({
|
|
5
|
+
facilityId: {
|
|
6
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
7
|
+
ref: 'Facility',
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
name: {
|
|
11
|
+
type: String,
|
|
12
|
+
required: true,
|
|
13
|
+
trim: true
|
|
14
|
+
},
|
|
15
|
+
location: {
|
|
16
|
+
type: String,
|
|
17
|
+
required: true,
|
|
18
|
+
trim: true
|
|
19
|
+
},
|
|
20
|
+
jobDescription: {
|
|
21
|
+
type: String,
|
|
22
|
+
required: true,
|
|
23
|
+
trim: true
|
|
24
|
+
},
|
|
25
|
+
offers: [{
|
|
26
|
+
serviceId: {
|
|
27
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
28
|
+
ref: 'Service', // Reference to the Service model
|
|
29
|
+
required: true
|
|
30
|
+
},
|
|
31
|
+
amount: {
|
|
32
|
+
type: Number,
|
|
33
|
+
required: true,
|
|
34
|
+
min: [0, 'Amount must be a positive number']
|
|
35
|
+
}
|
|
36
|
+
}],
|
|
37
|
+
contactDetails: {
|
|
38
|
+
name: {
|
|
39
|
+
type: String,
|
|
40
|
+
required: true
|
|
41
|
+
},
|
|
42
|
+
phone: {
|
|
43
|
+
type: String,
|
|
44
|
+
required: true
|
|
45
|
+
},
|
|
46
|
+
email: {
|
|
47
|
+
type: String,
|
|
48
|
+
required: true,
|
|
49
|
+
match: [/.+\@.+\..+/, 'Please provide a valid email address']
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}, {
|
|
53
|
+
timestamps: true // This will automatically add createdAt and updatedAt fields
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const VasVendor = mongoose.model('VasVendor', vasVendorSchema);
|
|
57
|
+
|
|
58
58
|
module.exports = VasVendor;
|
package/src/models/visitLog.js
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
2
|
-
|
|
3
|
-
// Define the schema for visit logs
|
|
4
|
-
const visitLogSchema = new mongoose.Schema({
|
|
5
|
-
visitorName: {
|
|
6
|
-
type: String,
|
|
7
|
-
required: true
|
|
8
|
-
},
|
|
9
|
-
visitorId: {
|
|
10
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
11
|
-
ref: 'Visitor',
|
|
12
|
-
required: true
|
|
13
|
-
},
|
|
14
|
-
residentName: {
|
|
15
|
-
type: String,
|
|
16
|
-
required: false
|
|
17
|
-
},
|
|
18
|
-
residentId: {
|
|
19
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
20
|
-
},
|
|
21
|
-
qrCode:{
|
|
22
|
-
type:Boolean,
|
|
23
|
-
required:false
|
|
24
|
-
},
|
|
25
|
-
houseNumber: {
|
|
26
|
-
type: String,
|
|
27
|
-
required: false
|
|
28
|
-
},
|
|
29
|
-
startTime: {
|
|
30
|
-
type: String, // Changed to Date for better handling of time
|
|
31
|
-
required: true
|
|
32
|
-
},
|
|
33
|
-
endTime: {
|
|
34
|
-
type: Date, // Changed to Date for better handling of time
|
|
35
|
-
required: false
|
|
36
|
-
},
|
|
37
|
-
days:{
|
|
38
|
-
type:Number,
|
|
39
|
-
required:false
|
|
40
|
-
},
|
|
41
|
-
division:{
|
|
42
|
-
type:String,
|
|
43
|
-
required:false
|
|
44
|
-
},
|
|
45
|
-
entryPoint:{
|
|
46
|
-
type:String,
|
|
47
|
-
required:false
|
|
48
|
-
},
|
|
49
|
-
exitPoint:{
|
|
50
|
-
type:String,
|
|
51
|
-
required:false
|
|
52
|
-
},
|
|
53
|
-
status: {
|
|
54
|
-
type: String,
|
|
55
|
-
required: true,
|
|
56
|
-
enum: ['Visit Confirmation', 'Scheduled', 'Checked In','Checked Out', 'Cancelled'] // Define valid statuses
|
|
57
|
-
// Define valid statuses
|
|
58
|
-
},
|
|
59
|
-
vehicle: {
|
|
60
|
-
registration: String,
|
|
61
|
-
make: String,
|
|
62
|
-
color: String,
|
|
63
|
-
occupants: String,
|
|
64
|
-
},
|
|
65
|
-
visitationCode: {
|
|
66
|
-
type: Number,
|
|
67
|
-
required: false
|
|
68
|
-
},
|
|
69
|
-
requestedBy:{
|
|
70
|
-
type:mongoose.Schema.Types.ObjectId,
|
|
71
|
-
ref:"User",
|
|
72
|
-
required:false
|
|
73
|
-
},
|
|
74
|
-
facilityId: {
|
|
75
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
76
|
-
ref: 'Facility',
|
|
77
|
-
required: true // Ensures a facilityId is always provided
|
|
78
|
-
}
|
|
79
|
-
}, {
|
|
80
|
-
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
// Compile the model from the schema
|
|
84
|
-
const VisitLog = mongoose.model('VisitLog', visitLogSchema);
|
|
85
|
-
|
|
86
|
-
module.exports = VisitLog;
|
|
1
|
+
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
// Define the schema for visit logs
|
|
4
|
+
const visitLogSchema = new mongoose.Schema({
|
|
5
|
+
visitorName: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: true
|
|
8
|
+
},
|
|
9
|
+
visitorId: {
|
|
10
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
11
|
+
ref: 'Visitor',
|
|
12
|
+
required: true
|
|
13
|
+
},
|
|
14
|
+
residentName: {
|
|
15
|
+
type: String,
|
|
16
|
+
required: false
|
|
17
|
+
},
|
|
18
|
+
residentId: {
|
|
19
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
20
|
+
},
|
|
21
|
+
qrCode:{
|
|
22
|
+
type:Boolean,
|
|
23
|
+
required:false
|
|
24
|
+
},
|
|
25
|
+
houseNumber: {
|
|
26
|
+
type: String,
|
|
27
|
+
required: false
|
|
28
|
+
},
|
|
29
|
+
startTime: {
|
|
30
|
+
type: String, // Changed to Date for better handling of time
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
endTime: {
|
|
34
|
+
type: Date, // Changed to Date for better handling of time
|
|
35
|
+
required: false
|
|
36
|
+
},
|
|
37
|
+
days:{
|
|
38
|
+
type:Number,
|
|
39
|
+
required:false
|
|
40
|
+
},
|
|
41
|
+
division:{
|
|
42
|
+
type:String,
|
|
43
|
+
required:false
|
|
44
|
+
},
|
|
45
|
+
entryPoint:{
|
|
46
|
+
type:String,
|
|
47
|
+
required:false
|
|
48
|
+
},
|
|
49
|
+
exitPoint:{
|
|
50
|
+
type:String,
|
|
51
|
+
required:false
|
|
52
|
+
},
|
|
53
|
+
status: {
|
|
54
|
+
type: String,
|
|
55
|
+
required: true,
|
|
56
|
+
enum: ['Visit Confirmation', 'Scheduled', 'Checked In','Checked Out', 'Cancelled'] // Define valid statuses
|
|
57
|
+
// Define valid statuses
|
|
58
|
+
},
|
|
59
|
+
vehicle: {
|
|
60
|
+
registration: String,
|
|
61
|
+
make: String,
|
|
62
|
+
color: String,
|
|
63
|
+
occupants: String,
|
|
64
|
+
},
|
|
65
|
+
visitationCode: {
|
|
66
|
+
type: Number,
|
|
67
|
+
required: false
|
|
68
|
+
},
|
|
69
|
+
requestedBy:{
|
|
70
|
+
type:mongoose.Schema.Types.ObjectId,
|
|
71
|
+
ref:"User",
|
|
72
|
+
required:false
|
|
73
|
+
},
|
|
74
|
+
facilityId: {
|
|
75
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
76
|
+
ref: 'Facility',
|
|
77
|
+
required: true // Ensures a facilityId is always provided
|
|
78
|
+
}
|
|
79
|
+
}, {
|
|
80
|
+
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// Compile the model from the schema
|
|
84
|
+
const VisitLog = mongoose.model('VisitLog', visitLogSchema);
|
|
85
|
+
|
|
86
|
+
module.exports = VisitLog;
|