public WineOrderModel SaveOrderResult(WineOrderModel order)
        {
            List <string>         sqls     = new List <string>();
            List <SqlParameter[]> cmdParms = new List <SqlParameter[]>();

            StringBuilder str;

            SqlParameter[] paras;

            #region Order

            str = new StringBuilder();
            str.AppendLine("update [Order] set");
            str.AppendLine(" OrderStatus=@OrderStatus ");
            str.AppendLine(" ,OrderDesc=@OrderDesc ");
            str.AppendLine(" ,UpdateTime = getdate()");
            str.AppendLine(" where orderID = @OrderID ");

            paras    = new SqlParameter[3];
            paras[0] = new SqlParameter("@OrderStatus", order.ResultStatus);
            paras[1] = new SqlParameter("@OrderDesc", order.ResultMsg);
            paras[2] = new SqlParameter("@OrderID", order.OrderID);

            sqls.Add(str.ToString());
            cmdParms.Add(paras);

            #endregion


            #region PaymentTransaction

            if (order.Response != null)
            {
                str = new StringBuilder();
                str.AppendLine("update PaymentTransaction set");
                str.AppendLine(" ResponseID=@ResponseID ");
                str.AppendLine(" ,ResponseStatus=@ResponseStatus ");
                str.AppendLine(" ,ResponseMsg=@ResponseMsg ");
                str.AppendLine(" ,UpdateTime = getdate()");
                str.AppendLine(" where RequestID = @RequestID ");

                paras    = new SqlParameter[4];
                paras[0] = new SqlParameter("@ResponseID", Common.VariableConvert.ConvertStringToDBValue(order.Response.ResponseID));
                paras[1] = new SqlParameter("@ResponseStatus", order.Response.ResultCode);
                paras[2] = new SqlParameter("@ResponseMsg", Common.VariableConvert.ConvertStringToDBValue(order.Response.ResultMessage));
                paras[3] = new SqlParameter("@RequestID", order.RequestID);

                sqls.Add(str.ToString());
                cmdParms.Add(paras);
            }

            #endregion

            SqlAccess mySqlAccess = new SqlAccess();
            mySqlAccess.ExecuteNonQuerys(sqls, cmdParms);

            return(order);
        }
        public WineOrderModel SaveOrder(WineOrderModel order)
        {
            List <string>         sqls     = new List <string>();
            List <SqlParameter[]> cmdParms = new List <SqlParameter[]>();
            JsonSerializer        json     = new JsonSerializer();

            if (order.OrderID == 0)
            {
                int orderID = this.GetNewOrderID();
                order.OrderID = orderID;
            }

            StringBuilder str;

            SqlParameter[] paras;

            #region Customer

            str = new StringBuilder();
            str.AppendLine("Insert into Customer");
            str.AppendLine(" (OrderID, Name, Phone, Email, Birthday, Address, State, PostCode, CreateTime, UpdateTime) ");
            str.AppendLine(" Values (@OrderID, @Name, @Phone, @Email, @Birthday, @Address, @State, @PostCode, Getdate(), getdate());");

            paras    = new SqlParameter[8];
            paras[0] = new SqlParameter("@OrderID", order.OrderID);
            paras[1] = new SqlParameter("@Name", order.Delivery.Name);
            paras[2] = new SqlParameter("@Phone", order.Delivery.Phone);
            paras[3] = new SqlParameter("@Email", order.Delivery.Email);
            paras[4] = new SqlParameter("@Birthday", order.Delivery.Birthday);
            paras[5] = new SqlParameter("@Address", order.Delivery.Address);
            paras[6] = new SqlParameter("@State", order.Delivery.State);
            paras[7] = new SqlParameter("@PostCode", order.Delivery.PostCode);

            sqls.Add(str.ToString());
            cmdParms.Add(paras);

            #endregion

            #region WineOrderDetail
            order.OriginalPrice = 0;
            foreach (WineListModel detail in order.Wines)
            {
                if (detail.Bottle > 0)
                {
                    str = new StringBuilder();
                    str.AppendLine("Insert into WineOrderDetail");
                    str.AppendLine(" (OrderID, WineID, Quantity, Price, TotalPrice, CreateTime, UpdateTime) ");
                    str.AppendLine(" Values (@OrderID, @WineID, @Quantity, @Price, @TotalPrice, getdate(), getdate());");

                    paras    = new SqlParameter[5];
                    paras[0] = new SqlParameter("@OrderID", order.OrderID);
                    paras[1] = new SqlParameter("@WineID", detail.WineID);
                    paras[2] = new SqlParameter("@Quantity", detail.Bottle);
                    paras[3] = new SqlParameter("@Price", detail.Price);

                    double totalDetailPrice = detail.Bottle * detail.Price;
                    order.OriginalPrice += totalDetailPrice;
                    paras[4]             = new SqlParameter("@TotalPrice", totalDetailPrice);

                    sqls.Add(str.ToString());
                    cmdParms.Add(paras);
                }
            }

            #endregion

            #region Order

            str = new StringBuilder();
            str.AppendLine("Insert into [Order]");
            str.AppendLine(" (OrderID, OrderType, OrderNo, ProcessType, OrderDate, OriginalPrice, Shipping, TotalPrice, Tax, OrderStatus, CreateTime, UpdateTime) ");
            str.AppendLine(" Values (@OrderID, @OrderType, @OrderNo, @ProcessType, @OrderDate, @OriginalPrice, @Shipping, @TotalPrice, @Tax, @OrderStatus, Getdate(), getdate());");

            paras = new SqlParameter[10];

            paras[0]        = new SqlParameter("@OrderID", order.OrderID);
            paras[1]        = new SqlParameter("@OrderType", (int)GlobalVariable.OrderType.Wine);
            order.OrderNo   = "W" + order.OrderID.ToString().PadLeft(9, '0');
            paras[2]        = new SqlParameter("@OrderNo", order.OrderNo);
            paras[3]        = new SqlParameter("@ProcessType", order.ProcessType);
            order.OrderDate = DateTime.Now;
            paras[4]        = new SqlParameter("@OrderDate", order.OrderDate);

            paras[5] = new SqlParameter("@OriginalPrice", order.OriginalPrice);
            paras[6] = new SqlParameter("@Shipping", order.Shipping);
            order.TotalOrderPrice = order.OriginalPrice + order.Shipping;
            paras[7] = new SqlParameter("@TotalPrice", order.TotalOrderPrice);

            double tax = order.TotalOrderPrice * Convert.ToDouble(ConfigurationManager.AppSettings["TaxRate"].ToString());
            paras[8] = new SqlParameter("@Tax", tax);

            if (order.ProcessType == (int)GlobalVariable.ProcessType.Online)
            {
                int status = (int)GlobalVariable.OrderStatus.Init;
                paras[9] = new SqlParameter("@OrderStatus", status);
            }
            else if (order.ProcessType == (int)GlobalVariable.ProcessType.Offline)
            {
                int status = (int)GlobalVariable.OrderStatus.Success;
                paras[9] = new SqlParameter("@OrderStatus", status);
            }


            sqls.Add(str.ToString());
            cmdParms.Add(paras);

            #endregion

            #region Transaction

            if (order.ProcessType == (int)GlobalVariable.ProcessType.Online)
            {
                string requestID = PayflowUtility.RequestId;
                order.RequestID = requestID;
                str             = new StringBuilder();
                str.AppendLine("Insert into [PaymentTransaction]");
                str.AppendLine(" (RequestID, OrderID, CreateTime, UpdateTime) ");
                str.AppendLine(" Values (@RequestID, @OrderID, Getdate(), getdate());");

                paras = new SqlParameter[2];

                paras[0] = new SqlParameter("@RequestID", requestID);
                paras[1] = new SqlParameter("@OrderID", order.OrderID);

                sqls.Add(str.ToString());
                cmdParms.Add(paras);
            }

            #endregion

            SqlAccess mySqlAccess = new SqlAccess();
            mySqlAccess.ExecuteNonQuerys(sqls, cmdParms);

            return(order);
        }