@7365admin1/core 3.35.0 → 3.36.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.mjs CHANGED
@@ -24555,6 +24555,18 @@ function useSiteCameraRepo() {
24555
24555
  throw new BadRequestError71("Failed to retrieve site cameras.");
24556
24556
  }
24557
24557
  }
24558
+ async function getCamerasBySiteId(site) {
24559
+ const _site = toObjectId9(site);
24560
+ try {
24561
+ const items = await collection.find({ site: _site, status: "active", type: "anpr" }).toArray();
24562
+ return items;
24563
+ } catch (error) {
24564
+ if (error instanceof BadRequestError71) {
24565
+ throw error;
24566
+ }
24567
+ throw new BadRequestError71("Failed to retrieve site cameras.");
24568
+ }
24569
+ }
24558
24570
  async function getBySiteGuardPost(site, guardPost) {
24559
24571
  try {
24560
24572
  site = new ObjectId44(site);
@@ -24911,6 +24923,7 @@ function useSiteCameraRepo() {
24911
24923
  getBySite,
24912
24924
  getVisitorsInBySite,
24913
24925
  getBySites,
24926
+ getCamerasBySiteId,
24914
24927
  delCachedData,
24915
24928
  getBySiteGuardPost,
24916
24929
  updateById,
@@ -25236,6 +25249,22 @@ function usePersonRepo() {
25236
25249
  );
25237
25250
  }
25238
25251
  }
25252
+ async function getApprovedPersonByPlateNumber(plateNumber, excludePersonId) {
25253
+ try {
25254
+ const query = {
25255
+ plateNumber,
25256
+ status: "approved"
25257
+ };
25258
+ if (excludePersonId) {
25259
+ query._id = { $ne: toObjectId10(excludePersonId) };
25260
+ }
25261
+ return await collection.findOne(query);
25262
+ } catch (error) {
25263
+ throw new InternalServerError26(
25264
+ "Failed to fetch approved person by plate number."
25265
+ );
25266
+ }
25267
+ }
25239
25268
  async function getByNRIC(value) {
25240
25269
  try {
25241
25270
  if (!value || value.trim() === "") {
@@ -25616,6 +25645,7 @@ function usePersonRepo() {
25616
25645
  getById,
25617
25646
  createTextIndex,
25618
25647
  getPersonByPlateNumber,
25648
+ getApprovedPersonByPlateNumber,
25619
25649
  getByNRIC,
25620
25650
  createIndexes,
25621
25651
  getPersonByPhoneNumber,
@@ -26800,7 +26830,8 @@ function useVehicleService() {
26800
26830
  throw new Error("Unable to start session for vehicle service.");
26801
26831
  }
26802
26832
  }
26803
- const [_vehiclePlateNumber] = value.plateNumber;
26833
+ const plateNumbers = Array.isArray(value.plateNumber) ? value.plateNumber : value.plateNumber ? [value.plateNumber] : [];
26834
+ const [_vehiclePlateNumber] = plateNumbers;
26804
26835
  const [existingPlateNumber, org] = await Promise.all([
26805
26836
  _getVehicleByPlateNumber(_vehiclePlateNumber),
26806
26837
  _getById(value.org)
@@ -26865,7 +26896,6 @@ function useVehicleService() {
26865
26896
  }
26866
26897
  }
26867
26898
  const owner = value.name;
26868
- const plateNumbers = value.plateNumber;
26869
26899
  try {
26870
26900
  if (!isExternalSession) {
26871
26901
  session.startTransaction();
@@ -27082,7 +27112,10 @@ function useVehicleService() {
27082
27112
  const dahuaResponse = await _addPlateNumber(dahuaPayload);
27083
27113
  if (dahuaResponse?.statusCode != 200) {
27084
27114
  console.log("dahuaResponse", dahuaResponse);
27085
- console.log("approveVehicleById dahuaResponse dahuaResponse?.statusCode != 200", dahuaResponse?.statusCode);
27115
+ console.log(
27116
+ "approveVehicleById dahuaResponse dahuaResponse?.statusCode != 200",
27117
+ dahuaResponse?.statusCode
27118
+ );
27086
27119
  throw new BadRequestError75("Failed to add plate number to ANPR");
27087
27120
  }
27088
27121
  const responseData = dahuaResponse?.data.toString("utf-8");
@@ -27289,7 +27322,19 @@ function useVehicleService() {
27289
27322
  if (value.peopleId) {
27290
27323
  value.peopleId = new ObjectId49(value.peopleId);
27291
27324
  }
27292
- const { name, plateNumber, start, end, recNo, type, unit, site, block, level, ...rest } = value;
27325
+ const {
27326
+ name,
27327
+ plateNumber,
27328
+ start,
27329
+ end,
27330
+ recNo,
27331
+ type,
27332
+ unit,
27333
+ site,
27334
+ block,
27335
+ level,
27336
+ ...rest
27337
+ } = value;
27293
27338
  if (_name != name || _plateNumber != plateNumber) {
27294
27339
  const startDahua = value.start ? formatDahuaDate(new Date(value.start)) : formatDahuaDate(new Date(_start));
27295
27340
  const endDahua = value.end ? formatDahuaDate(new Date(value.end)) : formatDahuaDate(new Date(_end));
@@ -27316,7 +27361,11 @@ function useVehicleService() {
27316
27361
  for (const camera of siteCameras) {
27317
27362
  const { host, username, password } = camera;
27318
27363
  if (_plateNumber != plateNumber) {
27319
- console.log("updateVehicleById _plateNumber != plateNumber", _plateNumber, plateNumber);
27364
+ console.log(
27365
+ "updateVehicleById _plateNumber != plateNumber",
27366
+ _plateNumber,
27367
+ plateNumber
27368
+ );
27320
27369
  const removePlateNumber = {
27321
27370
  host,
27322
27371
  username,
@@ -27363,7 +27412,11 @@ function useVehicleService() {
27363
27412
  );
27364
27413
  }
27365
27414
  } else {
27366
- console.log("updateVehicleById _plateNumber == plateNumber", _plateNumber, plateNumber);
27415
+ console.log(
27416
+ "updateVehicleById _plateNumber == plateNumber",
27417
+ _plateNumber,
27418
+ plateNumber
27419
+ );
27367
27420
  const dahuaPayload = {
27368
27421
  host,
27369
27422
  username,
@@ -36249,7 +36302,8 @@ function usePersonService() {
36249
36302
  getById: _getById,
36250
36303
  updateById: _updateById,
36251
36304
  getByUserId: _getByUserId,
36252
- reviewResidentPerson: _reviewResidentPerson
36305
+ reviewResidentPerson: _reviewResidentPerson,
36306
+ getApprovedPersonByPlateNumber
36253
36307
  } = usePersonRepo();
36254
36308
  const { addPlateNumber: _addPlateNumber } = useDahuaService();
36255
36309
  const {
@@ -36262,7 +36316,7 @@ function usePersonService() {
36262
36316
  } = useUserRepo();
36263
36317
  const { add: addMember } = useMemberRepo();
36264
36318
  const { getById: _getUnitById, updateById: updateUnitById } = useBuildingUnitRepo();
36265
- const { getAllCameraWithPassword: _getAllSiteCameras } = useSiteCameraRepo();
36319
+ const { getAllCameraWithPassword: _getAllSiteCameras, getCamerasBySiteId } = useSiteCameraRepo();
36266
36320
  const { updateStatusById } = useFileRepo();
36267
36321
  const { getById: getOrgById } = useOrgRepo();
36268
36322
  const { getSiteById } = useSiteRepo();
@@ -36357,7 +36411,7 @@ function usePersonService() {
36357
36411
  "./public/handlebars/registration-pending"
36358
36412
  )
36359
36413
  });
36360
- mailer.sendMail({
36414
+ await mailer.sendMail({
36361
36415
  to: value.email,
36362
36416
  subject: "Registration Received \u2013 Pending Review",
36363
36417
  html: emailContent,
@@ -36517,7 +36571,7 @@ function usePersonService() {
36517
36571
  value.approvedBy.id = approvedBy._id;
36518
36572
  }
36519
36573
  const vehicle = {
36520
- plateNumber: person.plateNumber || "",
36574
+ plateNumber: person.plateNumber ?? "",
36521
36575
  type: "whitelist",
36522
36576
  category: person.type || "",
36523
36577
  name: person.name,
@@ -36549,7 +36603,16 @@ function usePersonService() {
36549
36603
  case "approved":
36550
36604
  userStatus = "active";
36551
36605
  if (person.plateNumber && person.plateNumber.trim() !== "") {
36552
- await addVehicle(vehicle, session);
36606
+ const anprCameraList = await getCamerasBySiteId(
36607
+ person.site.toString()
36608
+ );
36609
+ const existingPerson = await getApprovedPersonByPlateNumber(
36610
+ person.plateNumber,
36611
+ id
36612
+ );
36613
+ if (anprCameraList.length > 0 && !existingPerson) {
36614
+ await addVehicle(vehicle, session);
36615
+ }
36553
36616
  }
36554
36617
  title = "Your account has been approved";
36555
36618
  hideLogin = false;