payservedb 9.2.1 → 9.2.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.
- package/.env +2 -2
- package/ZOHO_INTEGRATION_SCHEMA.md +644 -644
- package/index.js +414 -414
- package/package.json +17 -17
- package/src/models/InvoiceWithholdingTax.js +67 -67
- package/src/models/account.js +52 -52
- package/src/models/agent_departments.js +59 -59
- package/src/models/agent_notifications.js +53 -53
- package/src/models/agent_performance.js +127 -127
- package/src/models/agent_roles.js +77 -77
- package/src/models/agents.js +154 -154
- package/src/models/apilog.js +18 -18
- package/src/models/approvalsWorkflows.js +49 -49
- package/src/models/archivedapilog.js +18 -18
- package/src/models/asset.js +92 -92
- package/src/models/assetsAssignment.js +64 -64
- package/src/models/auditTrail.js +346 -346
- package/src/models/auto_reply_rule.js +68 -68
- package/src/models/bankdetails.js +47 -47
- package/src/models/billerAddress.js +124 -124
- package/src/models/booking_invoice.js +165 -165
- package/src/models/bookinganalytics.js +63 -63
- package/src/models/bookingconfig.js +45 -45
- package/src/models/bookingproperty.js +179 -179
- package/src/models/bookingreservation.js +239 -239
- package/src/models/bookingrevenuerecord.js +84 -84
- package/src/models/budget.js +95 -95
- package/src/models/budgetCategory.js +19 -19
- package/src/models/campaigns.js +108 -108
- package/src/models/cashpayment.js +290 -290
- package/src/models/combinedUnits.js +62 -62
- package/src/models/combined_invoice.js +424 -424
- package/src/models/common_area_electricity.js +38 -38
- package/src/models/common_area_generator.js +41 -41
- package/src/models/common_area_utility_alert.js +37 -37
- package/src/models/common_area_water.js +39 -39
- package/src/models/communication_status.js +33 -33
- package/src/models/communication_user_opt.js +32 -32
- package/src/models/community_guidelines.js +35 -35
- package/src/models/company.js +53 -53
- package/src/models/coreBaseSettings.js +16 -16
- package/src/models/coreInvoiceSettings.js +100 -100
- package/src/models/counter_schema.js +21 -21
- package/src/models/country_tax.js +42 -42
- package/src/models/currency_settings.js +39 -39
- package/src/models/customer.js +234 -234
- package/src/models/customer_preference.js +52 -52
- package/src/models/customer_satisfaction_survey.js +297 -297
- package/src/models/customer_surveys.js +139 -139
- package/src/models/customer_tickets.js +237 -237
- package/src/models/dailyChecklist.js +312 -312
- package/src/models/default_payment_details.js +17 -17
- package/src/models/deliveryTimeMarks.js +18 -18
- package/src/models/document_type.js +19 -19
- package/src/models/dutyRosterChecklist.js +250 -250
- package/src/models/dutyroster.js +136 -136
- package/src/models/email.js +37 -37
- package/src/models/email_cc_config.js +48 -48
- package/src/models/email_sms_queue.js +61 -61
- package/src/models/email_thread.js +35 -35
- package/src/models/entry_exit.js +53 -53
- package/src/models/expense.js +99 -99
- package/src/models/expense_category.js +45 -45
- package/src/models/facility.js +76 -76
- package/src/models/facilityBillingPrices.js +29 -29
- package/src/models/facilityInvoice.js +240 -240
- package/src/models/facilityInvoicePayment.js +52 -52
- package/src/models/facilityInvoiceRecipient.js +32 -32
- package/src/models/facilityWalletTransactionsMetadata.js +236 -236
- package/src/models/facility_departements.js +20 -20
- package/src/models/facility_etims_config.js +116 -116
- package/src/models/facility_payment_details.js +20 -20
- package/src/models/facility_rating.js +78 -78
- package/src/models/facilityasset.js +25 -25
- package/src/models/faq.js +15 -15
- package/src/models/gl_account_double_entries.js +25 -25
- package/src/models/gl_accounts.js +56 -56
- package/src/models/gl_entries.js +49 -49
- package/src/models/goodsReceivedNotes.js +115 -115
- package/src/models/guard.js +47 -47
- package/src/models/handover.js +258 -258
- package/src/models/inspection_category.js +38 -38
- package/src/models/invoice.js +528 -528
- package/src/models/invoiceCreditAdjustment.js +45 -45
- package/src/models/invoice_edit_log.js +81 -81
- package/src/models/invoice_generation_approval.js +86 -86
- package/src/models/invoicing_schedule.js +40 -40
- package/src/models/item_inspection.js +96 -96
- package/src/models/knowledge_base.js +109 -109
- package/src/models/knowledge_base_rating.js +44 -44
- package/src/models/leaseagreement.js +243 -243
- package/src/models/leasetemplate.js +17 -17
- package/src/models/levy.js +212 -212
- package/src/models/levy_deposits.js +126 -126
- package/src/models/levy_invoice_settings.js +26 -26
- package/src/models/levycontract.js +226 -226
- 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/master_workplan.js +32 -32
- package/src/models/master_workplan_child.js +34 -34
- package/src/models/message.js +38 -38
- package/src/models/module.js +21 -21
- package/src/models/movein_amenity.js +13 -13
- package/src/models/movein_application.js +28 -28
- package/src/models/movein_audit_log.js +21 -21
- package/src/models/movein_booking.js +33 -33
- package/src/models/movein_commission.js +46 -46
- package/src/models/movein_conversation.js +25 -25
- package/src/models/movein_deal.js +79 -79
- package/src/models/movein_disbursement.js +36 -36
- package/src/models/movein_email_thread.js +19 -19
- package/src/models/movein_enquiry.js +16 -16
- package/src/models/movein_featured_package.js +16 -16
- package/src/models/movein_handoff_token.js +16 -16
- package/src/models/movein_invoice.js +24 -24
- package/src/models/movein_landlord.js +18 -18
- package/src/models/movein_landlord_user.js +20 -20
- package/src/models/movein_lease.js +37 -37
- package/src/models/movein_message.js +27 -27
- package/src/models/movein_notification.js +27 -27
- package/src/models/movein_otp.js +14 -14
- package/src/models/movein_payment.js +46 -46
- package/src/models/movein_reminder.js +77 -77
- package/src/models/movein_reservation.js +31 -31
- package/src/models/movein_settings.js +25 -25
- package/src/models/movein_tenancy.js +55 -55
- package/src/models/movein_unit.js +59 -59
- package/src/models/movein_user.js +15 -15
- package/src/models/movein_viewing_slot.js +21 -21
- package/src/models/movein_want_unit.js +20 -20
- package/src/models/notification.js +44 -44
- package/src/models/paymentTermsMarks.js +19 -19
- package/src/models/penalty.js +76 -76
- package/src/models/pendingCredentials.js +32 -32
- package/src/models/powerMeterCommunicationProtocol.js +17 -17
- package/src/models/powerMeterCustomerAccount.js +78 -78
- package/src/models/powerMeterCustomerBand.js +14 -14
- package/src/models/powerMeterDailyReading.js +30 -30
- package/src/models/powerMeterGateways.js +40 -40
- package/src/models/powerMeterMonthlyReading.js +34 -34
- package/src/models/powerMeterPowerCharges.js +85 -85
- package/src/models/powerMeterSettings.js +211 -211
- package/src/models/powerMeterSingleDayReading.js +32 -32
- package/src/models/powerMeters.js +149 -149
- package/src/models/powerMetersManufacturer.js +14 -14
- package/src/models/power_invoice.js +366 -366
- package/src/models/power_meter_account.js +81 -81
- package/src/models/power_meter_command_logs.js +30 -30
- package/src/models/power_meter_command_queue.js +33 -33
- package/src/models/power_meter_negative_balance.js +44 -44
- package/src/models/power_prepaid_credits.js +47 -47
- package/src/models/power_prepaid_debits.js +53 -53
- package/src/models/power_prepaid_orders.js +78 -78
- package/src/models/power_sms_notification.js +26 -26
- package/src/models/privacy_policy.js +19 -19
- package/src/models/propertyManagerContract.js +556 -556
- package/src/models/propertyManagerRevenue.js +195 -195
- package/src/models/purchaseOrderInvoice.js +74 -74
- package/src/models/purchase_order.js +213 -213
- package/src/models/purchase_request.js +110 -110
- package/src/models/quickbooks_config.js +52 -52
- package/src/models/recipient_group.js +61 -61
- package/src/models/recipient_group_member.js +62 -62
- package/src/models/refresh_token.js +23 -23
- package/src/models/reminder.js +197 -197
- package/src/models/report.js +13 -13
- package/src/models/resident.js +121 -121
- package/src/models/rfq_details.js +131 -131
- package/src/models/rfq_response.js +153 -153
- 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/short_urls.js +21 -21
- package/src/models/smart_meter_daily_consumption.js +44 -44
- package/src/models/sms_africastalking.js +20 -20
- package/src/models/sms_balance_notification.js +26 -26
- package/src/models/sms_meliora.js +20 -20
- package/src/models/staff.js +36 -36
- package/src/models/stocksandspare.js +161 -161
- package/src/models/suppliers.js +79 -79
- package/src/models/terms_and_conditions.js +19 -19
- package/src/models/tickets.js +186 -186
- package/src/models/tickets_category.js +72 -72
- package/src/models/unitManagementTemplate.js +44 -44
- package/src/models/unitasset.js +25 -25
- package/src/models/units.js +130 -130
- package/src/models/user.js +186 -186
- package/src/models/valueaddedservices.js +21 -21
- package/src/models/vas_invoices_upload.js +50 -50
- package/src/models/vas_payments.js +24 -24
- package/src/models/vasinvoice.js +196 -196
- package/src/models/vasvendor.js +52 -52
- package/src/models/visitLog.js +95 -95
- package/src/models/visitor.js +67 -67
- package/src/models/waitlist.js +45 -45
- package/src/models/wallet.js +44 -44
- package/src/models/wallet_transaction.js +68 -0
- package/src/models/wallet_transactions.js +50 -50
- package/src/models/water_invoice.js +362 -362
- package/src/models/water_meter_Command_Queue.js +33 -33
- package/src/models/water_meter_account.js +86 -86
- package/src/models/water_meter_billing.js +58 -58
- package/src/models/water_meter_combined_accounts.js +92 -92
- package/src/models/water_meter_communication.js +17 -17
- package/src/models/water_meter_communication_logs.js +39 -39
- package/src/models/water_meter_concentrator.js +70 -70
- package/src/models/water_meter_daily_history.js +32 -32
- package/src/models/water_meter_high_risk.js +36 -36
- package/src/models/water_meter_iot_cards.js +34 -34
- package/src/models/water_meter_loan_deduction.js +134 -134
- package/src/models/water_meter_manufacturer.js +35 -35
- package/src/models/water_meter_monthly_history.js +36 -36
- package/src/models/water_meter_negative_amounts.js +44 -44
- package/src/models/water_meter_settings.js +296 -296
- package/src/models/water_meter_single_day_history.js +34 -34
- package/src/models/water_meter_size.js +15 -15
- package/src/models/water_meters.js +176 -176
- package/src/models/water_meters_delivery.js +76 -76
- package/src/models/water_prepaid_credit.js +47 -47
- package/src/models/water_prepaid_debit.js +50 -50
- package/src/models/whatsapp_conversation.js +23 -23
- package/src/models/workorder.js +49 -49
- package/src/models/zohoAccount.js +453 -453
- package/src/models/zohoIntegration.js +262 -262
- package/src/models/zohoItem.js +504 -504
package/src/models/visitLog.js
CHANGED
|
@@ -1,95 +1,95 @@
|
|
|
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
|
-
phoneNumber: {
|
|
19
|
-
type: String,
|
|
20
|
-
trim: true
|
|
21
|
-
},
|
|
22
|
-
residentId: {
|
|
23
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
24
|
-
},
|
|
25
|
-
qrCode: {
|
|
26
|
-
type: Boolean,
|
|
27
|
-
required: false
|
|
28
|
-
},
|
|
29
|
-
houseNumber: {
|
|
30
|
-
type: String,
|
|
31
|
-
required: false
|
|
32
|
-
},
|
|
33
|
-
startTime: {
|
|
34
|
-
type: String, // Changed to Date for better handling of time
|
|
35
|
-
required: true
|
|
36
|
-
},
|
|
37
|
-
endTime: {
|
|
38
|
-
type: Date, // Changed to Date for better handling of time
|
|
39
|
-
required: false
|
|
40
|
-
},
|
|
41
|
-
days: {
|
|
42
|
-
type: Number,
|
|
43
|
-
required: false
|
|
44
|
-
},
|
|
45
|
-
division: {
|
|
46
|
-
type: String,
|
|
47
|
-
required: false
|
|
48
|
-
},
|
|
49
|
-
entryPoint: {
|
|
50
|
-
type: String,
|
|
51
|
-
required: false
|
|
52
|
-
},
|
|
53
|
-
exitPoint: {
|
|
54
|
-
type: String,
|
|
55
|
-
required: false
|
|
56
|
-
},
|
|
57
|
-
guardId: {
|
|
58
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
59
|
-
ref: 'User',
|
|
60
|
-
required: false
|
|
61
|
-
},
|
|
62
|
-
status: {
|
|
63
|
-
type: String,
|
|
64
|
-
required: true,
|
|
65
|
-
enum: ['Visit Confirmation', 'Scheduled', 'Checked In', 'Checked Out', 'Cancelled'] // Define valid statuses
|
|
66
|
-
// Define valid statuses
|
|
67
|
-
},
|
|
68
|
-
vehicle: {
|
|
69
|
-
registration: String,
|
|
70
|
-
make: String,
|
|
71
|
-
color: String,
|
|
72
|
-
occupants: String,
|
|
73
|
-
},
|
|
74
|
-
visitationCode: {
|
|
75
|
-
type: Number,
|
|
76
|
-
required: false
|
|
77
|
-
},
|
|
78
|
-
requestedBy: {
|
|
79
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
80
|
-
ref: "User",
|
|
81
|
-
required: false
|
|
82
|
-
},
|
|
83
|
-
facilityId: {
|
|
84
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
85
|
-
ref: 'Facility',
|
|
86
|
-
required: true // Ensures a facilityId is always provided
|
|
87
|
-
}
|
|
88
|
-
}, {
|
|
89
|
-
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Compile the model from the schema
|
|
93
|
-
const VisitLog = mongoose.model('VisitLog', visitLogSchema);
|
|
94
|
-
|
|
95
|
-
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
|
+
phoneNumber: {
|
|
19
|
+
type: String,
|
|
20
|
+
trim: true
|
|
21
|
+
},
|
|
22
|
+
residentId: {
|
|
23
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
24
|
+
},
|
|
25
|
+
qrCode: {
|
|
26
|
+
type: Boolean,
|
|
27
|
+
required: false
|
|
28
|
+
},
|
|
29
|
+
houseNumber: {
|
|
30
|
+
type: String,
|
|
31
|
+
required: false
|
|
32
|
+
},
|
|
33
|
+
startTime: {
|
|
34
|
+
type: String, // Changed to Date for better handling of time
|
|
35
|
+
required: true
|
|
36
|
+
},
|
|
37
|
+
endTime: {
|
|
38
|
+
type: Date, // Changed to Date for better handling of time
|
|
39
|
+
required: false
|
|
40
|
+
},
|
|
41
|
+
days: {
|
|
42
|
+
type: Number,
|
|
43
|
+
required: false
|
|
44
|
+
},
|
|
45
|
+
division: {
|
|
46
|
+
type: String,
|
|
47
|
+
required: false
|
|
48
|
+
},
|
|
49
|
+
entryPoint: {
|
|
50
|
+
type: String,
|
|
51
|
+
required: false
|
|
52
|
+
},
|
|
53
|
+
exitPoint: {
|
|
54
|
+
type: String,
|
|
55
|
+
required: false
|
|
56
|
+
},
|
|
57
|
+
guardId: {
|
|
58
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
59
|
+
ref: 'User',
|
|
60
|
+
required: false
|
|
61
|
+
},
|
|
62
|
+
status: {
|
|
63
|
+
type: String,
|
|
64
|
+
required: true,
|
|
65
|
+
enum: ['Visit Confirmation', 'Scheduled', 'Checked In', 'Checked Out', 'Cancelled'] // Define valid statuses
|
|
66
|
+
// Define valid statuses
|
|
67
|
+
},
|
|
68
|
+
vehicle: {
|
|
69
|
+
registration: String,
|
|
70
|
+
make: String,
|
|
71
|
+
color: String,
|
|
72
|
+
occupants: String,
|
|
73
|
+
},
|
|
74
|
+
visitationCode: {
|
|
75
|
+
type: Number,
|
|
76
|
+
required: false
|
|
77
|
+
},
|
|
78
|
+
requestedBy: {
|
|
79
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
80
|
+
ref: "User",
|
|
81
|
+
required: false
|
|
82
|
+
},
|
|
83
|
+
facilityId: {
|
|
84
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
85
|
+
ref: 'Facility',
|
|
86
|
+
required: true // Ensures a facilityId is always provided
|
|
87
|
+
}
|
|
88
|
+
}, {
|
|
89
|
+
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Compile the model from the schema
|
|
93
|
+
const VisitLog = mongoose.model('VisitLog', visitLogSchema);
|
|
94
|
+
|
|
95
|
+
module.exports = VisitLog;
|
package/src/models/visitor.js
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
2
|
-
|
|
3
|
-
// Define the schema for companies
|
|
4
|
-
const visitorSchema = new mongoose.Schema({
|
|
5
|
-
firstName: {
|
|
6
|
-
type: String,
|
|
7
|
-
required: true
|
|
8
|
-
},
|
|
9
|
-
lastName: {
|
|
10
|
-
type: String,
|
|
11
|
-
required: true
|
|
12
|
-
},
|
|
13
|
-
phoneNumber: {
|
|
14
|
-
type: String,
|
|
15
|
-
required: true
|
|
16
|
-
},
|
|
17
|
-
email: {
|
|
18
|
-
type: String,
|
|
19
|
-
required: false
|
|
20
|
-
},
|
|
21
|
-
idNumber: {
|
|
22
|
-
type: String,
|
|
23
|
-
required: false
|
|
24
|
-
},
|
|
25
|
-
houseNumber: {
|
|
26
|
-
type: String,
|
|
27
|
-
required: false
|
|
28
|
-
},
|
|
29
|
-
status: {
|
|
30
|
-
type: String,
|
|
31
|
-
required: false
|
|
32
|
-
},
|
|
33
|
-
type: {
|
|
34
|
-
type: String,
|
|
35
|
-
required: false,
|
|
36
|
-
enum: ["Staff", "Other", "Service Providers", "Government Officials/Agents", "Student", ""]
|
|
37
|
-
},
|
|
38
|
-
residentId: {
|
|
39
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
40
|
-
ref: 'Customer',
|
|
41
|
-
},
|
|
42
|
-
invited: {
|
|
43
|
-
type: Boolean,
|
|
44
|
-
required: false,
|
|
45
|
-
default: false
|
|
46
|
-
},
|
|
47
|
-
invitationDate: {
|
|
48
|
-
type: String,
|
|
49
|
-
required: false
|
|
50
|
-
},
|
|
51
|
-
visitingEndDate: {
|
|
52
|
-
type: String,
|
|
53
|
-
required: false
|
|
54
|
-
},
|
|
55
|
-
facilityId: {
|
|
56
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
57
|
-
ref: 'Facility',
|
|
58
|
-
},
|
|
59
|
-
}, {
|
|
60
|
-
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Indexes for improved performance
|
|
64
|
-
// Compile the model from the schema
|
|
65
|
-
const Visitor = mongoose.model('Visitor', visitorSchema);
|
|
66
|
-
|
|
67
|
-
module.exports = Visitor;
|
|
1
|
+
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
// Define the schema for companies
|
|
4
|
+
const visitorSchema = new mongoose.Schema({
|
|
5
|
+
firstName: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: true
|
|
8
|
+
},
|
|
9
|
+
lastName: {
|
|
10
|
+
type: String,
|
|
11
|
+
required: true
|
|
12
|
+
},
|
|
13
|
+
phoneNumber: {
|
|
14
|
+
type: String,
|
|
15
|
+
required: true
|
|
16
|
+
},
|
|
17
|
+
email: {
|
|
18
|
+
type: String,
|
|
19
|
+
required: false
|
|
20
|
+
},
|
|
21
|
+
idNumber: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: false
|
|
24
|
+
},
|
|
25
|
+
houseNumber: {
|
|
26
|
+
type: String,
|
|
27
|
+
required: false
|
|
28
|
+
},
|
|
29
|
+
status: {
|
|
30
|
+
type: String,
|
|
31
|
+
required: false
|
|
32
|
+
},
|
|
33
|
+
type: {
|
|
34
|
+
type: String,
|
|
35
|
+
required: false,
|
|
36
|
+
enum: ["Staff", "Other", "Service Providers", "Government Officials/Agents", "Student", ""]
|
|
37
|
+
},
|
|
38
|
+
residentId: {
|
|
39
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
40
|
+
ref: 'Customer',
|
|
41
|
+
},
|
|
42
|
+
invited: {
|
|
43
|
+
type: Boolean,
|
|
44
|
+
required: false,
|
|
45
|
+
default: false
|
|
46
|
+
},
|
|
47
|
+
invitationDate: {
|
|
48
|
+
type: String,
|
|
49
|
+
required: false
|
|
50
|
+
},
|
|
51
|
+
visitingEndDate: {
|
|
52
|
+
type: String,
|
|
53
|
+
required: false
|
|
54
|
+
},
|
|
55
|
+
facilityId: {
|
|
56
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
57
|
+
ref: 'Facility',
|
|
58
|
+
},
|
|
59
|
+
}, {
|
|
60
|
+
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Indexes for improved performance
|
|
64
|
+
// Compile the model from the schema
|
|
65
|
+
const Visitor = mongoose.model('Visitor', visitorSchema);
|
|
66
|
+
|
|
67
|
+
module.exports = Visitor;
|
package/src/models/waitlist.js
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
const mongoose = require('mongoose');
|
|
2
|
-
|
|
3
|
-
// Define the schema for companies
|
|
4
|
-
const waitListSchema = new mongoose.Schema({
|
|
5
|
-
firstName: {
|
|
6
|
-
type: String,
|
|
7
|
-
required: true
|
|
8
|
-
},
|
|
9
|
-
lastName: {
|
|
10
|
-
type: String,
|
|
11
|
-
required: true
|
|
12
|
-
},
|
|
13
|
-
phoneNumber: {
|
|
14
|
-
type: String,
|
|
15
|
-
required: true
|
|
16
|
-
},
|
|
17
|
-
division: {
|
|
18
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
19
|
-
ref: 'Facility',
|
|
20
|
-
required: true
|
|
21
|
-
},
|
|
22
|
-
unit: {
|
|
23
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
24
|
-
ref: 'Unit',
|
|
25
|
-
required: true
|
|
26
|
-
},
|
|
27
|
-
status: {
|
|
28
|
-
type: String,
|
|
29
|
-
required: true,
|
|
30
|
-
enum: ['Waiting confirmation', 'Approved', 'Denied']
|
|
31
|
-
},
|
|
32
|
-
facilityId: {
|
|
33
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
34
|
-
ref: 'Facility',
|
|
35
|
-
required: true // Ensures a facilityId is always provided
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
}, {
|
|
39
|
-
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const WaitList = mongoose.model('WaitList', waitListSchema);
|
|
44
|
-
|
|
45
|
-
module.exports = WaitList;
|
|
1
|
+
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
// Define the schema for companies
|
|
4
|
+
const waitListSchema = new mongoose.Schema({
|
|
5
|
+
firstName: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: true
|
|
8
|
+
},
|
|
9
|
+
lastName: {
|
|
10
|
+
type: String,
|
|
11
|
+
required: true
|
|
12
|
+
},
|
|
13
|
+
phoneNumber: {
|
|
14
|
+
type: String,
|
|
15
|
+
required: true
|
|
16
|
+
},
|
|
17
|
+
division: {
|
|
18
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
19
|
+
ref: 'Facility',
|
|
20
|
+
required: true
|
|
21
|
+
},
|
|
22
|
+
unit: {
|
|
23
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
24
|
+
ref: 'Unit',
|
|
25
|
+
required: true
|
|
26
|
+
},
|
|
27
|
+
status: {
|
|
28
|
+
type: String,
|
|
29
|
+
required: true,
|
|
30
|
+
enum: ['Waiting confirmation', 'Approved', 'Denied']
|
|
31
|
+
},
|
|
32
|
+
facilityId: {
|
|
33
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
34
|
+
ref: 'Facility',
|
|
35
|
+
required: true // Ensures a facilityId is always provided
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
}, {
|
|
39
|
+
timestamps: true // Automatically add createdAt and updatedAt fields
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
const WaitList = mongoose.model('WaitList', waitListSchema);
|
|
44
|
+
|
|
45
|
+
module.exports = WaitList;
|
package/src/models/wallet.js
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
const mongoose = require("mongoose");
|
|
2
|
-
|
|
3
|
-
// Define the schema for Wallet
|
|
4
|
-
const walletSchema = new mongoose.Schema(
|
|
5
|
-
{
|
|
6
|
-
owner: {
|
|
7
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
8
|
-
required: true,
|
|
9
|
-
},
|
|
10
|
-
ownerType: {
|
|
11
|
-
type: String,
|
|
12
|
-
required: true,
|
|
13
|
-
enum: ["User", "Customer", "Facility"],
|
|
14
|
-
},
|
|
15
|
-
walletType: {
|
|
16
|
-
type: String,
|
|
17
|
-
required: false,
|
|
18
|
-
enum: ["levy", "propertyManagement", "lease", "utility", "vas"],
|
|
19
|
-
},
|
|
20
|
-
amount: {
|
|
21
|
-
type: Number,
|
|
22
|
-
default: 0,
|
|
23
|
-
min: 0,
|
|
24
|
-
},
|
|
25
|
-
facilityId: {
|
|
26
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
27
|
-
ref: "Facility",
|
|
28
|
-
required: true,
|
|
29
|
-
},
|
|
30
|
-
isActive: {
|
|
31
|
-
type: Boolean,
|
|
32
|
-
default: true,
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
timestamps: true,
|
|
37
|
-
},
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
// Index for efficient queries
|
|
41
|
-
walletSchema.index({ owner: 1, ownerType: 1, facilityId: 1 });
|
|
42
|
-
|
|
43
|
-
const Wallet = mongoose.model("Wallet", walletSchema);
|
|
44
|
-
module.exports = Wallet;
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
// Define the schema for Wallet
|
|
4
|
+
const walletSchema = new mongoose.Schema(
|
|
5
|
+
{
|
|
6
|
+
owner: {
|
|
7
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
ownerType: {
|
|
11
|
+
type: String,
|
|
12
|
+
required: true,
|
|
13
|
+
enum: ["User", "Customer", "Facility"],
|
|
14
|
+
},
|
|
15
|
+
walletType: {
|
|
16
|
+
type: String,
|
|
17
|
+
required: false,
|
|
18
|
+
enum: ["levy", "propertyManagement", "lease", "utility", "vas"],
|
|
19
|
+
},
|
|
20
|
+
amount: {
|
|
21
|
+
type: Number,
|
|
22
|
+
default: 0,
|
|
23
|
+
min: 0,
|
|
24
|
+
},
|
|
25
|
+
facilityId: {
|
|
26
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
27
|
+
ref: "Facility",
|
|
28
|
+
required: true,
|
|
29
|
+
},
|
|
30
|
+
isActive: {
|
|
31
|
+
type: Boolean,
|
|
32
|
+
default: true,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
timestamps: true,
|
|
37
|
+
},
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Index for efficient queries
|
|
41
|
+
walletSchema.index({ owner: 1, ownerType: 1, facilityId: 1 });
|
|
42
|
+
|
|
43
|
+
const Wallet = mongoose.model("Wallet", walletSchema);
|
|
44
|
+
module.exports = Wallet;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
// Every credit/debit is an immutable row — balance is derived from
|
|
4
|
+
// balanceAfter on the most recent row for a given customerId, same
|
|
5
|
+
// running-balance pattern used in the unit/customer SOA handlers.
|
|
6
|
+
const WalletTransactionSchema = new mongoose.Schema(
|
|
7
|
+
{
|
|
8
|
+
customerId: {
|
|
9
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
10
|
+
ref: "Customer",
|
|
11
|
+
required: true,
|
|
12
|
+
index: true, // NOT unique — a customer has MANY ledger entries over time
|
|
13
|
+
},
|
|
14
|
+
facilityId: {
|
|
15
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
16
|
+
ref: "Facility",
|
|
17
|
+
required: true,
|
|
18
|
+
index: true,
|
|
19
|
+
},
|
|
20
|
+
type: { type: String, enum: ["credit", "debit"], required: true },
|
|
21
|
+
source: {
|
|
22
|
+
type: String,
|
|
23
|
+
enum: [
|
|
24
|
+
"rental-income", // auto-detected incoming payment
|
|
25
|
+
"expense-deduction", // management fee, maintenance cost, etc.
|
|
26
|
+
"withdrawal-request", // debit created when landlord requests payout
|
|
27
|
+
"withdrawal-reversal", // corrective credit if a withdrawal needs reversing
|
|
28
|
+
"manual-adjustment",
|
|
29
|
+
],
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
amount: { type: Number, required: true }, // always positive; type determines sign
|
|
33
|
+
balanceAfter: { type: Number, required: true }, // running balance snapshot
|
|
34
|
+
status: {
|
|
35
|
+
type: String,
|
|
36
|
+
enum: ["pending", "completed", "rejected"],
|
|
37
|
+
default: "completed",
|
|
38
|
+
},
|
|
39
|
+
reference: { type: String }, // bank txn ref, invoice number, withdrawal request id
|
|
40
|
+
detectedPaymentId: {
|
|
41
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
42
|
+
ref: "CashPayment",
|
|
43
|
+
index: true,
|
|
44
|
+
sparse: true,
|
|
45
|
+
}, // idempotency link — prevents double-crediting the same bank payment
|
|
46
|
+
notes: { type: String },
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
timestamps: true,
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Compound index: the query you'll run constantly is "give me the latest
|
|
54
|
+
// entry for this customer" — this makes that a fast indexed lookup instead
|
|
55
|
+
// of a collection scan as the ledger grows.
|
|
56
|
+
WalletTransactionSchema.index({ customerId: 1, createdAt: -1 });
|
|
57
|
+
|
|
58
|
+
// Idempotency guard at the DB level: a given detectedPaymentId should only
|
|
59
|
+
// ever produce one wallet credit, even if the payment-detection hook fires
|
|
60
|
+
// twice (retries, webhook redelivery, etc.)
|
|
61
|
+
WalletTransactionSchema.index(
|
|
62
|
+
{ detectedPaymentId: 1 },
|
|
63
|
+
{ unique: true, partialFilterExpression: { detectedPaymentId: { $exists: true } } }
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const WalletTransaction = mongoose.model("WalletTransaction", WalletTransactionSchema);
|
|
67
|
+
|
|
68
|
+
module.exports = WalletTransaction;
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
const mongoose = require("mongoose");
|
|
2
|
-
|
|
3
|
-
// Define the schema for Wallet Transactions
|
|
4
|
-
const walletTransactionSchema = new mongoose.Schema(
|
|
5
|
-
{
|
|
6
|
-
walletId: {
|
|
7
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
8
|
-
ref: "Wallet",
|
|
9
|
-
required: true,
|
|
10
|
-
},
|
|
11
|
-
date: {
|
|
12
|
-
type: Date,
|
|
13
|
-
required: true,
|
|
14
|
-
default: Date.now,
|
|
15
|
-
},
|
|
16
|
-
amount: {
|
|
17
|
-
type: Number,
|
|
18
|
-
required: true,
|
|
19
|
-
min: 0.01,
|
|
20
|
-
},
|
|
21
|
-
transactionType: {
|
|
22
|
-
type: String,
|
|
23
|
-
required: true,
|
|
24
|
-
enum: ["topup", "deductable"],
|
|
25
|
-
},
|
|
26
|
-
description: {
|
|
27
|
-
type: String,
|
|
28
|
-
required: true,
|
|
29
|
-
},
|
|
30
|
-
facilityId: {
|
|
31
|
-
type: mongoose.Schema.Types.ObjectId,
|
|
32
|
-
ref: "Facility",
|
|
33
|
-
required: true,
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
timestamps: true,
|
|
38
|
-
},
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
// Index for efficient queries
|
|
42
|
-
walletTransactionSchema.index({ walletId: 1, facilityId: 1 });
|
|
43
|
-
walletTransactionSchema.index({ facilityId: 1, transactionType: 1 });
|
|
44
|
-
walletTransactionSchema.index({ date: -1 });
|
|
45
|
-
|
|
46
|
-
const WalletTransaction = mongoose.model(
|
|
47
|
-
"WalletTransaction",
|
|
48
|
-
walletTransactionSchema,
|
|
49
|
-
);
|
|
50
|
-
module.exports = WalletTransaction;
|
|
1
|
+
const mongoose = require("mongoose");
|
|
2
|
+
|
|
3
|
+
// Define the schema for Wallet Transactions
|
|
4
|
+
const walletTransactionSchema = new mongoose.Schema(
|
|
5
|
+
{
|
|
6
|
+
walletId: {
|
|
7
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
8
|
+
ref: "Wallet",
|
|
9
|
+
required: true,
|
|
10
|
+
},
|
|
11
|
+
date: {
|
|
12
|
+
type: Date,
|
|
13
|
+
required: true,
|
|
14
|
+
default: Date.now,
|
|
15
|
+
},
|
|
16
|
+
amount: {
|
|
17
|
+
type: Number,
|
|
18
|
+
required: true,
|
|
19
|
+
min: 0.01,
|
|
20
|
+
},
|
|
21
|
+
transactionType: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: true,
|
|
24
|
+
enum: ["topup", "deductable"],
|
|
25
|
+
},
|
|
26
|
+
description: {
|
|
27
|
+
type: String,
|
|
28
|
+
required: true,
|
|
29
|
+
},
|
|
30
|
+
facilityId: {
|
|
31
|
+
type: mongoose.Schema.Types.ObjectId,
|
|
32
|
+
ref: "Facility",
|
|
33
|
+
required: true,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
timestamps: true,
|
|
38
|
+
},
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// Index for efficient queries
|
|
42
|
+
walletTransactionSchema.index({ walletId: 1, facilityId: 1 });
|
|
43
|
+
walletTransactionSchema.index({ facilityId: 1, transactionType: 1 });
|
|
44
|
+
walletTransactionSchema.index({ date: -1 });
|
|
45
|
+
|
|
46
|
+
const WalletTransaction = mongoose.model(
|
|
47
|
+
"WalletTransaction",
|
|
48
|
+
walletTransactionSchema,
|
|
49
|
+
);
|
|
50
|
+
module.exports = WalletTransaction;
|