Ejemplo n.º 1
0
        public void ChangeStatusToWaitingForCheckOut()
        {
            bool   result        = false;
            string PaperReturnID = "";

            //紙本刷退
            if (!string.IsNullOrEmpty(Request["PaperReturnID"]))
            {
                PaperReturnID = Request["PaperReturnID"];
            }

            string[] ItemNo   = JsonConvert.DeserializeObject <string[]>(Request["ItemNoList"]);
            string[] quantity = JsonConvert.DeserializeObject <string[]>(Request["QuantityList"]);
            string[] price    = JsonConvert.DeserializeObject <string[]>(Request["PriceList"]);

            List <SaleItemData> ItemList = new List <SaleItemData>();

            for (int i = 0; i < quantity.Length; i++)
            {
                SaleItemData SD = new SaleItemData();
                SD.itemNo   = ItemNo[i];
                SD.price    = int.Parse(price[i]);
                SD.quantity = int.Parse(quantity[i]);
                ItemList.Add(SD);
            }

            DataTable dt = GetOrderInfo(OrderID);

            if (dt.Rows.Count > 0)
            {
                var aa = POS_Library.ShopPos.NoProduct.SetSalePackageBack(int.Parse(OrderID), _areaId, ClerkName);
                if (aa == true)
                {
                    StringBuilder sb = new StringBuilder();
                    Dictionary <string, object> param = new Dictionary <string, object>();

                    //改訂單狀態為待結
                    sb.Append("update Orders set Status=3,SyncedTime=null where OrderID=@OrderID; ");
                    //新增退貨紀錄
                    sb.Append("Insert into Returns(OrderID,Type,PosNo,ClerkID,ReturnTime) ");
                    sb.Append("values(@OrderID,@ReturnType,@PosNo,@ClerkID,GETDATE()); ");

                    int SaleNo = 1;
                    //紀錄待結商品
                    foreach (SaleItemData Item in ItemList)
                    {
                        string ProductId = Item.itemNo;
                        int    Price     = Item.price;
                        int    Quantity  = Item.quantity;
                        int    SIAmount  = Price * Quantity;

                        sb.Append("Insert into PosClient.[dbo].OrderItemsWaitCheckOut (OrderID,ProductId,Price,Quantity,Amount) values ");
                        sb.Append(string.Format("(@OrderID, @ProductId{0}, @Price{0},@Quantity{0}, @SIAmount{0} )", SaleNo));
                        param.Add("ProductId" + SaleNo.ToString(), ProductId);
                        param.Add("Price" + SaleNo.ToString(), Price);
                        param.Add("Quantity" + SaleNo.ToString(), Quantity);
                        param.Add("SIAmount" + SaleNo.ToString(), SIAmount);
                        SaleNo++;
                    }

                    //新增發票作廢,有可能會多張
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        sb.Append("Insert into NullifiedInvoices(PosNo,InvoiceNo,ClerkID,NullifiedTime)  ");
                        sb.Append(string.Format("values(@PosNo,@InvoiceNo{0},@ClerkID,getdate()); ", i));
                        param.Add("InvoiceNo" + i, dt.Rows[i]["InvoiceNo"].ToString());
                    }
                    param.Add("OrderID", OrderID);
                    param.Add("PosNo", PosNo);
                    param.Add("ClerkID", ClerkID);
                    param.Add("ReturnType", ReturnType);

                    //寫入紙本刷退紀錄
                    if (string.IsNullOrEmpty(PaperReturnID) == false)
                    {
                        sb.Append("Insert Into [PosClient]..[ReturnCreditCardPaper] (OrderID) values (@OrderID) ");
                        param.Add("ReturnPaperID", PaperReturnID);
                    }

                    result = DB.DBNonQuery(sb.ToString(), param, "PosClient");
                }
            }

            var ChangeStatusResult = new { result = result };

            ShowResultOnPage(JsonConvert.SerializeObject(ChangeStatusResult));
        }
