private IEnumerable<TaskWrapper> ToTaskListWrapper(IEnumerable<Task> itemList) { var result = new List<TaskWrapper>(); var contactIDs = new List<int>(); var taskIDs = new List<int>(); var categoryIDs = new List<int>(); var entityWrappersIDs = new Dictionary<EntityType, List<int>>(); foreach (var item in itemList) { taskIDs.Add(item.ID); if (!categoryIDs.Contains(item.CategoryID)) { categoryIDs.Add(item.CategoryID); } if (item.ContactID > 0 && !contactIDs.Contains(item.ContactID)) { contactIDs.Add(item.ContactID); } if (item.EntityID > 0) { if (item.EntityType != EntityType.Opportunity && item.EntityType != EntityType.Case) continue; if (!entityWrappersIDs.ContainsKey(item.EntityType)) { entityWrappersIDs.Add(item.EntityType, new List<int> { item.EntityID }); } else if (!entityWrappersIDs[item.EntityType].Contains(item.EntityID)) { entityWrappersIDs[item.EntityType].Add(item.EntityID); } } } var entityWrappers = new Dictionary<string, EntityWrapper>(); foreach (var entityType in entityWrappersIDs.Keys) { switch (entityType) { case EntityType.Opportunity: DaoFactory.GetDealDao().GetDeals(entityWrappersIDs[entityType].Distinct().ToArray()) .ForEach(item => { if (item == null) return; entityWrappers.Add( string.Format("{0}_{1}", (int)entityType, item.ID), new EntityWrapper { EntityId = item.ID, EntityTitle = item.Title, EntityType = "opportunity" }); }); break; case EntityType.Case: DaoFactory.GetCasesDao().GetByID(entityWrappersIDs[entityType].ToArray()) .ForEach(item => { if (item == null) return; entityWrappers.Add( string.Format("{0}_{1}", (int)entityType, item.ID), new EntityWrapper { EntityId = item.ID, EntityTitle = item.Title, EntityType = "case" }); }); break; } } var categories = DaoFactory.GetListItemDao().GetItems(categoryIDs.ToArray()).ToDictionary(x => x.ID, x => new TaskCategoryBaseWrapper(x)); var contacts = DaoFactory.GetContactDao().GetContacts(contactIDs.ToArray()).ToDictionary(item => item.ID, ToContactBaseWithEmailWrapper); var restrictedContacts = DaoFactory.GetContactDao().GetRestrictedContacts(contactIDs.ToArray()).ToDictionary(item => item.ID, ToContactBaseWithEmailWrapper); foreach (var item in itemList) { var taskWrapper = new TaskWrapper(item) {CanEdit = CRMSecurity.CanEdit(item)}; if (contacts.ContainsKey(item.ContactID)) { taskWrapper.Contact = contacts[item.ContactID]; } if (restrictedContacts.ContainsKey(item.ContactID)) { taskWrapper.Contact = restrictedContacts[item.ContactID]; /*Hide some fields. Should be refactored! */ taskWrapper.Contact.Currency = null; taskWrapper.Contact.Email = null; taskWrapper.Contact.AccessList = null; } if (item.EntityID > 0) { var entityStrKey = string.Format("{0}_{1}", (int)item.EntityType, item.EntityID); if (entityWrappers.ContainsKey(entityStrKey)) { taskWrapper.Entity = entityWrappers[entityStrKey]; } } if (categories.ContainsKey(item.CategoryID)) { taskWrapper.Category = categories[item.CategoryID]; } result.Add(taskWrapper); } return result; }
private TaskWrapper ToTaskWrapper(Task task) { var result = new TaskWrapper(task); if (task.CategoryID > 0) { result.Category = GetTaskCategoryByID(task.CategoryID); } if (task.ContactID > 0) { result.Contact = ToContactBaseWithEmailWrapper(DaoFactory.GetContactDao().GetByID(task.ContactID)); } if (task.EntityID > 0) { result.Entity = ToEntityWrapper(task.EntityType, task.EntityID); } result.CanEdit = CRMSecurity.CanEdit(task); return result; }
private Task FromTaskWrapper(TaskWrapper taskWrapper) { var task = new Task { ContactID = taskWrapper.Contact.ID, Title = taskWrapper.Title, Description = taskWrapper.Description, DeadLine = taskWrapper.DeadLine, ResponsibleID = taskWrapper.Responsible.Id, IsClosed = taskWrapper.IsClosed, CategoryID = taskWrapper.Category.ID, EntityType = ToEntityType(taskWrapper.Entity.EntityType), EntityID = taskWrapper.Entity.EntityId }; return task; }