Untitled

 avatar
unknown
plain_text
13 days ago
1.4 kB
3
Indexable
  void groupPermits() {
    groupedPermits.clear();

    // First pass - identify duplicates by pdfTemplate within categories
    Map<String, Map<String, List<PermitModel>>> duplicatesMap = {};

    for (var permit in subPermits) {
      if (!duplicatesMap.containsKey(permit.category)) {
        duplicatesMap[permit.category] = {};
      }
      if (!duplicatesMap[permit.category]!.containsKey(permit.pdfTemplate)) {
        duplicatesMap[permit.category]![permit.pdfTemplate] = [];
      }
      duplicatesMap[permit.category]![permit.pdfTemplate]!.add(permit);
    }

    // Second pass - create categories and copies as needed
    for (var category in duplicatesMap.keys) {
      var permits = duplicatesMap[category]!;
      int maxDuplicates = permits.values.map((list) => list.length).reduce(max);

      for (int copyIndex = 0; copyIndex < maxDuplicates; copyIndex++) {
        String categoryName = category;
        if (maxDuplicates > 1) {
          categoryName = '${category.tr} (${copyIndex + 1})';
        }

        groupedPermits[categoryName] = [];
        expandedStates[categoryName] = duplicatesMap.length <= 2;

        // Add one permit of each template to this category copy
        for (var templatePermits in permits.values) {
          if (copyIndex < templatePermits.length) {
            groupedPermits[categoryName]!.add(templatePermits[copyIndex]);
          }
        }
      }
    }
  }
Leave a Comment