/// <summary> /// Implementors can modify both the source and destination objects /// </summary> /// <param name="source">Source object</param> /// <param name="destination">Destination object</param> public void Process(ActivityTask source, ActivityTaskViewModel destination) { destination.DateDeadline = source.DateDeadline.ToLocalTime(); destination.DateCreated = source.DateCreated.ToLocalTime(); destination.DateEnd = source.DateEnd.ToLocalTime(); destination.ObserverUserIds = (source.ObserverUsers?.Where(it => it.User != null).Select(it => it.User.Id) ?? Enumerable.Empty <long>()).ToArray(); destination.OrganizationIds = (source.Organizations?.Select(it => it.OrganizationId) ?? Enumerable.Empty <long>()).ToArray(); destination.ContactIds = (source.Contacts?.Select(it => it.ContactId) ?? Enumerable.Empty <long>()).ToArray(); }
/// <summary> /// Implementors can modify both the source and destination objects /// </summary> /// <param name="source">The model.</param> /// <param name="destination">The entity.</param> public void Process(ActivityTaskViewModel source, ActivityTask destination) { destination.DateDeadline = source.DateDeadline.ToUniversalTime(); destination.DateEnd = source.DateEnd.ToUniversalTime(); var assignToId = source.AssignToId; destination.AssignTo = assignToId != null?this.repositoryUsers.FindById(assignToId.Value) : null; destination.Contacts = source.ContactIds?.Select( contactId => this.context.ActivityTaskContacts.FirstOrDefault( it => (it.ContactId == contactId) && (it.TaskId == destination.Id)) ?? new ActivityTaskContact() { TaskId = destination.Id, Task = destination, ContactId = contactId, Contact = this.repositoryContacts.FindById(contactId) }).ToList(); var createdById = source.CreatedById; //TODO: to be auto-filled destination.CreatedBy = createdById != null?this.repositoryUsers.FindById(createdById.Value) : null; var goalId = source.GoalId; destination.Goal = goalId != null?this.repositoryGoals.FindById(goalId.Value) : null; destination.ObserverUsers = source.ObserverUserIds?.Select( userId => this.context.ActivityTaskObserverUsers.FirstOrDefault( it => (it.UserId == userId) && (it.TaskId == destination.Id)) ?? new ActivityTaskObserverUser() { TaskId = destination.Id, Task = destination, UserId = userId, User = this.repositoryUsers.FindById(userId) }).ToList(); var statusId = source.StatusId; destination.Status = statusId != null?this.repositoryStatuses.FindById(statusId.Value) : null; destination.Organizations = source.OrganizationIds?.Select( organizationId => this.context.ActivityTaskOrganizations.FirstOrDefault( it => (it.OrganizationId == organizationId) && (it.TaskId == destination.Id)) ?? new ActivityTaskOrganization() { TaskId = destination.Id, Task = destination, OrganizationId = organizationId, Organization = this.repositoryOrganizations.FindById(organizationId) }).ToList(); }