/// <summary>
 /// Check if the invitations changed.
 /// </summary>
 /// <param name="participatedOld">the old participated</param>
 /// <param name="participatedNew">the new participated</param>
 /// <param name="listEntries">the list with modification entries</param>
 /// <param name="userOfModification">the user who performed the change</param>
 /// <param name="modelId">the model id</param>
 /// <param name="contactsParticipated">the contacts</param>
 private static void GetInvitationChangedOfEvents(List <Participated> participatedOld, List <ParticipatedDto> participatedNew, List <ModificationEntry> listEntries, User userOfModification, long modelId, List <Contact> contactsParticipated, List <Organization> orgasParticipated)
 {
     foreach (ParticipatedDto part in participatedNew)
     {
         if (part.EventStatus == ParticipatedStatus.INVITED)
         {
             Participated partToCheck = participatedOld.FirstOrDefault(a => a.ObjectId == part.ObjectId && a.ModelType == part.ModelType);
             if (partToCheck == null || partToCheck.EventStatus != ParticipatedStatus.INVITED)
             {
                 string name = string.Empty;
                 if (part.ModelType == MODEL_TYPE.CONTACT)
                 {
                     Contact cont = contactsParticipated.FirstOrDefault(b => b.Id == part.ObjectId);
                     if (cont != null)
                     {
                         name = cont.PreName + " " + cont.Name;
                     }
                 }
                 else if (part.ModelType == MODEL_TYPE.ORGANIZATION)
                 {
                     Organization orga = orgasParticipated.FirstOrDefault(b => b.Id == part.ObjectId);
                     if (orga != null)
                     {
                         name = orga.Name;
                     }
                 }
                 listEntries.Add(GetNewModificationEntry(name,
                                                         string.Empty, modelId, MODEL_TYPE.EVENT, DATA_TYPE.INVITATION, userOfModification, MODIFICATION.MODIFIED));
             }
         }
     }
 }
        private async Task <bool> HandleInvitationResponseForObjectAsync(long id, long objectId, ParticipatedStatus state, MODEL_TYPE modelType)
        {
            Event eventToModify = await GetEventByIdWithAllIncludesAsync(id);

            if (eventToModify != null)
            {
                Participated partToChange = eventToModify.Participated.FirstOrDefault(x => x.ObjectId == objectId && x.ModelType == modelType);
                if (partToChange != null)
                {
                    partToChange.EventStatus = state;
                    await UpdateAsync(eventToModify);

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Beispiel #3
0
        public async Task <bool> ModifyEventAsync(EventDto eventToModify)
        {
            Event eventExistent = await GetEventByIdWithAllIncludesAsync(eventToModify.Id);

            if (eventExistent != null)
            {
                List <EventContact> eventContacts = await eventContactRepo.GetAllAsync();

                eventContacts.RemoveAll(y => y.EventId != eventExistent.Id);
                List <EventOrganization> eventOrgas = await eventOrgaRepo.GetAllAsync();

                eventOrgas.RemoveAll(y => y.EventId != eventExistent.Id);
                eventExistent.Name        = eventToModify.Name;
                eventExistent.Date        = eventToModify.Date;
                eventExistent.Starttime   = eventToModify.Starttime;
                eventExistent.Endtime     = eventToModify.Endtime;
                eventExistent.Description = eventToModify.Description;
                eventExistent.Location    = eventToModify.Location;
                List <EventContact> eventContactsToDelete = new List <EventContact>();
                eventContacts.ForEach(x =>
                {
                    if (eventToModify.Contacts.FirstOrDefault(y => y.Id == x.ContactId) == null)
                    {
                        eventContactsToDelete.Add(x);
                    }
                });
                foreach (EventContact part in eventContactsToDelete)
                {
                    Participated participated = eventExistent.Participated.FirstOrDefault(x => x.ObjectId == part.ContactId && x.ModelType == MODEL_TYPE.CONTACT);
                    if (participated != null)
                    {
                        eventExistent.Participated.Remove(participated);
                    }
                    eventExistent.Contacts.Remove(part);
                    await RemoveEventContactAsync(part);
                }

                List <EventOrganization> eventOrgasToDelete = new List <EventOrganization>();
                eventOrgas.ForEach(x =>
                {
                    if (eventToModify.Organizations.FirstOrDefault(y => y.Id == x.OrganizationId) == null)
                    {
                        eventOrgasToDelete.Add(x);
                    }
                });
                foreach (EventOrganization part in eventOrgasToDelete)
                {
                    Participated participated = eventExistent.Participated.FirstOrDefault(x => x.ObjectId == part.OrganizationId && x.ModelType == MODEL_TYPE.ORGANIZATION);
                    if (participated != null)
                    {
                        eventExistent.Participated.Remove(participated);
                    }
                    eventExistent.Organizations.Remove(part);
                    await RemoveEventOrganizationAsync(part);
                }

                List <Participated> participationsToDelete = new List <Participated>();
                foreach (Participated part in eventExistent.Participated)
                {
                    if (eventToModify.Participated.FirstOrDefault(a => a.ModelType == part.ModelType && a.ObjectId == part.ObjectId) == null)
                    {
                        participationsToDelete.Add(part);
                    }
                }

                foreach (Participated part in participationsToDelete)
                {
                    eventExistent.Participated.Remove(part);
                }

                foreach (ParticipatedDto partNew in eventToModify.Participated)
                {
                    Participated participated = eventExistent.Participated.FirstOrDefault(y => y.ObjectId == partNew.ObjectId && partNew.ObjectId > 0 && y.ModelType == partNew.ModelType);
                    if (participated != null)
                    {
                        participated.EventStatus     = partNew.EventStatus;
                        participated.HasParticipated = partNew.HasParticipated;
                    }
                    else
                    {
                        eventExistent.Participated.Add(new Participated()
                        {
                            HasParticipated = partNew.HasParticipated, ObjectId = partNew.ObjectId, EventStatus = partNew.EventStatus, ModelType = partNew.ModelType
                        });
                    }
                }

                foreach (ContactDto contact in eventToModify.Contacts)
                {
                    if (eventContacts.FirstOrDefault(y => y.ContactId == contact.Id) == null)
                    {
                        await AddEventContactAsync(new EventContact()
                        {
                            ContactId = contact.Id, EventId = eventExistent.Id
                        });
                    }
                }

                foreach (OrganizationDto orga in eventToModify.Organizations)
                {
                    if (eventOrgas.FirstOrDefault(y => y.OrganizationId == orga.Id) == null)
                    {
                        await AddEventOrganizationAsync(new EventOrganization()
                        {
                            OrganizationId = orga.Id, EventId = eventExistent.Id
                        });
                    }
                }

                List <Tag> tagsToAdd    = new List <Tag>();
                List <Tag> tagsToRemove = new List <Tag>();
                foreach (TagDto tag in eventToModify.Tags)
                {
                    if (eventExistent.Tags.Find(a => a.Name.Equals(tag.Name)) == null)
                    {
                        tagsToAdd.Add(new Tag()
                        {
                            Id = 0, Name = tag.Name
                        });
                    }
                }
                foreach (Tag tag in eventExistent.Tags)
                {
                    if (eventToModify.Tags.Find(a => a.Name.Equals(tag.Name)) == null)
                    {
                        tagsToRemove.Add(tag);
                    }
                }
                foreach (Tag tag in tagsToRemove)
                {
                    eventExistent.Tags.Remove(tag);
                }
                foreach (Tag tag in tagsToAdd)
                {
                    eventExistent.Tags.Add(tag);
                }

                await UpdateAsync(eventExistent);

                return(true);
            }

            return(false);
        }