payservedb 9.5.3 → 9.5.4

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 (232) hide show
  1. package/.env +2 -2
  2. package/ZOHO_INTEGRATION_SCHEMA.md +644 -644
  3. package/index.js +417 -418
  4. package/package.json +17 -17
  5. package/src/models/InvoiceWithholdingTax.js +67 -67
  6. package/src/models/account.js +59 -59
  7. package/src/models/agent_departments.js +59 -59
  8. package/src/models/agent_notifications.js +53 -53
  9. package/src/models/agent_performance.js +127 -127
  10. package/src/models/agent_roles.js +77 -77
  11. package/src/models/agents.js +154 -154
  12. package/src/models/apilog.js +18 -18
  13. package/src/models/approvalsWorkflows.js +49 -49
  14. package/src/models/archivedapilog.js +18 -18
  15. package/src/models/asset.js +92 -92
  16. package/src/models/assetsAssignment.js +64 -64
  17. package/src/models/auditTrail.js +346 -346
  18. package/src/models/auto_reply_rule.js +68 -68
  19. package/src/models/bankdetails.js +47 -47
  20. package/src/models/billerAddress.js +124 -124
  21. package/src/models/booking_invoice.js +187 -187
  22. package/src/models/bookinganalytics.js +63 -63
  23. package/src/models/bookingconfig.js +74 -67
  24. package/src/models/bookingproperty.js +212 -187
  25. package/src/models/bookingreservation.js +288 -266
  26. package/src/models/bookingrevenuerecord.js +84 -84
  27. package/src/models/budget.js +95 -95
  28. package/src/models/budgetCategory.js +19 -19
  29. package/src/models/campaigns.js +108 -108
  30. package/src/models/cancellation_policy.js +56 -56
  31. package/src/models/cashpayment.js +289 -289
  32. package/src/models/combinedUnits.js +62 -62
  33. package/src/models/combined_invoice.js +424 -424
  34. package/src/models/common_area_electricity.js +38 -38
  35. package/src/models/common_area_generator.js +41 -41
  36. package/src/models/common_area_utility_alert.js +37 -37
  37. package/src/models/common_area_water.js +39 -39
  38. package/src/models/communication_status.js +33 -33
  39. package/src/models/communication_user_opt.js +32 -32
  40. package/src/models/community_guidelines.js +35 -35
  41. package/src/models/company.js +53 -53
  42. package/src/models/coreBaseSettings.js +16 -16
  43. package/src/models/coreInvoiceSettings.js +100 -100
  44. package/src/models/counter_schema.js +21 -21
  45. package/src/models/country_tax.js +42 -42
  46. package/src/models/currency_settings.js +39 -39
  47. package/src/models/customer.js +251 -251
  48. package/src/models/customer_preference.js +52 -52
  49. package/src/models/customer_satisfaction_survey.js +297 -297
  50. package/src/models/customer_surveys.js +139 -139
  51. package/src/models/customer_tickets.js +237 -237
  52. package/src/models/dailyChecklist.js +312 -312
  53. package/src/models/default_payment_details.js +17 -17
  54. package/src/models/deliveryTimeMarks.js +18 -18
  55. package/src/models/document_type.js +19 -19
  56. package/src/models/dutyRosterChecklist.js +250 -250
  57. package/src/models/dutyroster.js +136 -136
  58. package/src/models/email.js +37 -37
  59. package/src/models/email_cc_config.js +48 -48
  60. package/src/models/email_sms_queue.js +61 -61
  61. package/src/models/email_thread.js +35 -35
  62. package/src/models/entry_exit.js +53 -53
  63. package/src/models/expense.js +99 -99
  64. package/src/models/expense_category.js +45 -45
  65. package/src/models/facility.js +100 -100
  66. package/src/models/facilityBillingPrices.js +29 -29
  67. package/src/models/facilityInvoice.js +240 -240
  68. package/src/models/facilityInvoicePayment.js +52 -52
  69. package/src/models/facilityInvoiceRecipient.js +32 -32
  70. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  71. package/src/models/facility_departements.js +20 -20
  72. package/src/models/facility_etims_config.js +116 -116
  73. package/src/models/facility_payment_details.js +20 -20
  74. package/src/models/facility_rating.js +78 -78
  75. package/src/models/facilityasset.js +25 -25
  76. package/src/models/faq.js +15 -15
  77. package/src/models/gl_account_double_entries.js +25 -25
  78. package/src/models/gl_accounts.js +56 -56
  79. package/src/models/gl_entries.js +49 -49
  80. package/src/models/goodsReceivedNotes.js +115 -115
  81. package/src/models/guard.js +47 -47
  82. package/src/models/handover.js +258 -258
  83. package/src/models/inspection_category.js +38 -38
  84. package/src/models/invoice.js +569 -569
  85. package/src/models/invoiceCreditAdjustment.js +45 -45
  86. package/src/models/invoice_edit_log.js +81 -81
  87. package/src/models/invoice_generation_approval.js +86 -86
  88. package/src/models/invoicing_schedule.js +40 -40
  89. package/src/models/item_inspection.js +96 -96
  90. package/src/models/knowledge_base.js +109 -109
  91. package/src/models/knowledge_base_rating.js +44 -44
  92. package/src/models/leaseagreement.js +266 -266
  93. package/src/models/leasetemplate.js +17 -17
  94. package/src/models/levy.js +231 -231
  95. package/src/models/levy_deposits.js +139 -139
  96. package/src/models/levy_invoice_settings.js +26 -26
  97. package/src/models/levy_payment_receipt.js +156 -156
  98. package/src/models/levycontract.js +213 -213
  99. package/src/models/levytype.js +23 -23
  100. package/src/models/maintenance_service_vendor.js +38 -38
  101. package/src/models/maintenance_services.js +17 -17
  102. package/src/models/maintenancerequisition.js +31 -31
  103. package/src/models/master_workplan.js +32 -32
  104. package/src/models/master_workplan_child.js +34 -34
  105. package/src/models/message.js +38 -38
  106. package/src/models/module.js +21 -21
  107. package/src/models/movein_amenity.js +13 -13
  108. package/src/models/movein_application.js +28 -28
  109. package/src/models/movein_audit_log.js +21 -21
  110. package/src/models/movein_booking.js +33 -33
  111. package/src/models/movein_commission.js +46 -46
  112. package/src/models/movein_conversation.js +25 -25
  113. package/src/models/movein_deal.js +79 -79
  114. package/src/models/movein_disbursement.js +36 -36
  115. package/src/models/movein_email_thread.js +19 -19
  116. package/src/models/movein_enquiry.js +16 -16
  117. package/src/models/movein_featured_package.js +16 -16
  118. package/src/models/movein_handoff_token.js +16 -16
  119. package/src/models/movein_invoice.js +24 -24
  120. package/src/models/movein_landlord.js +18 -18
  121. package/src/models/movein_landlord_user.js +20 -20
  122. package/src/models/movein_lease.js +37 -37
  123. package/src/models/movein_message.js +27 -27
  124. package/src/models/movein_notification.js +27 -27
  125. package/src/models/movein_otp.js +14 -14
  126. package/src/models/movein_payment.js +46 -46
  127. package/src/models/movein_reminder.js +77 -77
  128. package/src/models/movein_reservation.js +31 -31
  129. package/src/models/movein_settings.js +25 -25
  130. package/src/models/movein_tenancy.js +55 -55
  131. package/src/models/movein_unit.js +59 -59
  132. package/src/models/movein_user.js +15 -15
  133. package/src/models/movein_viewing_slot.js +21 -21
  134. package/src/models/movein_want_unit.js +20 -20
  135. package/src/models/notification.js +44 -44
  136. package/src/models/paymentTermsMarks.js +19 -19
  137. package/src/models/penalty.js +76 -76
  138. package/src/models/pendingCredentials.js +32 -32
  139. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  140. package/src/models/powerMeterCustomerAccount.js +78 -78
  141. package/src/models/powerMeterCustomerBand.js +14 -14
  142. package/src/models/powerMeterDailyReading.js +30 -30
  143. package/src/models/powerMeterGateways.js +40 -40
  144. package/src/models/powerMeterMonthlyReading.js +34 -34
  145. package/src/models/powerMeterPowerCharges.js +85 -85
  146. package/src/models/powerMeterSettings.js +211 -211
  147. package/src/models/powerMeterSingleDayReading.js +32 -32
  148. package/src/models/powerMeters.js +149 -149
  149. package/src/models/powerMetersManufacturer.js +14 -14
  150. package/src/models/power_invoice.js +371 -371
  151. package/src/models/power_meter_account.js +81 -81
  152. package/src/models/power_meter_command_logs.js +30 -30
  153. package/src/models/power_meter_command_queue.js +33 -33
  154. package/src/models/power_meter_negative_balance.js +44 -44
  155. package/src/models/power_prepaid_credits.js +47 -47
  156. package/src/models/power_prepaid_debits.js +53 -53
  157. package/src/models/power_prepaid_orders.js +78 -78
  158. package/src/models/power_sms_notification.js +26 -26
  159. package/src/models/privacy_policy.js +19 -19
  160. package/src/models/propertyManagementSettings.js +55 -55
  161. package/src/models/propertyManagerContract.js +611 -611
  162. package/src/models/propertyManagerRevenue.js +195 -195
  163. package/src/models/propertyManagerRevenueEntry.js +118 -118
  164. package/src/models/purchaseOrderInvoice.js +74 -74
  165. package/src/models/purchase_order.js +213 -213
  166. package/src/models/purchase_request.js +110 -110
  167. package/src/models/quickbooks_config.js +52 -52
  168. package/src/models/recipient_group.js +61 -61
  169. package/src/models/recipient_group_member.js +62 -62
  170. package/src/models/refresh_token.js +23 -23
  171. package/src/models/reminder.js +197 -197
  172. package/src/models/report.js +13 -13
  173. package/src/models/resident.js +121 -121
  174. package/src/models/rfq_details.js +131 -131
  175. package/src/models/rfq_response.js +153 -153
  176. package/src/models/service_charge_invoice_upload.js +42 -42
  177. package/src/models/service_charge_payments.js +27 -27
  178. package/src/models/servicerequest.js +55 -55
  179. package/src/models/settings.js +62 -62
  180. package/src/models/short_urls.js +21 -21
  181. package/src/models/smart_meter_daily_consumption.js +44 -44
  182. package/src/models/sms_africastalking.js +20 -20
  183. package/src/models/sms_balance_notification.js +26 -26
  184. package/src/models/sms_meliora.js +20 -20
  185. package/src/models/staff.js +36 -36
  186. package/src/models/stocksandspare.js +161 -161
  187. package/src/models/suppliers.js +79 -79
  188. package/src/models/terms_and_conditions.js +19 -19
  189. package/src/models/tickets.js +186 -186
  190. package/src/models/tickets_category.js +72 -72
  191. package/src/models/unitManagementTemplate.js +44 -44
  192. package/src/models/unitasset.js +25 -25
  193. package/src/models/units.js +148 -148
  194. package/src/models/user.js +186 -186
  195. package/src/models/valueaddedservices.js +50 -50
  196. package/src/models/vas_invoices_upload.js +50 -50
  197. package/src/models/vas_payments.js +24 -24
  198. package/src/models/vasinvoice.js +196 -196
  199. package/src/models/vasvendor.js +52 -52
  200. package/src/models/visitLog.js +95 -95
  201. package/src/models/visitor.js +67 -67
  202. package/src/models/waitlist.js +45 -45
  203. package/src/models/wallet.js +44 -44
  204. package/src/models/wallet_transaction.js +67 -67
  205. package/src/models/wallet_transactions.js +72 -72
  206. package/src/models/water_invoice.js +362 -362
  207. package/src/models/water_meter_Command_Queue.js +33 -33
  208. package/src/models/water_meter_account.js +86 -86
  209. package/src/models/water_meter_billing.js +58 -58
  210. package/src/models/water_meter_combined_accounts.js +92 -92
  211. package/src/models/water_meter_communication.js +17 -17
  212. package/src/models/water_meter_communication_logs.js +39 -39
  213. package/src/models/water_meter_concentrator.js +77 -77
  214. package/src/models/water_meter_daily_history.js +32 -32
  215. package/src/models/water_meter_high_risk.js +36 -36
  216. package/src/models/water_meter_iot_cards.js +34 -34
  217. package/src/models/water_meter_loan_deduction.js +134 -134
  218. package/src/models/water_meter_manufacturer.js +35 -35
  219. package/src/models/water_meter_monthly_history.js +36 -36
  220. package/src/models/water_meter_negative_amounts.js +44 -44
  221. package/src/models/water_meter_settings.js +296 -296
  222. package/src/models/water_meter_single_day_history.js +34 -34
  223. package/src/models/water_meter_size.js +15 -15
  224. package/src/models/water_meters.js +176 -176
  225. package/src/models/water_meters_delivery.js +76 -76
  226. package/src/models/water_prepaid_credit.js +47 -47
  227. package/src/models/water_prepaid_debit.js +50 -50
  228. package/src/models/whatsapp_conversation.js +23 -23
  229. package/src/models/workorder.js +49 -49
  230. package/src/models/zohoAccount.js +453 -453
  231. package/src/models/zohoIntegration.js +262 -262
  232. package/src/models/zohoItem.js +504 -504
