private void CardUpdate(bool isCardLevelAuto, Guid cardId, decimal dBalance, decimal dPoint)
        {
            DXInfo.Models.Cards newCard = uow.Cards.GetById(g => g.Id == cardId);
            if (newCard == null)
            {
                throw new ArgumentException("卡信息未找到");
            }
            newCard.Balance = dBalance;

            if (isCardLevelAuto)
            {
                DXInfo.Models.CardLevels oldCardLevel = uow.CardLevels.GetById(g => g.Id == newCard.CardLevel);
                if (dPoint > 0)
                {
                    decimal points = uow.CardPoints.GetAll().Where(w => w.Card == cardId).Sum(s => s.Point);
                    DXInfo.Models.CardLevels cardLevel = uow.CardLevels.GetAll().Where(w => w.Point < points + dPoint &&
                                                                                       w.Id != newCard.CardLevel).OrderByDescending(o => o.Point).FirstOrDefault();
                    if (cardLevel != null && cardLevel.Discount < oldCardLevel.Discount)
                    {
                        newCard.CardLevel = cardLevel.Id;
                    }
                }
            }
            uow.Cards.Update(newCard);

            DXInfo.Models.CardsLog cardLog = Mapper.Map <DXInfo.Models.CardsLog>(newCard);
            cardLog.CardId = newCard.Id;
            uow.CardsLog.Add(cardLog);
        }
Exemple #2
0
        private void MemberBalance(Guid orderId, string cardNo)
        {
            //结账
            //DXInfo.Models.FairiesMemberManage db = new DXInfo.Models.FairiesMemberManage();

            DXInfo.Models.Cards card = uow.Cards.GetAll().Where(w => w.CardNo == cardNo).FirstOrDefault();
            if (card == null)
            {
                MessageBox.Show(cardNo + "未找到会员卡");
                return;
            }
            DXInfo.Models.Members member = uow.Members.GetAll().Where(w => w.Id == card.Member).FirstOrDefault();
            if (member == null)
            {
                MessageBox.Show("未找到会员信息");
                return;
            }
            DXInfo.Models.CardLevels cardLevel = uow.CardLevels.GetAll().Where(w => w.Id == card.CardLevel).FirstOrDefault();
            if (cardLevel == null)
            {
                MessageBox.Show("未找到卡级别参数");
                return;
            }
            DXInfo.Models.OrderDishes orderDish = uow.OrderDishes.GetAll().Where(w => w.Id == orderId && w.Status == 2).FirstOrDefault();
            if (orderDish == null)
            {
                MessageBox.Show("已撤销桌台才可无卡结账");
                return;
            }
            decimal dDiscount = cardLevel.Discount;
            //bool isOut = false;
            Guid gPayType = Guid.Empty;

            var lsi = (from o in uow.OrderMenus.GetAll()
                       join i in uow.Inventory.GetAll() on o.InventoryId equals i.Id into oi
                       from ois in oi.DefaultIfEmpty()
                       join c in uow.InventoryCategory.GetAll() on ois.Category equals c.Id into ic
                       from ics in ic.DefaultIfEmpty()
                       where o.OrderId == orderId && !(o.Status == 0 || o.Status == 1 || o.Status == 7)
                       select new { ics.IsDiscount, o.InventoryId, ois.Code, ois.Name, ois.EnglishName, o.Price, o.Comment, o.Status, o.Id, o.Amount, o.Quantity, ois.Category }).ToList();

            decimal dSum = lsi.Sum(s => s.Amount);

            decimal dSum1 = lsi.Where(w => w.IsDiscount).Sum(s => s.Amount);
            decimal dSum2 = lsi.Where(w => !w.IsDiscount).Sum(s => s.Amount);

            int iCount = Convert.ToInt32(lsi.Sum(s => s.Quantity));


            decimal dAmount = (Math.Round(dSum1 * dDiscount / 100, 2) + dSum2);

            if (dAmount > card.Balance)
            {
                MessageBox.Show("余额不足");
                return;
            }
            //消费积分
            Guid deptId = App.MyIdentity.oper.DeptId.Value;

            decimal point = 0;

            if (dAmount > 0)
            {
                var cp1 = uow.ConsumePoints.GetAll().Where(w => w.DeptId == deptId);
                var cp  = cp1.Count() > 0 ? cp1 : uow.ConsumePoints.GetAll();
                foreach (var si in lsi)
                {
                    if (cp.Count() > 0)
                    {
                        var cpc = cp.Where(w => w.Category == si.Category);
                        if (cpc.Count() > 0)
                        {
                            decimal min = cpc.Min(m => m.Point / m.Amount);
                            point += si.Amount * min;
                        }
                        else
                        {
                            decimal min = cp.Min(m => m.Point / m.Amount);
                            point += si.Amount * min;
                        }
                    }
                }
            }
            var lselInv = lsi.Select(s => new
            {
                OrderMenuId = s.Id,
                Id          = s.InventoryId,
                s.Code,
                s.Name,
                s.EnglishName,
                s.Price,
                s.Quantity,
                s.Amount,
                s.Comment,
                s.IsDiscount,
                Status = s.Status
            });
            Guid     cardId = card.Id;
            DateTime dtn    = DateTime.Now.AddDays(-1);
            var      di     = (from d1 in uow.CardDonateInventory.GetAll().Where(w => w.CardId == cardId).Where(w => w.IsValidate).Where(w => w.InvalideDate > dtn)
                               join i in uow.Inventory.GetAll() on d1.Inventory equals i.Id into d1i
                               from d1is in d1i.DefaultIfEmpty()
                               select new { d1is.Id, d1is.Name }).ToList();

            var ctx = new
            {
                Id                  = card.Id,
                CardNo              = card.CardNo,
                MemberName          = member.MemberName,
                UserId              = App.MyIdentity.oper.UserId,
                FullName            = App.MyIdentity.oper.FullName,
                DeptId              = App.MyIdentity.oper.DeptId.Value,
                DeptName            = App.MyIdentity.dept.DeptName,
                Sum                 = dSum,
                Voucher             = 0,
                PayVoucher          = 0,
                Discount            = dDiscount,
                Amount              = dAmount,
                LastBalance         = card.Balance,
                Balance             = card.Balance - dAmount,
                CreateDate          = DateTime.Now,
                lSelInv             = lselInv,
                Point               = point,
                Count               = iCount,
                CardDonateInventory = di,
                PayType             = gPayType,
                OrderId             = orderId
            };
            DeskNoCardConsume2Window cw = new DeskNoCardConsume2Window(uow, ctx);

            if (cw.ShowDialog().GetValueOrDefault())
            {
            }
        }