payservedb 5.0.4 → 5.0.5

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 (103) hide show
  1. package/.env +2 -2
  2. package/index.js +172 -172
  3. package/package.json +17 -17
  4. package/src/models/account.js +35 -35
  5. package/src/models/analog_water_billing.js +58 -58
  6. package/src/models/apilog.js +18 -18
  7. package/src/models/approvalsWorkflows.js +49 -49
  8. package/src/models/archivedapilog.js +18 -18
  9. package/src/models/archivedauditlog.js +83 -83
  10. package/src/models/asset.js +34 -34
  11. package/src/models/auditlog.js +83 -83
  12. package/src/models/bankdetails.js +40 -40
  13. package/src/models/bookinganalytics.js +63 -63
  14. package/src/models/bookingconfig.js +45 -45
  15. package/src/models/bookingproperty.js +112 -112
  16. package/src/models/bookingreservation.js +192 -192
  17. package/src/models/bookingrevenuerecord.js +84 -84
  18. package/src/models/budget.js +33 -33
  19. package/src/models/budgetCategory.js +19 -19
  20. package/src/models/campaigns.js +72 -72
  21. package/src/models/cashpayment.js +262 -262
  22. package/src/models/combinedUnits.js +62 -62
  23. package/src/models/common_area_electricity.js +38 -38
  24. package/src/models/common_area_generator.js +38 -38
  25. package/src/models/common_area_utility_alert.js +37 -37
  26. package/src/models/common_area_water.js +39 -39
  27. package/src/models/company.js +53 -53
  28. package/src/models/country_tax.js +42 -42
  29. package/src/models/currency_settings.js +39 -39
  30. package/src/models/customer.js +200 -200
  31. package/src/models/default_payment_details.js +17 -17
  32. package/src/models/dutyroster.js +129 -129
  33. package/src/models/email.js +24 -24
  34. package/src/models/entry_exit.js +53 -53
  35. package/src/models/expense.js +55 -55
  36. package/src/models/facility.js +61 -61
  37. package/src/models/facility_payment_details.js +20 -20
  38. package/src/models/facilityasset.js +25 -25
  39. package/src/models/faq.js +18 -18
  40. package/src/models/gl_account_double_entries.js +25 -25
  41. package/src/models/gl_accounts.js +56 -56
  42. package/src/models/gl_entries.js +52 -52
  43. package/src/models/guard.js +47 -47
  44. package/src/models/handover.js +241 -241
  45. package/src/models/invoice.js +291 -291
  46. package/src/models/item_inspection.js +67 -67
  47. package/src/models/leaseagreement.js +169 -168
  48. package/src/models/leasetemplate.js +17 -17
  49. package/src/models/levy.js +84 -84
  50. package/src/models/levy_invoice_settings.js +26 -26
  51. package/src/models/levycontract.js +77 -77
  52. package/src/models/levytype.js +23 -23
  53. package/src/models/maintenance_service_vendor.js +38 -38
  54. package/src/models/maintenance_services.js +17 -17
  55. package/src/models/maintenancerequisition.js +31 -31
  56. package/src/models/message.js +38 -38
  57. package/src/models/module.js +21 -21
  58. package/src/models/notification.js +24 -24
  59. package/src/models/penalty.js +76 -76
  60. package/src/models/purchase_order.js +190 -190
  61. package/src/models/purchase_request.js +65 -65
  62. package/src/models/refresh_token.js +23 -23
  63. package/src/models/reminder.js +161 -161
  64. package/src/models/report.js +13 -13
  65. package/src/models/resident.js +121 -121
  66. package/src/models/rfq_details.js +87 -87
  67. package/src/models/rfq_response.js +109 -109
  68. package/src/models/service_charge_invoice_upload.js +42 -42
  69. package/src/models/service_charge_payments.js +27 -27
  70. package/src/models/servicerequest.js +55 -55
  71. package/src/models/settings.js +62 -62
  72. package/src/models/smart_meter_daily_consumption.js +44 -44
  73. package/src/models/sms_africastalking.js +20 -20
  74. package/src/models/sms_meliora.js +16 -16
  75. package/src/models/staff.js +36 -36
  76. package/src/models/stocksandspare.js +34 -34
  77. package/src/models/suppliers.js +68 -68
  78. package/src/models/tickets.js +109 -109
  79. package/src/models/unitasset.js +25 -25
  80. package/src/models/units.js +86 -86
  81. package/src/models/user.js +187 -187
  82. package/src/models/valueaddedservices.js +36 -36
  83. package/src/models/vas_invoices_upload.js +50 -50
  84. package/src/models/vas_payments.js +24 -24
  85. package/src/models/vasinvoice.js +159 -159
  86. package/src/models/vasvendor.js +57 -57
  87. package/src/models/visitLog.js +86 -86
  88. package/src/models/visitor.js +63 -63
  89. package/src/models/waitlist.js +45 -45
  90. package/src/models/water_invoice.js +192 -192
  91. package/src/models/water_meter_account.js +74 -74
  92. package/src/models/water_meter_communication.js +17 -17
  93. package/src/models/water_meter_concentrator.js +59 -59
  94. package/src/models/water_meter_daily_history.js +31 -31
  95. package/src/models/water_meter_iot_cards.js +34 -34
  96. package/src/models/water_meter_manufacturer.js +35 -35
  97. package/src/models/water_meter_monthly_history.js +37 -37
  98. package/src/models/water_meter_settings.js +88 -88
  99. package/src/models/water_meter_single_day_history.js +31 -31
  100. package/src/models/water_meter_size.js +15 -15
  101. package/src/models/water_meters.js +106 -106
  102. package/src/models/water_meters_delivery.js +76 -76
  103. package/src/models/workorder.js +49 -49
