payservedb 4.8.6 → 4.8.7

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 (101) hide show
  1. package/.env +2 -2
  2. package/index.js +170 -170
  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_accounts.js +52 -52
  41. package/src/models/guard.js +47 -47
  42. package/src/models/handover.js +241 -241
  43. package/src/models/invoice.js +276 -276
  44. package/src/models/item_inspection.js +67 -67
  45. package/src/models/leaseagreement.js +168 -168
  46. package/src/models/leasetemplate.js +17 -17
  47. package/src/models/levy.js +84 -84
  48. package/src/models/levy_invoice_settings.js +26 -26
  49. package/src/models/levycontract.js +77 -77
  50. package/src/models/levytype.js +23 -23
  51. package/src/models/maintenance_service_vendor.js +38 -38
  52. package/src/models/maintenance_services.js +17 -17
  53. package/src/models/maintenancerequisition.js +31 -31
  54. package/src/models/message.js +38 -38
  55. package/src/models/module.js +21 -21
  56. package/src/models/notification.js +24 -24
  57. package/src/models/penalty.js +76 -76
  58. package/src/models/purchase_order.js +191 -191
  59. package/src/models/purchase_request.js +65 -65
  60. package/src/models/refresh_token.js +23 -23
  61. package/src/models/reminder.js +161 -161
  62. package/src/models/report.js +13 -13
  63. package/src/models/resident.js +121 -121
  64. package/src/models/rfq_details.js +85 -85
  65. package/src/models/rfq_response.js +109 -109
  66. package/src/models/service_charge_invoice_upload.js +42 -42
  67. package/src/models/service_charge_payments.js +27 -27
  68. package/src/models/servicerequest.js +55 -55
  69. package/src/models/settings.js +62 -62
  70. package/src/models/smart_meter_daily_consumption.js +44 -44
  71. package/src/models/sms_africastalking.js +20 -20
  72. package/src/models/sms_meliora.js +16 -16
  73. package/src/models/staff.js +36 -36
  74. package/src/models/stocksandspare.js +34 -34
  75. package/src/models/suppliers.js +68 -68
  76. package/src/models/tickets.js +109 -109
  77. package/src/models/unitasset.js +25 -25
  78. package/src/models/units.js +86 -86
  79. package/src/models/user.js +94 -94
  80. package/src/models/valueaddedservices.js +36 -36
  81. package/src/models/vas_invoices_upload.js +50 -50
  82. package/src/models/vas_payments.js +24 -24
  83. package/src/models/vasinvoice.js +159 -159
  84. package/src/models/vasvendor.js +57 -57
  85. package/src/models/visitLog.js +86 -86
  86. package/src/models/visitor.js +63 -63
  87. package/src/models/waitlist.js +45 -45
  88. package/src/models/water_invoice.js +192 -192
  89. package/src/models/water_meter_account.js +74 -74
  90. package/src/models/water_meter_communication.js +17 -17
  91. package/src/models/water_meter_concentrator.js +59 -59
  92. package/src/models/water_meter_daily_history.js +31 -31
  93. package/src/models/water_meter_iot_cards.js +34 -34
  94. package/src/models/water_meter_manufacturer.js +35 -35
  95. package/src/models/water_meter_monthly_history.js +37 -37
  96. package/src/models/water_meter_settings.js +88 -88
  97. package/src/models/water_meter_single_day_history.js +31 -31
  98. package/src/models/water_meter_size.js +15 -15
  99. package/src/models/water_meters.js +103 -103
  100. package/src/models/water_meters_delivery.js +76 -76
  101. package/src/models/workorder.js +49 -49
