getPOHistoryDeliveries method

Future<List<Delivery>> getPOHistoryDeliveries({
  1. required String material,
  2. required String? poNumber,
  3. required String? batch,
  4. required HuRepo huRepo,
  5. String acceptableType = 'L',
  6. String? mainDeliveryNumber,
  7. Options? getPurchaseConfirmationOptions,
  8. Options? getHUDetailsReferenceOptions,
  9. Options? getUnitsOfMeasureOptions,
  10. Options? getDeliveriesOptions,
  11. Options? getMaterialByBatchOptions,
})

Implementation

Future<List<Delivery>> getPOHistoryDeliveries({
  required String material,
  required String? poNumber,
  required String? batch,
  required HuRepo huRepo,
  String acceptableType = 'L',
  String? mainDeliveryNumber,
  Options? getPurchaseConfirmationOptions,
  Options? getHUDetailsReferenceOptions,
  Options? getUnitsOfMeasureOptions,
  Options? getDeliveriesOptions,
  Options? getMaterialByBatchOptions,
}) async {
  if (poNumber == null) return [];

  final poHistoryList = await getPurchaseOrderHistory(
    poNumber: poNumber,
    getPurchaseConfirmationOptions: getPurchaseConfirmationOptions,
    acceptableType: acceptableType,
  );

  final deliveries = await Future.wait(
    poHistoryList.map(
      (poHistory) async => await getDelivery(
        deliveryNumber: poHistory.matDoc,
        getDeliveriesOptions: getDeliveriesOptions,
      ),
    ),
  );

  List<Delivery> filteredDeliveries = deliveries
      .whereType<Delivery>()
      .toList();
  List<UnitOfMeasuresDto> recalculationUOMs =
      await UOMService(
        client: _deliveryApiProvider.client,
      ).loadUnitOfMeasures(
        material: material,
        getUnitsOfMeasureOptions: getUnitsOfMeasureOptions,
      );

  List<HuDetails> deliveryDetails = [];

  if (mainDeliveryNumber != null) {
    deliveryDetails = await huRepo.getAssignedHUDetails(
      deliveryNumber: mainDeliveryNumber,
      material: material,
      batch: batch,
      getHUDetailsReferenceOptions: getHUDetailsReferenceOptions,
      getMaterialByBatchOptions: getMaterialByBatchOptions,
    );
  }

  filteredDeliveries = filteredDeliveries
      .map((del) {
        return del.copyWith(
          toItemList: del.toItemList.map((item) {
            return item.copyWith(
              recalculationUOMs: recalculationUOMs,
              deliveryHUs: deliveryDetails.getDeliveryHUS(del.deliveryNumber),
            );
          }).toList(),
        );
      })
      .toList(growable: true);

  return filteredDeliveries;
}