/// <summary> /// check the contact possibilities entries for changes. /// </summary> /// <param name="oldOne">the old ones</param> /// <param name="newOne">the new ones</param> /// <param name="idOfModel">the id of model</param> /// <param name="userOfModification">who made the changes?</param> /// <param name="deleteEntries">if true, then the deleted property will be unvisible for all older ones as well, if false the older values stay</param> /// <param name="listWithCreation">the list with entries which should be created afterwards</param> /// <param name="listWithDeletion">the list with modification entries which should be deleted afterwards</param> /// <param name="nextNewId">the next new index of modification entry of entities to consider</param> /// <param name="modelType">for which model type</param> private static void GetModificationsForContactEntriesObject(List <ContactPossibilitiesEntry> oldOne, List <ContactPossibilitiesEntry> newOne, long idOfModel, User userOfModification, bool deleteEntries, List <ModificationEntry> listWithCreation, List <ModificationEntry> listWithDeletion, MODEL_TYPE modelType, int nextNewId) { foreach (ContactPossibilitiesEntry entryOld in oldOne) { DATA_TYPE dataType = DATA_TYPE.PHONE_EXTENDED; if (new MailValidator().IsValid(entryOld.ContactEntryValue)) { dataType = DATA_TYPE.MAIL_EXTENDED; } ContactPossibilitiesEntry newEntryToFind = newOne.Find(a => a.Id == entryOld.Id); if (newEntryToFind == null && deleteEntries) { listWithDeletion.Add(GetNewModificationEntry("", entryOld.ContactEntryValue, idOfModel, modelType, dataType, userOfModification, MODIFICATION.DELETED, (int)entryOld.Id)); listWithCreation.Add(GetNewModificationEntry("", "", idOfModel, modelType, dataType, userOfModification, MODIFICATION.DELETED, (int)entryOld.Id, true)); } else { if (newEntryToFind == null || !newEntryToFind.ContactEntryName.Equals(entryOld.ContactEntryName) || !newEntryToFind.ContactEntryValue.Equals(entryOld.ContactEntryValue)) { string newValue = string.Empty; string newName = string.Empty; if (newEntryToFind != null) { newName = newEntryToFind.ContactEntryName; newValue = newEntryToFind.ContactEntryValue; } listWithCreation.Add(GetNewModificationEntry(newName + ":" + newValue, entryOld.ContactEntryName + ":" + entryOld.ContactEntryValue, idOfModel, modelType, dataType, userOfModification, MODIFICATION.MODIFIED, (int)entryOld.Id)); } } } foreach (ContactPossibilitiesEntry entryNew in newOne) { if (oldOne.Find(a => a.Id == entryNew.Id) == null) { DATA_TYPE dataType = DATA_TYPE.PHONE_EXTENDED; if (new MailValidator().IsValid(entryNew.ContactEntryValue)) { dataType = DATA_TYPE.MAIL_EXTENDED; } listWithCreation.Add(GetNewModificationEntry(entryNew.ContactEntryName + ":" + entryNew.ContactEntryValue, "", idOfModel, modelType, dataType, userOfModification, MODIFICATION.ADDED, nextNewId++)); } } }
public async Task <bool> UpdateAsync(Contact contact, long id) { Contact originalContact = await Entities .Include(x => x.Address) .Include(a => a.History) .Include(t => t.Tags) .Include(y => y.ContactPossibilities) .ThenInclude(b => b.ContactEntries) .FirstAsync(x => x.Id == id); if (originalContact != null) { originalContact.Address.Street = contact.Address.Street; originalContact.Address.StreetNumber = contact.Address.StreetNumber; originalContact.Address.City = contact.Address.City; originalContact.Address.Country = contact.Address.Country; originalContact.Address.Zipcode = contact.Address.Zipcode; originalContact.ContactPossibilities.Fax = contact.ContactPossibilities.Fax; originalContact.ContactPossibilities.Mail = contact.ContactPossibilities.Mail; originalContact.ContactPossibilities.PhoneNumber = contact.ContactPossibilities.PhoneNumber; List <ContactPossibilitiesEntry> toBeDeleted = new List <ContactPossibilitiesEntry>(); foreach (ContactPossibilitiesEntry entry in originalContact.ContactPossibilities.ContactEntries) { if (contact.ContactPossibilities.ContactEntries.FirstOrDefault(x => x.Id == entry.Id) == null) { toBeDeleted.Add(entry); } } foreach (ContactPossibilitiesEntry entry in toBeDeleted) { originalContact.ContactPossibilities.ContactEntries.Remove(entry); } foreach (ContactPossibilitiesEntry entry in contact.ContactPossibilities.ContactEntries) { if (entry.Id != 0) { ContactPossibilitiesEntry existentEntry = originalContact.ContactPossibilities.ContactEntries.FirstOrDefault(x => x.Id == entry.Id); if (existentEntry != null) { existentEntry.ContactEntryValue = entry.ContactEntryValue; existentEntry.ContactEntryName = entry.ContactEntryName; } } else { originalContact.ContactPossibilities.ContactEntries.Add(entry); } } List <Tag> tagsToAdd = new List <Tag>(); List <Tag> tagsToRemove = new List <Tag>(); foreach (Tag tag in contact.Tags) { if (originalContact.Tags.Find(a => a.Name.Equals(tag.Name)) == null) { tagsToAdd.Add(new Tag() { Id = 0, Name = tag.Name }); } } foreach (Tag tag in originalContact.Tags) { if (contact.Tags.Find(a => a.Name.Equals(tag.Name)) == null) { tagsToRemove.Add(tag); } } foreach (Tag tag in tagsToRemove) { originalContact.Tags.Remove(tag); } foreach (Tag tag in tagsToAdd) { originalContact.Tags.Add(tag); } originalContact.Description = contact.Description; originalContact.Name = contact.Name; originalContact.PreName = contact.PreName; originalContact.Gender = contact.Gender; originalContact.ContactPartner = contact.ContactPartner; await UpdateAsync(originalContact); return(true); } else { return(false); } }
public async Task <bool> UpdateAsyncWithAlleDependencies(Organization newOrganization) { Organization organization = await Entities .Include(t => t.Tags) .Include(a => a.Events) .ThenInclude(d => d.Event) .Include(d => d.History) .Include(x => x.Address) .Include(y => y.OrganizationContacts) .Include(z => z.Contact) .ThenInclude(a => a.ContactEntries) .FirstOrDefaultAsync(b => b.Id == newOrganization.Id); if (organization != null) { organization.Name = newOrganization.Name; organization.Description = newOrganization.Description; organization.Address.City = newOrganization.Address.City; organization.Address.Country = newOrganization.Address.Country; organization.Address.Street = newOrganization.Address.Street; organization.Address.StreetNumber = newOrganization.Address.StreetNumber; organization.Address.Zipcode = newOrganization.Address.Zipcode; organization.Contact.Fax = newOrganization.Contact.Fax; organization.Contact.PhoneNumber = newOrganization.Contact.PhoneNumber; organization.Contact.Mail = newOrganization.Contact.Mail; List <ContactPossibilitiesEntry> toBeDeleted = new List <ContactPossibilitiesEntry>(); foreach (ContactPossibilitiesEntry entry in organization.Contact.ContactEntries) { if (newOrganization.Contact.ContactEntries.FirstOrDefault(x => x.Id == entry.Id) == null) { toBeDeleted.Add(entry); } } foreach (ContactPossibilitiesEntry entry in toBeDeleted) { organization.Contact.ContactEntries.Remove(entry); } foreach (ContactPossibilitiesEntry entry in newOrganization.Contact.ContactEntries) { if (entry.Id != 0) { ContactPossibilitiesEntry existentEntry = organization.Contact.ContactEntries.FirstOrDefault(x => x.Id == entry.Id); if (existentEntry != null) { existentEntry.ContactEntryValue = entry.ContactEntryValue; existentEntry.ContactEntryName = entry.ContactEntryName; } } else { organization.Contact.ContactEntries.Add(entry); } } List <Tag> tagsToAdd = new List <Tag>(); List <Tag> tagsToRemove = new List <Tag>(); foreach (Tag tag in newOrganization.Tags) { if (organization.Tags.Find(a => a.Name.Equals(tag.Name)) == null) { tagsToAdd.Add(tag); } } foreach (Tag tag in organization.Tags) { if (newOrganization.Tags.Find(a => a.Name.Equals(tag.Name)) == null) { tagsToRemove.Add(tag); } } foreach (Tag tag in tagsToRemove) { organization.Tags.Remove(tag); } foreach (Tag tag in tagsToAdd) { organization.Tags.Add(tag); } await UpdateAsync(organization); return(true); } else { return(false); } }