@@ -1,77 +1,77 @@
1
- const mongoose = require("mongoose");
2
-
3
- const penaltySchema = new mongoose.Schema(
4
- {
5
- name: {
6
- type: String,
7
- required: true,
8
- },
9
- type: {
10
- type: String,
11
- required: true,
12
- enum: ['percentage', 'fixed']
13
- },
14
- effectDays: {
15
- type: Number,
16
- required: true,
17
- min: [1, "Effect days must be at least 1"]
18
- },
19
- percentage: {
20
- type: Number,
21
- required: function () {
22
- return this.type === 'percentage';
23
- },
24
- min: [0, "Percentage must be at least 0"]
25
- },
26
- amount: {
27
- type: Number,
28
- required: function () {
29
- return this.type === 'fixed';
30
- },
31
- min: [0, "Amount must be a positive number"]
32
- },
33
- module: {
34
- type: String,
35
- required: true,
36
- enum: ['levy', 'lease', 'utility']
37
- },
38
- moduleId: {
39
- type: mongoose.Schema.Types.ObjectId,
40
- required: true,
41
- refPath: 'module'
42
- },
43
- isActive: {
44
- type: Boolean,
45
- default: true,
46
- },
47
- facilityId: {
48
- type: mongoose.Schema.Types.ObjectId,
49
- ref: "Facility",
50
- required: true,
51
- index: true
52
- }
53
- },
54
- {
55
- timestamps: true,
56
- indexes: [
57
- { facilityId: 1, isActive: 1 },
58
- { moduleId: 1, module: 1 },
59
- { name: 1, facilityId: 1 }
60
- ]
61
- }
62
- );
63
-
64
- // Add any custom methods or middleware here if needed
65
- penaltySchema.pre('save', function (next) {
66
- // Clear the irrelevant field based on penalty type
67
- if (this.type === 'percentage') {
68
- this.amount = null;
69
- } else if (this.type === 'fixed') {
70
- this.percentage = null;
71
- }
72
- next();
73
- });
74
-
75
- const Penalty = mongoose.model("Penalty", penaltySchema);
76
-
1
+ const mongoose = require("mongoose");
2
+
3
+ const penaltySchema = new mongoose.Schema(
4
+ {
5
+ name: {
6
+ type: String,
7
+ required: true,
8
+ },
9
+ type: {
10
+ type: String,
11
+ required: true,
12
+ enum: ['percentage', 'fixed']
13
+ },
14
+ effectDays: {
15
+ type: Number,
16
+ required: true,
17
+ min: [1, "Effect days must be at least 1"]
18
+ },
19
+ percentage: {
20
+ type: Number,
21
+ required: function () {
22
+ return this.type === 'percentage';
23
+ },
24
+ min: [0, "Percentage must be at least 0"]
25
+ },
26
+ amount: {
27
+ type: Number,
28
+ required: function () {
29
+ return this.type === 'fixed';
30
+ },
31
+ min: [0, "Amount must be a positive number"]
32
+ },
33
+ module: {
34
+ type: String,
35
+ required: true,
36
+ enum: ['levy', 'lease', 'utility']
37
+ },
38
+ moduleId: {
39
+ type: mongoose.Schema.Types.ObjectId,
40
+ required: true,
41
+ refPath: 'module'
42
+ },
43
+ isActive: {
44
+ type: Boolean,
45
+ default: true,
46
+ },
47
+ facilityId: {
48
+ type: mongoose.Schema.Types.ObjectId,
49
+ ref: "Facility",
50
+ required: true,
51
+ index: true
52
+ }
53
+ },
54
+ {
55
+ timestamps: true,
56
+ indexes: [
57
+ { facilityId: 1, isActive: 1 },
58
+ { moduleId: 1, module: 1 },
59
+ { name: 1, facilityId: 1 }
60
+ ]
61
+ }
62
+ );
63
+
64
+ // Add any custom methods or middleware here if needed
65
+ penaltySchema.pre('save', function (next) {
66
+ // Clear the irrelevant field based on penalty type
67
+ if (this.type === 'percentage') {
68
+ this.amount = null;
69
+ } else if (this.type === 'fixed') {
70
+ this.percentage = null;
71
+ }
72
+ next();
73
+ });
74
+
75
+ const Penalty = mongoose.model("Penalty", penaltySchema);
76
+
77
77
  module.exports = Penalty;
@@ -1,192 +1,192 @@
1
- const mongoose = require('mongoose');
2
-
3
- const purchaseOrderSchema = new mongoose.Schema({
4
- // Main Purchase Order Information
5
- facilityId: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: 'Facility',
8
- required: true,
9
- index: true
10
- },
11
- poNumber: {
12
- type: String,
13
- required: true,
14
- unique: true,
15
- trim: true,
16
- index: true
17
- },
18
- prNumber: {
19
- type: String,
20
- required: true,
21
- trim: true,
22
- index: true,
23
- ref: 'PurchaseRequest'
24
- },
25
- supplier: {
26
- type: mongoose.Schema.Types.ObjectId,
27
- ref: 'Supplier',
28
- required: true
29
- },
30
- department: {
31
- type: String,
32
- required: true,
33
- trim: true
34
- },
35
- currency: {
36
- type: String,
37
- required: true,
38
- trim: true,
39
- default: 'KES'
40
- },
41
- date: {
42
- type: Date,
43
- required: true,
44
- default: Date.now
45
- },
46
- internalNotes: {
47
- type: String,
48
- trim: true
49
- },
50
- supplierNotes: {
51
- type: String,
52
- trim: true
53
- },
54
- budget: {
55
- type: String,
56
- trim: true
57
- },
58
- status: {
59
- type: String,
60
- enum: ['pending approval', 'approved', 'rejected', 'sent', 'received', 'completed', 'canceled'],
61
- default: 'pending approval',
62
- index: true
63
- },
64
-
65
- // Items Details
66
- items: [{
67
- itemDescription: {
68
- type: String,
69
- required: true,
70
- trim: true
71
- },
72
- quantity: {
73
- type: Number,
74
- required: true
75
- },
76
- unitOfMeasure: {
77
- type: String,
78
- required: true,
79
- trim: true
80
- },
81
- unitPrice: {
82
- type: Number,
83
- required: true
84
- },
85
- taxRate: {
86
- type: Number,
87
- default: 0
88
- },
89
- totalPrice: {
90
- type: Number,
91
- required: true
92
- }
93
- }],
94
-
95
- // Calculated Totals
96
- subtotal: {
97
- type: Number,
98
- required: true
99
- },
100
- taxTotal: {
101
- type: Number,
102
- required: true,
103
- default: 0
104
- },
105
- grandTotal: {
106
- type: Number,
107
- required: true
108
- },
109
-
110
- // Approvers Section
111
- approvers: [{
112
- approverId: {
113
- type: mongoose.Schema.Types.ObjectId,
114
- ref: 'User',
115
- required: true
116
- },
117
- approverName: {
118
- type: String,
119
- required: true
120
- },
121
- approverRole: {
122
- type: String,
123
- required: true
124
- },
125
- approvalStatus: {
126
- type: String,
127
- enum: ['pending', 'approved', 'rejected'],
128
- default: 'pending'
129
- },
130
- approvalDate: {
131
- type: Date
132
- },
133
- comments: {
134
- type: String,
135
- trim: true
136
- }
137
- }],
138
-
139
- // Document attachments
140
- attachments: [{
141
- name: {
142
- type: String,
143
- required: true
144
- },
145
- fileType: {
146
- type: String,
147
- required: true
148
- },
149
- filePath: {
150
- type: String,
151
- required: true
152
- },
153
- uploadDate: {
154
- type: Date,
155
- default: Date.now
156
- }
157
- }]
158
- }, {
159
- timestamps: true
160
- });
161
-
162
- // Virtual for tracking approval progress
163
- purchaseOrderSchema.virtual('approvalProgress').get(function () {
164
- if (!this.approvers || this.approvers.length === 0) return 0;
165
-
166
- const approvedCount = this.approvers.filter(
167
- approver => approver.approvalStatus === 'approved'
168
- ).length;
169
-
170
- return (approvedCount / this.approvers.length) * 100;
171
- });
172
-
173
- // Pre-save middleware to calculate totals
174
- purchaseOrderSchema.pre('save', function (next) {
175
- // Calculate subtotal
176
- this.subtotal = this.items.reduce((sum, item) => sum + (item.unitPrice * item.quantity), 0);
177
-
178
- // Calculate tax total
179
- this.taxTotal = this.items.reduce((sum, item) => {
180
- const itemTax = (item.unitPrice * item.quantity) * (item.taxRate / 100);
181
- return sum + itemTax;
182
- }, 0);
183
-
184
- // Calculate grand total
185
- this.grandTotal = this.subtotal + this.taxTotal;
186
-
187
- next();
188
- });
189
-
190
- const PurchaseOrder = mongoose.model('PurchaseOrder', purchaseOrderSchema);
191
-
1
+ const mongoose = require('mongoose');
2
+
3
+ const purchaseOrderSchema = new mongoose.Schema({
4
+ // Main Purchase Order Information
5
+ facilityId: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: 'Facility',
8
+ required: true,
9
+ index: true
10
+ },
11
+ poNumber: {
12
+ type: String,
13
+ required: true,
14
+ unique: true,
15
+ trim: true,
16
+ index: true
17
+ },
18
+ prNumber: {
19
+ type: String,
20
+ required: true,
21
+ trim: true,
22
+ index: true,
23
+ ref: 'PurchaseRequest'
24
+ },
25
+ supplier: {
26
+ type: mongoose.Schema.Types.ObjectId,
27
+ ref: 'Supplier',
28
+ required: true
29
+ },
30
+ department: {
31
+ type: String,
32
+ required: true,
33
+ trim: true
34
+ },
35
+ currency: {
36
+ type: String,
37
+ required: true,
38
+ trim: true,
39
+ default: 'KES'
40
+ },
41
+ date: {
42
+ type: Date,
43
+ required: true,
44
+ default: Date.now
45
+ },
46
+ internalNotes: {
47
+ type: String,
48
+ trim: true
49
+ },
50
+ supplierNotes: {
51
+ type: String,
52
+ trim: true
53
+ },
54
+ budget: {
55
+ type: String,
56
+ trim: true
57
+ },
58
+ status: {
59
+ type: String,
60
+ enum: ['pending approval', 'approved', 'rejected', 'sent', 'received', 'completed', 'canceled'],
61
+ default: 'pending approval',
62
+ index: true
63
+ },
64
+
65
+ // Items Details
66
+ items: [{
67
+ itemDescription: {
68
+ type: String,
69
+ required: true,
70
+ trim: true
71
+ },
72
+ quantity: {
73
+ type: Number,
74
+ required: true
75
+ },
76
+ unitOfMeasure: {
77
+ type: String,
78
+ required: true,
79
+ trim: true
80
+ },
81
+ unitPrice: {
82
+ type: Number,
83
+ required: true
84
+ },
85
+ taxRate: {
86
+ type: Number,
87
+ default: 0
88
+ },
89
+ totalPrice: {
90
+ type: Number,
91
+ required: true
92
+ }
93
+ }],
94
+
95
+ // Calculated Totals
96
+ subtotal: {
97
+ type: Number,
98
+ required: true
99
+ },
100
+ taxTotal: {
101
+ type: Number,
102
+ required: true,
103
+ default: 0
104
+ },
105
+ grandTotal: {
106
+ type: Number,
107
+ required: true
108
+ },
109
+
110
+ // Approvers Section
111
+ approvers: [{
112
+ approverId: {
113
+ type: mongoose.Schema.Types.ObjectId,
114
+ ref: 'User',
115
+ required: true
116
+ },
117
+ approverName: {
118
+ type: String,
119
+ required: true
120
+ },
121
+ approverRole: {
122
+ type: String,
123
+ required: true
124
+ },
125
+ approvalStatus: {
126
+ type: String,
127
+ enum: ['pending', 'approved', 'rejected'],
128
+ default: 'pending'
129
+ },
130
+ approvalDate: {
131
+ type: Date
132
+ },
133
+ comments: {
134
+ type: String,
135
+ trim: true
136
+ }
137
+ }],
138
+
139
+ // Document attachments
140
+ attachments: [{
141
+ name: {
142
+ type: String,
143
+ required: true
144
+ },
145
+ fileType: {
146
+ type: String,
147
+ required: true
148
+ },
149
+ filePath: {
150
+ type: String,
151
+ required: true
152
+ },
153
+ uploadDate: {
154
+ type: Date,
155
+ default: Date.now
156
+ }
157
+ }]
158
+ }, {
159
+ timestamps: true
160
+ });
161
+
162
+ // Virtual for tracking approval progress
163
+ purchaseOrderSchema.virtual('approvalProgress').get(function () {
164
+ if (!this.approvers || this.approvers.length === 0) return 0;
165
+
166
+ const approvedCount = this.approvers.filter(
167
+ approver => approver.approvalStatus === 'approved'
168
+ ).length;
169
+
170
+ return (approvedCount / this.approvers.length) * 100;
171
+ });
172
+
173
+ // Pre-save middleware to calculate totals
174
+ purchaseOrderSchema.pre('save', function (next) {
175
+ // Calculate subtotal
176
+ this.subtotal = this.items.reduce((sum, item) => sum + (item.unitPrice * item.quantity), 0);
177
+
178
+ // Calculate tax total
179
+ this.taxTotal = this.items.reduce((sum, item) => {
180
+ const itemTax = (item.unitPrice * item.quantity) * (item.taxRate / 100);
181
+ return sum + itemTax;
182
+ }, 0);
183
+
184
+ // Calculate grand total
185
+ this.grandTotal = this.subtotal + this.taxTotal;
186
+
187
+ next();
188
+ });
189
+
190
+ const PurchaseOrder = mongoose.model('PurchaseOrder', purchaseOrderSchema);
191
+
192
192
  module.exports = PurchaseOrder;
@@ -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;