Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }