private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (IsPrint)
            {
                PrintDialog pDialog1 = new PrintDialog();
                pDialog1.PrintVisual(GridPrint, "会员积分兑换打印");
                DialogResult = true;
                this.Close();
                return;
            }
            dynamic d = GridPrint.DataContext;

            using (TransactionScope transaction = new TransactionScope())
            {
                DXInfo.Models.Consume consume = new DXInfo.Models.Consume();
                consume.Card        = d.Id;
                consume.Sum         = d.Amount;
                consume.Discount    = 100;
                consume.Amount      = d.Amount;
                consume.Balance     = d.Balance;
                consume.CreateDate  = d.CreateDate;
                consume.DeptId      = d.DeptId;
                consume.LastBalance = d.LastBalance;
                consume.UserId      = d.UserId;
                consume.ConsumeType = 2;
                uow.Consume.Add(consume);


                DXInfo.Models.Bills bill = new DXInfo.Models.Bills();
                bill.Amount      = d.Amount;
                bill.Balance     = d.Balance;
                bill.BillType    = "PointsExchangeWindow";
                bill.CardNo      = d.CardNo;
                bill.CreateDate  = d.CreateDate;
                bill.DeptName    = d.DeptName;
                bill.FullName    = d.FullName;
                bill.LastBalance = d.LastBalance;
                bill.MemberName  = d.MemberName;

                uow.Bills.Add(bill);

                uow.Commit();

                Guid cid = d.Id;

                var p = uow.CardPoints.GetAll().Where(w => w.Card == cid);

                decimal dkp = 0;
                foreach (DXInfo.Models.CardPoints cp in p)
                {
                    if (cp.Point > d.Amount - dkp)
                    {
                        dkp      = d.Amount;
                        cp.Point = cp.Point - d.Amount;
                        break;
                    }
                    else
                    {
                        dkp     += cp.Point;
                        cp.Point = 0;
                    }
                }
                foreach (var si in d.lSelInv)
                {
                    DXInfo.Models.ConsumeList cl = new DXInfo.Models.ConsumeList();
                    cl.Amount     = si.Amount;
                    cl.Consume    = consume.Id;
                    cl.CreateDate = d.CreateDate;
                    cl.Cup        = si.Cup;
                    cl.DeptId     = d.DeptId;
                    cl.Inventory  = si.Id;
                    cl.Price      = si.SalePoint;
                    cl.Quantity   = si.Quantity;
                    cl.UserId     = d.UserId;

                    uow.ConsumeList.Add(cl);

                    DXInfo.Models.BillInvLists bl = new DXInfo.Models.BillInvLists();
                    bl.Amount    = si.Amount;
                    bl.Bill      = bill.Id;
                    bl.CupType   = si.CupType;
                    bl.Name      = si.Name;
                    bl.Quantity  = si.Quantity;
                    bl.SalePrice = si.SalePoint;
                    bl.Tastes    = si.Tastes;

                    uow.BillInvLists.Add(bl);

                    if (si.lTastes.Count > 0)
                    {
                        uow.Commit();
                        foreach (var lt in si.lTastes)
                        {
                            DXInfo.Models.ConsumeTastes ct = new DXInfo.Models.ConsumeTastes();
                            ct.ConsumeList = cl.Id;
                            ct.Taste       = lt.Id;
                            uow.ConsumeTastes.Add(ct);
                        }
                    }
                }
                uow.Commit();
                transaction.Complete();
            }
            PrintDialog pDialog = new PrintDialog();

            pDialog.PrintVisual(GridPrint, "会员积分兑换打印");
            DialogResult = true;
            this.Close();
        }
Пример #2
0
        public bool CheckOut(CheckoutParaObj para, Func <string, decimal, bool> CardConsume)
        {
            decimal dPoint = 0;

            if (para.ConsumeType == (int)DXInfo.Models.ConsumeType.Card)
            {
                if (para.Balance < 0)
                {
                    this.ErrorMsg = "卡余额不足";
                    return(false);
                }
            }
            if (para.ConsumeType == (int)DXInfo.Models.ConsumeType.CardNoMoney ||
                para.ConsumeType == (int)DXInfo.Models.ConsumeType.NoMember)
            {
                if (para.Cash - para.Change < para.Amount)
                {
                    if (!(para.Erasing && (int)(para.Cash - para.Change) / 10 == (int)para.Amount / 10))
                    {
                        this.ErrorMsg = "收的钱应不小于消费金额";
                        return(false);
                    }
                }
            }

            if (para.Amount > 0 && para.Voucher == 0 && para.IsCard)
            {
                dPoint = Points(para.DeptId, para.lInventoryEx);
            }

            if (para.Amount > 0 &&
                para.ConsumeType == (int)DXInfo.Models.ConsumeType.Card &&
                para.IsCard &&
                !para.IsVirtual)
            {
                if (!CardConsume(para.CardNo, para.Amount))
                {
                    return(false);
                }
            }
            using (TransactionScope transaction = new TransactionScope())
            {
                if (para.SourceType == (int)DXInfo.Models.SourceType.WesternRestaurant)
                {
                    if (!OrderDisheUpdate(para.OrderDishId, para.CreateDate, para.UserId))
                    {
                        return(false);
                    }
                    OrderDeskUpdate(para.OrderDishId, para.UserId, para.CreateDate);
                    OrderPackageUpdate(para.OrderDishId, para.CreateDate, para.UserId);
                }
                DXInfo.Models.Consume consume = new DXInfo.Models.Consume();
                consume.Sum        = para.Sum;
                consume.Voucher    = para.Voucher;
                consume.PayVoucher = para.PayVoucher;
                consume.Discount   = para.Discount;
                if (para.CardId.HasValue)
                {
                    consume.Card = para.CardId.Value;
                }
                if (para.MemberId.HasValue)
                {
                    consume.Member = para.MemberId.Value;
                }
                consume.Amount          = para.Amount;
                consume.Balance         = para.Balance;
                consume.CreateDate      = para.CreateDate;
                consume.DeptId          = para.DeptId;
                consume.LastBalance     = para.LastBalance;
                consume.Point           = dPoint;
                consume.UserId          = para.UserId;
                consume.ConsumeType     = para.ConsumeType;
                consume.DeskNo          = para.DeskNo;
                consume.PayType         = para.PayTypeId;
                consume.Cash            = para.Cash;
                consume.Change          = para.Change;
                consume.SourceType      = para.SourceType;
                consume.Quantity        = para.Quantity;
                consume.IsValid         = true;
                consume.Sn              = para.Sn;
                consume.OperatorsOnDuty = para.OperatorsOnDuty;
                uow.Consume.Add(consume);


                DXInfo.Models.Bills bill = new DXInfo.Models.Bills();
                bill.Sum      = para.Sum;
                bill.Voucher  = para.Voucher;
                bill.Discount = para.Discount;

                bill.Amount   = para.Amount;
                bill.Balance  = para.Balance;
                bill.BillType = para.BillType;//"CardConsumeWindow";
                if (!string.IsNullOrEmpty(para.CardNo))
                {
                    bill.CardNo = para.CardNo;
                }
                bill.CreateDate  = para.CreateDate;
                bill.DeptName    = para.DeptName;
                bill.FullName    = para.UserName + "," + para.FullName;
                bill.LastBalance = para.LastBalance;
                if (!string.IsNullOrEmpty(para.MemberName))
                {
                    bill.MemberName = para.MemberName;
                }
                bill.DeskNo = para.DeskNo;

                bill.PayTypeName = para.PayTypeName;
                bill.Cash        = para.Cash;
                bill.Change      = para.Change;
                bill.Sn          = para.Sn;
                bill.PeopleCount = para.PeopleCount;
                uow.Bills.Add(bill);

                uow.Commit();
                if (para.IsCard && para.ConsumeType == (int)DXInfo.Models.ConsumeType.Card)
                {
                    CardUpdate(para.IsCardLevelAuto, para.CardId.Value, para.Balance, dPoint);
                }
                //卡赠送处理
                if (para.Voucher == 0 &&
                    para.IsCard &&
                    para.lCardDonateInventoryEx != null &&
                    para.lCardDonateInventoryEx.Count > 0)
                {
                    CardDonate(para.lCardDonateInventoryEx, consume.Id, bill.Id);
                }
                foreach (DXInfo.Models.InventoryEx si in para.lInventoryEx)
                {
                    if (para.SourceType == (int)DXInfo.Models.SourceType.WesternRestaurant)
                    {
                        OrderMenuUpdate(si.OrderMenuId, para.CreateDate, para.UserId);
                    }
                    DXInfo.Models.ConsumeList cl = new DXInfo.Models.ConsumeList();
                    //cl.Amount = si.Amount;
                    cl.Consume    = consume.Id;
                    cl.CreateDate = para.CreateDate;
                    cl.IsValid    = true;
                    cl.IsStock    = false;
                    if (para.SourceType == (int)DXInfo.Models.SourceType.ColdDrinkShop)
                    {
                        if (si.CupType != null)
                        {
                            cl.Cup = si.CupType.Id;
                        }
                    }
                    cl.DeptId    = para.DeptId;
                    cl.Inventory = si.Id;

                    cl.Quantity = si.Quantity;
                    cl.UserId   = para.UserId;
                    //cl.Discount = dDiscount;

                    if (si.IsInvDynamicPrice)
                    {
                        cl.Discount = si.IsDiscount ? si.Discount : 100;
                    }
                    else
                    {
                        cl.Discount = si.IsDiscount ? para.Discount : 100;
                    }
                    cl.IsPackage = si.IsPackage;
                    cl.PackageId = si.PackageId;
                    if (para.SourceType == (int)DXInfo.Models.SourceType.WesternRestaurant)
                    {
                        cl.Price  = si.SalePrice;
                        cl.Sum    = si.Amount;
                        cl.Amount = si.IsDiscount ? si.Amount * para.Discount / 100 : si.Amount;
                    }
                    else
                    {
                        if (si.IsInvDynamicPrice)
                        {
                            cl.Price          = si.SalePrice;
                            cl.AgreementPrice = si.AgreementPrice;
                            //if (si.IsInvPrice && si.InvPrice != null)
                            //{
                            //   cl.Price = si.InvPrice.SalePrice;
                            //}
                            cl.Sum    = si.Amount;//cl.Price * cl.Quantity;
                            cl.Amount = si.CurrentAmount;
                            //cl.Amount = Convert.ToInt32(si.IsDiscount ? cl.Sum * cl.Discount / 100 : cl.Sum);
                            //cl.Amount = si.IsDiscount ? si.CurrentAmount * para.Discount / 100 : si.CurrentAmount;
                        }
                        else
                        {
                            cl.Price  = si.CurrentSalePrice;
                            cl.Sum    = si.CurrentAmount;
                            cl.Amount = si.IsDiscount ? si.CurrentAmount * para.Discount / 100 : si.CurrentAmount;
                        }
                    }
                    uow.ConsumeList.Add(cl);

                    DXInfo.Models.BillInvLists bl = new DXInfo.Models.BillInvLists();

                    bl.Bill = bill.Id;
                    if (para.SourceType == (int)DXInfo.Models.SourceType.ColdDrinkShop)
                    {
                        if (si.CupType != null)
                        {
                            bl.CupType = si.CupType.Name;
                        }
                    }
                    bl.Name     = si.Name;
                    bl.Quantity = si.Quantity;
                    if (si.IsInvDynamicPrice)
                    {
                        bl.Discount = si.IsDiscount ? si.Discount : 100;
                    }
                    else
                    {
                        bl.Discount = si.IsDiscount ? para.Discount : 100;
                    }
                    if (para.SourceType == (int)DXInfo.Models.SourceType.WesternRestaurant)
                    {
                        bl.Amount    = si.Amount;
                        bl.SalePrice = si.SalePrice;
                    }
                    else
                    {
                        if (si.IsInvDynamicPrice)
                        {
                            bl.SalePrice      = si.SalePrice;
                            bl.AgreementPrice = si.AgreementPrice;
                            //if (si.IsInvPrice && si.InvPrice != null)
                            //{
                            //    bl.SalePrice = si.InvPrice.SalePrice;
                            //}
                            bl.Sum    = si.Amount;        //bl.SalePrice * bl.Quantity;
                            bl.Amount = si.CurrentAmount; //Convert.ToInt32(si.IsDiscount ? bl.Sum * bl.Discount / 100 : bl.Sum);
                        }
                        else
                        {
                            bl.SalePrice = si.CurrentSalePrice;
                            bl.Sum       = si.CurrentAmount;
                            bl.Amount    = si.IsDiscount ? si.CurrentAmount * para.Discount / 100 : si.CurrentAmount;
                        }
                    }
                    if (para.SourceType == (int)DXInfo.Models.SourceType.ColdDrinkShop)
                    {
                        bl.Tastes = si.lTasteEx.Where(w => w.IsSelected == true).Count() == 0 ? "" : si.lTasteEx.Where(w => w.IsSelected == true).Select(l => l.Name).Aggregate((total, next) => (total + "," + next));//si.Tastes;
                    }
                    uow.BillInvLists.Add(bl);

                    if (para.SourceType == (int)DXInfo.Models.SourceType.ColdDrinkShop &&
                        si.lTasteEx.Count > 0)
                    {
                        uow.Commit();
                        foreach (var lt in si.lTasteEx.Where(w => w.IsSelected))
                        {
                            DXInfo.Models.ConsumeTastes ct = new DXInfo.Models.ConsumeTastes();
                            ct.ConsumeList = cl.Id;
                            ct.Taste       = lt.Id;
                            uow.ConsumeTastes.Add(ct);
                        }
                    }

                    if (si.InvPrice != null)
                    {
                        uow.Commit();
                        DXInfo.Models.ConsumeInvPrice invPrice = Mapper.Map <DXInfo.Models.ConsumeInvPrice>(si.InvPrice);
                        invPrice.ConsumeListId = cl.Id;
                        invPrice.InvPriceId    = si.InvPrice.Id;
                        uow.ConsumeInvPrice.Add(invPrice);
                        uow.Commit();
                    }
                }

                if (dPoint > 0 && para.IsCard)
                {
                    CardPoint(para.CardId.Value, para.CreateDate, para.DeptId, para.UserId, dPoint);
                }
                uow.Commit();
                transaction.Complete();
            }
            return(true);
        }