private SalesStatisticsVO GetTotal(string ym, IList<SalesStatisticsVO> result) { int year = int.Parse(ym.Substring(0, 4)); int month = int.Parse(ym.Substring(4, 2)); DateTime dateStart = new DateTime(year, month, 1); SalesStatisticsVO salesStatisticsVO = new SalesStatisticsVO(); salesStatisticsVO.Name = "總合"; salesStatisticsVO.Target = result.Sum(m => m.Target); salesStatisticsVO.ApplyCount = result.Sum(m => m.ApplyCount); salesStatisticsVO.ApplyRevenue = result.Sum(m => m.ApplyRevenue); salesStatisticsVO.ApplyProfit = result.Sum(m => m.ApplyProfit); salesStatisticsVO.ApplyTelCom1Count = result.Sum(m => m.ApplyTelCom1Count); salesStatisticsVO.ApplyTelCom2Count = result.Sum(m => m.ApplyTelCom2Count); salesStatisticsVO.ApplyTelCom3Count = result.Sum(m => m.ApplyTelCom3Count); salesStatisticsVO.ApplyTelCom4Count = result.Sum(m => m.ApplyTelCom4Count); salesStatisticsVO.ApplyTelCom5Count = result.Sum(m => m.ApplyTelCom5Count); salesStatisticsVO.FittingCount = result.Sum(m => m.FittingCount); salesStatisticsVO.FittingRevenue = result.Sum(m => m.FittingRevenue); salesStatisticsVO.FittingProfit = result.Sum(m => m.FittingProfit); salesStatisticsVO.TotalProfit = result.Sum(m => m.TotalProfit); salesStatisticsVO.NotGetTotalCommission = result.Sum(m => m.NotGetTotalCommission); if (salesStatisticsVO.TotalProfit != 0 && salesStatisticsVO.Target != 0) { if (ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).ToString("yyyyMM").Equals(dateStart.ToString("yyyyMM"))) { //為本月要算出目前日子已過了本月幾分之幾, 進度達成率=總毛利/ [本月目標* (當月已過天數/當月天數)] //salesStatisticsVO.TargetAchievementRates = (salesStatisticsVO.TotalProfit / (salesStatisticsVO.Target * (DateTime.Today.Day / DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month)))); salesStatisticsVO.TargetAchievementRates = salesStatisticsVO.TotalProfit / salesStatisticsVO.Target; double rates = Convert.ToDouble(salesStatisticsVO.TargetAchievementRates * 100); salesStatisticsVO.TargetAchievementRates = Math.Round(rates, 2); salesStatisticsVO.TargetAchievementRates = (salesStatisticsVO.TargetAchievementRates * DateTime.DaysInMonth(ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).Year, ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).Month)) / ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).Day; rates = Convert.ToDouble(salesStatisticsVO.TargetAchievementRates); salesStatisticsVO.TargetAchievementRates = Math.Round(rates, 2); } else { //進度達成率=總毛利/ 本月目標 salesStatisticsVO.TargetAchievementRates = salesStatisticsVO.TotalProfit / salesStatisticsVO.Target; double rates = Convert.ToDouble(salesStatisticsVO.TargetAchievementRates * 100); salesStatisticsVO.TargetAchievementRates = Math.Round(rates, 2); } } else { salesStatisticsVO.TargetAchievementRates = 0; } return salesStatisticsVO; }
/// <summary> /// 取得當月業績 從店點角度 /// </summary> /// <param name="ym">yyyyMM</param> /// <returns></returns> public IList<SalesStatisticsVO> GetSalesStatisticsByStore(string ym) { ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); log.Debug("GetSalesStatisticsByStore"); //test IList<NodeVO> storeList = PostService.GetNodeListByParentName("店家"); if (storeList != null && storeList.Count > 0) { IList<SalesStatisticsVO> result = new List<SalesStatisticsVO>(); int year = int.Parse(ym.Substring(0, 4)); int month = int.Parse(ym.Substring(4, 2)); DateTime dateStart = new DateTime(year, month, 1); DateTime dateEnd = dateStart.AddMonths(1).AddDays(-1); foreach (NodeVO store in storeList) { SalesStatisticsVO salesStatisticsVO = new SalesStatisticsVO(); string targetId = string.Format("{0}{1}", ym, store.Name); TargetVO targetVO = GetTargetById(targetId); salesStatisticsVO.Name = store.Name; ////本月目標 salesStatisticsVO.Target = targetVO == null ? 0 : targetVO.Amount; //未核發佣金 Dictionary<string, string> conditionsNotGetTotalCommission = new Dictionary<string, string>(); conditionsNotGetTotalCommission.Add("Status", "1"); conditionsNotGetTotalCommission.Add("GetCommission", "否"); conditionsNotGetTotalCommission.Add("Store", store.Name); salesStatisticsVO.NotGetTotalCommission = MemberService.GetNotGetTotalCommission(conditionsNotGetTotalCommission); //門號 Dictionary<string, string> conditionsMember = new Dictionary<string, string>(); conditionsMember.Add("Status", "1"); conditionsMember.Add("ApplyDate2Start", dateStart.ToString("yyyy/MM/dd")); conditionsMember.Add("ApplyDate2End", dateEnd.ToString("yyyy/MM/dd")); conditionsMember.Add("Store", store.Name); IList<MemberVO> memberList = MemberService.GetMemberList(conditionsMember); if (memberList != null) { salesStatisticsVO.ApplyCount = memberList.Count; salesStatisticsVO.ApplyRevenue = memberList.Sum(m => m.Commission + m.ReturnCommission); salesStatisticsVO.ApplyProfit = memberList.Sum(m => m.Commission + m.PhoneSellPrice - m.PhonePrice - m.BreakMoney + m.ReturnCommission); //預繳金, 幫客戶預繳的用減的, 沒有幫客戶預繳不用算 //salesStatisticsVO.ApplyProfit += memberList.Where(m => m.Prepayment > 0 && "否".Equals(m.SelfPrepayment)).Sum(m => m.Prepayment); salesStatisticsVO.ApplyProfit -= memberList.Where(m => m.Prepayment > 0 && "是".Equals(m.SelfPrepayment)).Sum(m => m.Prepayment); salesStatisticsVO.ApplyTelCom1Count = memberList.Count(m => "太電".Equals(m.Project3)); salesStatisticsVO.ApplyTelCom2Count = memberList.Count(m => "遠傳".Equals(m.Project3)); salesStatisticsVO.ApplyTelCom3Count = memberList.Count(m => "中華".Equals(m.Project3)); salesStatisticsVO.ApplyTelCom4Count = memberList.Count(m => "亞太".Equals(m.Project3)); salesStatisticsVO.ApplyTelCom5Count = memberList.Count(m => "星星".Equals(m.Project3)); } else { salesStatisticsVO.ApplyCount = 0; salesStatisticsVO.ApplyRevenue = 0; salesStatisticsVO.ApplyProfit = 0; salesStatisticsVO.ApplyTelCom1Count = 0; salesStatisticsVO.ApplyTelCom2Count = 0; salesStatisticsVO.ApplyTelCom3Count = 0; salesStatisticsVO.ApplyTelCom4Count = 0; salesStatisticsVO.ApplyTelCom5Count = 0; } //配件 Dictionary<string, string> conditionsPost = new Dictionary<string, string>(); conditionsPost.Add("Flag", "1"); conditionsPost.Add("WithOutMemberId", "1"); conditionsPost.Add("Type", "1"); conditionsPost.Add("NodeId", "2"); conditionsPost.Add("CloseDateStart", dateStart.ToString("yyyy/MM/dd")); conditionsPost.Add("CloseDateEnd", dateEnd.ToString("yyyy/MM/dd")); conditionsPost.Add("Store", store.Name); IList<PostVO> postList = PostService.GetPostList(conditionsPost); //因為配件沒有分店家,所以這邊只有第一個本店要算 if (postList != null) { salesStatisticsVO.FittingCount = postList.Count; salesStatisticsVO.FittingRevenue = postList.Sum(p => p.SellPrice); salesStatisticsVO.FittingProfit = postList.Sum(p => p.SellPrice - p.Price); } else { salesStatisticsVO.FittingCount = 0; salesStatisticsVO.FittingRevenue = 0; salesStatisticsVO.FittingProfit = 0; } //總毛利 salesStatisticsVO.TotalProfit = salesStatisticsVO.ApplyProfit + salesStatisticsVO.FittingProfit; log.Debug("store: " + store.Name); //進度達成率 總毛利/ [本月目標* (當月已過天數/當月天數)] if (salesStatisticsVO.TotalProfit != 0 && salesStatisticsVO.Target != 0) { if (ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).ToString("yyyyMM").Equals(dateStart.ToString("yyyyMM"))) { //為本月要算出目前日子已過了本月幾分之幾, 進度達成率=總毛利/ [本月目標* (當月已過天數/當月天數)] //salesStatisticsVO.TargetAchievementRates = (salesStatisticsVO.TotalProfit / (salesStatisticsVO.Target * (DateTime.Today.Day / DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month)))); salesStatisticsVO.TargetAchievementRates = salesStatisticsVO.TotalProfit / salesStatisticsVO.Target; double rates = Convert.ToDouble(salesStatisticsVO.TargetAchievementRates * 100); salesStatisticsVO.TargetAchievementRates = Math.Round(rates, 2); salesStatisticsVO.TargetAchievementRates = (salesStatisticsVO.TargetAchievementRates * DateTime.DaysInMonth(ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).Year, ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).Month)) / ConvertUtil.UtcDateTimeToTaiwanDateTime(DateTime.UtcNow).Day; rates = Convert.ToDouble(salesStatisticsVO.TargetAchievementRates); salesStatisticsVO.TargetAchievementRates = Math.Round(rates, 2); } else { //進度達成率=總毛利/ 本月目標 salesStatisticsVO.TargetAchievementRates = salesStatisticsVO.TotalProfit / salesStatisticsVO.Target; double rates = Convert.ToDouble(salesStatisticsVO.TargetAchievementRates * 100); salesStatisticsVO.TargetAchievementRates = Math.Round(rates, 2); } } else { salesStatisticsVO.TargetAchievementRates = 0; } result.Add(salesStatisticsVO); } result.Add(GetTotal(ym, result)); return result; } else { return null; } }