@@ -1,66 +1,66 @@
1
- const mongoose = require('mongoose');
2
-
3
- const purchaseRequestSchema = new mongoose.Schema({
4
- facilityId: {
5
- type: mongoose.Schema.Types.ObjectId,
6
- ref: 'Facility',
7
- required: true,
8
- index: true
9
- },
10
- items: [{
11
- itemDescription: {
12
- type: String,
13
- required: true,
14
- trim: true
15
- },
16
- quantity: {
17
- type: Number,
18
- required: true
19
- },
20
- unitOfMeasure: {
21
- type: String,
22
- required: true,
23
- trim: true
24
- },
25
- remarksSpecification: {
26
- type: String,
27
- trim: true
28
- }
29
- }],
30
- from: {
31
- type: String,
32
- trim: true
33
- },
34
- date: {
35
- type: Date,
36
- required: true,
37
- default: Date.now
38
- },
39
- irfNumber: {
40
- type: String,
41
- required: true,
42
- trim: true,
43
- index: true
44
- },
45
- department: {
46
- type: String,
47
- trim: true
48
- },
49
- status: {
50
- type: String,
51
- default: 'pending',
52
- index: true
53
- },
54
- poStatus: {
55
- type: String,
56
- enum: ['PO Raised', 'pending'],
57
- default: 'pending',
58
- index: true
59
- }
60
- }, {
61
- timestamps: true
62
- });
63
-
64
- const PurchaseRequest = mongoose.model('PurchaseRequest', purchaseRequestSchema);
65
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const purchaseRequestSchema = new mongoose.Schema({
4
+ facilityId: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: 'Facility',
7
+ required: true,
8
+ index: true
9
+ },
10
+ items: [{
11
+ itemDescription: {
12
+ type: String,
13
+ required: true,
14
+ trim: true
15
+ },
16
+ quantity: {
17
+ type: Number,
18
+ required: true
19
+ },
20
+ unitOfMeasure: {
21
+ type: String,
22
+ required: true,
23
+ trim: true
24
+ },
25
+ remarksSpecification: {
26
+ type: String,
27
+ trim: true
28
+ }
29
+ }],
30
+ from: {
31
+ type: String,
32
+ trim: true
33
+ },
34
+ date: {
35
+ type: Date,
36
+ required: true,
37
+ default: Date.now
38
+ },
39
+ irfNumber: {
40
+ type: String,
41
+ required: true,
42
+ trim: true,
43
+ index: true
44
+ },
45
+ department: {
46
+ type: String,
47
+ trim: true
48
+ },
49
+ status: {
50
+ type: String,
51
+ default: 'pending',
52
+ index: true
53
+ },
54
+ poStatus: {
55
+ type: String,
56
+ enum: ['PO Raised', 'pending'],
57
+ default: 'pending',
58
+ index: true
59
+ }
60
+ }, {
61
+ timestamps: true
62
+ });
63
+
64
+ const PurchaseRequest = mongoose.model('PurchaseRequest', purchaseRequestSchema);
65
+
66
66
  module.exports = PurchaseRequest;
