private void CopySuiteCRMTasksToOrchardTickets(TicketContext context, CopyOrchardProjectToSuiteViewModel.ProjectIdentifiers syncSettings) { if (syncSettings.OrchardCollaborationProjectId == null) { throw new ArgumentNullException("OrchardCollaborationProjectId must not be null"); } if (string.IsNullOrEmpty(syncSettings.SuiteCRMId)) { throw new ArgumentNullException("SuiteCRMId must not be null"); } List <project_task> suiteCRMTasks = context.ProjectTaskUnitOfWork.GetProjectTasks(syncSettings.SuiteCRMId).ToList(); var orchardTickets = this.searchTicketService.SearchByDatabase( new PagerParametersWithSortFields() { PageSize = 0 }, new PostedTicketSearchViewModel { ProjectId = syncSettings.OrchardCollaborationProjectId }) .Select(c => c.As <SuiteCRMTaskPart>()) .Where(c => c != null) .ToList(); foreach (var suiteCRMTask in suiteCRMTasks) { var orchardTicket = orchardTickets.FirstOrDefault(c => c.ExternalId == suiteCRMTask.id); dynamic ticketSnapshot = null; ContentItem ticketContentItem = null; bool isNew = false; if (orchardTicket == null) { isNew = true; ticketContentItem = this.services.ContentManager.Create("Ticket"); } else { ticketContentItem = orchardTicket.ContentItem; ticketSnapshot = this.streamService.TakeSnapshot(ticketContentItem); } TicketPart ticketPart = ticketContentItem.As <TicketPart>(); SuiteCRMTaskPart taskPart = ticketContentItem.As <SuiteCRMTaskPart>(); AttachToProjectPart attachToProjectPart = ticketContentItem.As <AttachToProjectPart>(); // the values will be overridde in case user doesn't care about update time (item.DoNotOverrideNewerValues == false) or // the target modified date is less than source modified date DateTime? lastSuiteCRMChangeDate = suiteCRMTask.date_modified ?? suiteCRMTask.date_entered; CommonPart commonPart = ticketPart.As <CommonPart>(); if (!syncSettings.DoNotOverrideNewerValues || isNew || (lastSuiteCRMChangeDate.HasValue && commonPart.ModifiedUtc <= lastSuiteCRMChangeDate.Value)) { if (attachToProjectPart != null) { attachToProjectPart.Record.Project = new ProjectPartRecord { Id = syncSettings.OrchardCollaborationProjectId.Value }; } this.Copy(suiteCRMTask, ticketPart, context); this.services.ContentManager.Publish(ticketContentItem); this.streamService.WriteChangesToStreamActivity(ticketContentItem, ticketSnapshot, null); } taskPart.ExternalId = suiteCRMTask.id; taskPart.LastSyncTime = DateTime.UtcNow; taskPart.TaskType = SuiteCRMTaskPart.SuiteCRMProjectTaskTypeValue; } }
private bool IsSyncingTicketValid(CopyOrchardTasksToSuiteViewModel.TaskIdentifiers item, SuiteCRMTaskPart ticket, out SuiteCRMProjectPart projectPart) { projectPart = null; if (ticket == null) { return(false); } var suiteCRMTaskPart = ticket.As <SuiteCRMTaskPart>(); if (suiteCRMTaskPart == null) { return(false); } TicketPart ticketPart = ticket.As <TicketPart>(); if (ticketPart == null) { return(false); } if (!item.SyncSubTasks && ticketPart.Record.Parent != null) { return(false); } AttachToProjectPart attachToProjectPart = ticket.As <AttachToProjectPart>(); if (item.IsProjectTask && (attachToProjectPart == null || attachToProjectPart.Record.Project == null)) { return(false); } if (item.IsProjectTask) { var project = this.services.ContentManager.Get(attachToProjectPart.Record.Project.Id); if (project == null) { return(false); } projectPart = project.As <SuiteCRMProjectPart>(); if (string.IsNullOrEmpty(projectPart.ExternalId)) { return(false); } } return(true); }