@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/dist/index.js CHANGED
@@ -924,21 +924,30 @@ function useHygieneDashboardController() {
924
924
  }
925
925
 
926
926
  // src/models/hygiene-area.model.ts
927
- var import_joi2 = __toESM(require("joi"));
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
- var areaSchema = import_joi2.default.object({
932
- site: import_joi2.default.string().hex().required(),
933
- serviceType: import_joi2.default.string().valid(...Object.values(import_core2.AppServiceType)).required(),
934
- name: import_joi2.default.string().required(),
935
- type: import_joi2.default.string().valid(...allowedTypes).required(),
936
- set: import_joi2.default.number().min(0).optional(),
937
- units: import_joi2.default.array().items(
938
- import_joi2.default.object({
939
- unit: import_joi2.default.string().hex().required(),
940
- name: import_joi2.default.string().required()
941
- }).optional()
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 import_joi3 = __toESM(require("joi"));
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 = import_joi3.default.object({
1439
- site: import_joi3.default.string().hex().required(),
1440
- serviceType: import_joi3.default.string().valid(...Object.values(import_core3.AppServiceType)).required(),
1441
- name: import_joi3.default.string().required()
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 import_joi4 = __toESM(require("joi"));
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 = import_joi4.default.object({
1938
- page: import_joi4.default.number().min(1).optional().allow("", null),
1939
- limit: import_joi4.default.number().min(1).optional().allow("", null),
1940
- search: import_joi4.default.string().optional().allow("", null),
1941
- type: import_joi4.default.string().valid("all", ...allowedTypes).optional().allow("", null),
1942
- site: import_joi4.default.string().hex().required(),
1943
- serviceType: import_joi4.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
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 = import_joi4.default.string().hex().required();
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 = import_joi4.default.object({
1995
- id: import_joi4.default.string().hex().required(),
1996
- name: import_joi4.default.string().optional().allow("", null),
1997
- type: import_joi4.default.string().optional().allow("", null, ...allowedTypes),
1998
- set: import_joi4.default.number().min(0).optional(),
1999
- units: import_joi4.default.array().items(
2000
- import_joi4.default.object({
2001
- unit: import_joi4.default.string().hex().required(),
2002
- name: import_joi4.default.string().required()
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 = import_joi4.default.string().hex().required();
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 = import_joi4.default.object({
2051
- site: import_joi4.default.string().hex().required(),
2052
- serviceType: import_joi4.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
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 = import_joi4.default.object({
2074
- site: import_joi4.default.string().hex().required(),
2075
- serviceType: import_joi4.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
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 import_joi5 = __toESM(require("joi"));
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 = import_joi5.default.object({
2389
- page: import_joi5.default.number().min(1).optional().allow("", null),
2390
- limit: import_joi5.default.number().min(1).optional().allow("", null),
2391
- search: import_joi5.default.string().optional().allow("", null),
2392
- site: import_joi5.default.string().hex().required(),
2393
- serviceType: import_joi5.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
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 = import_joi5.default.object({
2425
- id: import_joi5.default.string().hex().required(),
2426
- name: import_joi5.default.string().required()
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 = import_joi5.default.object({
2448
- id: import_joi5.default.string().hex().required()
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 = import_joi5.default.object({
2473
- site: import_joi5.default.string().hex().required(),
2474
- serviceType: import_joi5.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
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 = import_joi5.default.object({
2496
- site: import_joi5.default.string().hex().required(),
2497
- serviceType: import_joi5.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
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 import_joi6 = __toESM(require("joi"));
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 = import_joi6.default.object({
2545
- createdAt: import_joi6.default.alternatives().try(import_joi6.default.date(), import_joi6.default.string()).optional().allow("", null),
2546
- site: import_joi6.default.string().hex().required(),
2547
- serviceType: import_joi6.default.string().valid(...Object.values(import_core6.AppServiceType)).required(),
2548
- dateStr: import_joi6.default.string().optional().allow("", null)
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 import_joi7 = __toESM(require("joi"));
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 = import_joi7.default.object({
3132
- createdAt: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
3133
- site: import_joi7.default.string().hex().required(),
3134
- serviceType: import_joi7.default.string().valid(...Object.values(import_core8.AppServiceType)).optional().allow("", null)
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 = import_joi7.default.object({
3155
- page: import_joi7.default.number().min(1).optional().allow("", null),
3156
- limit: import_joi7.default.number().min(1).optional().allow("", null),
3157
- search: import_joi7.default.string().optional().allow("", null),
3158
- site: import_joi7.default.string().hex().required(),
3159
- serviceType: import_joi7.default.string().valid(...Object.values(import_core8.AppServiceType)).required(),
3160
- startDate: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
3161
- endDate: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
3162
- status: import_joi7.default.string().valid(...allowedStatus, "all").optional().allow("", null)
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 import_joi8 = __toESM(require("joi"));
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 = import_joi8.default.object({
3210
- schedule: import_joi8.default.string().hex().required(),
3211
- serviceType: import_joi8.default.string().valid(...Object.values(import_core9.AppServiceType)).required(),
3212
- area: import_joi8.default.string().hex().required(),
3213
- name: import_joi8.default.string().required(),
3214
- type: import_joi8.default.string().valid(...allowedTypes).required(),
3215
- checklist: import_joi8.default.array().items(
3216
- import_joi8.default.object({
3217
- set: import_joi8.default.number().min(0).required(),
3218
- units: import_joi8.default.array().items(
3219
- import_joi8.default.object({
3220
- unit: import_joi8.default.string().hex().required(),
3221
- name: import_joi8.default.string().required()
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: import_joi8.default.boolean().optional().default(false),
3225
- scheduleTaskId: import_joi8.default.string().hex().optional().allow(null)
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
- const units = group?.units ?? [];
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 import_joi9 = __toESM(require("joi"));
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 = import_joi9.default.object({
4940
- site: import_joi9.default.string().hex().required(),
4941
- schedule: import_joi9.default.string().hex().required()
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 = import_joi9.default.object({
4962
- page: import_joi9.default.number().min(1).optional().allow("", null),
4963
- limit: import_joi9.default.number().min(1).optional().allow("", null),
4964
- search: import_joi9.default.string().optional().allow("", null),
4965
- type: import_joi9.default.string().valid(...allowedTypes, "all").optional().allow("", null),
4966
- status: import_joi9.default.string().valid(...allowedStatus, "all").optional().allow("", null),
4967
- schedule: import_joi9.default.string().hex().required(),
4968
- serviceType: import_joi9.default.string().valid(...Object.values(import_core11.AppServiceType)).required()
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 = import_joi9.default.object({
5004
- page: import_joi9.default.number().min(1).optional().allow("", null),
5005
- limit: import_joi9.default.number().min(1).optional().allow("", null),
5006
- search: import_joi9.default.string().optional().allow("", null),
5007
- type: import_joi9.default.string().optional().allow("", ...allowedTypes),
5008
- schedule: import_joi9.default.string().hex().required(),
5009
- status: import_joi9.default.string().allow("", null, ...allowedStatus),
5010
- createdAt: import_joi9.default.alternatives().try(import_joi9.default.date(), import_joi9.default.string()).optional().allow("", null)
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 = import_joi9.default.string().hex().required();
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 = import_joi9.default.object({
5065
- page: import_joi9.default.number().min(1).optional().allow("", null),
5066
- limit: import_joi9.default.number().min(1).optional().allow("", null),
5067
- search: import_joi9.default.string().optional().allow("", null),
5068
- serviceType: import_joi9.default.string().valid(...Object.values(import_core11.AppServiceType)).required(),
5069
- id: import_joi9.default.string().hex().required()
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 = import_joi9.default.object({
5120
- id: import_joi9.default.string().hex().required(),
5121
- set: import_joi9.default.number().integer().min(1).required(),
5122
- unit: import_joi9.default.string().hex().required(),
5123
- decision: import_joi9.default.string().valid("approve", "reject").required(),
5124
- approve: import_joi9.default.boolean().optional(),
5125
- reject: import_joi9.default.boolean().optional(),
5126
- remarks: import_joi9.default.string().optional().allow("", null),
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: import_joi9.default.array().items(import_joi9.default.string().trim().min(1)).optional(),
5133
- completedBy: import_joi9.default.string().hex().required()
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 = import_joi9.default.string().hex().required();
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 import_joi10 = __toESM(require("joi"));
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 = import_joi10.default.object({
5221
- site: import_joi10.default.string().hex().required(),
5222
- serviceType: import_joi10.default.string().valid(...Object.values(import_core12.AppServiceType)).required(),
5223
- name: import_joi10.default.string().required(),
5224
- unitOfMeasurement: import_joi10.default.string().required(),
5225
- attachment: import_joi10.default.string().allow(null, "").optional()
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 import_joi11 = __toESM(require("joi"));
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 = import_joi11.default.object({
5547
- page: import_joi11.default.number().min(1).optional().allow("", null),
5548
- limit: import_joi11.default.number().min(1).optional().allow("", null),
5549
- search: import_joi11.default.string().optional().allow("", null),
5550
- site: import_joi11.default.string().hex().required(),
5551
- serviceType: import_joi11.default.string().valid(...Object.values(import_core13.AppServiceType)).required()
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 = import_joi11.default.string().hex().required();
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 = import_joi11.default.object({
5602
- id: import_joi11.default.string().hex().required(),
5603
- name: import_joi11.default.string().optional().allow("", null),
5604
- unitOfMeasurement: import_joi11.default.string().optional().allow("", null),
5605
- qty: import_joi11.default.number().min(0).optional().allow("", null),
5606
- attachment: import_joi11.default.string().optional().allow("", null)
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 = import_joi11.default.string().hex().required();
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 import_joi12 = __toESM(require("joi"));
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 = import_joi12.default.object({
5659
- site: import_joi12.default.string().hex().required(),
5660
- serviceType: import_joi12.default.string().valid(...Object.values(import_core14.AppServiceType)).required(),
5661
- supply: import_joi12.default.string().hex().required(),
5662
- in: import_joi12.default.number().min(0).optional(),
5663
- out: import_joi12.default.number().min(0).optional(),
5664
- balance: import_joi12.default.number().min(0).required(),
5665
- remarks: import_joi12.default.string().optional().allow("", null)
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 import_joi13 = __toESM(require("joi"));
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 = import_joi13.default.object({
5889
- site: import_joi13.default.string().hex().required(),
5890
- serviceType: import_joi13.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
5891
- supply: import_joi13.default.string().hex().required(),
5892
- qty: import_joi13.default.number().min(0).required(),
5893
- remarks: import_joi13.default.string().optional().allow("", null)
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 = import_joi13.default.object({
5914
- page: import_joi13.default.number().min(1).optional().allow("", null),
5915
- limit: import_joi13.default.number().min(1).optional().allow("", null),
5916
- search: import_joi13.default.string().optional().allow("", null),
5917
- site: import_joi13.default.string().hex().required(),
5918
- serviceType: import_joi13.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
5919
- supply: import_joi13.default.string().hex().required()
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 import_joi14 = __toESM(require("joi"));
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 = import_joi14.default.object({
5987
- site: import_joi14.default.string().hex().required(),
5988
- serviceType: import_joi14.default.string().valid(...Object.values(import_core16.AppServiceType)).required(),
5989
- supply: import_joi14.default.string().hex().required(),
5990
- supplyName: import_joi14.default.string().required(),
5991
- supplyQty: import_joi14.default.number().min(0).required(),
5992
- qty: import_joi14.default.number().min(0).required(),
5993
- attachment: import_joi14.default.array().items(import_joi14.default.string()).optional().allow(null),
5994
- createdBy: import_joi14.default.string().hex().required(),
5995
- createdByName: import_joi14.default.string().required()
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 import_joi15 = __toESM(require("joi"));
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 = import_joi15.default.object({
6500
- site: import_joi15.default.string().hex().required(),
6501
- serviceType: import_joi15.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
6502
- supply: import_joi15.default.string().hex().required(),
6503
- qty: import_joi15.default.number().min(0).required(),
6504
- attachment: import_joi15.default.array().items(import_joi15.default.string()).optional().allow(null),
6505
- createdBy: import_joi15.default.string().hex().required()
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 = import_joi15.default.object({
6535
- site: import_joi15.default.string().hex().required(),
6536
- serviceType: import_joi15.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
6537
- createdBy: import_joi15.default.string().hex().required(),
6538
- items: import_joi15.default.array().items(
6539
- import_joi15.default.object({
6540
- supply: import_joi15.default.string().hex().required(),
6541
- qty: import_joi15.default.number().min(0).required(),
6542
- attachment: import_joi15.default.array().items(import_joi15.default.string()).optional().allow(null)
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 = import_joi15.default.object({
6565
- page: import_joi15.default.number().min(1).optional().allow("", null),
6566
- limit: import_joi15.default.number().min(1).optional().allow("", null),
6567
- search: import_joi15.default.string().optional().allow("", null),
6568
- site: import_joi15.default.string().hex().required(),
6569
- serviceType: import_joi15.default.string().valid(...Object.values(import_core18.AppServiceType)).required()
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 = import_joi15.default.string().hex().required();
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 = import_joi15.default.object({
6639
- id: import_joi15.default.string().hex().required(),
6640
- decision: import_joi15.default.string().valid("approve", "disapprove").required(),
6641
- approve: import_joi15.default.boolean().required(),
6642
- reject: import_joi15.default.boolean().required(),
6643
- remarks: import_joi15.default.string().optional().allow("", null),
6644
- completedBy: import_joi15.default.string().hex().required()
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 import_joi16 = __toESM(require("joi"));
6687
+ var import_joi17 = __toESM(require("joi"));
6678
6688
  var import_mongodb18 = require("mongodb");
6679
- var scheduleTaskSchema = import_joi16.default.object({
6680
- site: import_joi16.default.string().hex().required(),
6681
- serviceType: import_joi16.default.string().valid(...Object.values(import_core19.AppServiceType)).required(),
6682
- title: import_joi16.default.string().required(),
6683
- time: import_joi16.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).required(),
6684
- dates: import_joi16.default.array().min(1).items(
6685
- import_joi16.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
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: import_joi16.default.string().optional().allow("", null),
6688
- areas: import_joi16.default.array().min(1).items(
6689
- import_joi16.default.object({
6690
- name: import_joi16.default.string().required(),
6691
- value: import_joi16.default.any().required()
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 import_joi17 = __toESM(require("joi"));
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 = import_joi17.default.object({
7318
- page: import_joi17.default.number().min(1).optional().allow("", null),
7319
- limit: import_joi17.default.number().min(1).optional().allow("", null),
7320
- search: import_joi17.default.string().optional().allow("", null),
7321
- site: import_joi17.default.string().hex().required(),
7322
- serviceType: import_joi17.default.string().valid(...Object.values(import_core20.AppServiceType)).required()
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 = import_joi17.default.string().hex().required();
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 = import_joi17.default.object({
7373
- id: import_joi17.default.string().hex().required(),
7374
- title: import_joi17.default.string().optional().allow("", null),
7375
- time: import_joi17.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).optional().allow("", null),
7376
- dates: import_joi17.default.array().min(1).items(
7377
- import_joi17.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
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: import_joi17.default.string().optional().allow("", null),
7380
- areas: import_joi17.default.array().min(1).items(
7381
- import_joi17.default.object({
7382
- name: import_joi17.default.string().required(),
7383
- value: import_joi17.default.any().required()
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 = import_joi17.default.string().hex().required();
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 import_joi18 = __toESM(require("joi"));
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 = import_joi18.default.object({
7655
- url: import_joi18.default.string().uri().required(),
7656
- filename: import_joi18.default.string().optional().allow("", null),
7657
- title: import_joi18.default.string().optional().allow("", null),
7658
- subtitle: import_joi18.default.string().optional().allow("", null),
7659
- download: import_joi18.default.boolean().optional().default(false)
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);