Ejemplo n.º 2
0
        public void AddOrder()
        {
            string[] ItemNo         = JsonConvert.DeserializeObject <string[]>(Request["ItemNoList"]);
            string[] color          = JsonConvert.DeserializeObject <string[]>(Request["ColorList"]);
            string[] quantity       = JsonConvert.DeserializeObject <string[]>(Request["QuantityList"]);
            string[] price          = JsonConvert.DeserializeObject <string[]>(Request["PriceList"]);
            string   Amount         = Request["Amount"];
            string   OriginalAmount = Request["OriginalAmount"];
            string   PayType        = Request["PayType"];

            ArrayList InvoiceContent = new ArrayList();

            if (CardNo.Length == 16)
            {
                CardNo = "************" + CardNo.Substring(12, 4);
            }

            int pickType = string.IsNullOrEmpty(Request["pickType"]) ? 0 : int.Parse(Request["pickType"]);

            List <SaleItemData> ItemList        = new List <SaleItemData>();
            List <SaleItemData> ItemListInvoice = new List <SaleItemData>();

            for (int i = 0; i < quantity.Length; i++)
            {
                SaleItemData SD = new SaleItemData();
                SD.itemNo   = ItemNo[i];
                SD.price    = int.Parse(price[i]);
                SD.quantity = int.Parse(quantity[i]);
                SD.aomout   = SD.price * SD.quantity;
                ItemList.Add(SD);
                SaleItemData SDInv = new SaleItemData();
                SDInv.itemNo   = ItemNo[i];
                SDInv.price    = int.Parse(price[i]);
                SDInv.quantity = int.Parse(quantity[i]);
                SDInv.aomout   = SDInv.price * SDInv.quantity;
                ItemListInvoice.Add(SDInv);
            }


            #region 攤使用紅利

            bool HasUseBonus    = false;
            int  BonusUseAmount = 0;
            int  BonusUsed      = 0;
            bool.TryParse(Request["HasUseBonus"], out HasUseBonus);

            if (HasUseBonus)
            {
                BonusUseAmount = (!string.IsNullOrEmpty(Request["BonusUseAmount"])) ? int.Parse(Request["BonusUseAmount"]) : 0;
                BonusUsed      = BonusUseAmount;
                //要先把扣掉紅利的金額加回來
                int          TotalAmount   = int.Parse(Amount) + BonusUseAmount;
                int          DiscountAmout = TotalAmount - BonusUseAmount;
                int          CounterNo     = 1;
                SaleItemData Inv           = new SaleItemData();
                Inv.itemNo = "紅利";
                Inv.aomout = -BonusUseAmount;
                ItemListInvoice.Add(Inv);

                //因為贈品不需分攤紅利,故要先扣除
                var a = (from x in ItemList
                         where x.price > 0
                         select x).ToList();

                int DiscountTotal = a.Count();

                foreach (SaleItemData SD in ItemList)
                {
                    //攤紅利要排除贈品
                    if (SD.price > 0)
                    {
                        int discount_price  = Convert.ToInt32(Math.Floor((double)(SD.price * DiscountAmout / TotalAmount)));
                        int original_amount = SD.price * SD.quantity;
                        int discount_amount = 0;

                        if (CounterNo == DiscountTotal)
                        {
                            discount_amount = original_amount - (BonusUseAmount);
                        }
                        else
                        {
                            discount_amount = discount_price * SD.quantity;
                        }

                        BonusUseAmount -= (original_amount) - discount_amount;
                        SD.price        = discount_price;
                        SD.aomout       = discount_amount;
                        CounterNo++;
                    }
                }
            }

            #endregion

            if (ItemList.Count == 0)
            {
                return;
            }

            bool result = CheckOut.AddOrder(PosNo, ItemList, Amount, PayType, ClerkID, InvoiceNumberNow, uniformNo, ApprovalNo, CreditCardData, pickType, vip_id, BonusUsed, ItemListInvoice);

            if (result)
            {
                InvoiceContent = PrintInvoice(ItemListInvoice, int.Parse(PayType), int.Parse(Amount), int.Parse(OriginalAmount));
                OrderStep      = 1;
                OrderID        = GetLastOrderID(PosNo).ToString("D10");
                Log.Add(0, OrderID, OrderStep.ToString(), "OrderStep:1,訂單寫入成功", ClerkID, PosNo);
            }

            GetInvoiceNumber(PosNo);
            var AddOrderResult = new { result = result, NumberNow = InvoiceNumberNow, Remainder = InvoiceRemainder, OrderStep = 1, InvoiceContent = InvoiceContent, OrderID = GetLastOrderID(PosNo) };
            ShowResultOnPage(JsonConvert.SerializeObject(AddOrderResult));
        }