@7365admin1/module-hygiene 4.12.0 → 4.13.0

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
@@ -38,6 +38,7 @@ __export(src_exports, {
38
38
  MStock: () => MStock,
39
39
  MSupply: () => MSupply,
40
40
  MUnit: () => MUnit,
41
+ ServiceType: () => ServiceType,
41
42
  allowedCheckOutItemStatus: () => allowedCheckOutItemStatus,
42
43
  allowedChecklistStatus: () => allowedChecklistStatus,
43
44
  allowedPeriods: () => allowedPeriods,
@@ -83,6 +84,17 @@ __export(src_exports, {
83
84
  module.exports = __toCommonJS(src_exports);
84
85
 
85
86
  // src/models/hygiene-base.model.ts
87
+ var ServiceType = /* @__PURE__ */ ((ServiceType2) => {
88
+ ServiceType2["REAL_ESTATE_DEVELOPER"] = "real_estate_developer";
89
+ ServiceType2["PROPERTY_MANAGEMENT_AGENCY"] = "property_management_agency";
90
+ ServiceType2["SECURITY_AGENCY"] = "security_agency";
91
+ ServiceType2["CLEANING_SERVICES"] = "cleaning_services";
92
+ ServiceType2["MECHANICAL_ELECTRICAL_SERVICES"] = "mechanical_electrical_services";
93
+ ServiceType2["LANDSCAPING_SERVICES"] = "landscaping_services";
94
+ ServiceType2["PEST_CONTROL_SERVICES"] = "pest_control_services";
95
+ ServiceType2["POOL_MAINTENANCE_SERVICES"] = "pool_maintenance_services";
96
+ return ServiceType2;
97
+ })(ServiceType || {});
86
98
  var allowedTypes = ["common", "toilet"];
87
99
  var allowedStatus = [
88
100
  "open",
@@ -624,6 +636,7 @@ var import_mongodb2 = require("mongodb");
624
636
  var import_node_server_utils3 = require("@7365admin1/node-server-utils");
625
637
  var areaSchema = import_joi2.default.object({
626
638
  site: import_joi2.default.string().hex().required(),
639
+ serviceType: import_joi2.default.string().valid(...Object.values(ServiceType)).required(),
627
640
  name: import_joi2.default.string().required(),
628
641
  type: import_joi2.default.string().valid(...allowedTypes).required(),
629
642
  set: import_joi2.default.number().min(0).optional(),
@@ -663,6 +676,7 @@ function MArea(value) {
663
676
  }
664
677
  return {
665
678
  site: value.site,
679
+ serviceType: value.serviceType,
666
680
  name: value.name,
667
681
  type: value.type,
668
682
  set: value.set ?? 0,
@@ -698,6 +712,7 @@ function useAreaRepo() {
698
712
  try {
699
713
  await collection.createIndexes([
700
714
  { key: { site: 1 } },
715
+ { key: { serviceType: 1 } },
701
716
  { key: { type: 1 } },
702
717
  { key: { status: 1 } },
703
718
  { key: { "units.unit": 1 } }
@@ -718,7 +733,7 @@ function useAreaRepo() {
718
733
  async function createUniqueIndex() {
719
734
  try {
720
735
  await collection.createIndex(
721
- { site: 1, name: 1, type: 1, deletedAt: 1 },
736
+ { site: 1, serviceType: 1, name: 1, type: 1, deletedAt: 1 },
722
737
  { unique: true }
723
738
  );
724
739
  } catch (error) {
@@ -755,15 +770,18 @@ function useAreaRepo() {
755
770
  limit = 10,
756
771
  search = "",
757
772
  type = "all",
758
- site
773
+ site,
774
+ serviceType
759
775
  }) {
760
776
  page = page > 0 ? page - 1 : 0;
761
777
  const query = {
762
- status: { $ne: "deleted" }
778
+ status: { $ne: "deleted" },
779
+ serviceType
763
780
  };
764
781
  const cacheOptions = {
765
782
  page,
766
- limit
783
+ limit,
784
+ serviceType
767
785
  };
768
786
  try {
769
787
  site = new import_mongodb3.ObjectId(site);
@@ -812,9 +830,15 @@ function useAreaRepo() {
812
830
  throw error;
813
831
  }
814
832
  }
815
- async function getAreasForChecklist(site) {
816
- const query = { status: { $ne: "deleted" } };
833
+ async function getAreasForChecklist(site, serviceType) {
834
+ const query = {
835
+ status: { $ne: "deleted" }
836
+ };
817
837
  const cacheOptions = {};
838
+ if (serviceType) {
839
+ query.serviceType = serviceType;
840
+ cacheOptions.serviceType = serviceType;
841
+ }
818
842
  try {
819
843
  site = new import_mongodb3.ObjectId(site);
820
844
  query.site = site;
@@ -894,28 +918,6 @@ function useAreaRepo() {
894
918
  throw error;
895
919
  }
896
920
  }
897
- async function getAreaByMultipleId(_id) {
898
- for (let i = 0; i < _id.length; i++) {
899
- try {
900
- _id[i] = new import_mongodb3.ObjectId(_id[i]);
901
- } catch (error) {
902
- throw new import_node_server_utils4.BadRequestError("Invalid area ID format.");
903
- }
904
- }
905
- const query = {
906
- _id: { $in: _id },
907
- status: { $ne: "deleted" }
908
- };
909
- try {
910
- const data = await collection.aggregate([{ $match: query }]).toArray();
911
- if (!data || data.length === 0) {
912
- throw new import_node_server_utils4.NotFoundError("Area not found.");
913
- }
914
- return data;
915
- } catch (error) {
916
- throw error;
917
- }
918
- }
919
921
  async function verifyAreaByUnitId(unitId) {
920
922
  try {
921
923
  unitId = new import_mongodb3.ObjectId(unitId);
@@ -1077,7 +1079,6 @@ function useAreaRepo() {
1077
1079
  getAreas,
1078
1080
  getAreasForChecklist,
1079
1081
  getAreaById,
1080
- getAreaByMultipleId,
1081
1082
  verifyAreaByUnitId,
1082
1083
  updateArea,
1083
1084
  updateAreaChecklist,
@@ -1144,6 +1145,7 @@ var import_mongodb4 = require("mongodb");
1144
1145
  var import_node_server_utils6 = require("@7365admin1/node-server-utils");
1145
1146
  var unitSchema = import_joi3.default.object({
1146
1147
  site: import_joi3.default.string().hex().required(),
1148
+ serviceType: import_joi3.default.string().valid(...Object.values(ServiceType)).required(),
1147
1149
  name: import_joi3.default.string().required()
1148
1150
  });
1149
1151
  function MUnit(value) {
@@ -1161,6 +1163,7 @@ function MUnit(value) {
1161
1163
  }
1162
1164
  return {
1163
1165
  site: value.site,
1166
+ serviceType: value.serviceType,
1164
1167
  name: value.name,
1165
1168
  status: "active",
1166
1169
  createdAt: /* @__PURE__ */ new Date(),
@@ -1182,6 +1185,7 @@ function useUnitRepository() {
1182
1185
  try {
1183
1186
  await collection.createIndexes([
1184
1187
  { key: { site: 1 } },
1188
+ { key: { serviceType: 1 } },
1185
1189
  { key: { status: 1 } }
1186
1190
  ]);
1187
1191
  } catch (error) {
@@ -1200,7 +1204,7 @@ function useUnitRepository() {
1200
1204
  async function createUniqueIndex() {
1201
1205
  try {
1202
1206
  await collection.createIndex(
1203
- { site: 1, name: 1, deletedAt: 1 },
1207
+ { site: 1, serviceType: 1, name: 1, deletedAt: 1 },
1204
1208
  { unique: true }
1205
1209
  );
1206
1210
  } catch (error) {
@@ -1234,7 +1238,8 @@ function useUnitRepository() {
1234
1238
  page = 1,
1235
1239
  limit = 10,
1236
1240
  search = "",
1237
- site
1241
+ site,
1242
+ serviceType
1238
1243
  }) {
1239
1244
  page = page > 0 ? page - 1 : 0;
1240
1245
  const query = {
@@ -1251,6 +1256,10 @@ function useUnitRepository() {
1251
1256
  } catch (error) {
1252
1257
  throw new import_node_server_utils7.BadRequestError("Invalid site ID format.");
1253
1258
  }
1259
+ if (serviceType) {
1260
+ query.serviceType = serviceType;
1261
+ cacheOptions.serviceType = serviceType;
1262
+ }
1254
1263
  if (search) {
1255
1264
  query.$or = [{ name: { $regex: search, $options: "i" } }];
1256
1265
  cacheOptions.search = search;
@@ -1309,7 +1318,7 @@ function useUnitRepository() {
1309
1318
  } catch (error) {
1310
1319
  const isDuplicated = error.message.includes("duplicate");
1311
1320
  if (isDuplicated) {
1312
- throw new import_node_server_utils7.BadRequestError("Area already exists.");
1321
+ throw new import_node_server_utils7.BadRequestError("Unit already exists.");
1313
1322
  }
1314
1323
  throw error;
1315
1324
  }
@@ -1365,7 +1374,8 @@ function useAreaService() {
1365
1374
  const { getUnits: _getUnits } = useUnitRepository();
1366
1375
  async function importArea({
1367
1376
  dataJson,
1368
- site
1377
+ site,
1378
+ serviceType
1369
1379
  }) {
1370
1380
  let dataArray;
1371
1381
  try {
@@ -1386,7 +1396,8 @@ function useAreaService() {
1386
1396
  page: 1,
1387
1397
  limit: 999999,
1388
1398
  search: "",
1389
- site
1399
+ site,
1400
+ serviceType
1390
1401
  });
1391
1402
  if (unitsData && unitsData.items) {
1392
1403
  availableUnits = unitsData.items;
@@ -1433,7 +1444,8 @@ function useAreaService() {
1433
1444
  const areaData = {
1434
1445
  type: areaType,
1435
1446
  name: areaName,
1436
- site
1447
+ site,
1448
+ serviceType
1437
1449
  };
1438
1450
  if (row.SET !== void 0 && row.SET !== null && row.SET !== "") {
1439
1451
  const setNumber = parseInt(String(row.SET).trim());
@@ -1527,9 +1539,12 @@ function useAreaService() {
1527
1539
  }
1528
1540
  }
1529
1541
  }
1530
- async function exportAreas(site) {
1542
+ async function exportAreas({
1543
+ site,
1544
+ serviceType
1545
+ }) {
1531
1546
  try {
1532
- const areas = await getAreasForChecklist(site);
1547
+ const areas = await getAreasForChecklist(site, serviceType);
1533
1548
  if (!areas || !Array.isArray(areas) || areas.length === 0) {
1534
1549
  throw new import_node_server_utils8.BadRequestError(
1535
1550
  "There are no areas to export yet. Please add some areas first, then try again."
@@ -1616,7 +1631,8 @@ function useAreaController() {
1616
1631
  limit: import_joi4.default.number().min(1).optional().allow("", null),
1617
1632
  search: import_joi4.default.string().optional().allow("", null),
1618
1633
  type: import_joi4.default.string().valid("all", ...allowedTypes).optional().allow("", null),
1619
- site: import_joi4.default.string().hex().required()
1634
+ site: import_joi4.default.string().hex().required(),
1635
+ serviceType: import_joi4.default.string().valid(...Object.values(ServiceType)).required()
1620
1636
  });
1621
1637
  const { error } = validation.validate(query);
1622
1638
  if (error) {
@@ -1629,13 +1645,15 @@ function useAreaController() {
1629
1645
  const search = req.query.search ?? "";
1630
1646
  const type = req.query.type ?? "all";
1631
1647
  const site = req.params.site ?? "";
1648
+ const serviceType = req.query.serviceType ?? "";
1632
1649
  try {
1633
1650
  const data = await _getAreas({
1634
1651
  page,
1635
1652
  limit,
1636
1653
  search,
1637
1654
  type,
1638
- site
1655
+ site,
1656
+ serviceType
1639
1657
  });
1640
1658
  res.json(data);
1641
1659
  return;
@@ -1720,9 +1738,12 @@ function useAreaController() {
1720
1738
  next(new import_node_server_utils9.BadRequestError("File is required!"));
1721
1739
  return;
1722
1740
  }
1723
- const { site } = req.params;
1724
- const schema = import_joi4.default.string().hex().required();
1725
- const { error, value } = schema.validate(site);
1741
+ const query = { ...req.query, ...req.params };
1742
+ const validation = import_joi4.default.object({
1743
+ site: import_joi4.default.string().hex().required(),
1744
+ serviceType: import_joi4.default.string().valid(...Object.values(ServiceType)).required()
1745
+ });
1746
+ const { error, value } = validation.validate(query);
1726
1747
  if (error) {
1727
1748
  import_node_server_utils9.logger.log({ level: "error", message: error.message });
1728
1749
  next(new import_node_server_utils9.BadRequestError(error.message));
@@ -1731,7 +1752,7 @@ function useAreaController() {
1731
1752
  try {
1732
1753
  const xlsData = await convertBufferFile(req.file.buffer);
1733
1754
  const dataJson = JSON.stringify(xlsData);
1734
- const result = await _importArea({ dataJson, site: value });
1755
+ const result = await _importArea({ dataJson, ...value });
1735
1756
  return res.status(201).json(result);
1736
1757
  } catch (error2) {
1737
1758
  import_node_server_utils9.logger.log({ level: "error", message: error2.message });
@@ -1740,9 +1761,12 @@ function useAreaController() {
1740
1761
  }
1741
1762
  }
1742
1763
  async function exportAreas(req, res, next) {
1743
- const { site } = req.params;
1744
- const validation = import_joi4.default.string().hex().required();
1745
- const { error, value } = validation.validate(site);
1764
+ const query = { ...req.query, ...req.params };
1765
+ const validation = import_joi4.default.object({
1766
+ site: import_joi4.default.string().hex().required(),
1767
+ serviceType: import_joi4.default.string().valid(...Object.values(ServiceType)).required()
1768
+ });
1769
+ const { error, value } = validation.validate(query);
1746
1770
  if (error) {
1747
1771
  import_node_server_utils9.logger.log({ level: "error", message: error.message });
1748
1772
  next(new import_node_server_utils9.BadRequestError(error.message));
@@ -1833,7 +1857,8 @@ function useUnitService() {
1833
1857
  } = useUnitRepository();
1834
1858
  async function importUnit({
1835
1859
  dataJson,
1836
- site
1860
+ site,
1861
+ serviceType
1837
1862
  }) {
1838
1863
  let dataArray;
1839
1864
  try {
@@ -1874,7 +1899,8 @@ function useUnitService() {
1874
1899
  try {
1875
1900
  const insertedId = await _createUnit({
1876
1901
  name: unitName,
1877
- site
1902
+ site,
1903
+ serviceType
1878
1904
  });
1879
1905
  insertedUnitIds.push(insertedId);
1880
1906
  import_node_server_utils11.logger.info(`Successfully created unit: ${unitName}`);
@@ -1979,7 +2005,10 @@ function useUnitService() {
1979
2005
  session?.endSession();
1980
2006
  }
1981
2007
  }
1982
- async function exportUnits(site) {
2008
+ async function exportUnits({
2009
+ site,
2010
+ serviceType
2011
+ }) {
1983
2012
  const { generateUnitExcel: _generateUnitExcel } = useUnitExportService();
1984
2013
  const { getUnits: _getUnits } = useUnitRepository();
1985
2014
  try {
@@ -1987,7 +2016,8 @@ function useUnitService() {
1987
2016
  page: 1,
1988
2017
  limit: 999999,
1989
2018
  search: "",
1990
- site
2019
+ site,
2020
+ serviceType
1991
2021
  });
1992
2022
  if (!data || !data.items || data.items.length === 0) {
1993
2023
  throw new import_node_server_utils11.BadRequestError(
@@ -2044,7 +2074,8 @@ function useUnitController() {
2044
2074
  page: import_joi5.default.number().min(1).optional().allow("", null),
2045
2075
  limit: import_joi5.default.number().min(1).optional().allow("", null),
2046
2076
  search: import_joi5.default.string().optional().allow("", null),
2047
- site: import_joi5.default.string().hex().required()
2077
+ site: import_joi5.default.string().hex().required(),
2078
+ serviceType: import_joi5.default.string().valid(...Object.values(ServiceType)).required()
2048
2079
  });
2049
2080
  const { error } = validation.validate(query);
2050
2081
  if (error) {
@@ -2056,12 +2087,14 @@ function useUnitController() {
2056
2087
  const limit = parseInt(req.query.limit) ?? 10;
2057
2088
  const search = req.query.search ?? "";
2058
2089
  const site = req.params.site ?? "";
2090
+ const serviceType = req.query.serviceType ?? "";
2059
2091
  try {
2060
2092
  const data = await _getUnits({
2061
2093
  page,
2062
2094
  limit,
2063
2095
  search,
2064
- site
2096
+ site,
2097
+ serviceType
2065
2098
  });
2066
2099
  res.json(data);
2067
2100
  return;
@@ -2120,9 +2153,12 @@ function useUnitController() {
2120
2153
  next(new import_node_server_utils12.BadRequestError("File is required!"));
2121
2154
  return;
2122
2155
  }
2123
- const { site } = req.params;
2124
- const validation = import_joi5.default.string().hex().required();
2125
- const { error, value } = validation.validate(site);
2156
+ const query = { ...req.query, ...req.params };
2157
+ const validation = import_joi5.default.object({
2158
+ site: import_joi5.default.string().hex().required(),
2159
+ serviceType: import_joi5.default.string().valid(...Object.values(ServiceType)).required()
2160
+ });
2161
+ const { error, value } = validation.validate(query);
2126
2162
  if (error) {
2127
2163
  import_node_server_utils12.logger.log({ level: "error", message: error.message });
2128
2164
  next(new import_node_server_utils12.BadRequestError(error.message));
@@ -2131,7 +2167,7 @@ function useUnitController() {
2131
2167
  try {
2132
2168
  const xlsData = await convertBufferFile(req.file.buffer);
2133
2169
  const dataJson = JSON.stringify(xlsData);
2134
- const result = await _importUnit({ dataJson, site: value });
2170
+ const result = await _importUnit({ dataJson, ...value });
2135
2171
  return res.status(201).json(result);
2136
2172
  } catch (error2) {
2137
2173
  import_node_server_utils12.logger.log({ level: "error", message: error2.message });
@@ -2140,9 +2176,12 @@ function useUnitController() {
2140
2176
  }
2141
2177
  }
2142
2178
  async function exportUnits(req, res, next) {
2143
- const { site } = req.params;
2144
- const validation = import_joi5.default.string().hex().required();
2145
- const { error, value } = validation.validate(site);
2179
+ const query = { ...req.query, ...req.params };
2180
+ const validation = import_joi5.default.object({
2181
+ site: import_joi5.default.string().hex().required(),
2182
+ serviceType: import_joi5.default.string().valid(...Object.values(ServiceType)).required()
2183
+ });
2184
+ const { error, value } = validation.validate(query);
2146
2185
  if (error) {
2147
2186
  import_node_server_utils12.logger.log({ level: "error", message: error.message });
2148
2187
  next(new import_node_server_utils12.BadRequestError(error.message));
@@ -2188,7 +2227,8 @@ var import_mongodb6 = require("mongodb");
2188
2227
  var import_node_server_utils13 = require("@7365admin1/node-server-utils");
2189
2228
  var parentChecklistSchema = import_joi6.default.object({
2190
2229
  createdAt: import_joi6.default.alternatives().try(import_joi6.default.date(), import_joi6.default.string()).optional().allow("", null),
2191
- site: import_joi6.default.string().hex().required()
2230
+ site: import_joi6.default.string().hex().required(),
2231
+ serviceType: import_joi6.default.string().valid(...Object.values(ServiceType)).required()
2192
2232
  });
2193
2233
  function MParentChecklist(value) {
2194
2234
  const { error } = parentChecklistSchema.validate(value);
@@ -2205,6 +2245,7 @@ function MParentChecklist(value) {
2205
2245
  }
2206
2246
  return {
2207
2247
  site: value.site,
2248
+ serviceType: value.serviceType,
2208
2249
  status: "open",
2209
2250
  createdAt: value.createdAt ?? /* @__PURE__ */ new Date(),
2210
2251
  updatedAt: value.updatedAt ?? ""
@@ -2279,12 +2320,16 @@ function useParentChecklistRepo() {
2279
2320
  );
2280
2321
  return existingChecklist._id;
2281
2322
  }
2323
+ const allServiceTypes = Object.values(ServiceType);
2282
2324
  if (value.site) {
2283
- const checklistDoc = MParentChecklist({
2284
- site: value.site,
2285
- createdAt: currentDate
2286
- });
2287
- const result2 = await collection.insertOne(checklistDoc, { session });
2325
+ const checklistDocs2 = allServiceTypes.map(
2326
+ (serviceType) => MParentChecklist({
2327
+ site: value.site,
2328
+ createdAt: currentDate,
2329
+ serviceType
2330
+ })
2331
+ );
2332
+ const result2 = await collection.insertMany(checklistDocs2, { session });
2288
2333
  delNamespace().then(() => {
2289
2334
  import_node_server_utils14.logger.info(`Cache cleared for namespace: ${namespace_collection}`);
2290
2335
  }).catch((err) => {
@@ -2295,9 +2340,9 @@ function useParentChecklistRepo() {
2295
2340
  });
2296
2341
  const dateStr2 = currentDate.toISOString().split("T")[0];
2297
2342
  import_node_server_utils14.logger.info(
2298
- `Created parent checklist for site ${value.site} for today: ${dateStr2}`
2343
+ `Created ${checklistDocs2.length} parent checklists for site ${value.site} for today: ${dateStr2}`
2299
2344
  );
2300
- return result2.insertedId;
2345
+ return Object.values(result2.insertedIds);
2301
2346
  }
2302
2347
  const siteIds = await getHygieneSiteIds();
2303
2348
  if (!Array.isArray(siteIds)) {
@@ -2310,12 +2355,15 @@ function useParentChecklistRepo() {
2310
2355
  }
2311
2356
  const checklistDocs = [];
2312
2357
  for (const site of siteIds) {
2313
- checklistDocs.push(
2314
- MParentChecklist({
2315
- site,
2316
- createdAt: currentDate
2317
- })
2318
- );
2358
+ for (const serviceType of allServiceTypes) {
2359
+ checklistDocs.push(
2360
+ MParentChecklist({
2361
+ site,
2362
+ createdAt: currentDate,
2363
+ serviceType
2364
+ })
2365
+ );
2366
+ }
2319
2367
  }
2320
2368
  const result = await collection.insertMany(checklistDocs, { session });
2321
2369
  delNamespace().then(() => {
@@ -2343,13 +2391,15 @@ function useParentChecklistRepo() {
2343
2391
  site,
2344
2392
  startDate = "",
2345
2393
  endDate = "",
2346
- status = "all"
2394
+ status = "all",
2395
+ serviceType
2347
2396
  }) {
2348
2397
  page = page > 0 ? page - 1 : 0;
2349
- const query = {};
2398
+ const query = { serviceType };
2350
2399
  const cacheOptions = {
2351
2400
  page,
2352
- limit
2401
+ limit,
2402
+ serviceType
2353
2403
  };
2354
2404
  try {
2355
2405
  site = new import_mongodb7.ObjectId(site);
@@ -2589,6 +2639,7 @@ function useParentChecklistController() {
2589
2639
  limit: import_joi7.default.number().min(1).optional().allow("", null),
2590
2640
  search: import_joi7.default.string().optional().allow("", null),
2591
2641
  site: import_joi7.default.string().hex().required(),
2642
+ serviceType: import_joi7.default.string().valid(...Object.values(ServiceType)).required(),
2592
2643
  startDate: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
2593
2644
  endDate: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
2594
2645
  status: import_joi7.default.string().valid(...allowedStatus, "all").optional().allow("", null)
@@ -2603,6 +2654,7 @@ function useParentChecklistController() {
2603
2654
  const limit = parseInt(req.query.limit) ?? 10;
2604
2655
  const search = req.query.search ?? "";
2605
2656
  const site = req.params.site ?? "";
2657
+ const serviceType = req.query.serviceType ?? "";
2606
2658
  const startDate = req.query.startDate ?? "";
2607
2659
  const endDate = req.query.endDate ?? "";
2608
2660
  const status = req.query.status ?? "all";
@@ -2612,6 +2664,7 @@ function useParentChecklistController() {
2612
2664
  limit,
2613
2665
  search,
2614
2666
  site,
2667
+ serviceType,
2615
2668
  startDate,
2616
2669
  endDate,
2617
2670
  status
@@ -6865,6 +6918,7 @@ function useQRController() {
6865
6918
  MStock,
6866
6919
  MSupply,
6867
6920
  MUnit,
6921
+ ServiceType,
6868
6922
  allowedCheckOutItemStatus,
6869
6923
  allowedChecklistStatus,
6870
6924
  allowedPeriods,