示例#1
0
        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);
        }
示例#2
0
        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);
        }