public static ViewPerformanceData GetMemberPerformanceIndex(List <int> selectedproject, int?month, List <string> members) { if (month == null) { month = DateTime.Now.Month; } var ps = CH.GetAllData <Project>(p => selectedproject.Contains(p.ID)); DateTime startdate = new DateTime(DateTime.Now.Year, month.Value, 1); DateTime enddate = startdate.EndOfMonth(); while (enddate.Month != startdate.Month) { var tempdate = enddate.AddDays(7); if (tempdate.Month == startdate.Month) { enddate = tempdate; } } while (startdate.DayOfWeek != DayOfWeek.Monday) { startdate = startdate.AddDays(-1); } while (enddate.DayOfWeek != DayOfWeek.Friday) { enddate = enddate.AddDays(-1); } //enddate按照凌晨0点算, 所以结束时间多加1天 enddate.AddDays(1); var deals = from d in CH.DB.Deals where d.Abandoned == false && d.ActualPaymentDate >= startdate && d.ActualPaymentDate <= enddate && members.Contains(d.Sales) select d; var signdeals = from d in CH.DB.Deals where d.Abandoned == false && d.SignDate >= startdate && d.SignDate <= enddate && members.Contains(d.Sales) select d; var targets = from t in CH.DB.TargetOfMonthForMembers where t.StartDate.Month == month && members.Contains(t.Member.Name) select t; var leads = from c in CH.DB.Leads where c.CreatedDate >= startdate && c.CreatedDate <= enddate select c; var phoneinfos = Utl.Utl.GetCallsInfoForPerformanceDataRows(startdate, enddate, members); var calllists = CH.GetAllData <LeadCall>(c => c.CallDate >= startdate && c.CallDate <= enddate && c.LeadCallType.Code >= 30 && members.Contains(c.Member.Name)); var day = startdate; ViewPerformanceData data = new ViewPerformanceData(); data.Deals = deals.ToList(); data.SignedDeals = signdeals.ToList(); data.Month = month.Value; data.Leads = leads.ToList(); data.TargetOfMonthForMembers = targets.ToList(); data.LeadCalls = calllists.ToList(); data.StartDate = startdate; data.EndDate = enddate; data.ViewPhoneInfos = phoneinfos.ToList(); return(data); }
public static ViewMemberPerformance GetSingleMemberPerformance(ViewPerformanceData records, string m) { var dcls = records.LeadCalls.FindAll(c => c.Member.Name == m).Distinct(new LeadCallLeadDistinct()); var calllists = new List <LeadCall>(); foreach (var c in dcls) { calllists.Add(c); } var contact = Employee.GetProfile("Contact", m).ToString(); var callistbymember = calllists.GroupBy(o => o.CallDate.ToShortDateString()); var extension = Employee.GetProfile("Contact", m).ToString(); var leads = records.Leads.FindAll(c => c.Creator == m); var phonecallmember = records.ViewPhoneInfos.FindAll(p => p["phone"].ToString() == extension).GroupBy(o => o["startdate"].ToString()); DateTime temp = records.StartDate; var daylist = new List <ViewMemberDayWorkload>(); var weeklist = new List <ViewMemberDayWorkload>(); //计算日考核 while (temp <= records.EndDate) { if (temp.IsWorkingday()) { var datestring = temp.ToShortDateString(); var workload = new ViewMemberDayWorkload(); //计算fax out var tempcalllist = callistbymember.Where(c => c.Key == datestring); //解开grouping foreach (var tc in tempcalllist) { //只计算新lead的fax out workload.FaxoutCount = tc.Count(); } //计算 var tempdurantion = phonecallmember.Where(p => DateTime.Parse(p.Key).ToShortDateString() == datestring); //解开grouping foreach (var tc in tempdurantion) { var munites = tc.Sum(s => TimeSpan.Parse(s["duration"].ToString()).TotalMinutes); workload.OnPhoneDuration = TimeSpan.FromMinutes(munites); } workload.Name = m; workload.Day = datestring; daylist.Add(workload); } temp = temp.AddDays(1); } //计算周考核 DateTime tempstart = records.StartDate; DateTime tempend = records.StartDate.AddDays(7); var listweek = new List <ViewMemberWeekWorkload>(); while (tempstart <= records.EndDate) { var week = new ViewMemberWeekWorkload(records.SignedDeals, tempstart, tempend); week.Leads = leads.FindAll(c => c.CreatedDate >= tempstart && c.CreatedDate <= tempend); var list = daylist.FindAll(f => DateTime.Parse(f.Day) <= tempend && DateTime.Parse(f.Day) >= tempstart); var totalmumite = list.Sum(s => s.OnPhoneDuration.TotalMinutes); week.OnPhoneDuration = TimeSpan.FromMinutes(totalmumite); week.FaxoutCount = list.Sum(s => s.FaxoutCount); listweek.Add(week); tempstart = tempend; tempend = tempstart.AddDays(7); } var data = new ViewMemberPerformance() { Name = m, Deals = records.Deals.FindAll(d => d.Sales == m), LeadCalls = records.LeadCalls.FindAll(l => l.Member.Name == m), Month = records.Month, TargetOfMonthForMembers = records.TargetOfMonthForMembers.FindAll(t => t.Member.Name == m), ViewMemberDayWorkloads = daylist, Leads = records.Leads.FindAll(c => c.Creator == m), ViewMemberWeekWorkloads = listweek }; return(data); }