private OpportunityWrapper ToOpportunityWrapper(Deal deal) { var dealWrapper = new OpportunityWrapper(deal); if (deal.ContactID > 0) dealWrapper.Contact = ToContactBaseWrapper(DaoFactory.GetContactDao().GetByID(deal.ContactID)); if (deal.DealMilestoneID > 0) { var dealMilestone = DaoFactory.GetDealMilestoneDao().GetByID(deal.DealMilestoneID); if (dealMilestone == null) throw new ItemNotFoundException(); dealWrapper.Stage = new DealMilestoneBaseWrapper(dealMilestone); } dealWrapper.AccessList = CRMSecurity.GetAccessSubjectTo(deal) .Select(item => EmployeeWraper.Get(item.Key)).ToItemList(); dealWrapper.IsPrivate = CRMSecurity.IsPrivate(deal); if (!string.IsNullOrEmpty(deal.BidCurrency)) dealWrapper.BidCurrency = ToCurrencyInfoWrapper(CurrencyProvider.Get(deal.BidCurrency)); dealWrapper.CustomFields = DaoFactory.GetCustomFieldDao().GetEnityFields(EntityType.Opportunity, deal.ID, false).ConvertAll(item => new CustomFieldBaseWrapper(item)).ToSmartList(); dealWrapper.Members = new List<ContactBaseWrapper>(); var memberIDs = DaoFactory.GetDealDao().GetMembers(deal.ID); var membersList = DaoFactory.GetContactDao().GetContacts(memberIDs); var membersWrapperList = new List<ContactBaseWrapper>(); foreach (var member in membersList) { if (member == null) continue; membersWrapperList.Add(ToContactBaseWrapper(member)); } dealWrapper.Members = membersWrapperList; return dealWrapper; }
private IEnumerable<OpportunityWrapper> ToListOpportunityWrapper(ICollection<Deal> deals) { if (deals == null || deals.Count == 0) return new List<OpportunityWrapper>(); var result = new List<OpportunityWrapper>(); var contactIDs = new List<int>(); var dealIDs = new List<int>(); var dealMilestoneIDs = new List<int>(); foreach (var deal in deals) { contactIDs.Add(deal.ContactID); dealIDs.Add(deal.ID); dealMilestoneIDs.Add(deal.DealMilestoneID); } dealMilestoneIDs = dealMilestoneIDs.Distinct().ToList(); var contacts = new Dictionary<int, ContactBaseWrapper>(); var customFields = DaoFactory.GetCustomFieldDao().GetEnityFields(EntityType.Opportunity, dealIDs.ToArray()) .GroupBy(item => item.EntityID) .ToDictionary(item => item.Key, item => item.Select(ToCustomFieldBaseWrapper)); var dealMilestones = DaoFactory.GetDealMilestoneDao().GetAll(dealMilestoneIDs.ToArray()) .ToDictionary(item => item.ID, item => new DealMilestoneBaseWrapper(item)); var dealMembers = DaoFactory.GetDealDao().GetMembers(dealIDs.ToArray()); foreach (var value in dealMembers.Values) { contactIDs.AddRange(value); } contactIDs = contactIDs.Distinct().ToList(); if (contactIDs.Count > 0) { DaoFactory.GetContactDao().GetContacts(contactIDs.ToArray()).ForEach(item => { if (item == null) return; contacts.Add(item.ID, ToContactBaseWrapper(item)); }); } foreach (var deal in deals) { var dealWrapper = new OpportunityWrapper(deal); if (contacts.ContainsKey(deal.ContactID)) { dealWrapper.Contact = contacts[deal.ContactID]; } dealWrapper.CustomFields = customFields.ContainsKey(deal.ID) ? customFields[deal.ID] : new List<CustomFieldBaseWrapper>(); dealWrapper.Members = dealMembers.ContainsKey(dealWrapper.ID) ? dealMembers[dealWrapper.ID].Where(contacts.ContainsKey).Select(item => contacts[item]) : new List<ContactBaseWrapper>(); if (dealMilestones.ContainsKey(deal.DealMilestoneID)) { dealWrapper.Stage = dealMilestones[deal.DealMilestoneID]; } dealWrapper.IsPrivate = CRMSecurity.IsPrivate(deal); if (dealWrapper.IsPrivate) { dealWrapper.AccessList = CRMSecurity.GetAccessSubjectTo(deal).Select(item => EmployeeWraper.Get(item.Key)).ToItemList(); } if (!string.IsNullOrEmpty(deal.BidCurrency)) { dealWrapper.BidCurrency = ToCurrencyInfoWrapper(CurrencyProvider.Get(deal.BidCurrency)); } result.Add(dealWrapper); } return result; }