public IActionResult GetAll() { if (!(Convert.ToBoolean(HttpContext.Session.GetString("Active")))) { return(RedirectToAction("Login", "IO")); } string tempId = HttpContext.Session.GetString("id"); int userId = int.Parse(tempId); foreach (var favori in _favorilerService.GetAll(userId)) { bool logic = false; foreach (var product in _productService.ViewAllProducts(userId)) { if (favori.ProductId == product.Id) { logic = true; } } if (logic == false) { _favorilerService.Delete(favori); //favorilerden de silinir ve null hatası oluşması engellenir. } } var favoriler = _favorilerService.GetAll(userId); List <FavoriGetAllModel> favoriGetAllModels = new List <FavoriGetAllModel>(); foreach (var item in favoriler) { var product = _productService.GetById(item.ProductId); FavoriGetAllModel favoriGetAllModel = new FavoriGetAllModel(); favoriGetAllModel.Product = product; favoriGetAllModel.FavoriId = item.Id; favoriGetAllModels.Add(favoriGetAllModel); } //ViewBag.Favorite = "true"; return(View(favoriGetAllModels)); }
public IActionResult OrderDetails(BasketOrderModel basketOrderModel) { string tempId = HttpContext.Session.GetString("id"); int userId = int.Parse(tempId); var basketProducts = _basketService.Baskets(userId); List <BasketListele> basketListele = new List <BasketListele>(); foreach (var item in basketProducts) { BasketListele basketList = new BasketListele(); var product = _productService.GetById(item.ProductId); if (product == null) { var basketToDeleted = _basketService.GetById(item.Id); _basketService.Delete(basketToDeleted); // eğer kullanıcın sepetindeki bir ürün daha sonra alınırsa bu ürün kullanıcının sepetinden de otomatik //silinmektedir. continue; } int basketId = item.Id; basketList.Products = product; basketList.BasketId = basketId; basketListele.Add(basketList); } basketOrderModel.BasketLists = basketListele; //silinebilir. basketOrderModel.OrderList.BasketIds = HttpContext.Session.GetString("BasketIds"); basketOrderModel.OrderList.OrderTime = DateTime.Now; basketOrderModel.OrderList.UserId = userId; basketOrderModel.CardDetails.UserId = userId; Order order = new Order() //aynı kullanıcıya ait birden fazla kayıt veritabanında tutulur . Bu daha sonra düzenlenebilir. { Address = basketOrderModel.OrderList.Address, BasketIds = basketOrderModel.OrderList.BasketIds, EMail = basketOrderModel.OrderList.EMail, OrderTime = basketOrderModel.OrderList.OrderTime, UserId = basketOrderModel.OrderList.UserId }; _orderService.Add(order); int orderId = order.Id; // o anki order ıd alınır . sipariş faturasına eklenmesi için string orderIdNow = orderId.ToString(); HttpContext.Session.SetString("getByOrderId", orderIdNow); Card card = new Card() { CardName = basketOrderModel.CardDetails.CardName, CardNumber = basketOrderModel.CardDetails.CardNumber, Cvv = basketOrderModel.CardDetails.Cvv, ExpirationMonth = basketOrderModel.CardDetails.ExpirationMonth, ExpirationYear = basketOrderModel.CardDetails.ExpirationYear, UserId = userId }; Card userCard = _cardService.GetByUserId(userId); if (userCard == null) // ilk kez kayıt yapan kullanıcı veritabanına eklenir. Çünkü 1 kullanıcının sistemde sadece 1 kayıtı olacaktır. { _cardService.Add(card); } // eğer kullanıcı kendi kartı dışında bir kart kullanır ise bu kart sisteme eklenmez. Daha sonra yapılacak olan //tüm alışverişlerde sistemde ilk kayıt yapılmış olan kart kullanıcıya gösterilecektir. // Daha sonra istenirse kaydedilmiş olan kartı güncelleyebilir veya silebilir. //BasketOrderModel basketOrderModelDeneme = new BasketOrderModel() //silinebilir. Veritabanınadan order bilgileri çekilebilir. //{ // CardDetails = card, // City = basketOrderModel.City, // FirstName = basketOrderModel.FirstName, // LastName = basketOrderModel.LastName, // Phone = basketOrderModel.Phone, // OrderList = order, // BasketLists = basketOrderModel.BasketLists //}; #region Mail Yollama SmtpClient client = new SmtpClient(); MailAddress from = new MailAddress("mail adresiniz", "ShoopingApp"); string eMail = basketOrderModel.OrderList.EMail; MailAddress to = new MailAddress(eMail);//bizim mail adresi MailMessage msg = new MailMessage(from, to); msg.IsBodyHtml = true; msg.Subject = "Alışveriş Faturası"; #region StringBuilder ile Mail düzenleme StringBuilder builder = new StringBuilder(); builder.Append("<head>"); builder.Append(" <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css \" " + " " + "integrity=\"sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l\" " + " " + "crossorigin=\"anonymous\" />"); builder.Append("</head>"); builder.Append("<body>"); builder.Append("<h4 style=\"text-align:center;color:red;\">Sayin " + basketOrderModel.FirstName + " " + basketOrderModel.LastName + " Siparis Faturaniz</h4><br><br>"); builder.Append("<table class=\"table table-striped\">"); builder.Append(" <tr>"); builder.Append("<th>Ürün resmi </th><th>Ürün ismi </th><th>Ürün fiyatı</th><th>Açiklama </th> "); builder.Append("</tr>"); foreach (var item in basketListele) { builder.Append(" <tr>"); string imagePath = "wwwroot\\" + "img\\" + item.Products.ImageUrl; //var imageFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, imagePath); builder.Append("<td> <img src=" + "\"" + imagePath + "\"" + " " + "width=\"100\" height=\"100\" /> </td><td>" + item.Products.ProductName + "</td><td>" + item.Products.ProductPrice + "</td><td>" + item.Products.Description + " </td> "); builder.Append("</tr>"); } builder.Append("</table>"); builder.Append("<div style=\" text-align:center;margin-top:40px; font-family: Arial, Helvetica, sans - serif; \">"); builder.Append("<pre>"); builder.Append("<br><br><h4 style=\"color:red;\">-- Kart Bilgileriniz --</h4>" + "<br>"); builder.Append(" Kart İsminiz : " + basketOrderModel.CardDetails.CardName + "<br>"); builder.Append(" Kart Numaraniz : " + basketOrderModel.CardDetails.CardNumber + "<br>"); builder.Append(" Son kullanma tarihi : " + basketOrderModel.CardDetails.ExpirationMonth + "\\" + basketOrderModel.CardDetails.ExpirationYear + "<br>"); int toplam = 0; foreach (var item in basketListele) { toplam += item.Products.ProductPrice; } builder.Append("<br><br><h4 style=\"color:red;\">-- Sipariş Bilgileriniz --</h4>" + "<br>"); builder.Append(" Siparis Tutari : " + toplam + " TL" + "<br>"); builder.Append(" Siparis Adresiniz : " + basketOrderModel.OrderList.Address + "<br>"); builder.Append(" E-Mail Adresiniz : " + basketOrderModel.OrderList.EMail + "<br>"); builder.Append(" Siparis Tarihi : " + basketOrderModel.OrderList.OrderTime + "<br>"); builder.Append(" Telefon Numaraniz : " + basketOrderModel.Phone + "<br>"); builder.Append(" Sehriniz : " + basketOrderModel.City + "<br>"); builder.Append("</pre>"); builder.Append("</div>"); builder.Append("</body>"); #region Pdf StringReader sr = new StringReader(builder.ToString()); Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); HTMLWorker htmlparser = new HTMLWorker(pdfDoc); #region Türkçe karakter sorunu için yazılması gereken kod bloğu. // FontFactory.Register(Path.Combine("C:\\Windows\\Fonts\\Arial.ttf"), "Garamond"); /// kendi türkçe karakter desteği olan fontunuzu da girebilirsiniz. StyleSheet css = new StyleSheet(); css.LoadTagStyle("body", "face", "Garamond"); css.LoadTagStyle("body", "encoding", "Identity-H"); css.LoadTagStyle("body", "size", "12pt"); htmlparser.SetStyleSheet(css); #endregion using (MemoryStream memoryStream = new MemoryStream()) { PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream); pdfDoc.Open(); htmlparser.Parse(sr); pdfDoc.Close(); byte[] bytes = memoryStream.ToArray(); memoryStream.Close(); // normal text halinde yollar ama biz pdf yolluyoruz ve buna gerek kalmaz. // msg.Body += "Bizleri tercih ettiğiniz için teşekkür ederiz" + builder; //burada başında gönderen kişinin mail adresi geliyor //msg.CC.Add(from);//herkes görür msg.Attachments.Add(new Attachment(new MemoryStream(bytes), "SiparisFaturasi.pdf")); // msg.Attachments.Add(new Attachment("images/hp.jpg")); NetworkCredential info = new NetworkCredential("mail adresiniz", "sifreniz"); client.Port = 587; client.Host = "smtp.gmail.com"; client.EnableSsl = true; client.Credentials = info; client.Send(msg); } #endregion #endregion #endregion #region Odeme //Odeme actiondan buraya taşınmıştır. Çünkü Post methotda olması daha uygun olacaktır. foreach (var item in basketProducts) { var productToDeleted = _productService.GetById(item.ProductId); // tam sepette ödeme ye tıklarken ürün satılmışsa buradaki product // null olabilir bu durumu sonra kontrol etmelisin. var product = _productService.GetById(item.ProductId); // ilgili ürün bulunur. int productPrice = product.ProductPrice; // ürünün fiyatı bulunur. int saticiId = product.UserId; User satici = _userService.GetById(saticiId); satici.Balance += productPrice; _userService.Update(satici); // saticinin bakiyesi güncellenir. if (productToDeleted.UnitsInStock == 1) { _productService.Delete(productToDeleted); // Stokta 1 tane varsa ilgili ürün silinir. _favorilerService.Delete(item.ProductId); // favorilerden de silinir. } if (productToDeleted.UnitsInStock > 1) { productToDeleted.UnitsInStock -= 1; _productService.Update(productToDeleted); } _basketService.Delete(item); // ilgili sipariş silinir. } #endregion // return View(basketOrderModelDeneme); //sipariş faturası // ödeme kısmında productlar veritabanından silinir. // ama kullanıcı siparişten vazgeçebilir. fake den silinse daha güzel olur . Araştır bunu //kullanıcı sipariş verdikten sonra iptal edemez bu yüzden fake e ihtiyeç yoktur. Bu durum Daha sonra düzenlenebilir. return(RedirectToAction("Odeme", "Basket", new { city = basketOrderModel.City, firstName = basketOrderModel.FirstName, lastName = basketOrderModel.LastName, phone = basketOrderModel.Phone, cardName = basketOrderModel.CardDetails.CardName, cardNumber = basketOrderModel.CardDetails.CardNumber, cvv = basketOrderModel.CardDetails.Cvv, expirationMonth = basketOrderModel.CardDetails.ExpirationMonth, expirationYear = basketOrderModel.CardDetails.ExpirationYear })); }