@@ -1,188 +1,188 @@
1
- const mongoose = require('mongoose');
2
-
3
- // Define the schema for Booking Invoices
4
- const bookingInvoiceSchema = new mongoose.Schema({
5
- invoiceNumber: {
6
- type: String,
7
- required: true,
8
- unique: true,
9
- },
10
- facilityId: {
11
- type: mongoose.Schema.Types.ObjectId,
12
- ref: 'Facility',
13
- required: true
14
- },
15
- invoiceId: {
16
- type: String,
17
- required: true,
18
- unique: true
19
- },
20
- accountNumber: {
21
- type: String,
22
- unique: true,
23
- sparse: true // Allow null/undefined values while maintaining uniqueness for non-null values
24
- },
25
- // Reservation-billed invoices (the default/original use of this model)
26
- // always set bookingReservationId. Recurring landlord listing-fee
27
- // invoices (invoiceType: 'ListingFee') are not tied to a reservation,
28
- // so this is intentionally not required at the schema level.
29
- bookingReservationId: {
30
- type: mongoose.Schema.Types.ObjectId,
31
- ref: 'BookingReservation'
32
- },
33
- // Distinguishes a guest-facing reservation invoice from a recurring
34
- // landlord listing-fee invoice billed for hosting a unit on the
35
- // booking platform (Managed by Landlord units).
36
- invoiceType: {
37
- type: String,
38
- enum: ['Reservation', 'ListingFee'],
39
- default: 'Reservation'
40
- },
41
- // Landlord being billed - only set for invoiceType: 'ListingFee'
42
- landlordId: {
43
- type: mongoose.Schema.Types.ObjectId,
44
- ref: 'Customer'
45
- },
46
- // "YYYY-MM" of the billing period - only set for invoiceType: 'ListingFee',
47
- // used to prevent generating more than one listing-fee invoice per unit
48
- // per month
49
- billingYearMonth: {
50
- type: String
51
- },
52
- unitId: {
53
- type: mongoose.Schema.Types.ObjectId,
54
- ref: 'Unit',
55
- required: true
56
- },
57
- guestInfo: {
58
- name: {
59
- type: String,
60
- required: true
61
- },
62
- email: {
63
- type: String,
64
- required: true
65
- },
66
- phone: {
67
- type: String,
68
- required: true
69
- },
70
- idNumber: {
71
- type: String
72
- }
73
- },
74
- issueDate: {
75
- type: Date,
76
- default: Date.now,
77
- required: true
78
- },
79
- dueDate: {
80
- type: Date,
81
- required: true
82
- },
83
- checkIn: {
84
- type: Date,
85
- required: true
86
- },
87
- checkOut: {
88
- type: Date,
89
- required: true
90
- },
91
- basePrice: {
92
- type: Number,
93
- required: true
94
- },
95
- totalAmount: {
96
- type: Number,
97
- required: true
98
- },
99
- additionalServices: [{
100
- serviceId: {
101
- type: mongoose.Schema.Types.ObjectId,
102
- ref: 'ValueAddedService'
103
- },
104
- serviceName: {
105
- type: String,
106
- required: true
107
- },
108
- quantity: {
109
- type: Number,
110
- default: 1
111
- },
112
- price: {
113
- type: Number,
114
- required: true
115
- }
116
- }],
117
- discountAmount: {
118
- type: Number,
119
- default: 0
120
- },
121
- taxAmount: {
122
- type: Number,
123
- default: 0
124
- },
125
- paymentMethod: {
126
- type: String,
127
- enum: ['Cash', 'Card', 'Bank Transfer', 'Mobile Money', 'Other'],
128
- required: true
129
- },
130
- paymentStatus: {
131
- type: String,
132
- enum: ['Pending', 'Paid', 'Partially Paid', 'Refunded', 'Cancelled'],
133
- default: 'Pending'
134
- },
135
- paymentHistory: [{
136
- amount: {
137
- type: Number,
138
- required: true
139
- },
140
- paymentMethod: {
141
- type: String,
142
- enum: ['Cash', 'Card', 'Bank Transfer', 'Mobile Money', 'Other'],
143
- required: true
144
- },
145
- transactionId: String,
146
- date: {
147
- type: Date,
148
- default: Date.now
149
- },
150
- notes: String
151
- }],
152
- currencyId: {
153
- type: mongoose.Schema.Types.ObjectId,
154
- ref: 'Currency',
155
- required: true
156
- },
157
- // Payment details for M-Pesa STK push
158
- paymentDetails: {
159
- paybillNumber: String,
160
- paybillAccountName: String,
161
- facilityPaymentDetailsId: {
162
- type: mongoose.Schema.Types.ObjectId,
163
- ref: 'FacilityPaymentDetails'
164
- }
165
- },
166
- status: {
167
- type: String,
168
- enum: ['active', 'cancelled', 'void'],
169
- default: 'active'
170
- },
171
- notes: {
172
- type: String
173
- },
174
- createdBy: {
175
- type: mongoose.Schema.Types.ObjectId,
176
- ref: 'User'
177
- },
178
- updatedBy: {
179
- type: mongoose.Schema.Types.ObjectId,
180
- ref: 'User'
181
- }
182
- }, {
183
- timestamps: true
184
- });
185
-
186
- const BookingInvoice = mongoose.model('BookingInvoice', bookingInvoiceSchema);
187
-
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define the schema for Booking Invoices
4
+ const bookingInvoiceSchema = new mongoose.Schema({
5
+ invoiceNumber: {
6
+ type: String,
7
+ required: true,
8
+ unique: true,
9
+ },
10
+ facilityId: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ ref: 'Facility',
13
+ required: true
14
+ },
15
+ invoiceId: {
16
+ type: String,
17
+ required: true,
18
+ unique: true
19
+ },
20
+ accountNumber: {
21
+ type: String,
22
+ unique: true,
23
+ sparse: true // Allow null/undefined values while maintaining uniqueness for non-null values
24
+ },
25
+ // Reservation-billed invoices (the default/original use of this model)
26
+ // always set bookingReservationId. Recurring landlord listing-fee
27
+ // invoices (invoiceType: 'ListingFee') are not tied to a reservation,
28
+ // so this is intentionally not required at the schema level.
29
+ bookingReservationId: {
30
+ type: mongoose.Schema.Types.ObjectId,
31
+ ref: 'BookingReservation'
32
+ },
33
+ // Distinguishes a guest-facing reservation invoice from a recurring
34
+ // landlord listing-fee invoice billed for hosting a unit on the
35
+ // booking platform (Managed by Landlord units).
36
+ invoiceType: {
37
+ type: String,
38
+ enum: ['Reservation', 'ListingFee'],
39
+ default: 'Reservation'
40
+ },
41
+ // Landlord being billed - only set for invoiceType: 'ListingFee'
42
+ landlordId: {
43
+ type: mongoose.Schema.Types.ObjectId,
44
+ ref: 'Customer'
45
+ },
46
+ // "YYYY-MM" of the billing period - only set for invoiceType: 'ListingFee',
47
+ // used to prevent generating more than one listing-fee invoice per unit
48
+ // per month
49
+ billingYearMonth: {
50
+ type: String
51
+ },
52
+ unitId: {
53
+ type: mongoose.Schema.Types.ObjectId,
54
+ ref: 'Unit',
55
+ required: true
56
+ },
57
+ guestInfo: {
58
+ name: {
59
+ type: String,
60
+ required: true
61
+ },
62
+ email: {
63
+ type: String,
64
+ required: true
65
+ },
66
+ phone: {
67
+ type: String,
68
+ required: true
69
+ },
70
+ idNumber: {
71
+ type: String
72
+ }
73
+ },
74
+ issueDate: {
75
+ type: Date,
76
+ default: Date.now,
77
+ required: true
78
+ },
79
+ dueDate: {
80
+ type: Date,
81
+ required: true
82
+ },
83
+ checkIn: {
84
+ type: Date,
85
+ required: true
86
+ },
87
+ checkOut: {
88
+ type: Date,
89
+ required: true
90
+ },
91
+ basePrice: {
92
+ type: Number,
93
+ required: true
94
+ },
95
+ totalAmount: {
96
+ type: Number,
97
+ required: true
98
+ },
99
+ additionalServices: [{
100
+ serviceId: {
101
+ type: mongoose.Schema.Types.ObjectId,
102
+ ref: 'ValueAddedService'
103
+ },
104
+ serviceName: {
105
+ type: String,
106
+ required: true
107
+ },
108
+ quantity: {
109
+ type: Number,
110
+ default: 1
111
+ },
112
+ price: {
113
+ type: Number,
114
+ required: true
115
+ }
116
+ }],
117
+ discountAmount: {
118
+ type: Number,
119
+ default: 0
120
+ },
121
+ taxAmount: {
122
+ type: Number,
123
+ default: 0
124
+ },
125
+ paymentMethod: {
126
+ type: String,
127
+ enum: ['Cash', 'Card', 'Bank Transfer', 'Mobile Money', 'Other'],
128
+ required: true
129
+ },
130
+ paymentStatus: {
131
+ type: String,
132
+ enum: ['Pending', 'Paid', 'Partially Paid', 'Refunded', 'Cancelled'],
133
+ default: 'Pending'
134
+ },
135
+ paymentHistory: [{
136
+ amount: {
137
+ type: Number,
138
+ required: true
139
+ },
140
+ paymentMethod: {
141
+ type: String,
142
+ enum: ['Cash', 'Card', 'Bank Transfer', 'Mobile Money', 'Other'],
143
+ required: true
144
+ },
145
+ transactionId: String,
146
+ date: {
147
+ type: Date,
148
+ default: Date.now
149
+ },
150
+ notes: String
151
+ }],
152
+ currencyId: {
153
+ type: mongoose.Schema.Types.ObjectId,
154
+ ref: 'Currency',
155
+ required: true
156
+ },
157
+ // Payment details for M-Pesa STK push
158
+ paymentDetails: {
159
+ paybillNumber: String,
160
+ paybillAccountName: String,
161
+ facilityPaymentDetailsId: {
162
+ type: mongoose.Schema.Types.ObjectId,
163
+ ref: 'FacilityPaymentDetails'
164
+ }
165
+ },
166
+ status: {
167
+ type: String,
168
+ enum: ['active', 'cancelled', 'void'],
169
+ default: 'active'
170
+ },
171
+ notes: {
172
+ type: String
173
+ },
174
+ createdBy: {
175
+ type: mongoose.Schema.Types.ObjectId,
176
+ ref: 'User'
177
+ },
178
+ updatedBy: {
179
+ type: mongoose.Schema.Types.ObjectId,
180
+ ref: 'User'
181
+ }
182
+ }, {
183
+ timestamps: true
184
+ });
185
+
186
+ const BookingInvoice = mongoose.model('BookingInvoice', bookingInvoiceSchema);
187
+
188
188
  module.exports = BookingInvoice;