@@ -1,23 +1,23 @@
1
- const mongoose = require('mongoose');
2
-
3
- const refreshTokenSchema = new mongoose.Schema({
4
- userId: {
5
- type: String,
6
- required: true,
7
- index: true, // Index for faster lookup by userId
8
- },
9
- token: {
10
- type: String,
11
- required: true,
12
- },
13
- createdAt: {
14
- type: Date,
15
- required: true,
16
- default: Date.now,
17
- expires: '30d', // Example: Token expires after 30 days
18
- },
19
- },{timestamps: true});
20
-
21
- const RefreshToken = mongoose.model('RefreshToken', refreshTokenSchema);
22
-
23
- module.exports = RefreshToken;
1
+ const mongoose = require('mongoose');
2
+
3
+ const refreshTokenSchema = new mongoose.Schema({
4
+ userId: {
5
+ type: String,
6
+ required: true,
7
+ index: true, // Index for faster lookup by userId
8
+ },
9
+ token: {
10
+ type: String,
11
+ required: true,
12
+ },
13
+ createdAt: {
14
+ type: Date,
15
+ required: true,
16
+ default: Date.now,
17
+ expires: '30d', // Example: Token expires after 30 days
18
+ },
19
+ },{timestamps: true});
20
+
21
+ const RefreshToken = mongoose.model('RefreshToken', refreshTokenSchema);
22
+
23
+ module.exports = RefreshToken;
@@ -1,162 +1,162 @@
1
- const mongoose = require("mongoose");
2
- const moment = require("moment-timezone");
3
-
4
- const reminderSchema = new mongoose.Schema(
5
- {
6
- name: {
7
- type: String,
8
- required: true,
9
- trim: true,
10
- },
11
- type: {
12
- type: String,
13
- required: true,
14
- enum: ['standard', 'custom'],
15
- default: 'standard'
16
- },
17
- module: {
18
- type: String,
19
- required: true,
20
- enum: ['levy', 'lease', 'utility'],
21
- default: 'levy'
22
- },
23
- moduleId: {
24
- type: mongoose.Schema.Types.ObjectId,
25
- required: true,
26
- refPath: 'module'
27
- },
28
- remindOn: {
29
- invoiceDate: {
30
- type: Boolean,
31
- default: true,
32
- },
33
- dueDate: {
34
- type: Boolean,
35
- default: false,
36
- },
37
- afterOverdue: {
38
- enabled: {
39
- type: Boolean,
40
- default: false,
41
- },
42
- days: {
43
- type: [Number],
44
- validate: {
45
- validator: function (value) {
46
- if (!this.remindOn.afterOverdue.enabled) return true;
47
- return Array.isArray(value) &&
48
- value.length > 0 &&
49
- value.every(day => [1, 3, 7].includes(day));
50
- },
51
- message: 'When overdue reminders are enabled, days can only be 1, 3, or 7'
52
- }
53
- }
54
- }
55
- },
56
- time: {
57
- type: String,
58
- required: true,
59
- default: "09:00",
60
- validate: {
61
- validator: function (value) {
62
- return /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/.test(value);
63
- },
64
- message: 'Time must be in HH:mm format'
65
- }
66
- },
67
- isActive: {
68
- type: Boolean,
69
- required: true,
70
- default: true,
71
- },
72
- processed: {
73
- type: Boolean,
74
- required: true,
75
- default: false,
76
- },
77
- lastProcessed: {
78
- type: Date,
79
- },
80
- notificationTypes: {
81
- type: [String],
82
- required: true,
83
- validate: {
84
- validator: function (value) {
85
- return value.length > 0 &&
86
- value.every(type => ['SMS', 'EMAIL'].includes(type.toUpperCase()));
87
- },
88
- message: 'At least one valid notification type is required'
89
- }
90
- },
91
- message: {
92
- type: String,
93
- maxLength: [500, 'Message cannot exceed 500 characters']
94
- },
95
- facilityId: {
96
- type: mongoose.Schema.Types.ObjectId,
97
- ref: "Facility",
98
- required: true,
99
- index: true
100
- },
101
- timezone: {
102
- type: String,
103
- required: true,
104
- default: 'UTC',
105
- validate: {
106
- validator: function (value) {
107
- return moment.tz.names().includes(value);
108
- },
109
- message: 'Invalid timezone'
110
- }
111
- }
112
- },
113
- {
114
- timestamps: true,
115
- indexes: [
116
- { facilityId: 1, isActive: 1 },
117
- { facilityId: 1, isActive: 1, 'remindOn.invoiceDate': 1 },
118
- { facilityId: 1, isActive: 1, 'remindOn.dueDate': 1 },
119
- { facilityId: 1, isActive: 1, 'remindOn.afterOverdue.enabled': 1 },
120
- { moduleId: 1, isActive: 1 },
121
- { facilityId: 1, lastProcessed: 1 }
122
- ]
123
- }
124
- );
125
-
126
- // Add methods to reminder schema
127
- reminderSchema.methods.shouldProcess = function (currentTime, invoice) {
128
- if (!this.isActive || !invoice) return false;
129
-
130
- const now = moment(currentTime);
131
- const invoiceDate = moment(invoice.createdAt);
132
- const dueDate = moment(invoice.dueDate);
133
- const today = moment().startOf('day');
134
-
135
- if (!this.isTimeToProcess(now)) return false;
136
-
137
- if (this.remindOn.invoiceDate && invoiceDate.isSame(today, 'day')) {
138
- return true;
139
- }
140
-
141
- if (this.remindOn.dueDate && dueDate.isSame(today, 'day')) {
142
- return true;
143
- }
144
-
145
- if (this.remindOn.afterOverdue.enabled && dueDate.isBefore(today, 'day')) {
146
- const daysOverdue = today.diff(dueDate, 'days');
147
- return this.remindOn.afterOverdue.days.includes(daysOverdue);
148
- }
149
-
150
- return false;
151
- };
152
-
153
- reminderSchema.methods.isTimeToProcess = function (currentTime) {
154
- const reminderMoment = moment(this.time, 'HH:mm');
155
- const currentMoment = moment(currentTime).format('HH:mm');
156
- const diffMinutes = moment(currentMoment, 'HH:mm').diff(reminderMoment, 'minutes');
157
- return Math.abs(diffMinutes) <= 5;
158
- };
159
-
160
- const Reminder = mongoose.model("Reminder", reminderSchema);
161
-
1
+ const mongoose = require("mongoose");
2
+ const moment = require("moment-timezone");
3
+
4
+ const reminderSchema = new mongoose.Schema(
5
+ {
6
+ name: {
7
+ type: String,
8
+ required: true,
9
+ trim: true,
10
+ },
11
+ type: {
12
+ type: String,
13
+ required: true,
14
+ enum: ['standard', 'custom'],
15
+ default: 'standard'
16
+ },
17
+ module: {
18
+ type: String,
19
+ required: true,
20
+ enum: ['levy', 'lease', 'utility'],
21
+ default: 'levy'
22
+ },
23
+ moduleId: {
24
+ type: mongoose.Schema.Types.ObjectId,
25
+ required: true,
26
+ refPath: 'module'
27
+ },
28
+ remindOn: {
29
+ invoiceDate: {
30
+ type: Boolean,
31
+ default: true,
32
+ },
33
+ dueDate: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ afterOverdue: {
38
+ enabled: {
39
+ type: Boolean,
40
+ default: false,
41
+ },
42
+ days: {
43
+ type: [Number],
44
+ validate: {
45
+ validator: function (value) {
46
+ if (!this.remindOn.afterOverdue.enabled) return true;
47
+ return Array.isArray(value) &&
48
+ value.length > 0 &&
49
+ value.every(day => [1, 3, 7].includes(day));
50
+ },
51
+ message: 'When overdue reminders are enabled, days can only be 1, 3, or 7'
52
+ }
53
+ }
54
+ }
55
+ },
56
+ time: {
57
+ type: String,
58
+ required: true,
59
+ default: "09:00",
60
+ validate: {
61
+ validator: function (value) {
62
+ return /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/.test(value);
63
+ },
64
+ message: 'Time must be in HH:mm format'
65
+ }
66
+ },
67
+ isActive: {
68
+ type: Boolean,
69
+ required: true,
70
+ default: true,
71
+ },
72
+ processed: {
73
+ type: Boolean,
74
+ required: true,
75
+ default: false,
76
+ },
77
+ lastProcessed: {
78
+ type: Date,
79
+ },
80
+ notificationTypes: {
81
+ type: [String],
82
+ required: true,
83
+ validate: {
84
+ validator: function (value) {
85
+ return value.length > 0 &&
86
+ value.every(type => ['SMS', 'EMAIL'].includes(type.toUpperCase()));
87
+ },
88
+ message: 'At least one valid notification type is required'
89
+ }
90
+ },
91
+ message: {
92
+ type: String,
93
+ maxLength: [500, 'Message cannot exceed 500 characters']
94
+ },
95
+ facilityId: {
96
+ type: mongoose.Schema.Types.ObjectId,
97
+ ref: "Facility",
98
+ required: true,
99
+ index: true
100
+ },
101
+ timezone: {
102
+ type: String,
103
+ required: true,
104
+ default: 'UTC',
105
+ validate: {
106
+ validator: function (value) {
107
+ return moment.tz.names().includes(value);
108
+ },
109
+ message: 'Invalid timezone'
110
+ }
111
+ }
112
+ },
113
+ {
114
+ timestamps: true,
115
+ indexes: [
116
+ { facilityId: 1, isActive: 1 },
117
+ { facilityId: 1, isActive: 1, 'remindOn.invoiceDate': 1 },
118
+ { facilityId: 1, isActive: 1, 'remindOn.dueDate': 1 },
119
+ { facilityId: 1, isActive: 1, 'remindOn.afterOverdue.enabled': 1 },
120
+ { moduleId: 1, isActive: 1 },
121
+ { facilityId: 1, lastProcessed: 1 }
122
+ ]
123
+ }
124
+ );
125
+
126
+ // Add methods to reminder schema
127
+ reminderSchema.methods.shouldProcess = function (currentTime, invoice) {
128
+ if (!this.isActive || !invoice) return false;
129
+
130
+ const now = moment(currentTime);
131
+ const invoiceDate = moment(invoice.createdAt);
132
+ const dueDate = moment(invoice.dueDate);
133
+ const today = moment().startOf('day');
134
+
135
+ if (!this.isTimeToProcess(now)) return false;
136
+
137
+ if (this.remindOn.invoiceDate && invoiceDate.isSame(today, 'day')) {
138
+ return true;
139
+ }
140
+
141
+ if (this.remindOn.dueDate && dueDate.isSame(today, 'day')) {
142
+ return true;
143
+ }
144
+
145
+ if (this.remindOn.afterOverdue.enabled && dueDate.isBefore(today, 'day')) {
146
+ const daysOverdue = today.diff(dueDate, 'days');
147
+ return this.remindOn.afterOverdue.days.includes(daysOverdue);
148
+ }
149
+
150
+ return false;
151
+ };
152
+
153
+ reminderSchema.methods.isTimeToProcess = function (currentTime) {
154
+ const reminderMoment = moment(this.time, 'HH:mm');
155
+ const currentMoment = moment(currentTime).format('HH:mm');
156
+ const diffMinutes = moment(currentMoment, 'HH:mm').diff(reminderMoment, 'minutes');
157
+ return Math.abs(diffMinutes) <= 5;
158
+ };
159
+
160
+ const Reminder = mongoose.model("Reminder", reminderSchema);
161
+
162
162
  module.exports = Reminder;
@@ -1,14 +1,14 @@
1
- const mongoose = require("mongoose");
2
-
3
- const ReportSchema = new mongoose.Schema({
4
- type: {
5
- type: String,
6
- enum: ['revenue', 'leasePerformance', 'expiredLeases'],
7
- required: true
8
- },
9
- data: { type: mongoose.Schema.Types.Mixed, required: true },
10
- generatedAt: { type: Date, default: Date.now },
11
- });
12
-
13
- module.exports = mongoose.model('Report', ReportSchema);
1
+ const mongoose = require("mongoose");
2
+
3
+ const ReportSchema = new mongoose.Schema({
4
+ type: {
5
+ type: String,
6
+ enum: ['revenue', 'leasePerformance', 'expiredLeases'],
7
+ required: true
8
+ },
9
+ data: { type: mongoose.Schema.Types.Mixed, required: true },
10
+ generatedAt: { type: Date, default: Date.now },
11
+ });
12
+
13
+ module.exports = mongoose.model('Report', ReportSchema);
14
14