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 void CopyOrchardTicketsToSuiteCRM(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"); } var orchardTickets = this.searchTicketService.SearchByDatabase(new PagerParametersWithSortFields() { PageSize = 0 }, new PostedTicketSearchViewModel { ProjectId = syncSettings.OrchardCollaborationProjectId }); List <project_task> suiteCRMTasks = new List <project_task>(); if (!string.IsNullOrEmpty(syncSettings.SuiteCRMId)) { suiteCRMTasks.AddRange(context.ProjectTaskUnitOfWork.GetProjectTasks(syncSettings.SuiteCRMId)); } foreach (var ticket in orchardTickets) { var suiteCRMTaskPart = ticket.As <SuiteCRMTaskPart>(); if (suiteCRMTaskPart == null) { continue; } TicketPart ticketPart = ticket.As <TicketPart>(); ContentItemPermissionPart permissionPart = ticket.As <ContentItemPermissionPart>(); if (ticketPart == null) { continue; } if (!syncSettings.SyncSubTasks && ticketPart.Record.Parent != null) { continue; } project_task suiteCRMProjectTask = null; if (!string.IsNullOrEmpty(suiteCRMTaskPart.ExternalId)) { suiteCRMProjectTask = suiteCRMTasks.FirstOrDefault(c => c.id == suiteCRMTaskPart.ExternalId); } if (suiteCRMProjectTask == null) { suiteCRMProjectTask = new project_task(); suiteCRMProjectTask.project_id = syncSettings.SuiteCRMId; context.ProjectTaskUnitOfWork.Add(suiteCRMProjectTask); } CommonPart commonPart = ticketPart.As <CommonPart>(); DateTime? lastOrchardTicketChangeDate = commonPart.ModifiedUtc ?? commonPart.CreatedUtc; if (!syncSettings.DoNotOverrideNewerValues || suiteCRMProjectTask.date_modified == null || (lastOrchardTicketChangeDate.HasValue && suiteCRMProjectTask.date_modified.Value <= lastOrchardTicketChangeDate.Value)) { this.Copy(ticketPart, permissionPart, suiteCRMProjectTask, context); context.ProjectTaskUnitOfWork.Save(); } suiteCRMTaskPart.ExternalId = suiteCRMProjectTask.id; suiteCRMTaskPart.LastSyncTime = DateTime.UtcNow; suiteCRMTaskPart.TaskType = SuiteCRMTaskPart.SuiteCRMProjectTaskTypeValue; this.services.ContentManager.Publish(ticket.ContentItem); } }