Skip to main content

autoUpdateCIMASupplierDataBySupplierData

Overview

A cron job that processes queued tasks to sync CIMA supplier delivery data into the Order table. It matches CIMA records against order documents and updates order fields with the supplier-provided data.

Function autoUpdateCIMASupplierDataBySupplierData
Task Code Auto Update CIMA Supplier Data By Supplier Data
Schedule Every 10 seconds (temp override)minutes
Source File src/_cron/cron.service.ts

Changelog

Date Author Description
2026-02-25 sf See v2 — fixedFixed transaction scope, added null guards, added plateNo matching, restored schedule,schedule to 10 min, removed sendTo overrideoverride, added deliveryDatetime 1-month filter

Previous versions are preserved in Page Revisions (top-right menu → Revisions).


v2 — Current Logic (After Changes)

Schedule

EVERY_10_MINUTES

Processing Flow

  1. Pick oldest Pending task and mark Running
  2. Fetch all CimaDeliveryInfo where status = Pending AND deliveryDatetime >= now - 1 month, ordered by id ASC
  3. For each record — processed in its own individual transaction:
    • Find OrderDocument where referenceKey = DO# AND autoUpdateFor = CIMA AND plateNo = supplierData.plateNo
    • If not found → log warning and skip
    • If found but documentStatus not in allowed list → log debug and skip
    • If order not found by orderId → log warning and skip (Steps 4–6 are not executed)
    • Step 3: Update Order fields (without overriding sendTo)
    • Step 4: Mark CimaDeliveryInfo.statusCompleted
    • Step 5: If documentStatus = Pending Auto Update (CIMA) → update OrderDocument.documentStatusAuto Approved (skipped if already Approved or Auto Approved)
    • Step 6: Insert a record into OrderJobTrackingLog with action CIMA Supplier Data Auto Update by Supplier Data
  4. Finally: update task status → Success or Fail

Allowed documentStatus values

  • Approved
  • Auto Approved
  • Pending Auto Update (CIMA)

Order Fields Updated

Field Source
actualLoadedQuantity supplierData.netWeight
grossWeight supplierData.grossWeight
netWeight supplierData.netWeight
tareWeight supplierData.tareWeight
sealNumber supplierData.sealNo
supplierDoDatetime supplierData.deliveryDatetime
supplierDoPlateNo supplierData.plateNo
deliveryOrderNumber supplierData.deliveryOrderNumber
updatedBy System

sendTo is not updated — preserved from original order value.

Changes from v1

#IssueFix
1Single transaction for all records — one failure rolled back everythingEach record now has its own transaction
2Steps 4–6 ran even if order was nullAdded early return with warning if order not found
3No warning when OrderDocument not foundAdded logger.warn with DO# and plateNo
4No plateNo matching on OrderDocument lookupAdded plateNo: supplierData.plateNo to query
5Schedule stuck at EVERY_10_SECONDS (temp override)Restored to EVERY_10_MINUTES
6order.sendTo = order.clientName unconditionally overwrote sendToRemoved — sendTo is never overridden
7deliveryDatetime had no filter — old stale records were processedAdded deliveryDatetime >= now - 1 month filter

v1 — Original Logic (Before Changes)

Schedule

EVERY_10_SECONDS (temp override of original EVERY_10_MINUTES)

Processing Flow

  1. Pick oldest Pending task and mark Running
  2. Fetch ALL CimaDeliveryInfo where status = Pending — no date filter, no limit
  3. All records processed in a single transaction (one failure rolls back everything):
    • Find OrderDocument where referenceKey = DO# AND autoUpdateFor = CIMA — no plateNo matching
    • If not found → silently skip (no log)
    • If found but documentStatus not in allowed list → log debug and skip
    • Step 3: Update Order fields including order.sendTo = order.clientName (unconditional override)
    • If order is null, Steps 4–6 still execute — meaning CimaDeliveryInfo gets marked Completed and OrderDocument gets set to Auto Approved even though the order fields were never actually updated
    • Step 4: Mark CimaDeliveryInfo.status → Completed — runs regardless of whether Step 3 succeeded
    • Step 5: If documentStatus = Pending Auto Update (CIMA) → update OrderDocument.documentStatus → Auto Approved — runs regardless of whether Step 3 succeeded
    • Step 6: Insert a record into OrderJobTrackingLog with action CIMA Supplier Data Auto Update by Supplier Data — logs as success even if the order was not found or updated
  4. Finally: update task status → Success or Fail

Order Fields Updated (v1)

FieldSource
actualLoadedQuantitysupplierData.netWeight
grossWeightsupplierData.grossWeight
netWeightsupplierData.netWeight
tareWeightsupplierData.tareWeight
sealNumbersupplierData.sealNo
supplierDoDatetimesupplierData.deliveryDatetime
supplierDoPlateNosupplierData.plateNo
deliveryOrderNumbersupplierData.deliveryOrderNumber
sendToorder.clientName (always overwritten)
updatedBySystem