/// <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++));
         }
     }
 }
Exemplo n.º 2
0
        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);
            }
        }