findDupsByFields method
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);
}