@7365admin1/module-hygiene 4.30.1 → 4.30.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/CHANGELOG.md +16 -0
- package/dist/index.js +305 -295
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +305 -295
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/test/area-import-unit-id.test.mjs +18 -0
- package/test/require-photo-on-completion.test.mjs +63 -0
package/dist/index.js
CHANGED
|
@@ -924,21 +924,30 @@ function useHygieneDashboardController() {
|
|
|
924
924
|
}
|
|
925
925
|
|
|
926
926
|
// src/models/hygiene-area.model.ts
|
|
927
|
-
var
|
|
927
|
+
var import_joi3 = __toESM(require("joi"));
|
|
928
928
|
var import_mongodb2 = require("mongodb");
|
|
929
929
|
var import_node_server_utils3 = require("@7365admin1/node-server-utils");
|
|
930
930
|
var import_core2 = require("@7365admin1/core");
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
931
|
+
|
|
932
|
+
// src/utils/area-unit.util.ts
|
|
933
|
+
var import_joi2 = __toESM(require("joi"));
|
|
934
|
+
var areaUnitSchema = import_joi2.default.object({
|
|
935
|
+
unit: import_joi2.default.string().hex().required(),
|
|
936
|
+
name: import_joi2.default.string().required()
|
|
937
|
+
});
|
|
938
|
+
function toAreaUnit(unit) {
|
|
939
|
+
return { unit: String(unit._id), name: unit.name };
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
// src/models/hygiene-area.model.ts
|
|
943
|
+
var areaSchema = import_joi3.default.object({
|
|
944
|
+
site: import_joi3.default.string().hex().required(),
|
|
945
|
+
serviceType: import_joi3.default.string().valid(...Object.values(import_core2.AppServiceType)).required(),
|
|
946
|
+
name: import_joi3.default.string().required(),
|
|
947
|
+
type: import_joi3.default.string().valid(...allowedTypes).required(),
|
|
948
|
+
set: import_joi3.default.number().min(0).optional(),
|
|
949
|
+
units: import_joi3.default.array().items(
|
|
950
|
+
areaUnitSchema.optional()
|
|
942
951
|
).min(1).unique("unit", { ignoreUndefined: true }).messages({
|
|
943
952
|
"array.unique": "Duplicate area units are not allowed"
|
|
944
953
|
})
|
|
@@ -1431,14 +1440,14 @@ var import_mongodb5 = require("mongodb");
|
|
|
1431
1440
|
var import_node_server_utils7 = require("@7365admin1/node-server-utils");
|
|
1432
1441
|
|
|
1433
1442
|
// src/models/hygiene-unit.model.ts
|
|
1434
|
-
var
|
|
1443
|
+
var import_joi4 = __toESM(require("joi"));
|
|
1435
1444
|
var import_mongodb4 = require("mongodb");
|
|
1436
1445
|
var import_node_server_utils6 = require("@7365admin1/node-server-utils");
|
|
1437
1446
|
var import_core3 = require("@7365admin1/core");
|
|
1438
|
-
var unitSchema =
|
|
1439
|
-
site:
|
|
1440
|
-
serviceType:
|
|
1441
|
-
name:
|
|
1447
|
+
var unitSchema = import_joi4.default.object({
|
|
1448
|
+
site: import_joi4.default.string().hex().required(),
|
|
1449
|
+
serviceType: import_joi4.default.string().valid(...Object.values(import_core3.AppServiceType)).required(),
|
|
1450
|
+
name: import_joi4.default.string().required()
|
|
1442
1451
|
});
|
|
1443
1452
|
function MUnit(value) {
|
|
1444
1453
|
const { error } = unitSchema.validate(value);
|
|
@@ -1773,10 +1782,7 @@ function useAreaService() {
|
|
|
1773
1782
|
}
|
|
1774
1783
|
}
|
|
1775
1784
|
if (foundUnit) {
|
|
1776
|
-
areaUnits.push(
|
|
1777
|
-
unit: foundUnit._id,
|
|
1778
|
-
name: foundUnit.name
|
|
1779
|
-
});
|
|
1785
|
+
areaUnits.push(toAreaUnit(foundUnit));
|
|
1780
1786
|
}
|
|
1781
1787
|
}
|
|
1782
1788
|
if (areaUnits.length > 0) {
|
|
@@ -1873,7 +1879,7 @@ function useAreaService() {
|
|
|
1873
1879
|
}
|
|
1874
1880
|
|
|
1875
1881
|
// src/controllers/hygiene-area.controller.ts
|
|
1876
|
-
var
|
|
1882
|
+
var import_joi5 = __toESM(require("joi"));
|
|
1877
1883
|
var import_node_server_utils9 = require("@7365admin1/node-server-utils");
|
|
1878
1884
|
var import_core4 = require("@7365admin1/core");
|
|
1879
1885
|
|
|
@@ -1934,13 +1940,13 @@ function useAreaController() {
|
|
|
1934
1940
|
}
|
|
1935
1941
|
async function getAreas(req, res, next) {
|
|
1936
1942
|
const query = { ...req.query, ...req.params };
|
|
1937
|
-
const validation =
|
|
1938
|
-
page:
|
|
1939
|
-
limit:
|
|
1940
|
-
search:
|
|
1941
|
-
type:
|
|
1942
|
-
site:
|
|
1943
|
-
serviceType:
|
|
1943
|
+
const validation = import_joi5.default.object({
|
|
1944
|
+
page: import_joi5.default.number().min(1).optional().allow("", null),
|
|
1945
|
+
limit: import_joi5.default.number().min(1).optional().allow("", null),
|
|
1946
|
+
search: import_joi5.default.string().optional().allow("", null),
|
|
1947
|
+
type: import_joi5.default.string().valid("all", ...allowedTypes).optional().allow("", null),
|
|
1948
|
+
site: import_joi5.default.string().hex().required(),
|
|
1949
|
+
serviceType: import_joi5.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
|
|
1944
1950
|
});
|
|
1945
1951
|
const { error } = validation.validate(query);
|
|
1946
1952
|
if (error) {
|
|
@@ -1971,7 +1977,7 @@ function useAreaController() {
|
|
|
1971
1977
|
}
|
|
1972
1978
|
}
|
|
1973
1979
|
async function getAreaById(req, res, next) {
|
|
1974
|
-
const validation =
|
|
1980
|
+
const validation = import_joi5.default.string().hex().required();
|
|
1975
1981
|
const _id = req.params.id;
|
|
1976
1982
|
const { error, value } = validation.validate(_id);
|
|
1977
1983
|
if (error) {
|
|
@@ -1991,15 +1997,15 @@ function useAreaController() {
|
|
|
1991
1997
|
}
|
|
1992
1998
|
async function updateArea(req, res, next) {
|
|
1993
1999
|
const payload = { id: req.params.id, ...req.body };
|
|
1994
|
-
const schema =
|
|
1995
|
-
id:
|
|
1996
|
-
name:
|
|
1997
|
-
type:
|
|
1998
|
-
set:
|
|
1999
|
-
units:
|
|
2000
|
-
|
|
2001
|
-
unit:
|
|
2002
|
-
name:
|
|
2000
|
+
const schema = import_joi5.default.object({
|
|
2001
|
+
id: import_joi5.default.string().hex().required(),
|
|
2002
|
+
name: import_joi5.default.string().optional().allow("", null),
|
|
2003
|
+
type: import_joi5.default.string().optional().allow("", null, ...allowedTypes),
|
|
2004
|
+
set: import_joi5.default.number().min(0).optional(),
|
|
2005
|
+
units: import_joi5.default.array().items(
|
|
2006
|
+
import_joi5.default.object({
|
|
2007
|
+
unit: import_joi5.default.string().hex().required(),
|
|
2008
|
+
name: import_joi5.default.string().required()
|
|
2003
2009
|
}).required()
|
|
2004
2010
|
).min(1).unique("unit", { ignoreUndefined: true }).optional().messages({
|
|
2005
2011
|
"array.unique": "Duplicate area units are not allowed"
|
|
@@ -2024,7 +2030,7 @@ function useAreaController() {
|
|
|
2024
2030
|
}
|
|
2025
2031
|
async function deleteArea(req, res, next) {
|
|
2026
2032
|
const id = req.params.id;
|
|
2027
|
-
const validation =
|
|
2033
|
+
const validation = import_joi5.default.string().hex().required();
|
|
2028
2034
|
const { error, value } = validation.validate(id);
|
|
2029
2035
|
if (error) {
|
|
2030
2036
|
import_node_server_utils9.logger.log({ level: "error", message: error.message });
|
|
@@ -2047,9 +2053,9 @@ function useAreaController() {
|
|
|
2047
2053
|
return;
|
|
2048
2054
|
}
|
|
2049
2055
|
const query = { ...req.query, ...req.params };
|
|
2050
|
-
const validation =
|
|
2051
|
-
site:
|
|
2052
|
-
serviceType:
|
|
2056
|
+
const validation = import_joi5.default.object({
|
|
2057
|
+
site: import_joi5.default.string().hex().required(),
|
|
2058
|
+
serviceType: import_joi5.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
|
|
2053
2059
|
});
|
|
2054
2060
|
const { error, value } = validation.validate(query);
|
|
2055
2061
|
if (error) {
|
|
@@ -2070,9 +2076,9 @@ function useAreaController() {
|
|
|
2070
2076
|
}
|
|
2071
2077
|
async function exportAreas(req, res, next) {
|
|
2072
2078
|
const query = { ...req.query, ...req.params };
|
|
2073
|
-
const validation =
|
|
2074
|
-
site:
|
|
2075
|
-
serviceType:
|
|
2079
|
+
const validation = import_joi5.default.object({
|
|
2080
|
+
site: import_joi5.default.string().hex().required(),
|
|
2081
|
+
serviceType: import_joi5.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
|
|
2076
2082
|
});
|
|
2077
2083
|
const { error, value } = validation.validate(query);
|
|
2078
2084
|
if (error) {
|
|
@@ -2354,7 +2360,7 @@ function useUnitService() {
|
|
|
2354
2360
|
}
|
|
2355
2361
|
|
|
2356
2362
|
// src/controllers/hygiene-unit.controller.ts
|
|
2357
|
-
var
|
|
2363
|
+
var import_joi6 = __toESM(require("joi"));
|
|
2358
2364
|
var import_node_server_utils12 = require("@7365admin1/node-server-utils");
|
|
2359
2365
|
var import_core5 = require("@7365admin1/core");
|
|
2360
2366
|
function useUnitController() {
|
|
@@ -2385,12 +2391,12 @@ function useUnitController() {
|
|
|
2385
2391
|
}
|
|
2386
2392
|
async function getUnits(req, res, next) {
|
|
2387
2393
|
const query = { ...req.query, ...req.params };
|
|
2388
|
-
const validation =
|
|
2389
|
-
page:
|
|
2390
|
-
limit:
|
|
2391
|
-
search:
|
|
2392
|
-
site:
|
|
2393
|
-
serviceType:
|
|
2394
|
+
const validation = import_joi6.default.object({
|
|
2395
|
+
page: import_joi6.default.number().min(1).optional().allow("", null),
|
|
2396
|
+
limit: import_joi6.default.number().min(1).optional().allow("", null),
|
|
2397
|
+
search: import_joi6.default.string().optional().allow("", null),
|
|
2398
|
+
site: import_joi6.default.string().hex().required(),
|
|
2399
|
+
serviceType: import_joi6.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
|
|
2394
2400
|
});
|
|
2395
2401
|
const { error } = validation.validate(query);
|
|
2396
2402
|
if (error) {
|
|
@@ -2421,9 +2427,9 @@ function useUnitController() {
|
|
|
2421
2427
|
}
|
|
2422
2428
|
async function updateUnit(req, res, next) {
|
|
2423
2429
|
const payload = { id: req.params.id, ...req.body };
|
|
2424
|
-
const validation =
|
|
2425
|
-
id:
|
|
2426
|
-
name:
|
|
2430
|
+
const validation = import_joi6.default.object({
|
|
2431
|
+
id: import_joi6.default.string().hex().required(),
|
|
2432
|
+
name: import_joi6.default.string().required()
|
|
2427
2433
|
});
|
|
2428
2434
|
const { error } = validation.validate(payload);
|
|
2429
2435
|
if (error) {
|
|
@@ -2444,8 +2450,8 @@ function useUnitController() {
|
|
|
2444
2450
|
}
|
|
2445
2451
|
async function deleteUnit(req, res, next) {
|
|
2446
2452
|
const id = req.params.id;
|
|
2447
|
-
const validation =
|
|
2448
|
-
id:
|
|
2453
|
+
const validation = import_joi6.default.object({
|
|
2454
|
+
id: import_joi6.default.string().hex().required()
|
|
2449
2455
|
});
|
|
2450
2456
|
const { error, value } = validation.validate({ id });
|
|
2451
2457
|
if (error) {
|
|
@@ -2469,9 +2475,9 @@ function useUnitController() {
|
|
|
2469
2475
|
return;
|
|
2470
2476
|
}
|
|
2471
2477
|
const query = { ...req.query, ...req.params };
|
|
2472
|
-
const validation =
|
|
2473
|
-
site:
|
|
2474
|
-
serviceType:
|
|
2478
|
+
const validation = import_joi6.default.object({
|
|
2479
|
+
site: import_joi6.default.string().hex().required(),
|
|
2480
|
+
serviceType: import_joi6.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
|
|
2475
2481
|
});
|
|
2476
2482
|
const { error, value } = validation.validate(query);
|
|
2477
2483
|
if (error) {
|
|
@@ -2492,9 +2498,9 @@ function useUnitController() {
|
|
|
2492
2498
|
}
|
|
2493
2499
|
async function exportUnits(req, res, next) {
|
|
2494
2500
|
const query = { ...req.query, ...req.params };
|
|
2495
|
-
const validation =
|
|
2496
|
-
site:
|
|
2497
|
-
serviceType:
|
|
2501
|
+
const validation = import_joi6.default.object({
|
|
2502
|
+
site: import_joi6.default.string().hex().required(),
|
|
2503
|
+
serviceType: import_joi6.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
|
|
2498
2504
|
});
|
|
2499
2505
|
const { error, value } = validation.validate(query);
|
|
2500
2506
|
if (error) {
|
|
@@ -2537,15 +2543,15 @@ function useUnitController() {
|
|
|
2537
2543
|
}
|
|
2538
2544
|
|
|
2539
2545
|
// src/models/hygiene-parent-checklist.model.ts
|
|
2540
|
-
var
|
|
2546
|
+
var import_joi7 = __toESM(require("joi"));
|
|
2541
2547
|
var import_mongodb6 = require("mongodb");
|
|
2542
2548
|
var import_node_server_utils13 = require("@7365admin1/node-server-utils");
|
|
2543
2549
|
var import_core6 = require("@7365admin1/core");
|
|
2544
|
-
var parentChecklistSchema =
|
|
2545
|
-
createdAt:
|
|
2546
|
-
site:
|
|
2547
|
-
serviceType:
|
|
2548
|
-
dateStr:
|
|
2550
|
+
var parentChecklistSchema = import_joi7.default.object({
|
|
2551
|
+
createdAt: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
|
|
2552
|
+
site: import_joi7.default.string().hex().required(),
|
|
2553
|
+
serviceType: import_joi7.default.string().valid(...Object.values(import_core6.AppServiceType)).required(),
|
|
2554
|
+
dateStr: import_joi7.default.string().optional().allow("", null)
|
|
2549
2555
|
});
|
|
2550
2556
|
function MParentChecklist(value) {
|
|
2551
2557
|
const { error } = parentChecklistSchema.validate(value);
|
|
@@ -3118,7 +3124,7 @@ function useParentChecklistRepo() {
|
|
|
3118
3124
|
}
|
|
3119
3125
|
|
|
3120
3126
|
// src/controllers/hygiene-parent-checklist.controller.ts
|
|
3121
|
-
var
|
|
3127
|
+
var import_joi8 = __toESM(require("joi"));
|
|
3122
3128
|
var import_node_server_utils15 = require("@7365admin1/node-server-utils");
|
|
3123
3129
|
var import_core8 = require("@7365admin1/core");
|
|
3124
3130
|
function useParentChecklistController() {
|
|
@@ -3128,10 +3134,10 @@ function useParentChecklistController() {
|
|
|
3128
3134
|
} = useParentChecklistRepo();
|
|
3129
3135
|
async function createParentChecklist(req, res, next) {
|
|
3130
3136
|
const payload = req.body;
|
|
3131
|
-
const validation =
|
|
3132
|
-
createdAt:
|
|
3133
|
-
site:
|
|
3134
|
-
serviceType:
|
|
3137
|
+
const validation = import_joi8.default.object({
|
|
3138
|
+
createdAt: import_joi8.default.alternatives().try(import_joi8.default.date(), import_joi8.default.string()).optional().allow("", null),
|
|
3139
|
+
site: import_joi8.default.string().hex().required(),
|
|
3140
|
+
serviceType: import_joi8.default.string().valid(...Object.values(import_core8.AppServiceType)).optional().allow("", null)
|
|
3135
3141
|
});
|
|
3136
3142
|
const { error } = validation.validate(payload);
|
|
3137
3143
|
if (error) {
|
|
@@ -3151,15 +3157,15 @@ function useParentChecklistController() {
|
|
|
3151
3157
|
}
|
|
3152
3158
|
async function getAllParentChecklist(req, res, next) {
|
|
3153
3159
|
const query = { ...req.query, ...req.params };
|
|
3154
|
-
const validation =
|
|
3155
|
-
page:
|
|
3156
|
-
limit:
|
|
3157
|
-
search:
|
|
3158
|
-
site:
|
|
3159
|
-
serviceType:
|
|
3160
|
-
startDate:
|
|
3161
|
-
endDate:
|
|
3162
|
-
status:
|
|
3160
|
+
const validation = import_joi8.default.object({
|
|
3161
|
+
page: import_joi8.default.number().min(1).optional().allow("", null),
|
|
3162
|
+
limit: import_joi8.default.number().min(1).optional().allow("", null),
|
|
3163
|
+
search: import_joi8.default.string().optional().allow("", null),
|
|
3164
|
+
site: import_joi8.default.string().hex().required(),
|
|
3165
|
+
serviceType: import_joi8.default.string().valid(...Object.values(import_core8.AppServiceType)).required(),
|
|
3166
|
+
startDate: import_joi8.default.alternatives().try(import_joi8.default.date(), import_joi8.default.string()).optional().allow("", null),
|
|
3167
|
+
endDate: import_joi8.default.alternatives().try(import_joi8.default.date(), import_joi8.default.string()).optional().allow("", null),
|
|
3168
|
+
status: import_joi8.default.string().valid(...allowedStatus, "all").optional().allow("", null)
|
|
3163
3169
|
});
|
|
3164
3170
|
const { error } = validation.validate(query);
|
|
3165
3171
|
if (error) {
|
|
@@ -3201,28 +3207,28 @@ function useParentChecklistController() {
|
|
|
3201
3207
|
}
|
|
3202
3208
|
|
|
3203
3209
|
// src/models/hygiene-area-checklist.model.ts
|
|
3204
|
-
var
|
|
3210
|
+
var import_joi9 = __toESM(require("joi"));
|
|
3205
3211
|
var import_mongodb8 = require("mongodb");
|
|
3206
3212
|
var import_node_server_utils16 = require("@7365admin1/node-server-utils");
|
|
3207
3213
|
var import_core9 = require("@7365admin1/core");
|
|
3208
3214
|
var allowedChecklistStatus = ["open", "completed", "closed"];
|
|
3209
|
-
var areaChecklistSchema =
|
|
3210
|
-
schedule:
|
|
3211
|
-
serviceType:
|
|
3212
|
-
area:
|
|
3213
|
-
name:
|
|
3214
|
-
type:
|
|
3215
|
-
checklist:
|
|
3216
|
-
|
|
3217
|
-
set:
|
|
3218
|
-
units:
|
|
3219
|
-
|
|
3220
|
-
unit:
|
|
3221
|
-
name:
|
|
3215
|
+
var areaChecklistSchema = import_joi9.default.object({
|
|
3216
|
+
schedule: import_joi9.default.string().hex().required(),
|
|
3217
|
+
serviceType: import_joi9.default.string().valid(...Object.values(import_core9.AppServiceType)).required(),
|
|
3218
|
+
area: import_joi9.default.string().hex().required(),
|
|
3219
|
+
name: import_joi9.default.string().required(),
|
|
3220
|
+
type: import_joi9.default.string().valid(...allowedTypes).required(),
|
|
3221
|
+
checklist: import_joi9.default.array().items(
|
|
3222
|
+
import_joi9.default.object({
|
|
3223
|
+
set: import_joi9.default.number().min(0).required(),
|
|
3224
|
+
units: import_joi9.default.array().items(
|
|
3225
|
+
import_joi9.default.object({
|
|
3226
|
+
unit: import_joi9.default.string().hex().required(),
|
|
3227
|
+
name: import_joi9.default.string().required()
|
|
3222
3228
|
}).required()
|
|
3223
3229
|
).min(1).required(),
|
|
3224
|
-
isScheduleTask:
|
|
3225
|
-
scheduleTaskId:
|
|
3230
|
+
isScheduleTask: import_joi9.default.boolean().optional().default(false),
|
|
3231
|
+
scheduleTaskId: import_joi9.default.string().hex().optional().allow(null)
|
|
3226
3232
|
}).required()
|
|
3227
3233
|
).optional().default([])
|
|
3228
3234
|
});
|
|
@@ -3288,6 +3294,39 @@ var import_core10 = require("@7365admin1/core");
|
|
|
3288
3294
|
// src/repositories/hygiene-area-checklist.repository.ts
|
|
3289
3295
|
var import_mongodb9 = require("mongodb");
|
|
3290
3296
|
var import_node_server_utils17 = require("@7365admin1/node-server-utils");
|
|
3297
|
+
|
|
3298
|
+
// src/utils/completion-photo.util.ts
|
|
3299
|
+
var COMPLETION_PHOTO_MESSAGE = "A photo is required to complete this task. Take or upload at least one photo before marking it complete.";
|
|
3300
|
+
function readCompletion(units, unitId) {
|
|
3301
|
+
if (units.length === 0)
|
|
3302
|
+
return { completesSet: false, hasEvidence: false };
|
|
3303
|
+
const others = units.filter((unit) => String(unit.unit) !== String(unitId));
|
|
3304
|
+
return {
|
|
3305
|
+
completesSet: others.every(
|
|
3306
|
+
(unit) => unit.approve === true || unit.reject === true
|
|
3307
|
+
),
|
|
3308
|
+
hasEvidence: others.some(
|
|
3309
|
+
(unit) => Array.isArray(unit.attachment) && unit.attachment.length > 0
|
|
3310
|
+
)
|
|
3311
|
+
};
|
|
3312
|
+
}
|
|
3313
|
+
function requiresCompletionPhoto({
|
|
3314
|
+
decision,
|
|
3315
|
+
attachment,
|
|
3316
|
+
completesSet,
|
|
3317
|
+
hasEvidence
|
|
3318
|
+
}) {
|
|
3319
|
+
if (decision !== "approve")
|
|
3320
|
+
return false;
|
|
3321
|
+
if (!completesSet)
|
|
3322
|
+
return false;
|
|
3323
|
+
if (hasEvidence)
|
|
3324
|
+
return false;
|
|
3325
|
+
const carriesEvidence = Array.isArray(attachment) && attachment.some((id) => typeof id === "string" && id.trim().length > 0);
|
|
3326
|
+
return !carriesEvidence;
|
|
3327
|
+
}
|
|
3328
|
+
|
|
3329
|
+
// src/repositories/hygiene-area-checklist.repository.ts
|
|
3291
3330
|
function useAreaChecklistRepo() {
|
|
3292
3331
|
const db = import_node_server_utils17.useAtlas.getDb();
|
|
3293
3332
|
if (!db) {
|
|
@@ -4132,18 +4171,7 @@ function useAreaChecklistRepo() {
|
|
|
4132
4171
|
const group = (doc?.checklist ?? []).find(
|
|
4133
4172
|
(entry) => entry.set === set
|
|
4134
4173
|
);
|
|
4135
|
-
|
|
4136
|
-
if (units.length === 0)
|
|
4137
|
-
return { completesSet: false, hasEvidence: false };
|
|
4138
|
-
const others = units.filter(
|
|
4139
|
-
(unit) => String(unit.unit) !== String(unitId)
|
|
4140
|
-
);
|
|
4141
|
-
return {
|
|
4142
|
-
completesSet: others.every((unit) => unit.status === "completed"),
|
|
4143
|
-
hasEvidence: others.some(
|
|
4144
|
-
(unit) => Array.isArray(unit.attachment) && unit.attachment.length > 0
|
|
4145
|
-
)
|
|
4146
|
-
};
|
|
4174
|
+
return readCompletion(group?.units ?? [], unitId);
|
|
4147
4175
|
}
|
|
4148
4176
|
async function updateAreaChecklist(_id, value, session) {
|
|
4149
4177
|
try {
|
|
@@ -4677,28 +4705,10 @@ function useAreaChecklistService() {
|
|
|
4677
4705
|
}
|
|
4678
4706
|
|
|
4679
4707
|
// src/controllers/hygiene-area-checklist.controller.ts
|
|
4680
|
-
var
|
|
4708
|
+
var import_joi10 = __toESM(require("joi"));
|
|
4681
4709
|
var import_node_server_utils20 = require("@7365admin1/node-server-utils");
|
|
4682
4710
|
var import_core11 = require("@7365admin1/core");
|
|
4683
4711
|
|
|
4684
|
-
// src/utils/completion-photo.util.ts
|
|
4685
|
-
var COMPLETION_PHOTO_MESSAGE = "A photo is required to complete this task. Take or upload at least one photo before marking it complete.";
|
|
4686
|
-
function requiresCompletionPhoto({
|
|
4687
|
-
decision,
|
|
4688
|
-
attachment,
|
|
4689
|
-
completesSet,
|
|
4690
|
-
hasEvidence
|
|
4691
|
-
}) {
|
|
4692
|
-
if (decision !== "approve")
|
|
4693
|
-
return false;
|
|
4694
|
-
if (!completesSet)
|
|
4695
|
-
return false;
|
|
4696
|
-
if (hasEvidence)
|
|
4697
|
-
return false;
|
|
4698
|
-
const carriesEvidence = Array.isArray(attachment) && attachment.some((id) => typeof id === "string" && id.trim().length > 0);
|
|
4699
|
-
return !carriesEvidence;
|
|
4700
|
-
}
|
|
4701
|
-
|
|
4702
4712
|
// src/services/hygiene-checklist-pdf.service.ts
|
|
4703
4713
|
var import_puppeteer = require("puppeteer");
|
|
4704
4714
|
var import_node_server_utils19 = require("@7365admin1/node-server-utils");
|
|
@@ -4936,9 +4946,9 @@ function useAreaChecklistController() {
|
|
|
4936
4946
|
site: req.params.site,
|
|
4937
4947
|
schedule: req.params.schedule
|
|
4938
4948
|
};
|
|
4939
|
-
const validation =
|
|
4940
|
-
site:
|
|
4941
|
-
schedule:
|
|
4949
|
+
const validation = import_joi10.default.object({
|
|
4950
|
+
site: import_joi10.default.string().hex().required(),
|
|
4951
|
+
schedule: import_joi10.default.string().hex().required()
|
|
4942
4952
|
});
|
|
4943
4953
|
const { error, value } = validation.validate(payload);
|
|
4944
4954
|
if (error) {
|
|
@@ -4958,14 +4968,14 @@ function useAreaChecklistController() {
|
|
|
4958
4968
|
}
|
|
4959
4969
|
async function getAllAreaChecklist(req, res, next) {
|
|
4960
4970
|
const query = { ...req.query, ...req.params };
|
|
4961
|
-
const validation =
|
|
4962
|
-
page:
|
|
4963
|
-
limit:
|
|
4964
|
-
search:
|
|
4965
|
-
type:
|
|
4966
|
-
status:
|
|
4967
|
-
schedule:
|
|
4968
|
-
serviceType:
|
|
4971
|
+
const validation = import_joi10.default.object({
|
|
4972
|
+
page: import_joi10.default.number().min(1).optional().allow("", null),
|
|
4973
|
+
limit: import_joi10.default.number().min(1).optional().allow("", null),
|
|
4974
|
+
search: import_joi10.default.string().optional().allow("", null),
|
|
4975
|
+
type: import_joi10.default.string().valid(...allowedTypes, "all").optional().allow("", null),
|
|
4976
|
+
status: import_joi10.default.string().valid(...allowedStatus, "all").optional().allow("", null),
|
|
4977
|
+
schedule: import_joi10.default.string().hex().required(),
|
|
4978
|
+
serviceType: import_joi10.default.string().valid(...Object.values(import_core11.AppServiceType)).required()
|
|
4969
4979
|
});
|
|
4970
4980
|
const { error } = validation.validate(query);
|
|
4971
4981
|
if (error) {
|
|
@@ -5000,14 +5010,14 @@ function useAreaChecklistController() {
|
|
|
5000
5010
|
}
|
|
5001
5011
|
async function getAreaChecklistHistory(req, res, next) {
|
|
5002
5012
|
const query = { ...req.query, ...req.params };
|
|
5003
|
-
const validation =
|
|
5004
|
-
page:
|
|
5005
|
-
limit:
|
|
5006
|
-
search:
|
|
5007
|
-
type:
|
|
5008
|
-
schedule:
|
|
5009
|
-
status:
|
|
5010
|
-
createdAt:
|
|
5013
|
+
const validation = import_joi10.default.object({
|
|
5014
|
+
page: import_joi10.default.number().min(1).optional().allow("", null),
|
|
5015
|
+
limit: import_joi10.default.number().min(1).optional().allow("", null),
|
|
5016
|
+
search: import_joi10.default.string().optional().allow("", null),
|
|
5017
|
+
type: import_joi10.default.string().optional().allow("", ...allowedTypes),
|
|
5018
|
+
schedule: import_joi10.default.string().hex().required(),
|
|
5019
|
+
status: import_joi10.default.string().allow("", null, ...allowedStatus),
|
|
5020
|
+
createdAt: import_joi10.default.alternatives().try(import_joi10.default.date(), import_joi10.default.string()).optional().allow("", null)
|
|
5011
5021
|
});
|
|
5012
5022
|
const { error } = validation.validate(query);
|
|
5013
5023
|
if (error) {
|
|
@@ -5041,7 +5051,7 @@ function useAreaChecklistController() {
|
|
|
5041
5051
|
}
|
|
5042
5052
|
}
|
|
5043
5053
|
async function getAreaChecklistHistoryDetails(req, res, next) {
|
|
5044
|
-
const validation =
|
|
5054
|
+
const validation = import_joi10.default.string().hex().required();
|
|
5045
5055
|
const _id = req.params.id;
|
|
5046
5056
|
const { error, value } = validation.validate(_id);
|
|
5047
5057
|
if (error) {
|
|
@@ -5061,12 +5071,12 @@ function useAreaChecklistController() {
|
|
|
5061
5071
|
}
|
|
5062
5072
|
async function getAreaChecklistUnits(req, res, next) {
|
|
5063
5073
|
const query = { ...req.query, ...req.params };
|
|
5064
|
-
const validation =
|
|
5065
|
-
page:
|
|
5066
|
-
limit:
|
|
5067
|
-
search:
|
|
5068
|
-
serviceType:
|
|
5069
|
-
id:
|
|
5074
|
+
const validation = import_joi10.default.object({
|
|
5075
|
+
page: import_joi10.default.number().min(1).optional().allow("", null),
|
|
5076
|
+
limit: import_joi10.default.number().min(1).optional().allow("", null),
|
|
5077
|
+
search: import_joi10.default.string().optional().allow("", null),
|
|
5078
|
+
serviceType: import_joi10.default.string().valid(...Object.values(import_core11.AppServiceType)).required(),
|
|
5079
|
+
id: import_joi10.default.string().hex().required()
|
|
5070
5080
|
});
|
|
5071
5081
|
const { error } = validation.validate(query);
|
|
5072
5082
|
if (error) {
|
|
@@ -5116,21 +5126,21 @@ function useAreaChecklistController() {
|
|
|
5116
5126
|
...decisionValues,
|
|
5117
5127
|
completedBy
|
|
5118
5128
|
};
|
|
5119
|
-
const validation =
|
|
5120
|
-
id:
|
|
5121
|
-
set:
|
|
5122
|
-
unit:
|
|
5123
|
-
decision:
|
|
5124
|
-
approve:
|
|
5125
|
-
reject:
|
|
5126
|
-
remarks:
|
|
5129
|
+
const validation = import_joi10.default.object({
|
|
5130
|
+
id: import_joi10.default.string().hex().required(),
|
|
5131
|
+
set: import_joi10.default.number().integer().min(1).required(),
|
|
5132
|
+
unit: import_joi10.default.string().hex().required(),
|
|
5133
|
+
decision: import_joi10.default.string().valid("approve", "reject").required(),
|
|
5134
|
+
approve: import_joi10.default.boolean().optional(),
|
|
5135
|
+
reject: import_joi10.default.boolean().optional(),
|
|
5136
|
+
remarks: import_joi10.default.string().optional().allow("", null),
|
|
5127
5137
|
/*
|
|
5128
5138
|
* Shape only. WHETHER a photo is required depends on the set's current
|
|
5129
5139
|
* state in the database, which Joi cannot see — see the check below.
|
|
5130
5140
|
* Each entry must still be a real id: a blank string carries no evidence.
|
|
5131
5141
|
*/
|
|
5132
|
-
attachment:
|
|
5133
|
-
completedBy:
|
|
5142
|
+
attachment: import_joi10.default.array().items(import_joi10.default.string().trim().min(1)).optional(),
|
|
5143
|
+
completedBy: import_joi10.default.string().hex().required()
|
|
5134
5144
|
});
|
|
5135
5145
|
const { error } = validation.validate(payload);
|
|
5136
5146
|
if (error) {
|
|
@@ -5167,7 +5177,7 @@ function useAreaChecklistController() {
|
|
|
5167
5177
|
}
|
|
5168
5178
|
}
|
|
5169
5179
|
async function downloadChecklistPdf(req, res, next) {
|
|
5170
|
-
const validation =
|
|
5180
|
+
const validation = import_joi10.default.string().hex().required();
|
|
5171
5181
|
const schedule = req.params.schedule;
|
|
5172
5182
|
const { error, value } = validation.validate(schedule);
|
|
5173
5183
|
if (error) {
|
|
@@ -5213,16 +5223,16 @@ function useAreaChecklistController() {
|
|
|
5213
5223
|
}
|
|
5214
5224
|
|
|
5215
5225
|
// src/models/hygiene-supply.model.ts
|
|
5216
|
-
var
|
|
5226
|
+
var import_joi11 = __toESM(require("joi"));
|
|
5217
5227
|
var import_mongodb12 = require("mongodb");
|
|
5218
5228
|
var import_node_server_utils21 = require("@7365admin1/node-server-utils");
|
|
5219
5229
|
var import_core12 = require("@7365admin1/core");
|
|
5220
|
-
var supplySchema =
|
|
5221
|
-
site:
|
|
5222
|
-
serviceType:
|
|
5223
|
-
name:
|
|
5224
|
-
unitOfMeasurement:
|
|
5225
|
-
attachment:
|
|
5230
|
+
var supplySchema = import_joi11.default.object({
|
|
5231
|
+
site: import_joi11.default.string().hex().required(),
|
|
5232
|
+
serviceType: import_joi11.default.string().valid(...Object.values(import_core12.AppServiceType)).required(),
|
|
5233
|
+
name: import_joi11.default.string().required(),
|
|
5234
|
+
unitOfMeasurement: import_joi11.default.string().required(),
|
|
5235
|
+
attachment: import_joi11.default.string().allow(null, "").optional()
|
|
5226
5236
|
});
|
|
5227
5237
|
function MSupply(value) {
|
|
5228
5238
|
const { error } = supplySchema.validate(value);
|
|
@@ -5512,7 +5522,7 @@ function useSupplyRepository() {
|
|
|
5512
5522
|
}
|
|
5513
5523
|
|
|
5514
5524
|
// src/controllers/hygiene-supply.controller.ts
|
|
5515
|
-
var
|
|
5525
|
+
var import_joi12 = __toESM(require("joi"));
|
|
5516
5526
|
var import_node_server_utils23 = require("@7365admin1/node-server-utils");
|
|
5517
5527
|
var import_core13 = require("@7365admin1/core");
|
|
5518
5528
|
function useSupplyController() {
|
|
@@ -5543,12 +5553,12 @@ function useSupplyController() {
|
|
|
5543
5553
|
}
|
|
5544
5554
|
async function getSupplies(req, res, next) {
|
|
5545
5555
|
const query = { ...req.query, ...req.params };
|
|
5546
|
-
const validation =
|
|
5547
|
-
page:
|
|
5548
|
-
limit:
|
|
5549
|
-
search:
|
|
5550
|
-
site:
|
|
5551
|
-
serviceType:
|
|
5556
|
+
const validation = import_joi12.default.object({
|
|
5557
|
+
page: import_joi12.default.number().min(1).optional().allow("", null),
|
|
5558
|
+
limit: import_joi12.default.number().min(1).optional().allow("", null),
|
|
5559
|
+
search: import_joi12.default.string().optional().allow("", null),
|
|
5560
|
+
site: import_joi12.default.string().hex().required(),
|
|
5561
|
+
serviceType: import_joi12.default.string().valid(...Object.values(import_core13.AppServiceType)).required()
|
|
5552
5562
|
});
|
|
5553
5563
|
const { error } = validation.validate(query);
|
|
5554
5564
|
if (error) {
|
|
@@ -5578,7 +5588,7 @@ function useSupplyController() {
|
|
|
5578
5588
|
}
|
|
5579
5589
|
}
|
|
5580
5590
|
async function getSupplyById(req, res, next) {
|
|
5581
|
-
const validation =
|
|
5591
|
+
const validation = import_joi12.default.string().hex().required();
|
|
5582
5592
|
const _id = req.params.id;
|
|
5583
5593
|
const { error, value } = validation.validate(_id);
|
|
5584
5594
|
if (error) {
|
|
@@ -5598,12 +5608,12 @@ function useSupplyController() {
|
|
|
5598
5608
|
}
|
|
5599
5609
|
async function updateSupply(req, res, next) {
|
|
5600
5610
|
const payload = { id: req.params.id, ...req.body };
|
|
5601
|
-
const validation =
|
|
5602
|
-
id:
|
|
5603
|
-
name:
|
|
5604
|
-
unitOfMeasurement:
|
|
5605
|
-
qty:
|
|
5606
|
-
attachment:
|
|
5611
|
+
const validation = import_joi12.default.object({
|
|
5612
|
+
id: import_joi12.default.string().hex().required(),
|
|
5613
|
+
name: import_joi12.default.string().optional().allow("", null),
|
|
5614
|
+
unitOfMeasurement: import_joi12.default.string().optional().allow("", null),
|
|
5615
|
+
qty: import_joi12.default.number().min(0).optional().allow("", null),
|
|
5616
|
+
attachment: import_joi12.default.string().optional().allow("", null)
|
|
5607
5617
|
});
|
|
5608
5618
|
const { error } = validation.validate(payload);
|
|
5609
5619
|
if (error) {
|
|
@@ -5624,7 +5634,7 @@ function useSupplyController() {
|
|
|
5624
5634
|
}
|
|
5625
5635
|
async function deleteSupply(req, res, next) {
|
|
5626
5636
|
const id = req.params.id;
|
|
5627
|
-
const validation =
|
|
5637
|
+
const validation = import_joi12.default.string().hex().required();
|
|
5628
5638
|
const { error, value } = validation.validate(id);
|
|
5629
5639
|
if (error) {
|
|
5630
5640
|
import_node_server_utils23.logger.log({ level: "error", message: error.message });
|
|
@@ -5651,18 +5661,18 @@ function useSupplyController() {
|
|
|
5651
5661
|
}
|
|
5652
5662
|
|
|
5653
5663
|
// src/models/hygiene-stock.model.ts
|
|
5654
|
-
var
|
|
5664
|
+
var import_joi13 = __toESM(require("joi"));
|
|
5655
5665
|
var import_mongodb14 = require("mongodb");
|
|
5656
5666
|
var import_node_server_utils24 = require("@7365admin1/node-server-utils");
|
|
5657
5667
|
var import_core14 = require("@7365admin1/core");
|
|
5658
|
-
var stockSchema =
|
|
5659
|
-
site:
|
|
5660
|
-
serviceType:
|
|
5661
|
-
supply:
|
|
5662
|
-
in:
|
|
5663
|
-
out:
|
|
5664
|
-
balance:
|
|
5665
|
-
remarks:
|
|
5668
|
+
var stockSchema = import_joi13.default.object({
|
|
5669
|
+
site: import_joi13.default.string().hex().required(),
|
|
5670
|
+
serviceType: import_joi13.default.string().valid(...Object.values(import_core14.AppServiceType)).required(),
|
|
5671
|
+
supply: import_joi13.default.string().hex().required(),
|
|
5672
|
+
in: import_joi13.default.number().min(0).optional(),
|
|
5673
|
+
out: import_joi13.default.number().min(0).optional(),
|
|
5674
|
+
balance: import_joi13.default.number().min(0).required(),
|
|
5675
|
+
remarks: import_joi13.default.string().optional().allow("", null)
|
|
5666
5676
|
});
|
|
5667
5677
|
function MStock(value) {
|
|
5668
5678
|
const { error } = stockSchema.validate(value);
|
|
@@ -5877,7 +5887,7 @@ function useStockService() {
|
|
|
5877
5887
|
}
|
|
5878
5888
|
|
|
5879
5889
|
// src/controllers/hygiene-stock.controller.ts
|
|
5880
|
-
var
|
|
5890
|
+
var import_joi14 = __toESM(require("joi"));
|
|
5881
5891
|
var import_node_server_utils27 = require("@7365admin1/node-server-utils");
|
|
5882
5892
|
var import_core15 = require("@7365admin1/core");
|
|
5883
5893
|
function useStockController() {
|
|
@@ -5885,12 +5895,12 @@ function useStockController() {
|
|
|
5885
5895
|
const { createStock: _createStock } = useStockService();
|
|
5886
5896
|
async function createStock(req, res, next) {
|
|
5887
5897
|
const payload = { ...req.body, ...req.params };
|
|
5888
|
-
const validation =
|
|
5889
|
-
site:
|
|
5890
|
-
serviceType:
|
|
5891
|
-
supply:
|
|
5892
|
-
qty:
|
|
5893
|
-
remarks:
|
|
5898
|
+
const validation = import_joi14.default.object({
|
|
5899
|
+
site: import_joi14.default.string().hex().required(),
|
|
5900
|
+
serviceType: import_joi14.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
|
|
5901
|
+
supply: import_joi14.default.string().hex().required(),
|
|
5902
|
+
qty: import_joi14.default.number().min(0).required(),
|
|
5903
|
+
remarks: import_joi14.default.string().optional().allow("", null)
|
|
5894
5904
|
});
|
|
5895
5905
|
const { error } = validation.validate(payload);
|
|
5896
5906
|
if (error) {
|
|
@@ -5910,13 +5920,13 @@ function useStockController() {
|
|
|
5910
5920
|
}
|
|
5911
5921
|
async function getStocksBySupplyId(req, res, next) {
|
|
5912
5922
|
const query = { ...req.query, ...req.params };
|
|
5913
|
-
const validation =
|
|
5914
|
-
page:
|
|
5915
|
-
limit:
|
|
5916
|
-
search:
|
|
5917
|
-
site:
|
|
5918
|
-
serviceType:
|
|
5919
|
-
supply:
|
|
5923
|
+
const validation = import_joi14.default.object({
|
|
5924
|
+
page: import_joi14.default.number().min(1).optional().allow("", null),
|
|
5925
|
+
limit: import_joi14.default.number().min(1).optional().allow("", null),
|
|
5926
|
+
search: import_joi14.default.string().optional().allow("", null),
|
|
5927
|
+
site: import_joi14.default.string().hex().required(),
|
|
5928
|
+
serviceType: import_joi14.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
|
|
5929
|
+
supply: import_joi14.default.string().hex().required()
|
|
5920
5930
|
});
|
|
5921
5931
|
const { error } = validation.validate(query);
|
|
5922
5932
|
if (error) {
|
|
@@ -5978,21 +5988,21 @@ async function applyCheckOutDecision(decision, decide, returnStock) {
|
|
|
5978
5988
|
}
|
|
5979
5989
|
|
|
5980
5990
|
// src/models/hygiene-checkout-item.model.ts
|
|
5981
|
-
var
|
|
5991
|
+
var import_joi15 = __toESM(require("joi"));
|
|
5982
5992
|
var import_mongodb16 = require("mongodb");
|
|
5983
5993
|
var import_node_server_utils28 = require("@7365admin1/node-server-utils");
|
|
5984
5994
|
var import_core16 = require("@7365admin1/core");
|
|
5985
5995
|
var allowedCheckOutItemStatus = ["pending", "completed"];
|
|
5986
|
-
var checkOutItemSchema =
|
|
5987
|
-
site:
|
|
5988
|
-
serviceType:
|
|
5989
|
-
supply:
|
|
5990
|
-
supplyName:
|
|
5991
|
-
supplyQty:
|
|
5992
|
-
qty:
|
|
5993
|
-
attachment:
|
|
5994
|
-
createdBy:
|
|
5995
|
-
createdByName:
|
|
5996
|
+
var checkOutItemSchema = import_joi15.default.object({
|
|
5997
|
+
site: import_joi15.default.string().hex().required(),
|
|
5998
|
+
serviceType: import_joi15.default.string().valid(...Object.values(import_core16.AppServiceType)).required(),
|
|
5999
|
+
supply: import_joi15.default.string().hex().required(),
|
|
6000
|
+
supplyName: import_joi15.default.string().required(),
|
|
6001
|
+
supplyQty: import_joi15.default.number().min(0).required(),
|
|
6002
|
+
qty: import_joi15.default.number().min(0).required(),
|
|
6003
|
+
attachment: import_joi15.default.array().items(import_joi15.default.string()).optional().allow(null),
|
|
6004
|
+
createdBy: import_joi15.default.string().hex().required(),
|
|
6005
|
+
createdByName: import_joi15.default.string().required()
|
|
5996
6006
|
});
|
|
5997
6007
|
function MCheckOutItem(value) {
|
|
5998
6008
|
const { error } = checkOutItemSchema.validate(value);
|
|
@@ -6472,7 +6482,7 @@ function useCheckOutItemService() {
|
|
|
6472
6482
|
}
|
|
6473
6483
|
|
|
6474
6484
|
// src/controllers/hygiene-checkout-item.controller.ts
|
|
6475
|
-
var
|
|
6485
|
+
var import_joi16 = __toESM(require("joi"));
|
|
6476
6486
|
var import_node_server_utils31 = require("@7365admin1/node-server-utils");
|
|
6477
6487
|
var import_core18 = require("@7365admin1/core");
|
|
6478
6488
|
function useCheckOutItemController() {
|
|
@@ -6496,13 +6506,13 @@ function useCheckOutItemController() {
|
|
|
6496
6506
|
...req.params,
|
|
6497
6507
|
createdBy
|
|
6498
6508
|
};
|
|
6499
|
-
const validation =
|
|
6500
|
-
site:
|
|
6501
|
-
serviceType:
|
|
6502
|
-
supply:
|
|
6503
|
-
qty:
|
|
6504
|
-
attachment:
|
|
6505
|
-
createdBy:
|
|
6509
|
+
const validation = import_joi16.default.object({
|
|
6510
|
+
site: import_joi16.default.string().hex().required(),
|
|
6511
|
+
serviceType: import_joi16.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
|
|
6512
|
+
supply: import_joi16.default.string().hex().required(),
|
|
6513
|
+
qty: import_joi16.default.number().min(0).required(),
|
|
6514
|
+
attachment: import_joi16.default.array().items(import_joi16.default.string()).optional().allow(null),
|
|
6515
|
+
createdBy: import_joi16.default.string().hex().required()
|
|
6506
6516
|
});
|
|
6507
6517
|
const { error } = validation.validate(payload);
|
|
6508
6518
|
if (error) {
|
|
@@ -6531,15 +6541,15 @@ function useCheckOutItemController() {
|
|
|
6531
6541
|
...req.params,
|
|
6532
6542
|
createdBy
|
|
6533
6543
|
};
|
|
6534
|
-
const validation =
|
|
6535
|
-
site:
|
|
6536
|
-
serviceType:
|
|
6537
|
-
createdBy:
|
|
6538
|
-
items:
|
|
6539
|
-
|
|
6540
|
-
supply:
|
|
6541
|
-
qty:
|
|
6542
|
-
attachment:
|
|
6544
|
+
const validation = import_joi16.default.object({
|
|
6545
|
+
site: import_joi16.default.string().hex().required(),
|
|
6546
|
+
serviceType: import_joi16.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
|
|
6547
|
+
createdBy: import_joi16.default.string().hex().required(),
|
|
6548
|
+
items: import_joi16.default.array().items(
|
|
6549
|
+
import_joi16.default.object({
|
|
6550
|
+
supply: import_joi16.default.string().hex().required(),
|
|
6551
|
+
qty: import_joi16.default.number().min(0).required(),
|
|
6552
|
+
attachment: import_joi16.default.array().items(import_joi16.default.string()).optional().allow(null)
|
|
6543
6553
|
})
|
|
6544
6554
|
).min(1).required()
|
|
6545
6555
|
});
|
|
@@ -6561,12 +6571,12 @@ function useCheckOutItemController() {
|
|
|
6561
6571
|
}
|
|
6562
6572
|
async function getCheckOutItems(req, res, next) {
|
|
6563
6573
|
const query = { ...req.query, ...req.params };
|
|
6564
|
-
const validation =
|
|
6565
|
-
page:
|
|
6566
|
-
limit:
|
|
6567
|
-
search:
|
|
6568
|
-
site:
|
|
6569
|
-
serviceType:
|
|
6574
|
+
const validation = import_joi16.default.object({
|
|
6575
|
+
page: import_joi16.default.number().min(1).optional().allow("", null),
|
|
6576
|
+
limit: import_joi16.default.number().min(1).optional().allow("", null),
|
|
6577
|
+
search: import_joi16.default.string().optional().allow("", null),
|
|
6578
|
+
site: import_joi16.default.string().hex().required(),
|
|
6579
|
+
serviceType: import_joi16.default.string().valid(...Object.values(import_core18.AppServiceType)).required()
|
|
6570
6580
|
});
|
|
6571
6581
|
const { error } = validation.validate(query);
|
|
6572
6582
|
if (error) {
|
|
@@ -6596,7 +6606,7 @@ function useCheckOutItemController() {
|
|
|
6596
6606
|
}
|
|
6597
6607
|
}
|
|
6598
6608
|
async function getCheckOutItemById(req, res, next) {
|
|
6599
|
-
const validation =
|
|
6609
|
+
const validation = import_joi16.default.string().hex().required();
|
|
6600
6610
|
const _id = req.params.id;
|
|
6601
6611
|
const { error, value } = validation.validate(_id);
|
|
6602
6612
|
if (error) {
|
|
@@ -6635,13 +6645,13 @@ function useCheckOutItemController() {
|
|
|
6635
6645
|
...decisionValues,
|
|
6636
6646
|
completedBy
|
|
6637
6647
|
};
|
|
6638
|
-
const validation =
|
|
6639
|
-
id:
|
|
6640
|
-
decision:
|
|
6641
|
-
approve:
|
|
6642
|
-
reject:
|
|
6643
|
-
remarks:
|
|
6644
|
-
completedBy:
|
|
6648
|
+
const validation = import_joi16.default.object({
|
|
6649
|
+
id: import_joi16.default.string().hex().required(),
|
|
6650
|
+
decision: import_joi16.default.string().valid("approve", "disapprove").required(),
|
|
6651
|
+
approve: import_joi16.default.boolean().required(),
|
|
6652
|
+
reject: import_joi16.default.boolean().required(),
|
|
6653
|
+
remarks: import_joi16.default.string().optional().allow("", null),
|
|
6654
|
+
completedBy: import_joi16.default.string().hex().required()
|
|
6645
6655
|
});
|
|
6646
6656
|
const { error } = validation.validate(payload);
|
|
6647
6657
|
if (error) {
|
|
@@ -6674,21 +6684,21 @@ function useCheckOutItemController() {
|
|
|
6674
6684
|
// src/models/hygiene-schedule-task.model.ts
|
|
6675
6685
|
var import_node_server_utils32 = require("@7365admin1/node-server-utils");
|
|
6676
6686
|
var import_core19 = require("@7365admin1/core");
|
|
6677
|
-
var
|
|
6687
|
+
var import_joi17 = __toESM(require("joi"));
|
|
6678
6688
|
var import_mongodb18 = require("mongodb");
|
|
6679
|
-
var scheduleTaskSchema =
|
|
6680
|
-
site:
|
|
6681
|
-
serviceType:
|
|
6682
|
-
title:
|
|
6683
|
-
time:
|
|
6684
|
-
dates:
|
|
6685
|
-
|
|
6689
|
+
var scheduleTaskSchema = import_joi17.default.object({
|
|
6690
|
+
site: import_joi17.default.string().hex().required(),
|
|
6691
|
+
serviceType: import_joi17.default.string().valid(...Object.values(import_core19.AppServiceType)).required(),
|
|
6692
|
+
title: import_joi17.default.string().required(),
|
|
6693
|
+
time: import_joi17.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).required(),
|
|
6694
|
+
dates: import_joi17.default.array().min(1).items(
|
|
6695
|
+
import_joi17.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
|
|
6686
6696
|
).required(),
|
|
6687
|
-
description:
|
|
6688
|
-
areas:
|
|
6689
|
-
|
|
6690
|
-
name:
|
|
6691
|
-
value:
|
|
6697
|
+
description: import_joi17.default.string().optional().allow("", null),
|
|
6698
|
+
areas: import_joi17.default.array().min(1).items(
|
|
6699
|
+
import_joi17.default.object({
|
|
6700
|
+
name: import_joi17.default.string().required(),
|
|
6701
|
+
value: import_joi17.default.any().required()
|
|
6692
6702
|
})
|
|
6693
6703
|
).required()
|
|
6694
6704
|
});
|
|
@@ -7283,7 +7293,7 @@ function useScheduleTaskService() {
|
|
|
7283
7293
|
}
|
|
7284
7294
|
|
|
7285
7295
|
// src/controllers/hygiene-schedule-task.controller.ts
|
|
7286
|
-
var
|
|
7296
|
+
var import_joi18 = __toESM(require("joi"));
|
|
7287
7297
|
var import_node_server_utils35 = require("@7365admin1/node-server-utils");
|
|
7288
7298
|
var import_core20 = require("@7365admin1/core");
|
|
7289
7299
|
function useScheduleTaskController() {
|
|
@@ -7314,12 +7324,12 @@ function useScheduleTaskController() {
|
|
|
7314
7324
|
}
|
|
7315
7325
|
async function getScheduleTasks(req, res, next) {
|
|
7316
7326
|
const query = { ...req.query, ...req.params };
|
|
7317
|
-
const validation =
|
|
7318
|
-
page:
|
|
7319
|
-
limit:
|
|
7320
|
-
search:
|
|
7321
|
-
site:
|
|
7322
|
-
serviceType:
|
|
7327
|
+
const validation = import_joi18.default.object({
|
|
7328
|
+
page: import_joi18.default.number().min(1).optional().allow("", null),
|
|
7329
|
+
limit: import_joi18.default.number().min(1).optional().allow("", null),
|
|
7330
|
+
search: import_joi18.default.string().optional().allow("", null),
|
|
7331
|
+
site: import_joi18.default.string().hex().required(),
|
|
7332
|
+
serviceType: import_joi18.default.string().valid(...Object.values(import_core20.AppServiceType)).required()
|
|
7323
7333
|
});
|
|
7324
7334
|
const { error } = validation.validate(query);
|
|
7325
7335
|
if (error) {
|
|
@@ -7349,7 +7359,7 @@ function useScheduleTaskController() {
|
|
|
7349
7359
|
}
|
|
7350
7360
|
}
|
|
7351
7361
|
async function getScheduleTaskById(req, res, next) {
|
|
7352
|
-
const validation =
|
|
7362
|
+
const validation = import_joi18.default.string().hex().required();
|
|
7353
7363
|
const _id = req.params.id;
|
|
7354
7364
|
const { error, value } = validation.validate(_id);
|
|
7355
7365
|
if (error) {
|
|
@@ -7369,18 +7379,18 @@ function useScheduleTaskController() {
|
|
|
7369
7379
|
}
|
|
7370
7380
|
async function updateScheduleTask(req, res, next) {
|
|
7371
7381
|
const payload = { id: req.params.id, ...req.body };
|
|
7372
|
-
const validation =
|
|
7373
|
-
id:
|
|
7374
|
-
title:
|
|
7375
|
-
time:
|
|
7376
|
-
dates:
|
|
7377
|
-
|
|
7382
|
+
const validation = import_joi18.default.object({
|
|
7383
|
+
id: import_joi18.default.string().hex().required(),
|
|
7384
|
+
title: import_joi18.default.string().optional().allow("", null),
|
|
7385
|
+
time: import_joi18.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).optional().allow("", null),
|
|
7386
|
+
dates: import_joi18.default.array().min(1).items(
|
|
7387
|
+
import_joi18.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
|
|
7378
7388
|
).optional(),
|
|
7379
|
-
description:
|
|
7380
|
-
areas:
|
|
7381
|
-
|
|
7382
|
-
name:
|
|
7383
|
-
value:
|
|
7389
|
+
description: import_joi18.default.string().optional().allow("", null),
|
|
7390
|
+
areas: import_joi18.default.array().min(1).items(
|
|
7391
|
+
import_joi18.default.object({
|
|
7392
|
+
name: import_joi18.default.string().required(),
|
|
7393
|
+
value: import_joi18.default.any().required()
|
|
7384
7394
|
})
|
|
7385
7395
|
).optional()
|
|
7386
7396
|
});
|
|
@@ -7402,7 +7412,7 @@ function useScheduleTaskController() {
|
|
|
7402
7412
|
}
|
|
7403
7413
|
}
|
|
7404
7414
|
async function deleteScheduleTask(req, res, next) {
|
|
7405
|
-
const validation =
|
|
7415
|
+
const validation = import_joi18.default.string().hex().required();
|
|
7406
7416
|
const _id = req.params.id;
|
|
7407
7417
|
const { error, value } = validation.validate(_id);
|
|
7408
7418
|
if (error) {
|
|
@@ -7646,17 +7656,17 @@ function useQRService() {
|
|
|
7646
7656
|
}
|
|
7647
7657
|
|
|
7648
7658
|
// src/controllers/hygiene-qr.controller.ts
|
|
7649
|
-
var
|
|
7659
|
+
var import_joi19 = __toESM(require("joi"));
|
|
7650
7660
|
var import_node_server_utils37 = require("@7365admin1/node-server-utils");
|
|
7651
7661
|
function useQRController() {
|
|
7652
7662
|
const { generateQRImage: _generateQRImage, generateQRPDF: _generateQRPDF } = useQRService();
|
|
7653
7663
|
async function generateQR(req, res, next) {
|
|
7654
|
-
const validation =
|
|
7655
|
-
url:
|
|
7656
|
-
filename:
|
|
7657
|
-
title:
|
|
7658
|
-
subtitle:
|
|
7659
|
-
download:
|
|
7664
|
+
const validation = import_joi19.default.object({
|
|
7665
|
+
url: import_joi19.default.string().uri().required(),
|
|
7666
|
+
filename: import_joi19.default.string().optional().allow("", null),
|
|
7667
|
+
title: import_joi19.default.string().optional().allow("", null),
|
|
7668
|
+
subtitle: import_joi19.default.string().optional().allow("", null),
|
|
7669
|
+
download: import_joi19.default.boolean().optional().default(false)
|
|
7660
7670
|
});
|
|
7661
7671
|
const query = { ...req.query };
|
|
7662
7672
|
const { error, value } = validation.validate(query);
|