createAndAssignSSCCUnit method

Future<({UnitAssignStatus assignStatus, HuDetails? huDetails})> createAndAssignSSCCUnit({
  1. required UnitSSCC unitSSCC,
  2. required ProcessOrderDetails poDetails,
  3. required PackingInstruction packingInstruction,
  4. required PackingFunction packingFunction,
  5. required ProcessType processType,
  6. required String regionString,
  7. HuDetails? proposalDetails,
  8. Json? createHUExtra,
  9. Json? packHUExtra,
  10. Json? getHUPackProposalExtra,
  11. Json? getHUManagementCSRFExtra,
  12. Options? getHUDetailsOptions,
})

Implementation

Future<({UnitAssignStatus assignStatus, HuDetails? huDetails})>
createAndAssignSSCCUnit({
  required UnitSSCC unitSSCC,
  required ProcessOrderDetails poDetails,
  required PackingInstruction packingInstruction,
  required PackingFunction packingFunction,
  required ProcessType processType,
  required String regionString,
  HuDetails? proposalDetails,
  Json? createHUExtra,
  Json? packHUExtra,
  Json? getHUPackProposalExtra,
  Json? getHUManagementCSRFExtra,
  Options? getHUDetailsOptions,
}) async {
  String csrfToken = await getHuManagementCSRFToken(
    getHUManagementCSRFExtra: getHUManagementCSRFExtra,
  );

  if (proposalDetails == null || unitSSCC.quantityIsChanged) {
    proposalDetails = await getHUPackProposal(
      csrfToken: csrfToken,
      poDetails: poDetails,
      packingInstruction: packingInstruction,
      getHUPackProposalExtra: getHUPackProposalExtra,
      getHUManagementCSRFExtra: getHUManagementCSRFExtra,
    );
  }

  await _createHandlingUnit(
    unitSSCC: unitSSCC,
    packingFunction: packingFunction,
    csrfToken: csrfToken,
    processType: processType,
    poDetails: poDetails,
    proposalDetails: proposalDetails!,
    regionString: regionString,
    createHUExtra: createHUExtra,
    getHUDetailsOptions: getHUDetailsOptions,
  );

  List<HuItem> materialItems =
      proposalDetails.toHuItem
          ?.where((item) => item.huItemType == '2')
          .toList() ??
      [];

  for (final HuItem item in materialItems) {
    if (item.material != null && item.numberPackagingMaterial != null) {
      await _packHandlingUnitWithPackMaterial(
        ssccCode: unitSSCC.barcodeData.code,
        uom: unitSSCC.getUnitOfMeasures(),
        materialNumber: item.material!,
        numberPackagingMaterial: item.numberPackagingMaterial!,
        huManagementCSRFToken: csrfToken,
        packHUExtra: packHUExtra,
      );
    }
  }

  await _packHandlingUnit(
    ssccNumber: unitSSCC.barcodeData.code,
    materialNumber: poDetails.headerMaterial,
    batchNumber: poDetails.batchNumber,
    uom: unitSSCC.getUnitOfMeasures(),
    packQty: packingInstruction.npPIHeaderPositions
        .getSSCCUnitQuantity(
          currentObjectsPerHu: unitSSCC.getCurrentObjectsPerHU(),
          defaultObjectsPerHU: unitSSCC.getDefaultObjectsPerHU(),
        )
        .toDouble(),
    stockCategory: poDetails.stockType,
    huManagementCSRFToken: csrfToken,
    regionString: regionString,
    packHUExtra: packHUExtra,
  );

  HuDetails? huDetails = await getHuDetails(
    ssccCode: unitSSCC.barcodeData.code,
    getHUDetailsOptions: getHUDetailsOptions,
  );

  if (!_huDetailsAreMatchingPoDetails(
    poDetails: poDetails,
    huDetails: huDetails,
  )) {
    return (assignStatus: UnitAssignStatus.inactive, huDetails: huDetails);
  }

  UnitAssignStatus assignStatus = getAssignStatusBasedOnPackingObject(
    huDetails: huDetails!,
    poDetails: poDetails,
  );

  return (assignStatus: assignStatus, huDetails: huDetails);
}