/// <summary> /// 项目进展统计 /// </summary> /// <param name="item"></param> /// <param name="startdate"></param> /// <param name="enddate"></param> /// <returns></returns> public static ViewProjectProgressAmount GetProjectProgress(this Project item, DateTime?startdate = null, DateTime?enddate = null) { startdate = startdate == null ? new DateTime(1, 1, 1) : startdate; enddate = enddate == null ? new DateTime(9999, 1, 1) : enddate.Value.AddDays(+1); decimal totaldeal = 0; decimal totalcheckin = 0; decimal deal = 0; decimal checkin = 0; decimal dealtarget = 0; decimal checkintarget = 0; decimal nextdealtarget = 0; decimal nextcheckintarget = 0; var crs = CH.GetAllData <CompanyRelationship>(c => c.ProjectID == item.ID, "Deals"); item.CompanyRelationships.ForEach(c => { totalcheckin += c.Deals.Sum(d => d.Income); totaldeal += c.Deals.Sum(d => d.Payment); }); item.CompanyRelationships.ForEach(c => { deal += c.Deals.FindAll(ds => ds.SignDate <enddate && ds.SignDate> startdate).Sum(d => d.Income); checkin += c.Deals.FindAll(ds => ds.ActualPaymentDate <enddate && ds.ActualPaymentDate> startdate).Sum(d => d.Payment); }); item.Members.ForEach(m => { var ts = CH.GetAllData <TargetOfWeek>(t => t.Member == m.Name).FindAll(t => (t.StartDate > startdate && t.StartDate < enddate) | (t.EndDate > startdate && t.EndDate < enddate)); dealtarget += ts.Sum(t => t.Deal); checkintarget += ts.Sum(t => t.CheckIn); }); var nextweekend = enddate.Value.AddDays(7); item.Members.ForEach(m => { var ts = CH.GetAllData <TargetOfWeek>(t => t.Member == m.Name).FindAll(t => (t.StartDate > enddate && t.EndDate < nextweekend)); nextdealtarget += ts.Sum(t => t.Deal); nextcheckintarget += ts.Sum(t => t.CheckIn); }); var result = new ViewProjectProgressAmount() { TotalCheckIn = totalcheckin, TotalDealIn = totaldeal, CheckIn = checkin, DealIn = deal, LeftDay = (item.EndDate - DateTime.Now).Days, CheckInTarget = checkintarget, Project = item, DealInTarget = dealtarget, NextCheckInTarget = nextcheckintarget, NextDealInTarget = nextdealtarget, CheckInPercentage = checkintarget == 0 ? 100 : (int)(checkin * 100 / checkintarget), DealInPercentage = dealtarget == 0 ? 100 : (int)(deal * 100 / dealtarget) }; return(result); }
public static ViewProjectProgressAmount GetProjectMemberProgress(this Project item, string member, DateTime?startdate = null, DateTime?enddate = null) { startdate = startdate == null ? new DateTime(1, 1, 1) : startdate; enddate = enddate == null ? new DateTime(9999, 1, 1) : enddate.Value.AddDays(+1); decimal totaldeal = 0; decimal totalcheckin = 0; decimal deal = 0; decimal checkin = 0; decimal dealtarget = 0; decimal checkintarget = 0; decimal nextdealtarget = 0; decimal nextcheckintarget = 0; decimal rmbdeal = 0; decimal usddeal = 0; var crs = CH.GetAllData <CompanyRelationship>(c => c.ProjectID == item.ID, "Deals"); item.CompanyRelationships.ForEach(c => { totalcheckin += c.Deals.FindAll(d => d.Sales == member).Sum(d => d.Income); totaldeal += c.Deals.FindAll(d => d.Sales == member).Sum(d => d.Payment); rmbdeal += c.Deals.FindAll(d => d.Sales == member && d.Currencytype.Name == "RMB").Sum(d => d.Payment); usddeal += c.Deals.FindAll(d => d.Sales == member && d.Currencytype.Name == "USD").Sum(d => d.Payment); }); item.CompanyRelationships.ForEach(c => { deal += c.Deals.FindAll(d => d.Sales == member).FindAll(ds => ds.SignDate <enddate && ds.SignDate> startdate).Sum(d => d.Income); checkin += c.Deals.FindAll(d => d.Sales == member).FindAll(ds => ds.ActualPaymentDate <enddate && ds.ActualPaymentDate> startdate).Sum(d => d.Payment); }); var result = new ViewProjectProgressAmount() { TotalCheckIn = totalcheckin, TotalDealIn = totaldeal, CheckIn = checkin, DealIn = deal, RMBDealIn = rmbdeal, USDDealIn = usddeal, Project = item }; return(result); }