public static _AvaliableCompanies GetAvaliableCompanies(CRMFilters filters = null) { var data = new _AvaliableCompanies(); if (filters.ProjectId == null) { filters.ProjectId = CRM_Logical.GetUserInvolveProject().FirstOrDefault() == null ? 0 : CRM_Logical.GetUserInvolveProject().FirstOrDefault().ID; } if (filters.ProjectId > 0) { data.MemberCompanies = GetGroupedCRM(true, filters); //data.PublicCompanies = GetPublicCRM(false, filters); } return(data); }
static IQueryable <_CoreLVL> GetGroupedCRM(bool memberonly, CRMFilters filters = null) { if (filters == null) { filters.ProjectId = 26; } var crms = from c in CH.DB.CompanyRelationships where c.ProjectID == filters.ProjectId && c.Deleted == false select c; if (memberonly) { if (Employee.CurrentRole.Level == MarketInterfaceRequired.LVL || Employee.CurrentRole.Level == SalesRequired.LVL) { crms = crms.Where(w => w.Members.Count > 0 && w.Members.Select(s => s.Name).Contains(Employee.CurrentUserName)).OrderBy(w => w.ID); } else if (Employee.CurrentRole.Level == ChinaTLRequired.LVL) { crms = crms.Where(w => w.Members.Count > 0).OrderBy(w => w.ID); } //crms = crms.Where(w => w.Members.Count > 0 && w.Members.Any(m => m.Name == Employee.CurrentUserName)).OrderBy(w => w.ID); else if (Employee.CurrentRole.Level == ManagerRequired.LVL || Employee.CurrentRole.Level == LeaderRequired.LVL || Employee.CurrentRole.Level == ProductInterfaceRequired.LVL || Employee.CurrentRole.Level == SalesManagerRequired.LVL) { crms = crms.Where(w => w.Members.Count > 0).OrderBy(w => w.ID); } } else { crms = crms.Where(w => w.Members.Count == 0).OrderBy(w => w.ID); } //模糊搜索 if (filters != null && !string.IsNullOrWhiteSpace(filters.FuzzyQuery)) { crms = crms.Where(q => q.Company.Leads.Any(l => l.Deleted == false && ( l.Name_CH.Contains(filters.FuzzyQuery) || l.Name_EN.Contains(filters.FuzzyQuery) || l.EMail.Contains(filters.FuzzyQuery) || l.PersonalEmailAddress.Contains(filters.FuzzyQuery) )) || (q.Company.Deleted == false && (q.Company.Name_CH.Contains(filters.FuzzyQuery) || q.Company.Name_EN.Contains(filters.FuzzyQuery) || q.Company.Contact.Contains(filters.FuzzyQuery))) ); } //行业 if (filters != null && filters.CategoryId.HasValue) { crms = crms.Where(q => q.Categorys.Any(c => c.ID == filters.CategoryId.Value)); } //时区 if (filters != null && filters.DistinctNumber.HasValue) { crms = crms.Where(q => q.Company.DistrictNumberID == filters.DistinctNumber); } //点评 if (filters != null && filters.IfComment == 1) { crms = crms.Where(q => q.Comments.Count > 0); } if (filters != null && filters.IfComment == 0) { crms = crms.Where(q => q.Comments.Count == 0); } if (filters != null && !string.IsNullOrWhiteSpace(filters.selSales)) { crms = crms.Where(s => s.Members.Any(q => q.Name == filters.selSales)); } var data = from c in CH.DB.CoreLVLs select new _CoreLVL() { CoreName = c.CoreLVLName, ID = c.ID, CrmCount = crms.Where(cr => cr.CoreLVLID == c.CoreLVLCode).Count(), _Maturitys = (from m in crms.Where(cr => cr.CoreLVLID == c.CoreLVLCode) group m by new { m.ProgressID, m.Progress.Name } into grp select new _Maturity() { Name = grp.Key.Name, ID = grp.Key.ProgressID.Value, Count = crms.Where(co => co.ProgressID == grp.Key.ProgressID && co.CoreLVLID == c.CoreLVLCode).Count(), _CRMs = (from crm in grp.Select(s => s) select new _CRM { ID = crm.ID, CompanyNameCH = crm.Company.Name_CH, CompanyNameEN = crm.Company.Name_EN, CoreCompany = c.CoreLVLName == "核心公司" ? true : false, //ContectedLeadCount = CH.DB.Leads.Where(l => l.CompanyID == crm.CompanyID && l.Deleted == false && crm.LeadCalls.Any(w => w.LeadID == l.ID)).Count(), //LeadCount = CH.DB.Leads.Where(l => l.CompanyID == crm.CompanyID && l.Deleted==false).Count(), CrmCommentStateID = crm.CrmCommentStateID, CrmCommentStateIDOrder = (crm.CrmCommentStateID == 1 || crm.CrmCommentStateID == 2 || crm.CrmCommentStateID == 3) ? "a" : "b", _Comments = (from co in crm.Comments.OrderByDescending(m => m.CommentDate) select new _Comment() { Submitter = co.Submitter, CommentDate = co.CommentDate, CRMID = co.CompanyRelationshipID, Contents = co.Contents }) }).OrderBy(cr => cr.CrmCommentStateIDOrder).ThenBy(cr => cr.CompanyNameEN).ThenBy(cr => cr.CompanyNameCH) }) }; data = data.Take(2);//修复数据异常 return(data); }