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,
    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;
}