// Calculate the number of days in current month that are included between
        //   the input lease start date and end date
        private decimal daysInLeaseThisMonth(Lease lease)
        {
            DateTime today = DateTime.Now;

            // Lower day is the maximum of the first day of this month and the lease start date
            DateTime lowerDay = DateTimeExtensions.MaxDate
                                    (DateTimeExtensions.FirstDayOfMonth(today), lease.StartDate);

            // If lease end date is not null, upper day is the minimum of the last day of this month
            //   and the lease end date
            // If lease end date is null, upper day is the last day of this month
            DateTime upperDay;

            if (lease.EndDate.HasValue)
            {
                DateTime endDate = lease.EndDate.GetValueOrDefault();
                upperDay = DateTimeExtensions.MinDate
                               (DateTimeExtensions.LastDayOfMonth(today), endDate);
            }
            else
            {
                upperDay = DateTimeExtensions.LastDayOfMonth(today);
            }

            // Number of days in lease this month = upper day - lower day + 1
            return((upperDay - lowerDay).Days + 1);
        }
Ejemplo n.º 2
0
        private void SetDateRange(object objectParameter)
        {
            string dateRange = objectParameter.ToString();

            switch (dateRange)
            {
            case "ThisWeek":
                StartDate = DateTimeExtensions.StartOfWeek(DateTime.Today, DayOfWeek.Monday);
                EndDate   = DateTimeExtensions.EndOfWeek(DateTime.Today, DayOfWeek.Monday);
                break;

            case "LastWeek":
                StartDate = DateTimeExtensions.StartOfLastWeek(DateTime.Today, DayOfWeek.Monday);
                EndDate   = DateTimeExtensions.EndOfLastWeek(DateTime.Today, DayOfWeek.Monday);
                break;

            case "CurrentMonth":
                StartDate = DateTimeExtensions.FirstDayOfMonth(DateTime.Today);
                EndDate   = DateTimeExtensions.LastDayOfMonth(DateTime.Today);
                break;

            default:
                break;
            }
        }
        // Calculate income from rents this month
        private decimal monthlyRentIncome()
        {
            decimal sum             = 0;
            int     daysInThisMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

            // For leases that are current, calculate the income according to the lease type,
            //   and add income to sum:
            //  Daily: income = #days in lease this month * rent
            //  Weekly: income = (#days in lease this month)/7 * rent
            //  Monthly: income =  (#days in lease this month)/(#days in this month) * rent
            //  Yearly: If this month is completely included between start date and end date,
            //           then income = rent/12
            //          Otherwise income = (#days in lease this month)/(#days in this month) * rent / 12
            foreach (var lease in db.Leases)
            {
                if (lease.StartDate <= DateTime.Now &&
                    ((lease.EndDate.HasValue && lease.EndDate >= DateTime.Now) ||
                     (!lease.EndDate.HasValue)))
                {
                    switch (lease.LeaseType)
                    {
                    case Constants.RentPeriod.Daily:
                        sum += daysInLeaseThisMonth(lease) * lease.Rent;
                        break;

                    case Constants.RentPeriod.Weekly:
                        sum += (daysInLeaseThisMonth(lease) / 7) * lease.Rent;
                        break;

                    case Constants.RentPeriod.Monthly:
                        sum += (daysInLeaseThisMonth(lease) / daysInThisMonth) * lease.Rent;
                        break;

                    case Constants.RentPeriod.Yearly:
                        if (lease.StartDate >= DateTimeExtensions.FirstDayOfMonth(DateTime.Now) &&
                            ((lease.EndDate.HasValue && lease.EndDate >=
                              DateTimeExtensions.LastDayOfMonth(DateTime.Now)) ||
                             (!lease.EndDate.HasValue)))
                        {
                            sum += lease.Rent / 12;
                        }
                        else
                        {
                            sum += ((daysInLeaseThisMonth(lease) / daysInThisMonth) * lease.Rent) / 12;
                        }
                        break;

                    default:
                        break;
                    }
                }
            }

            return(sum);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 数据对比,rjy 时间计算修改
        /// </summary>
        /// <param name="time">前端传递时间,用于和服务器时间对比,判断自然周,自然月,自然季度</param>
        /// <param name="timeType">1:自然周,2:自然月,3:季度,4:天</param>
        /// <param name="upAndDown">0:当前, 1:前,2:后</param>
        /// <returns></returns>
        public async Task <DetailsResult> GetOrderDetailsAsync(DateTime time, string timeType, string upAndDown)
        {
            DetailsResult result        = null;
            string        startTime     = string.Empty; //显示数据开始时间
            string        endTime       = string.Empty; //显示数据结束时间
            string        lastStartTime = string.Empty; //对比数据开始时间
            string        lastEndTime   = string.Empty; //对比数据结束时间
            string        retStartTime  = string.Empty; //返回的开始时间
            string        retEndTime    = string.Empty; //返回的结束时间
            String        retQuarter    = string.Empty;

            //不管时间是什么时间啊,原始数据始终需要和前一次的数据比较,找出当前时间段,和对比时间段的开始时间和结束时间
            switch (timeType)
            {
            case "1":
            {
                if (upAndDown == "0")
                {
                    startTime = DateTimeExtensions.GetMondayDate(time).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.GetSundayDate(time).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "1")        //上
                {
                    startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetMondayDate(time).AddDays(-1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "2")        //下
                {
                    startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetSundayDate(time).AddDays(+1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                lastStartTime = DateTimeExtensions.GetMondayDate(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd");
                lastEndTime   = startTime;
                retStartTime  = startTime;
                retEndTime    = DateTime.Parse(endTime).AddDays(-1).ToString("yyyy-MM-dd");
            }
            break;

            case "2":
            {
                if (upAndDown == "0")
                {
                    startTime = DateTimeExtensions.FirstDayOfMonth(time).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.LastDayOfMonth(time).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "1")        //上
                {
                    startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(-1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "2")        //下
                {
                    //计算逻辑错误  比九月下一月应该是十月  十月应该和九月比较
                    startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(+1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                lastStartTime = DateTimeExtensions.FirstDayOfMonth(DateTime.Parse(startTime).AddMonths(-1)).ToString("yyyy-MM-dd");
                lastEndTime   = startTime;
                retStartTime  = DateTime.Parse(lastStartTime).ToString("yyyy-MM");
                retEndTime    = DateTime.Parse(startTime).ToString("yyyy-MM");
            }
            break;

            case "3":
            {
                if (upAndDown == "0")
                {
                    startTime = DateTimeExtensions.TwoToFirstDayOfSeason(time).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "1")        //上
                {
                    startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToFirstDayOfSeason(time).AddDays(-1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "2")        //下
                {
                    startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToLastDayOfSeason(time).AddDays(+1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                lastStartTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd");
                lastEndTime   = startTime;
                retStartTime  = lastStartTime;
                retEndTime    = startTime;
                retQuarter    = DateTimeExtensions.JudgeTimeIsToDiff(DateTime.Parse(startTime));
            }
            break;

            case "4":
            {
                int day = 0;
                if (upAndDown == "0")
                {
                    day = 0;
                }
                if (upAndDown == "1")                                //上
                {
                    day = -1;
                }
                if (upAndDown == "2")                                //下
                {
                    day = 1;
                }
                startTime     = time.AddDays(day).ToString("yyyy-MM-dd");
                endTime       = time.AddDays(+(1 + day)).ToString("yyyy-MM-dd");
                lastStartTime = time.AddDays(-(1 - day)).ToString("yyyy-MM-dd");
                lastEndTime   = time.AddDays(day).ToString("yyyy-MM-dd");
                retStartTime  = lastStartTime;
                retEndTime    = startTime;
            }
            break;

            default:
                break;
            }
            //显示的数据源
            Details showDetails = await LeadDataDataAccess.Instance.GetOrderDetailsAsync(startTime, endTime);

            //对比的数据源
            Details trastDetails = await LeadDataDataAccess.Instance.GetOrderDetailsAsync(lastStartTime, lastEndTime);

            ShareProfit showShare = await LeadDataDataAccess.Instance.GetShareProfitAsync(startTime, endTime);

            ShareProfit trastShare = await LeadDataDataAccess.Instance.GetShareProfitAsync(lastStartTime, lastEndTime);

            bool isSuccess = false;

            //(今天-昨天)÷昨天×100%
            result = new DetailsResult();
            {
                result.Sum          = showDetails.Sum;
                result.Gross        = showDetails.Gross;
                result.Profit       = showDetails.Profit;
                result.Profits      = showDetails.Profits;
                result.Average      = showDetails.Average;
                result.Cashs        = showShare.Cashs;
                result.SumRate      = Contrast(showDetails.Sum, trastDetails.Sum, out isSuccess);
                result.SumTrend     = isSuccess;
                result.GrossRate    = Contrast(showDetails.Gross, trastDetails.Gross, out isSuccess);
                result.GrossTrend   = isSuccess;
                result.ProfitRate   = Contrast(showDetails.Profit, trastDetails.Profit, out isSuccess);
                result.ProfitTrend  = isSuccess;
                result.ProfitsRate  = Contrast(showDetails.Profits, trastDetails.Profits, out isSuccess);
                result.ProfitsTrend = isSuccess;
                result.AverageRate  = Contrast(showDetails.Average, trastDetails.Average, out isSuccess);
                result.AverageTrend = isSuccess;
                result.CashsRate    = Contrast(showShare.Cashs, trastShare.Cashs, out isSuccess);
                result.CashsTrend   = isSuccess;
                result.StartTime    = retStartTime;         //lastStartTime;
                result.EndTime      = retEndTime;           //startTime;//(DateTime.Parse(endTime).AddDays(-1)).ToString("yyyy-MM-dd");
                result.Quarter      = retQuarter;
            };
            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// bd经理
        /// </summary>
        /// <param name="userid">操作人id</param>
        /// <param name="stype">1:销售额,2:渠道数,3:拉新用户数</param>
        /// <param name="timeType">1:7,2:30,3:90</param>
        /// <param name="infoTimeType">1:自然周,2:自然月,3:季度,4:天</param>
        /// <param name="time">当前显示时间</param>
        /// <param name="upAndDown">0:当前,1:向上,2:向下</param>
        public async Task <BDLeader> GetBdInfo(int userid, int stype, string timeType, string infoTimeType, DateTime time, string upAndDown)
        {
            BDLeader bDLeader = new BDLeader();

            bDLeader.lineData = new BDLeaderLineResult();
            IList <BDLeaderEntity> list = await AccountProfitDAL.Instance.GetBdInfo(userid, stype);

            string startTime     = string.Empty;
            string endTime       = string.Empty;
            string lastStartTime = string.Empty;         //对比数据开始时间
            string lastEndTime   = string.Empty;         //对比数据结束时间
            string retStartTime  = string.Empty;         //返回的开始时间
            string retEndTime    = string.Empty;         //返回的结束时间
            String retQuarter    = string.Empty;

            string[] times  = null;
            string[] limits = null;
            #region 空数据构建
            switch (timeType)
            {
            case "1":
            {
                startTime = DateTime.Now.AddDays(-6).ToString("yyyy-MM-dd");
                endTime   = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");

                times  = new string[7];
                limits = new string[7];
                for (int i = 0; i < 7; i++)
                {
                    times[i] = DateTime.Now.AddDays(+(i - 6)).ToString("yyyy-MM-dd");


                    limits[i] = "0.00";
                }
            }
            break;

            case "2":
            {
                startTime = DateTime.Now.AddDays(-29).ToString("yyyy-MM-dd");
                endTime   = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
                times     = new string[30];
                limits    = new string[30];
                for (int i = 0; i < 30; i++)
                {
                    times[i]  = DateTime.Now.AddDays(+(i - 29)).ToString("yyyy-MM-dd");
                    limits[i] = "0.00";
                }
            }
            break;

            case "3":
            {
                startTime = DateTime.Now.AddDays(-89).ToString("yyyy-MM-dd");
                endTime   = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
                int days = DateTimeExtensions.DateDiff() + 1;
                times  = new string[90];
                limits = new string[90];
                for (int i = 0; i < 90; i++)
                {
                    times[i]  = DateTime.Now.AddDays(+(i - 89)).ToString("yyyy-MM-dd");
                    limits[i] = "0.00";
                }
            }
            break;

            default:
                break;
            }
            #endregion
            #region 折线数据处理
            for (int i = 0; i < times.Length; i++)
            {
                //销售额
                if (stype == 1)
                {
                    limits[i] = list.Where(p => p.date < Convert.ToDateTime(times[i])).Sum(p => Convert.ToDecimal(p.limit)).ToString();
                }
                //渠道数和拉新数
                else
                {
                    limits[i] = list.Where(p => p.date < Convert.ToDateTime(times[i])).Count().ToString();
                }
                times[i] = Convert.ToDateTime(times[i]).ToString("MM-dd");
            }
            bDLeader.lineData.date  = times;
            bDLeader.lineData.limit = limits;
            bDLeader.LineStartTime  = times[0];
            bDLeader.LineEndTime    = times[times.Length - 1];
            #endregion
            //数据详情构建
            switch (infoTimeType)
            {
            case "1":
            {
                if (upAndDown == "0")
                {
                    startTime = DateTimeExtensions.GetMondayDate(time).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.GetSundayDate(time).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "1")                                //上
                {
                    startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetMondayDate(time).AddDays(-1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "2")                                //下
                {
                    startTime = DateTimeExtensions.GetMondayDate(DateTimeExtensions.GetSundayDate(time).AddDays(+1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.GetSundayDate(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                lastStartTime = DateTimeExtensions.GetMondayDate(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd");
                lastEndTime   = startTime;
                retStartTime  = startTime;
                retEndTime    = DateTime.Parse(endTime).AddDays(-1).ToString("yyyy-MM-dd");
            }
            break;

            case "2":
            {
                if (upAndDown == "0")
                {
                    startTime = DateTimeExtensions.FirstDayOfMonth(time).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.LastDayOfMonth(time).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "1")                                //上
                {
                    startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(-1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "2")                                //下
                {
                    //计算逻辑错误  比九月下一月应该是十月  十月应该和九月比较
                    startTime = DateTimeExtensions.FirstDayOfMonth(time.AddMonths(+1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.LastDayOfMonth(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                lastStartTime = DateTimeExtensions.FirstDayOfMonth(DateTime.Parse(startTime).AddMonths(-1)).ToString("yyyy-MM-dd");
                lastEndTime   = startTime;
                retStartTime  = DateTime.Parse(lastStartTime).ToString("yyyy-MM");
                retEndTime    = DateTime.Parse(startTime).ToString("yyyy-MM");
            }
            break;

            case "3":
            {
                if (upAndDown == "0")
                {
                    startTime = DateTimeExtensions.TwoToFirstDayOfSeason(time).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "1")                                //上
                {
                    startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToFirstDayOfSeason(time).AddDays(-1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                if (upAndDown == "2")                                //下
                {
                    startTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTimeExtensions.TwoToLastDayOfSeason(time).AddDays(+1)).ToString("yyyy-MM-dd");
                    endTime   = DateTimeExtensions.TwoToLastDayOfSeason(DateTime.Parse(startTime)).AddDays(+1).ToString("yyyy-MM-dd");
                }
                lastStartTime = DateTimeExtensions.TwoToFirstDayOfSeason(DateTime.Parse(startTime).AddDays(-1)).ToString("yyyy-MM-dd");
                lastEndTime   = startTime;
                retStartTime  = lastStartTime;
                retEndTime    = startTime;
                retQuarter    = DateTimeExtensions.JudgeTimeIsToDiff(DateTime.Parse(startTime));
            }
            break;

            case "4":
            {
                int day = 0;
                if (upAndDown == "0")
                {
                    day = 0;
                }
                if (upAndDown == "1")                                //上
                {
                    day = -1;
                }
                if (upAndDown == "2")                                //下
                {
                    day = 1;
                }
                startTime     = time.AddDays(day).ToString("yyyy-MM-dd");
                endTime       = time.AddDays(+(1 + day)).ToString("yyyy-MM-dd");
                lastStartTime = time.AddDays(-(1 - day)).ToString("yyyy-MM-dd");
                lastEndTime   = time.AddDays(day).ToString("yyyy-MM-dd");
                retStartTime  = lastStartTime;
                retEndTime    = startTime;
            }
            break;

            default:
                break;
            }
            bDLeader.StartTime = retStartTime;
            bDLeader.EndTime   = retEndTime;
            bDLeader.Quarter   = retQuarter;
            IList <BDLeaderEntity> listinfo = await AccountProfitDAL.Instance.GetBdInfo(userid, 4);

            List <BDLeaderInfoResult> bDLeaderInfoResults = new List <BDLeaderInfoResult>();
            foreach (var item in listinfo)
            {
                BDLeaderInfoResult bDLeaderItem = new BDLeaderInfoResult();
                bDLeaderItem.name = item.rname;
                string limit     = string.Empty;
                string climit    = string.Empty;
                bool   issuccess = false;
                //销售额
                if (stype == 1)
                {
                    limit  = list.Where(p => (p.date >= Convert.ToDateTime(startTime)) && (p.date < Convert.ToDateTime(endTime)) && (p.rname == item.rname)).Sum(p => Convert.ToDecimal(p.limit)).ToString();
                    climit = list.Where(p => (p.date >= Convert.ToDateTime(lastStartTime)) && (p.date < Convert.ToDateTime(lastEndTime)) && (p.rname == item.rname)).Sum(p => Convert.ToDecimal(p.limit)).ToString();
                }
                //渠道数和拉新数
                else
                {
                    limit  = list.Where(p => (p.date >= Convert.ToDateTime(startTime)) && (p.date < Convert.ToDateTime(endTime)) && (p.rname == item.rname)).Count().ToString();
                    climit = list.Where(p => (p.date >= Convert.ToDateTime(lastStartTime)) && (p.date < Convert.ToDateTime(lastEndTime)) && (p.rname == item.rname)).Sum(p => Convert.ToDecimal(p.limit)).ToString();
                }
                bDLeaderItem.Sum      = limit;
                bDLeaderItem.SumRate  = Contrast(limit, climit, out issuccess);
                bDLeaderItem.SumTrend = issuccess;
                bDLeaderInfoResults.Add(bDLeaderItem);
            }
            bDLeader.infoData = bDLeaderInfoResults;
            return(bDLeader);
        }