payservedb 5.0.1 → 5.0.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.
Files changed (103) hide show
  1. package/.env +2 -2
  2. package/index.js +172 -171
  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 -0
  41. package/src/models/gl_accounts.js +56 -56
  42. package/src/models/gl_entries.js +45 -50
  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 +168 -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 -116
  102. package/src/models/water_meters_delivery.js +76 -76
  103. 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,191 +1,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
- trim: true,
21
- index: true,
22
- ref: 'PurchaseRequest'
23
- },
24
- supplier: {
25
- type: mongoose.Schema.Types.ObjectId,
26
- ref: 'Supplier',
27
- required: true
28
- },
29
- department: {
30
- type: String,
31
- required: true,
32
- trim: true
33
- },
34
- currency: {
35
- type: String,
36
- required: true,
37
- trim: true,
38
- default: 'KES'
39
- },
40
- date: {
41
- type: Date,
42
- required: true,
43
- default: Date.now
44
- },
45
- internalNotes: {
46
- type: String,
47
- trim: true
48
- },
49
- supplierNotes: {
50
- type: String,
51
- trim: true
52
- },
53
- budget: {
54
- type: String,
55
- trim: true
56
- },
57
- status: {
58
- type: String,
59
- enum: ['pending approval', 'approved', 'rejected', 'sent', 'received', 'completed', 'canceled'],
60
- default: 'pending approval',
61
- index: true
62
- },
63
-
64
- // Items Details
65
- items: [{
66
- itemDescription: {
67
- type: String,
68
- required: true,
69
- trim: true
70
- },
71
- quantity: {
72
- type: Number,
73
- required: true
74
- },
75
- unitOfMeasure: {
76
- type: String,
77
- required: true,
78
- trim: true
79
- },
80
- unitPrice: {
81
- type: Number,
82
- required: true
83
- },
84
- taxRate: {
85
- type: Number,
86
- default: 0
87
- },
88
- totalPrice: {
89
- type: Number,
90
- required: true
91
- }
92
- }],
93
-
94
- // Calculated Totals
95
- subtotal: {
96
- type: Number,
97
- required: true
98
- },
99
- taxTotal: {
100
- type: Number,
101
- required: true,
102
- default: 0
103
- },
104
- grandTotal: {
105
- type: Number,
106
- required: true
107
- },
108
-
109
- // Approvers Section
110
- approvers: [{
111
- approverId: {
112
- type: mongoose.Schema.Types.ObjectId,
113
- ref: 'User',
114
- required: true
115
- },
116
- approverName: {
117
- type: String,
118
- required: true
119
- },
120
- approverRole: {
121
- type: String,
122
- required: true
123
- },
124
- approvalStatus: {
125
- type: String,
126
- enum: ['pending', 'approved', 'rejected'],
127
- default: 'pending'
128
- },
129
- approvalDate: {
130
- type: Date
131
- },
132
- comments: {
133
- type: String,
134
- trim: true
135
- }
136
- }],
137
-
138
- // Document attachments
139
- attachments: [{
140
- name: {
141
- type: String,
142
- required: true
143
- },
144
- fileType: {
145
- type: String,
146
- required: true
147
- },
148
- filePath: {
149
- type: String,
150
- required: true
151
- },
152
- uploadDate: {
153
- type: Date,
154
- default: Date.now
155
- }
156
- }]
157
- }, {
158
- timestamps: true
159
- });
160
-
161
- // Virtual for tracking approval progress
162
- purchaseOrderSchema.virtual('approvalProgress').get(function () {
163
- if (!this.approvers || this.approvers.length === 0) return 0;
164
-
165
- const approvedCount = this.approvers.filter(
166
- approver => approver.approvalStatus === 'approved'
167
- ).length;
168
-
169
- return (approvedCount / this.approvers.length) * 100;
170
- });
171
-
172
- // Pre-save middleware to calculate totals
173
- purchaseOrderSchema.pre('save', function (next) {
174
- // Calculate subtotal
175
- this.subtotal = this.items.reduce((sum, item) => sum + (item.unitPrice * item.quantity), 0);
176
-
177
- // Calculate tax total
178
- this.taxTotal = this.items.reduce((sum, item) => {
179
- const itemTax = (item.unitPrice * item.quantity) * (item.taxRate / 100);
180
- return sum + itemTax;
181
- }, 0);
182
-
183
- // Calculate grand total
184
- this.grandTotal = this.subtotal + this.taxTotal;
185
-
186
- next();
187
- });
188
-
189
- const PurchaseOrder = mongoose.model('PurchaseOrder', purchaseOrderSchema);
190
-
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
+ trim: true,
21
+ index: true,
22
+ ref: 'PurchaseRequest'
23
+ },
24
+ supplier: {
25
+ type: mongoose.Schema.Types.ObjectId,
26
+ ref: 'Supplier',
27
+ required: true
28
+ },
29
+ department: {
30
+ type: String,
31
+ required: true,
32
+ trim: true
33
+ },
34
+ currency: {
35
+ type: String,
36
+ required: true,
37
+ trim: true,
38
+ default: 'KES'
39
+ },
40
+ date: {
41
+ type: Date,
42
+ required: true,
43
+ default: Date.now
44
+ },
45
+ internalNotes: {
46
+ type: String,
47
+ trim: true
48
+ },
49
+ supplierNotes: {
50
+ type: String,
51
+ trim: true
52
+ },
53
+ budget: {
54
+ type: String,
55
+ trim: true
56
+ },
57
+ status: {
58
+ type: String,
59
+ enum: ['pending approval', 'approved', 'rejected', 'sent', 'received', 'completed', 'canceled'],
60
+ default: 'pending approval',
61
+ index: true
62
+ },
63
+
64
+ // Items Details
65
+ items: [{
66
+ itemDescription: {
67
+ type: String,
68
+ required: true,
69
+ trim: true
70
+ },
71
+ quantity: {
72
+ type: Number,
73
+ required: true
74
+ },
75
+ unitOfMeasure: {
76
+ type: String,
77
+ required: true,
78
+ trim: true
79
+ },
80
+ unitPrice: {
81
+ type: Number,
82
+ required: true
83
+ },
84
+ taxRate: {
85
+ type: Number,
86
+ default: 0
87
+ },
88
+ totalPrice: {
89
+ type: Number,
90
+ required: true
91
+ }
92
+ }],
93
+
94
+ // Calculated Totals
95
+ subtotal: {
96
+ type: Number,
97
+ required: true
98
+ },
99
+ taxTotal: {
100
+ type: Number,
101
+ required: true,
102
+ default: 0
103
+ },
104
+ grandTotal: {
105
+ type: Number,
106
+ required: true
107
+ },
108
+
109
+ // Approvers Section
110
+ approvers: [{
111
+ approverId: {
112
+ type: mongoose.Schema.Types.ObjectId,
113
+ ref: 'User',
114
+ required: true
115
+ },
116
+ approverName: {
117
+ type: String,
118
+ required: true
119
+ },
120
+ approverRole: {
121
+ type: String,
122
+ required: true
123
+ },
124
+ approvalStatus: {
125
+ type: String,
126
+ enum: ['pending', 'approved', 'rejected'],
127
+ default: 'pending'
128
+ },
129
+ approvalDate: {
130
+ type: Date
131
+ },
132
+ comments: {
133
+ type: String,
134
+ trim: true
135
+ }
136
+ }],
137
+
138
+ // Document attachments
139
+ attachments: [{
140
+ name: {
141
+ type: String,
142
+ required: true
143
+ },
144
+ fileType: {
145
+ type: String,
146
+ required: true
147
+ },
148
+ filePath: {
149
+ type: String,
150
+ required: true
151
+ },
152
+ uploadDate: {
153
+ type: Date,
154
+ default: Date.now
155
+ }
156
+ }]
157
+ }, {
158
+ timestamps: true
159
+ });
160
+
161
+ // Virtual for tracking approval progress
162
+ purchaseOrderSchema.virtual('approvalProgress').get(function () {
163
+ if (!this.approvers || this.approvers.length === 0) return 0;
164
+
165
+ const approvedCount = this.approvers.filter(
166
+ approver => approver.approvalStatus === 'approved'
167
+ ).length;
168
+
169
+ return (approvedCount / this.approvers.length) * 100;
170
+ });
171
+
172
+ // Pre-save middleware to calculate totals
173
+ purchaseOrderSchema.pre('save', function (next) {
174
+ // Calculate subtotal
175
+ this.subtotal = this.items.reduce((sum, item) => sum + (item.unitPrice * item.quantity), 0);
176
+
177
+ // Calculate tax total
178
+ this.taxTotal = this.items.reduce((sum, item) => {
179
+ const itemTax = (item.unitPrice * item.quantity) * (item.taxRate / 100);
180
+ return sum + itemTax;
181
+ }, 0);
182
+
183
+ // Calculate grand total
184
+ this.grandTotal = this.subtotal + this.taxTotal;
185
+
186
+ next();
187
+ });
188
+
189
+ const PurchaseOrder = mongoose.model('PurchaseOrder', purchaseOrderSchema);
190
+
191
191
  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;