Exemple #1
0
        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);
            }
        }
        /// <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);
        }
Exemple #3
0
        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 = "充值小计"
                });
            }
        }