createAndAssignSSCCUnitConsolidated method

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

Implementation

Future<({UnitAssignStatus assignStatus, HuDetails? huDetails})>
createAndAssignSSCCUnitConsolidated({
  required UnitSSCC unitSSCC,
  required ProcessOrderDetails poDetails,
  required PackingInstruction packingInstruction,
  required PackingFunction packingFunction,
  required String regionString,
  required ProcessType processType,
  HuDetails? proposalDetails,
  Json? createHUExtra,
  Json? packHUExtra,
  Json? unpackHUExtra,
  Options? getHUDetailsOptions,
  Json? getHUManagementCSRFExtra,
  Json? getHUPackProposalExtra,
}) 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,
    csrfToken: csrfToken,
    poDetails: poDetails,
    proposalDetails: proposalDetails!,
    processType: processType,
    stockCategory: poDetails.stockType,
    packingFunction: packingFunction,
    regionString: regionString,
    createHUExtra: createHUExtra,
    getHUDetailsOptions: getHUDetailsOptions,
  );

  if (packingFunction != PackingFunction.full) {
    await _packHandlingUnit(
      ssccNumber: unitSSCC.barcodeData.code,
      materialNumber: poDetails.headerMaterial,
      batchNumber: poDetails.batchNumber,
      uom: unitSSCC.getUnitOfMeasures(),
      packQty: unitSSCC.getCurrentQuantity(),
      stockCategory: poDetails.stockType,
      huManagementCSRFToken: csrfToken,
      regionString: regionString,
      packHUExtra: packHUExtra,
    );
  }

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

  if (unitSSCC.quantityIsChanged) {
    // TODO: can be potential issue for empty unit
    await repackHandlingUnit(
      updatedUnit: unitSSCC,
      headerMaterial: poDetails.headerMaterial,
      batchNumber: poDetails.batchNumber,
      huDetails: huDetails,
      regionString: regionString,
      getHUDetailsOptions: getHUDetailsOptions,
      unpackHUExtra: unpackHUExtra,
      packHUExtra: packHUExtra,
      getHUManagementCSRFExtra: getHUManagementCSRFExtra,
    );
  }

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

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

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