@@ -1,64 +1,64 @@
1
- const mongoose = require('mongoose');
2
-
3
- // Define schema for Booking Analytics
4
- const bookingAnalyticsSchema = new mongoose.Schema({
5
- facilityId: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: 'Facility',
8
- required: true
9
- },
10
- date: {
11
- type: Date,
12
- required: true
13
- },
14
- metrics: {
15
- totalBookings: {
16
- type: Number,
17
- default: 0
18
- },
19
- totalRevenue: {
20
- type: Number,
21
- default: 0
22
- },
23
- pmCommission: {
24
- type: Number,
25
- default: 0
26
- },
27
- landlordRevenue: {
28
- type: Number,
29
- default: 0
30
- },
31
- occupancyRate: {
32
- type: Number,
33
- default: 0
34
- },
35
- averageDailyRate: {
36
- type: Number,
37
- default: 0
38
- }
39
- },
40
- bookingsByStatus: {
41
- new: {
42
- type: Number,
43
- default: 0
44
- },
45
- confirmed: {
46
- type: Number,
47
- default: 0
48
- },
49
- cancelled: {
50
- type: Number,
51
- default: 0
52
- },
53
- completed: {
54
- type: Number,
55
- default: 0
56
- }
57
- }
58
- }, {
59
- timestamps: true
60
- });
61
- // Create model from schema
62
- const BookingAnalytics = mongoose.model('BookingAnalytics', bookingAnalyticsSchema);
63
-
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define schema for Booking Analytics
4
+ const bookingAnalyticsSchema = new mongoose.Schema({
5
+ facilityId: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: 'Facility',
8
+ required: true
9
+ },
10
+ date: {
11
+ type: Date,
12
+ required: true
13
+ },
14
+ metrics: {
15
+ totalBookings: {
16
+ type: Number,
17
+ default: 0
18
+ },
19
+ totalRevenue: {
20
+ type: Number,
21
+ default: 0
22
+ },
23
+ pmCommission: {
24
+ type: Number,
25
+ default: 0
26
+ },
27
+ landlordRevenue: {
28
+ type: Number,
29
+ default: 0
30
+ },
31
+ occupancyRate: {
32
+ type: Number,
33
+ default: 0
34
+ },
35
+ averageDailyRate: {
36
+ type: Number,
37
+ default: 0
38
+ }
39
+ },
40
+ bookingsByStatus: {
41
+ new: {
42
+ type: Number,
43
+ default: 0
44
+ },
45
+ confirmed: {
46
+ type: Number,
47
+ default: 0
48
+ },
49
+ cancelled: {
50
+ type: Number,
51
+ default: 0
52
+ },
53
+ completed: {
54
+ type: Number,
55
+ default: 0
56
+ }
57
+ }
58
+ }, {
59
+ timestamps: true
60
+ });
61
+ // Create model from schema
62
+ const BookingAnalytics = mongoose.model('BookingAnalytics', bookingAnalyticsSchema);
63
+
64
64
  module.exports = BookingAnalytics;
