public void TestMSMQ(string body) { Warehouse.SendMessage(new BookOrder("tituloteste", 10, 1)); }
//returns the id of inserted order //return -1 if the book title doesn't exist //return -2 if other sql error public int CreateOrder(string title, string client, string email, string address, int quantity) { int stock; double unitPrice; bool requestWarehouse = false; using (SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["store_db"].ConnectionString)) { try { c.Open(); string sql = "select stock, price from [book] where title = @title"; SqlCommand cmd = new SqlCommand(sql, c); cmd.Parameters.Add("@title", SqlDbType.NVarChar, 50).Value = title; SqlDataReader reader = cmd.ExecuteReader(); if (!reader.HasRows) { return(-1); } else { reader.Read(); stock = reader.GetInt32(0); unitPrice = reader.GetFloat(1); } } catch (SqlException e) { Console.WriteLine(e); return(-2); } finally { c.Close(); } } using (SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["store_db"].ConnectionString)) { try { c.Open(); string sql = "insert into [order](quantity, client_name, address, email, state, state_date, book, total_price) " + "output inserted.id " + "values(@quantity, @client_name, @address, @email, @state, @state_date, @book, @total_price)"; SqlCommand cmd = new SqlCommand(sql, c); cmd.Parameters.Add("@quantity", SqlDbType.Int).Value = quantity; cmd.Parameters.Add("@client_name", SqlDbType.NVarChar, 80).Value = client; cmd.Parameters.Add("@address", SqlDbType.NVarChar, 80).Value = address; cmd.Parameters.Add("@email", SqlDbType.NVarChar, 80).Value = email; if (stock >= quantity) { cmd.Parameters.Add("@state", SqlDbType.Char, 1).Value = 'D'; //dispatched in next day DateTime nextDay = DateTime.Now.AddDays(1); cmd.Parameters.Add("@state_date", SqlDbType.DateTime2).Value = nextDay.ToString("yyyy-MM-dd"); UpdateStock(title, 0 - quantity); // TODO: send email to the client with the info } else { cmd.Parameters.Add("@state", SqlDbType.Char, 1).Value = 'W'; //waiting expedition cmd.Parameters.Add("@state_date", SqlDbType.DateTime2).Value = DBNull.Value; requestWarehouse = true; } cmd.Parameters.Add("@book", SqlDbType.NVarChar, 50).Value = title; cmd.Parameters.Add("@total_price", SqlDbType.Real).Value = unitPrice * quantity; Int32 inserted = (Int32)cmd.ExecuteScalar(); if (requestWarehouse) { Warehouse.SendMessage(new BookOrder(title, 10 * quantity, inserted)); } else { string body = "Mr./Ms. " + client + ",<br>" + "Your order was succesfully processed and will be dispatched tomorrow.<br><br><br>" + "<u>Details</u><br>" + "<b>Book Title:</b> " + title + "<br>" + "<b>Quantity:</b> " + quantity + "<br>" + "<b>Total Price:</b> " + Math.Round(unitPrice * quantity, 2) + "<br>" + "<b>State:</b> Dispatched at " + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "<br>" + "<b>Address:</b> " + address + "<br><br><br>" + "Thanks for choosing our store!"; try { SendEmail(email, "[TDIN_bookstore] Order " + inserted + " dispatching", body); } catch (Exception) { } } return(inserted); } catch (SqlException) { return(-2); } finally { c.Close(); } } }