findDupsByFields method

TwoLists<ContactWeebi> findDupsByFields({
  1. required List<ContactWeebi> newList,
})

Implementation

TwoLists<ContactWeebi> findDupsByFields(
    {required List<ContactWeebi> newList}) {
  if (isEmpty) {
    return TwoLists(noDups: newList, dups: <ContactWeebi>[]);
  }
  final listNoDups = <ContactWeebi>[];
  final listDups = <ContactWeebi>[];

  Map<int, ContactWeebi> mapOldFullName = {};
  Map<int, ContactWeebi> mapOldTel = {};
  Map<int, ContactWeebi> mapOldMail = {};
  // print('oldList.length ${oldList.length}');
  // print('this.length $length');
  for (var oldH in this) {
    mapOldFullName[oldH.fullNameHash] = oldH;
    mapOldTel[oldH.telHash] = oldH;
    mapOldMail[oldH.mailHash] = oldH;
  }
  for (var newH in newList) {
    if ((newH.phone.toString().isNotEmpty &&
        mapOldTel.keys.contains(newH.telHash))) {
      // on trie sur le tel ou sur le mail et ajoute ceux qui correspondent
      newH = newH.copyWith(id: mapOldTel[newH.telHash]!.id);
      listDups.add(newH);
    } else if ((newH.mail.isNotEmpty &&
        mapOldMail.keys.contains(newH.mailHash))) {
      newH = newH.copyWith(id: mapOldMail[newH.mailHash]!.id);
      listDups.add(newH);
    } else {
      // sur les autres on vérifie le nomComplet
      if (newH.fullName.isNotEmpty &&
          mapOldFullName.keys.contains(newH.fullNameHash)) {
        // We make sure that we update the dup list with the old values missing from files
        // it is only relevant here because we built updating objects with dummy values
        // and this dup list will be used
        final originalContact = mapOldFullName[newH.fullNameHash]!;
        newH = newH.copyWith(
          id: originalContact.id,
          creationDate: originalContact.creationDate,
          status: originalContact.status,
          statusUpdateDate: originalContact.statusUpdateDate,
          avatar: originalContact.avatar,
          isClient: originalContact.isClient,
          isSupplier: originalContact.isSupplier,
        );
        listDups.add(newH);
      } else {
        // on ajoute ceux qui ne correspondent pas
        // l'id a déjà été ajouté
        listNoDups.add(newH);
      }
    }
  }

  return TwoLists<ContactWeebi>(dups: listDups, noDups: listNoDups);
}