public static void DayMonthReport(DateTime from, DateTime to, ref DayReportResult result, string storeId, string machineSn, int companyId, bool inTestMode) { var entities = CurrentRepository.Entities.Where(o => o.CreateDT >= from && o.CreateDT < to && o.StoreId == storeId && o.CompanyId == companyId && o.IsTest == inTestMode); if (!string.IsNullOrEmpty(machineSn)) { entities = entities.Where(o => o.MachineSN == machineSn); } var users = (from a in entities from b in SysStoreUserInfoService.CurrentRepository.Entities where a.CreateUID == b.UID && b.CompanyId == companyId select new { b.UserCode, a.CreateUID, b.FullName } ).ToList(); var query = entities.GroupBy(o => o.CreateUID).ToList(); foreach (var item in query) { var user = users.FirstOrDefault(o => o.CreateUID == item.Key); var record = result.SalesmanRecords.FirstOrDefault(o => o.UserCode == user.UserCode); if (record == null) { record = new SalesmanDayReportResult() { StartTime = DateTime.Now, EndTime = DateTime.Now, UserCode = user.UserCode, Salesman = user.FullName, Sale = new SalesmanDayReportSaleResult() { SaleInfo = new DayReportDetailItem() { Number = 0, Amount = 0m, Project = "销售小计" }, PayWay = new List <PayWayItem>() }, Other = new List <DayReportDetailItem>() }; result.SalesmanRecords.Add(record); } var rukuan = item.Where(o => o.Type == 1); var rukuanheji = new DayReportDetailItem() { Project = "入款合计", Amount = rukuan.Sum(o => o.Amount), Number = rukuan.Count() }; record.Cash += rukuanheji.Amount; record.Other.Add(rukuanheji); var chukuan = item.Where(o => o.Type == 0); var chukuanheji = new DayReportDetailItem() { Project = "出款合计", Amount = chukuan.Sum(o => o.Amount), Number = chukuan.Count() }; record.Cash -= chukuanheji.Amount; record.Other.Add(chukuanheji); } }
public static void DayMonthReport(DateTime _from, DateTime _to, ref DayReportResult result, string storeId, string machineSn, int companyId, bool inTestMode, IEnumerable <UserDict> users) { if (string.IsNullOrEmpty(machineSn)) { machineSn = ""; } var giftStatus = new int[] { (int)SaleStatus.ActivityGifts, (int)SaleStatus.POSGift }; var query = (from a in CurrentRepository.Entities from b in SaleOrdersService.CurrentRepository.Entities where a.PaySN == b.PaySN && b.Type == 0 && b.State == 0 && b.CreateDT >= _from && b.CreateDT < _to && b.StoreId == storeId && (machineSn == "" || b.MachineSN == machineSn) && giftStatus.Contains(a.SalesClassifyId) && a.CompanyId == companyId && b.CompanyId == companyId && b.IsTest == inTestMode group a by b.CreateUID into g select g).ToList(); var giftAmount = 0m; var giftOrderNumber = 0; foreach (var item in query) { //new { b.UserCode, a.CreateUID, b.FullName } var user = users.FirstOrDefault(o => o.CreateUID == item.Key); var record = result.SalesmanRecords.FirstOrDefault(o => o.UserCode == user.UserCode); if (record != null) { var tempAmount = item.Sum(o => o.SysPrice * o.PurchaseNumber); giftAmount += tempAmount; var tempOrderNumber = item.Select(o => o.PaySN).Distinct().Count(); giftOrderNumber += tempOrderNumber; record.Other.Insert(record.Other.Count - 1, new DayReportDetailItem() { Project = "赠品小计", Amount = tempAmount, Number = tempOrderNumber }); } } result.Summary.Insert(result.Summary.Count - 1, new DayReportDetailItem() { Project = "赠品小计", Amount = giftAmount, Number = giftOrderNumber }); }
public ValueObject.DayReportResult DayMonthReport(DateTime from, DateTime to, Sale.Range range) { DayReportResult result = new DayReportResult(); result.Summary = new List <DayReportDetailItem>(); result.SalesmanRecords = new List <SalesmanDayReportResult>(); var machineParams = range == Range.Local ? MachineSN : ""; var users = SaleOrdersService.DayMonthReport(from, to, ref result, StoreId, machineParams, CompanyId, IsSalesclerkTest); SaleDetailService.DayMonthReport(from, to, ref result, StoreId, machineParams, CompanyId, IsSalesclerkTest, users); PosIncomePayoutService.DayMonthReport(from, to, ref result, StoreId, machineParams, CompanyId, IsSalesclerkTest); return(result); }
/// <summary> /// 销售合计不统计换货 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="userCodes"></param> /// <returns></returns> public static IEnumerable <UserDict> DayMonthReport(DateTime from, DateTime to, ref DayReportResult result, string storeId, string machineSn, int companyId, bool inTestMode) { var entities = CurrentRepository.Entities.Where(o => o.CreateDT >= from && o.IsTest == inTestMode && o.CreateDT < to && o.StoreId == storeId && o.CompanyId == companyId); if (!string.IsNullOrEmpty(machineSn)) { entities = entities.Where(o => o.MachineSN == machineSn); } string huanhuoRuKuanProject = "换货入款"; string huanhuoChukuanProject = "退换出款"; string xiaoshouProject = "销售合计"; string tuihuoProject = "退单合计"; string zhengdanrangliProject = "整单让利"; string hejiProject = "合计"; // ConsumptionPaymentService.CurrentRepository._context.Database.CommandTimeout = 180; //处理支付 //var paymants = (from a in entities // from b in ConsumptionPaymentService.CurrentRepository.Entities // from c in ApiLibraryService.CurrentRepository.Entities // where a.PaySN == b.PaySN && c.ApiCode == b.ApiCode && a.CompanyId == b.CompanyId && b.CompanyId == c.CompanyId && c.CompanyId == companyId && a.State == 0 && a.Type == 0 // group b.Amount by new { a.CreateUID, c.Title } into g // select g).ToList(); var paymants = (from a in entities from b in ConsumptionPaymentService.CurrentRepository.Entities from c in ApiLibraryService.CurrentRepository.Entities where a.PaySN == b.PaySN && c.ApiCode == b.ApiCode && a.CompanyId == b.CompanyId && b.CompanyId == c.CompanyId && c.CompanyId == companyId group b.Amount by new { a.CreateUID, c.Title, a.Type, a.State } into g select g).ToList(); //抹零 var wipeZeros = (from a in entities.Where(o => o.State == 0) from b in WipeZeroService.CurrentRepository.Entities where a.PaySN == b.PaySN && b.CompanyId == companyId group b.Number by a.CreateUID into g select g ).ToDictionary(o => o.Key, o => o.Sum()); //用户 var users = (from b in SysStoreUserInfoService.CurrentRepository.Entities where b.CompanyId == companyId select new UserDict() { UserCode = b.UserCode, CreateUID = b.UID, FullName = b.FullName } ).ToList(); var gifts = (from a in entities from b in SaleDetailService.CurrentRepository.Entities where a.PaySN == b.PaySN && a.State == 0 && a.Type == 0 && a.TotalAmount == a.Receive && a.Receive == 0 group b.SalesClassifyId by new { a.PaySN, a.CreateUID } into g select g ).ToList(); //明细 //var orderdetail = (from a in entities // from b in SaleDetailService.CurrentRepository.Entities // where b.PaySN == a.PaySN // //&& giftStatus.Contains(b.SalesClassifyId) // select new // { // b.SysPrice, // b.PurchaseNumber, // a.CreateUID, // b.SalesClassifyId // }).ToList(); var userOrders = entities.GroupBy(o => o.CreateUID); foreach (var item in userOrders) { //销售 var user = users.FirstOrDefault(o => o.CreateUID == item.Key); var userSaleOrders = item.Where(o => o.Type == 0 && o.State == 0); SalesmanDayReportResult record = new SalesmanDayReportResult() { UserCode = user.UserCode, Salesman = user.FullName, StartTime = DateTime.Now, EndTime = DateTime.Now, Sale = new SalesmanDayReportSaleResult() { SaleInfo = new DayReportDetailItem() { Number = 0, Amount = 0m, Project = xiaoshouProject }, PayWay = new List <PayWayItem>() }, Other = new List <DayReportDetailItem>() }; if (userSaleOrders.Count() > 0) { record = new SalesmanDayReportResult() { UserCode = user.UserCode, Salesman = user.FullName, StartTime = userSaleOrders.Min(o => o.CreateDT), EndTime = userSaleOrders.Max(o => o.CreateDT), Sale = new SalesmanDayReportSaleResult() { SaleInfo = new DayReportDetailItem() { Amount = userSaleOrders.Sum(o => o.Receive), Number = userSaleOrders.Count(), Project = xiaoshouProject } }, Other = new List <DayReportDetailItem>() }; } //支付方式 record.Sale.PayWay = paymants.Where(o => o.Key.CreateUID == item.Key && o.Key.State == 0 && o.Key.Type == 0).Select(o => new PayWayItem() { Title = o.Key.Title, Amount = o.Sum() }).ToList(); var wipeZeroAmount = 0m; if (wipeZeros.ContainsKey(item.Key)) { wipeZeroAmount = wipeZeros[item.Key]; } //自动抹零金额=0=隐藏 if (wipeZeroAmount != 0) { record.Sale.PayWay.Add(new PayWayItem() { Amount = wipeZeroAmount, Title = "自动抹零" }); } var cach = record.Sale.PayWay.Find(o => o.Title.Contains("现金")); if (cach != null) { record.Cash = cach.Amount; } var ranli = userSaleOrders.Where(o => o.PreferentialPrice > 0); //--- //var giftStatus = new int[] { (int)SaleStatus.ActivityGifts, (int)SaleStatus.POSGift }; //var zengpin = orderdetail.Where(o => o.CreateUID == item.Key && giftStatus.Contains(o.SalesClassifyId)); //销售合计增加整单让利统计 var rangliAmount = userSaleOrders.Sum(p => p.OrderDiscount); if (rangliAmount != 0m) { record.Sale.PayWay.Add(new PayWayItem() { Title = zhengdanrangliProject, Amount = rangliAmount }); } //整单让利入款 //record.Other.Add(new DayReportDetailItem() //{ // Amount = ranli.Sum(o => o.PreferentialPrice), // Number = ranli.Count(), // Project = zhengdanrangliProject //}); //换货入款 var userChangeOrders = item.Where(o => o.Type == 1 && o.TotalAmount > 0 && o.State == 0); //06-23:换货支付方式 var huanhuoPayWay = paymants.Where(o => o.Key.CreateUID == item.Key && o.Key.Type == 1 && o.Key.State == 0).Select(o => new PayWayItem() { Title = o.Key.Title, Amount = o.Where(p => p >= 0).Sum() }).ToList(); // huanhuoPayWay = huanhuoPayWay.Where(o => o.Amount >= 0).ToList(); //换货入款数量,数量=0就不显示该项 var userChangeOrdersCount = userChangeOrders.Count(); var userChangeOrdersAmount = userChangeOrders.Sum(o => o.TotalAmount); if (userChangeOrdersCount != 0) { var huanhuoRuKuan = new DayReportDetailItem() { Amount = userChangeOrdersAmount, Number = userChangeOrdersCount, Project = huanhuoRuKuanProject, PayWay = huanhuoPayWay }; record.Other.Add(huanhuoRuKuan); //剩余现金-=换货支付 var huanhuoCach = huanhuoRuKuan.PayWay.Find(o => o.Title.Contains("现金")); if (huanhuoCach != null) { record.Cash += huanhuoCach.Amount; } } //退换出款 userChangeOrders = item.Where(o => o.Type == 1 && o.TotalAmount <= 0 && o.State == 0); var userRetrunOrders = item.Where(o => o.Type == 2 && o.State == 0); //06-23:退货支付方式 var tuihuoPayWay = paymants.Where(o => o.Key.CreateUID == item.Key && o.Key.Type == 2 && o.Key.State == 0).Select(o => new PayWayItem() { Title = o.Key.Title, Amount = o.Sum() }).ToList(); //过滤金额 var huanhuochukuanPayWay = paymants.Where(o => o.Key.CreateUID == item.Key && o.Key.Type == 1 && o.Key.State == 0).Select(o => new PayWayItem() { Title = o.Key.Title, Amount = o.Where(p => p < 0).Sum() }).ToList(); //huanhuochukuanPayWay = huanhuochukuanPayWay.Where(o => o.Amount < 0).ToList(); tuihuoPayWay = tuihuoPayWay.Concat(huanhuochukuanPayWay).ToList(); tuihuoPayWay = tuihuoPayWay.GroupBy(o => o.Title).Select(o => new PayWayItem() { Title = o.Key, Amount = o.Sum(p => p.Amount) }).ToList(); //先计算出款数量=0=不显示 var huanhuoChuKuanCount = userChangeOrders.Count() + userRetrunOrders.Count(); var huanhuoChuKuanAmount = userChangeOrders.Sum(o => o.Receive) + userRetrunOrders.Sum(o => o.Receive); if (huanhuoChuKuanCount != 0) { var huanhuoChukuan = new DayReportDetailItem() { Amount = huanhuoChuKuanAmount, Number = huanhuoChuKuanCount, Project = huanhuoChukuanProject, PayWay = tuihuoPayWay }; record.Other.Add(huanhuoChukuan); //剩余现金-=退货 var tuihuoCach = huanhuoChukuan.PayWay.Find(o => o.Title.Contains("现金")); if (tuihuoCach != null) { record.Cash += tuihuoCach.Amount; } } //退单 var userAllReturnOrders = item.Where(o => (o.ReturnOrderUID == o.CreateUID || string.IsNullOrEmpty(o.ReturnOrderUID)) && o.Type == 3 && o.State == 1); //06-23:退货支付方式 var tuidanPayWay = paymants.Where(o => o.Key.CreateUID == item.Key && o.Key.Type == 3 && o.Key.State == 1).Select(o => new PayWayItem() { Title = o.Key.Title, Amount = o.Sum() }).ToList(); //计算退单数量=0=隐藏 var userAllReturnOrdersCount = userAllReturnOrders.Count(); var tuihuoAmount = userAllReturnOrders.Sum(o => o.Receive); if (userAllReturnOrdersCount != 0) { var tuihuo = new DayReportDetailItem() { Amount = tuihuoAmount, Number = userAllReturnOrdersCount, Project = tuihuoProject, PayWay = tuidanPayWay }; record.Other.Add(tuihuo); //剩余现金-=退单 var tuidanCash = tuihuo.PayWay.Find(o => o.Title.Contains("现金")); if (tuidanCash != null) { record.Cash += tuidanCash.Amount; } } var giftcount = gifts.Where(o => o.Key.CreateUID == item.Key).Select(o => new { o.Key.PaySN, isFalse = (o.Contains((int)SaleStatus.Normal) || o.Contains((int)SaleStatus.Promotion)) }).Where(o => !o.isFalse).Count(); //合计 var heji = new DayReportDetailItem() { Amount = record.Sale.SaleInfo.Amount + tuihuoAmount + userChangeOrdersAmount + huanhuoChuKuanAmount,//销售+退单+换货入款+换货出款 Number = record.Sale.SaleInfo.Number + userAllReturnOrdersCount + userChangeOrdersCount + huanhuoChuKuanCount - giftcount, Project = hejiProject }; record.Other.Add(heji); result.SalesmanRecords.Add(record); } if (result.SalesmanRecords.Count() > 0) { var amount = 0m; var num = 0m; foreach (var item in result.SalesmanRecords) { var info = item.Sale.SaleInfo; if (info != null) { amount += info.Amount; num += info.Number; } } result.Summary.Add(new DayReportDetailItem() { Amount = amount, Number = (int)num, Project = xiaoshouProject }); } else { result.Summary.Add(new DayReportDetailItem() { Amount = 0, Number = 0, Project = xiaoshouProject }); } if (result.SalesmanRecords.Count() > 0) { var amount = 0m; var num = 0m; foreach (var item in result.SalesmanRecords) { var info = item.Other.FirstOrDefault(o => o.Project == huanhuoRuKuanProject); if (info != null) { amount += info.Amount; num += info.Number; } } result.Summary.Add(new DayReportDetailItem() { Amount = amount, Number = (int)num, Project = huanhuoRuKuanProject }); } else { result.Summary.Add(new DayReportDetailItem() { Amount = 0, Number = 0, Project = huanhuoRuKuanProject }); } if (result.SalesmanRecords.Count() > 0) { var amount = 0m; var num = 0m; foreach (var item in result.SalesmanRecords) { var info = item.Other.FirstOrDefault(o => o.Project == huanhuoChukuanProject); if (info != null) { amount += info.Amount; num += info.Number; } } result.Summary.Add(new DayReportDetailItem() { Amount = amount, Number = (int)num, Project = huanhuoChukuanProject }); } else { result.Summary.Add(new DayReportDetailItem() { Amount = 0, Number = 0, Project = huanhuoChukuanProject }); } if (result.SalesmanRecords.Count() > 0) { var amount = 0m; var num = 0m; foreach (var item in result.SalesmanRecords) { var info = item.Other.FirstOrDefault(o => o.Project == tuihuoProject); if (info != null) { amount += info.Amount; num += info.Number; } } result.Summary.Add(new DayReportDetailItem() { Amount = amount, Number = (int)num, Project = tuihuoProject }); } else { result.Summary.Add(new DayReportDetailItem() { Amount = 0, Number = 0, Project = tuihuoProject }); } //if (result.SalesmanRecords.Count() > 0) //{ // var amount = 0m; // var num = 0m; // foreach (var item in result.SalesmanRecords) // { // var info = item.Other.FirstOrDefault(o => o.Project == zhengdanrangliProject); // if (info != null) // { // amount += info.Amount; // num += info.Number; // } // } // //result.Summary.Add(new DayReportDetailItem() // //{ // // Amount = amount, // // Number = (int)num, // // Project = zhengdanrangliProject // //}); //} //else //{ // result.Summary.Add(new DayReportDetailItem() // { // Amount = 0, // Number = 0, // Project = zhengdanrangliProject // }); //} if (result.SalesmanRecords.Count() > 0) { var amount = 0m; var num = 0m; foreach (var item in result.SalesmanRecords) { var info = item.Other.FirstOrDefault(o => o.Project == hejiProject); if (info != null) { amount += info.Amount; num += info.Number; } } result.Summary.Add(new DayReportDetailItem() { Amount = amount, Number = (int)num, Project = hejiProject }); } else { result.Summary.Add(new DayReportDetailItem() { Amount = 0, Number = 0, Project = hejiProject }); } return(users); }
internal static void DayMonthReport(DateTime from, DateTime to, ref DayReportResult result, string storeId, string machineSn, int companyId, bool inTestMode) { var entities = CurrentRepository.Entities.Where(o => o.CreateDT >= from && o.CreateDT < to && o.StoreId == storeId && o.CompanyId == companyId && o.IsTest == inTestMode); if (!string.IsNullOrEmpty(machineSn)) { entities = entities.Where(o => o.MachineSN == machineSn); } var users = (from a in entities from b in SysStoreUserInfoService.CurrentRepository.Entities where a.CreateUID == b.UID && b.CompanyId == companyId select new { b.UserCode, a.CreateUID, b.FullName } ).ToList(); var query = entities.GroupBy(o => o.CreateUID).ToList(); foreach (var item in query) { var user = users.FirstOrDefault(o => o.CreateUID == item.Key); var record = result.SalesmanRecords.FirstOrDefault(o => o.UserCode == user.UserCode); if (record == null) { record = new SalesmanDayReportResult() { StartTime = DateTime.Now, EndTime = DateTime.Now, UserCode = user.UserCode, Salesman = user.FullName, Sale = new SalesmanDayReportSaleResult() { SaleInfo = new DayReportDetailItem() { Number = 0, Amount = 0m, Project = "销售小计" }, PayWay = new List <PayWayItem>() }, Other = new List <DayReportDetailItem>() }; result.SalesmanRecords.Add(record); } var chongzhi = item.Where(o => o.Type == 1); var chongzhiheji = new DayReportDetailItem() { Project = "充值小计", Amount = chongzhi.Sum(o => o.RechargeAmount), Number = chongzhi.Count() }; record.Cash += chongzhiheji.Amount; record.Other.Insert(0, chongzhiheji); var fanjiesuan = item.Where(o => o.Type == 2); var fanjiesuanheji = new DayReportDetailItem() { Project = "反结算小计", Amount = -fanjiesuan.Sum(o => o.RechargeAmount), Number = fanjiesuan.Count() }; record.Other.Insert(0, fanjiesuanheji); record.Cash += fanjiesuanheji.Amount; var heji = record.Other.FirstOrDefault(o => o.Project == "合计"); if (heji == null) { heji = new DayReportDetailItem() { Amount = 0m, Number = 0, Project = "合计" }; result.Summary.Add(heji); } heji.Amount += chongzhiheji.Amount; heji.Amount += fanjiesuanheji.Amount; heji.Number += chongzhiheji.Number; } if (result.SalesmanRecords.Count > 0) { var amount = result.SalesmanRecords.Sum(o => o.Other.Sum(j => { return(j != null && j.Project == "充值小计" ? j.Amount : 0m); })); var num = result.SalesmanRecords.Sum(o => o.Other.Sum(j => { return(j != null && j.Project == "充值小计" ? j.Number : 0); })); result.Summary.Insert(0, new DayReportDetailItem() { Amount = amount, Number = num, Project = "充值小计" }); var amount1 = result.SalesmanRecords.Sum(o => o.Other.Sum(j => { return(j != null && j.Project == "反结算小计" ? j.Amount : 0m); })); var num1 = result.SalesmanRecords.Sum(o => o.Other.Sum(j => { return(j != null && j.Project == "反结算小计" ? j.Number : 0); })); result.Summary.Insert(0, new DayReportDetailItem() { Amount = amount1, Number = num1, Project = "反结算小计" }); var heji = result.Summary.FirstOrDefault(o => o.Project == "合计"); if (heji != null) { heji.Number += num; heji.Amount += amount; heji.Amount += amount1; } } else { result.Summary.Insert(0, new DayReportDetailItem() { Amount = 0m, Number = 0, Project = "充值小计" }); } }