reportStockArtCalibres property

List<ReportStockArtCalibre> get reportStockArtCalibres

Implementation

List<ReportStockArtCalibre> get reportStockArtCalibres {
  // reset
  for (final r in emptyReportStockArtCalibres) {
    r.initialQtCl = 0.0;
    r.finalQtCl = 0.0;
    //r.initialQtTickets = 0.0; // not mentioned here but needed keep it
    r.varQtTickets = 0.0; // not mentioned here but needed keep it
    for (final a in r.articles) {
      a.qtIn = 0.0;
      a.qtOut = 0.0;
    }
  }
  final dateRange = DateRange(start, end);
  // ticket logic is handled here
  emptyReportStockArtCalibres = tickets.herderTicketsStock(
      objectId, dateRange, articlesC, emptyReportStockArtCalibres);

  final products = articlesC.where((p) => p.id != 0);
  for (final cH in closingsObjects) {
    // filtering like .where but more performant
    if (cH.contactId == objectId && cH.closingRange.isInRange(start, end)) {
      for (final p in products) {
        // NO products can be bought & sold on the same ticket
        // so we can SUM ALL movements

        if (cH.articleCalibres.any((cSP) => cSP.id == p.id)) {
          // qtin && qtOut needed for milk

          // find the one matching the time filter
          final clStockPrd = cH.articleCalibres
              .firstWhere((closingStockP) => closingStockP.id == p.id);
          // find the report
          final rP = emptyReportStockArtCalibres
              .firstWhere((reportStockP) => reportStockP.id == p.id);
          // update values
          rP.initialQtCl += clStockPrd.initialQtCl;
          rP.finalQtCl += clStockPrd.finalQtCl;
          // print("rP.finalQtCl ${rP.finalQtCl} rP.initialQtCl ${rP.initialQtCl} ${rP.title}");
          if (p.articles.length > 1) {
            for (final article in p.articles) {
              // find the one matching the time filter
              if (clStockPrd.articles.any((a) =>
                  a.id == article.id && a.calibreId == article.calibreId)) {
                // find the exact closing
                var cSArticle = clStockPrd.articles.firstWhere((a) =>
                    a.id == article.id && a.calibreId == article.calibreId);

                // find the report
                final aR = rP.articles.firstWhere((element) =>
                    element.id == article.id &&
                    element.calibreId == article.calibreId);
                // update values
                aR.qtIn += cSArticle.quantityIn;
                aR.qtOut += cSArticle.quantityOut;
              }
            }
          }
        } else {
          // print('closings do not fit requirements');
        }
      }
    }
  }
  return emptyReportStockArtCalibres;
}