getScanData method

ScanData getScanData(
  1. String barcode
)

multipurpose scanner processing. It returns a combined result out of all possible interpretations.

Implementation

ScanData getScanData(String barcode) {
  ScanData? gs1ScanData;
  String? errorMessage;
  try {
    // Handle GS1 case
    gs1ScanData = _getScanDataFromGs1Code(barcode);
  } on Exception catch (_) {}

  // Handle non-GS1 QR/2D code
  // 1. TM
  final tMATScanData = _getScanDataFromTMATPattern(barcode);

  // 2. Order numbers
  final poScanData = _getScanDataFromPurchaseOrderPattern(barcode);

  //The previous interpretations are accepted as Standards
  if ((gs1ScanData ?? tMATScanData ?? poScanData) == null) {
    errorMessage = 'No known BASF standard detected';
  }

  // Handle 1D order number cases:
  final poUnclearScanData = _getScanDataFromPurchaseOrderUnclearPattern(barcode);
  // Handle plain int numbers.
  final uncategorizedScanData = _getUncategorizedData(barcode);

  final finalScanData = (gs1ScanData ?? ScanData()).copyWith(
    errorMessage: errorMessage,
    plant: tMATScanData?.plant,
    storageLocation: tMATScanData?.storageLocation,
    materialNumber: tMATScanData?.materialNumber,
    equipmentNumber: tMATScanData?.equipmentNumber,
    functionalLocation: tMATScanData?.functionalLocation,
    storageBin: tMATScanData?.storageBin,
    orderNumber: poScanData?.orderNumber ?? poUnclearScanData?.orderNumber,
    inboundDeliveryNumber:
    poScanData?.inboundDeliveryNumber ?? poUnclearScanData?.inboundDeliveryNumber,
    outboundDeliveryNumber:
    poScanData?.outboundDeliveryNumber ?? poUnclearScanData?.outboundDeliveryNumber,
    orderItemNumber: poScanData?.orderItemNumber ?? poUnclearScanData?.orderItemNumber,
    uncategorizedString: uncategorizedScanData.uncategorizedString,
    uncategorizedInt: uncategorizedScanData.uncategorizedInt,
  );
  return finalScanData;
}