@@ -1,68 +1,75 @@
1
- const mongoose = require('mongoose');
2
-
3
- // Define schema for API Configuration (for Booking.com integration if needed)
4
- const bookingConfigSchema = new mongoose.Schema({
5
- facilityId: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: 'Facility',
8
- required: true
9
- },
10
- apiKey: {
11
- type: String,
12
- required: false
13
- },
14
- apiSecret: {
15
- type: String,
16
- required: false
17
- },
18
- isEnabled: {
19
- type: Boolean,
20
- default: false
21
- },
22
- lastConnected: {
23
- type: Date
24
- },
25
- settings: {
26
- autoAcceptBookings: {
27
- type: Boolean,
28
- default: false
29
- },
30
- syncCalendar: {
31
- type: Boolean,
32
- default: true
33
- },
34
- defaultCommission: {
35
- type: Number,
36
- default: 10
37
- },
38
- // Business-day cutoff, "HH:mm" 24h format. A checkout/checkin
39
- // timestamp before this time counts as belonging to the previous
40
- // calendar day (see src/utils/resolveBusinessDay.js).
41
- dayEndTime: {
42
- type: String,
43
- default: '00:00',
44
- validate: {
45
- validator: (value) => /^([01]\d|2[0-3]):([0-5]\d)$/.test(value),
46
- message: 'dayEndTime must be in HH:mm 24-hour format'
47
- }
48
- },
49
- // Recurring fee (per Phase 3b) charged to landlords whose unit is
50
- // listed via the facility's booking platform (managedByLandlord=true).
51
- listingFeeAmount: {
52
- type: Number,
53
- default: 0,
54
- min: 0
55
- },
56
- listingFeeCurrencyId: {
57
- type: mongoose.Schema.Types.ObjectId,
58
- ref: 'Currency'
59
- }
60
- }
61
- }, {
62
- timestamps: true
63
- });
64
-
65
- // Create model from schema
66
- const BookingConfig = mongoose.model('BookingConfig', bookingConfigSchema);
67
-
1
+ const mongoose = require('mongoose');
2
+
3
+ // Define schema for API Configuration (for Booking.com integration if needed)
4
+ const bookingConfigSchema = new mongoose.Schema({
5
+ facilityId: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: 'Facility',
8
+ required: true
9
+ },
10
+ apiKey: {
11
+ type: String,
12
+ required: false
13
+ },
14
+ apiSecret: {
15
+ type: String,
16
+ required: false
17
+ },
18
+ isEnabled: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ lastConnected: {
23
+ type: Date
24
+ },
25
+ settings: {
26
+ autoAcceptBookings: {
27
+ type: Boolean,
28
+ default: false
29
+ },
30
+ syncCalendar: {
31
+ type: Boolean,
32
+ default: true
33
+ },
34
+ defaultCommission: {
35
+ type: Number,
36
+ default: 10
37
+ },
38
+ // Business-day cutoff, "HH:mm" 24h format. A checkout/checkin
39
+ // timestamp before this time counts as belonging to the previous
40
+ // calendar day (see src/utils/resolveBusinessDay.js).
41
+ dayEndTime: {
42
+ type: String,
43
+ default: '00:00',
44
+ validate: {
45
+ validator: (value) => /^([01]\d|2[0-3]):([0-5]\d)$/.test(value),
46
+ message: 'dayEndTime must be in HH:mm 24-hour format'
47
+ }
48
+ },
49
+ // Recurring fee (per Phase 3b) charged to landlords whose unit is
50
+ // listed via the facility's booking platform (managedByLandlord=true).
51
+ listingFeeAmount: {
52
+ type: Number,
53
+ default: 0,
54
+ min: 0
55
+ },
56
+ listingFeeCurrencyId: {
57
+ type: mongoose.Schema.Types.ObjectId,
58
+ ref: 'Currency'
59
+ },
60
+ // How many minutes before dayEndTime a "Per Night" guest gets
61
+ // reminded to pay for the current night's stay.
62
+ reminderMinutesBeforeDayEnd: {
63
+ type: Number,
64
+ default: 60,
65
+ min: 0
66
+ }
67
+ }
68
+ }, {
69
+ timestamps: true
70
+ });
71
+
72
+ // Create model from schema
73
+ const BookingConfig = mongoose.model('BookingConfig', bookingConfigSchema);
74
+
68
75
  module.exports = BookingConfig;