2016-04-12 10 views
-1

注文後、ShoppingCartの数量を使用して、データベースの商品数量を調整し、購入可能在庫を引き下げますか?ここでC#注文した在庫量を変更する

は私のクラス、作成順序

public int CreateOrder(Order order) 
    { 
     decimal orderTotal = 0; 

     var cartItems = GetCartItems(); 

     // Iterate over the items in the cart, adding the order details for each 
     foreach (var item in cartItems) 
     { 
      var orderDetail = new OrderDetail 
      { 
       ProductId = item.ProductId, 
       OrderId = order.OrderId, 
       UnitPrice = item.Product.Price, 
       Quantity = item.Count 
      }; 
      // Set the order total of the shopping cart 
      orderTotal += (item.Count * item.Product.Price); 

      storeDB.OrderDetails.Add(orderDetail); 

     } 
     // Set the order's total to the orderTotal count 
     order.Total = orderTotal; 

     // Save the order 
     storeDB.SaveChanges(); 
     // Empty the shopping cart 
     EmptyCart(); 
     // Return the OrderId as the confirmation number 
     return order.OrderId; 
    } 

私の注文クラス

[Bind(Exclude = "OrderId")] 
public partial class Order 
{ 
    [ScaffoldColumn(false)] 
    public int OrderId { get; set; } 

    [ScaffoldColumn(false)] 
    public System.DateTime OrderDate { get; set; } 

    [ScaffoldColumn(false)] 
    [Remote("CheckUserName", "Account")] 
    public string Username { get; set; } 

    [Required] 
    [StringLength(16, ErrorMessage = "Your name is too long")] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    [Required(ErrorMessage = "Your last name is required.")] 
    [StringLength(16, ErrorMessage = "Last name is too long.")] 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 

    [Required(ErrorMessage = "Address is required.")] 
    public string Address { get; set; } 

    [Required(ErrorMessage = "City is required.")] 
    public string City { get; set; } 

    [Required(ErrorMessage = "Postcode is required.")] 
    [Display(Name = "Post Code")] 
    public string PostalCode { get; set; } 

    [Required(ErrorMessage = "Country is required.")] 
    public string Country { get; set; } 

    [Required(ErrorMessage = "Phone number is required.")] 
    public string Phone { get; set; } 

    [RegularExpression(@"[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Email doesn't look like a valid email address.")] 
    public string Email { get; set; } 

    [System.ComponentModel.DataAnnotations.Compare("Email")] 
    [Display(Name = "Confirm your email address")] 
    public string EmailConfirm { get; set; } 


    [ScaffoldColumn(false)] 
    public string PaymentTransactionId { get; set; } 


    [ScaffoldColumn(false)] 
    public bool HasBeenShipped { get; set; } 

    [ScaffoldColumn(false)] 
    [ReadOnly(true)] 
    public decimal Total { get; set; } 

    public CardDetails cardDetails { get; set; } 
    //public List<CardDetails> cardDetails { get; set; } 
    public List<OrderDetail> OrderDetails { get; set; } 
} 

マイCheckOutController

[HttpPost] 
     public ActionResult AddressAndPayment(FormCollection values) 
     { 
      var order = new Order(); 
      TryUpdateModel(order); 

      //try 
      //{ 
       //if (string.Equals(values["PromoCode"], PromoCode, StringComparison.OrdinalIgnoreCase) == false) 
       //{ 
       // return View(order); 
       //} 
       //else 
       //{ 
        order.Username = User.Identity.Name; 
        order.OrderDate = DateTime.Now; 

        //Order gets saved 
        storeDB.Orders.Add(order); 
        storeDB.SaveChanges(); 
        //Order gets processed 
        var cart = ShoppingCart.GetCart(this.HttpContext); 
        cart.CreateOrder(order); 

        //NEW TEST IF SAVES 
        storeDB.SaveChanges(); 

        //Model.Product.stock = item.Product.stock - item.count; 



        return RedirectToAction("Complete", 
         new { id = order.OrderId }); 

たOrderDetailsクラス

と ShoppingCartのクラスです
public class OrderDetail 
{ 
    public int OrderDetailId { get; set; } 
    public int OrderId { get; set; } 
    public int ProductId { get; set; } 
    public int Quantity { get; set; } 
    public decimal UnitPrice { get; set; } 
    public virtual Product Product { get; set; } 
    public virtual Order Order { get; set; } 
} 
+0

私は多国籍の部分に対処する手順を記述したいと思います。 – SamGhatak

+0

ごめんなさいあなたは何を言っているのか分かりません –

+0

私は彼がストアドプロシージャの使用を意味すると思います。しかし、ここでの質問は完全には不明です。少なくともこれをやろうとしているようなコード行がコメントアウトされています。あなたはどんな問題を抱えていますか?何がうまくいかないの?また、私たちは、可視性のないものを変更する手助けをすることはできません。在庫を追跡するエンティティがある場合。そのエンティティクラスを投稿します。それ以外の場合は、何らかのテーブル構造を参照する必要があります。 –

答えて

0

あなたは、製品の詳細情報を取得し、あなたのShoppingCartクラス

// Get the product 
    var product = storeDB.Products 
     .Single(products => products.productID == item.ProductId); 

    //Deduce available stock based on item in carts 
    product.productQty = product.productQty - item.Count; 

    storeDB.saveChanges(); 

まずのforeachループでこれらの次のコードを追加して、どのように多くの項目行うcart.Finallyであるに基づいて、製品の在庫を推測することができますsaveChanges()をdatabase. Saveに保存してください。これは役に立ちます:)

+0

申し訳ありませんので、-90か+9999の商品を注文します。 – CodeCaster

+0

@コードキャスター私はあなたの声明を理解していません。 –

+0

指定された入力でコードをテストします。質問の下で私のコメントも見てください。入力をチェックせずに、ユーザーが負の金額または現在の株式よりも大きな金額を注文できるようにします。 – CodeCaster

関連する問題