Selamlar, C# ile ile sipariş modülü örneğimize ikinci yazımız ile devam edeğiz. Sipariş modülü yazımıza C# ile örnek sipariş modülü ders 1 yazımız ile temellerini atmıştık. Şimdi burda kullandığımız bazı şeyleri değiştirerek kodlarımızı biraz daha geliştireceğiz. Proje linkimiz indirim için tıklayınız.

Projeyi indirdikten sonra önceki projemizden farklı olarak "Sale.Data.Library" projesini görüceksiniz. Sale.Data.Library projemizde farklı olarak şuan birşey yapmadım. Fakat bundan sonra ki yazımızda Sale.Data projemizi oluşturup Entity Framework ORM yapısını kullanarak veritabanına kayıt işlemleri yapacağız. Veritabanına kayıt işlemlerimiz için Sale.Library ile Sale.Data.Library projemizi konuşturarak veritabanına kayıt işlemleri gerçekleştireceğiz. Şimdilik sadece Session üzerinden SaleModel nesnemizi almaya devam ediyoruz.

Birinci projemizden farklı olarak Asp.net MVC 3 Razor Page tarafımızı geliştirdik. İlk olarak "/sale" tarafında ürün kayıtlarımızı aldık. Yani burda siz listelediğiniz ürünlerin sepete eklendiğizi düşünebilirsiniz. Bu adımdan sonra "/sale/basket" sayfamıza geçtik. Bu sayfamızda kupon kullanım bölümü yaptık. Burda SaleModel üzerine indirim satırı yazabiliyoruz. Online e-ticaret sitelerinde standart olarak sepette bir adet kupon kullanımına izin verilir. Bizde tek kayıt aldık. Bu "DiscountModel" nesnemizin üzerine istenirse kampanya indirimide eklenir. Tercihe görede kupon, hediye çeki indirimleri ödeme olarakda kabul edilebilir. "İndirim ödemesi" olarak kayıt edebilirsiniz. Bunun için PaymentModel nesnesine "IsDiscount" tarzında bir bool alan ekleyip geliştirebilirsiniz.

İlk etapda ürünlerimizi ekledik. Sonra kupon indirimi ekledik ve işlemlerine adres ekleme ile devam edeceğiz. Fakat burda anlatmam gereken bir nokta daha var. Şuana kadar yaptığımız Sale projesinde tabi eksik yanlar var. Bunlardan bir taneside indirim eklendikten sonra ürün silme işleminde tekrar hesaplama tarzında kontroller yapılması gerekiyor. Sepette 2 tane ürün var toplam 240 TL, kullanıcı kullandığı 200 TL değerinde indirim kuponunu iptal ettiğinde kupon kullanım tutarı kalan tutar olarak set edilme v.b kontrolleri events'lar yardımcı ile yapabiliriz. İsterseniz bunları geliştirmeyi proje üzerinde deneyin alt yapı uygun. Zaten projemizin sonra ki versiyonlarında bunlarıda geliştiriyor olacağız. SaleModel üzerinde ürün ekleme, ödeme ekleme ve indirim ekleme methodlarımızı yazmıştık. Bu projemizde ise Sale.Library'yi geliştirerek adres ekleme, ürün çıkarma, indirim çıkarma, ödeme çıkarma ekledik. Kodlarımız şu şekilde ;

        /// İlgili SaleModel üzerinden bir satır ürün siler..
        public void DeleteProduct(ProductModel product)
        {
            this.Products.Remove(product);
        }
        /// İlgili SaleModel'den bir satır indirim siler
        public void DeleteDiscount(DiscountModel discount)
        {
            this.Discounts.Remove(discount);
        }
        /// İlgili SaleModel'e bir satır adress ekler
        public void AddAddress(AddressModel address)
        {
            this.Address.Add(address);
        }

Yukarda gördügünüz gibi yeni olarak "AddressModel" nesnemiz geldi. Bu nesnemiz SaleModel üzerinde List olarak kullanılacak. Bunun sayesinde teslimat, fatura adreslerimiz için tek nesne kullanabileceğiz.

 
public class AddressModel
    {
        public AddressType Type { get; set; }
        /// Adres Adı
        public string Name { get; set; }
        /// Fatura, Telsimat Adresinde yazılacak isim
        public string ContactName { get; set; }
        public string PostCode { get; set; }
        public string Phone { get; set; }
        public string Country { get; set; }
        public string City { get; set; }
        public string Town { get; set; }
        public string Address { get; set; }
    }

AddressModel içerisinde teslimat mı yoksa fatura adresi mi olduğunu ayırt edebilmemiz için "AddressType" adında bir enum ekledim.

 
  public enum AddressType
    {
        /// Fatura Adresi
        Invoice = 1,
        /// Teslimat Adresi
        Delivery = 2
    }

Projemizin Sale.Library tarafında yaptığımız geliştirmeler şimdilik bu kadar. Şimdi projemizin arayüz tarafı Sale.Web projesini inceliyelim. Burda Asp.net MVC 3 Razor Page kullandığımızı söylemiştik. Biraz hatırlamak isterseniz eğer Asp.net mvc örnekli anlatim yazisini inceleyip mvc hakkında fikir sahibi olabilirsiniz. Bir önceki yazımızdan farklı neler yaptıysak onları anlatmak istiyorum.

Sale.Web projesini açtığınızda Views altına "Sale" klasörünü görüceksiniz. "Index" tarafında ürün ekleme işlemleri işlemleri yaptığımız söylemiştik. Bunu bir önceki c# ile örnek sipariş modülü ders 1 yazimizda anlatmıştık. O yüzden bu sayfayı gerçiyorum. Bundan sonra sayfamız "Basket" sayfada ise sepetimize belirttiğim kupon kodu ve tutarı ile indirim ekledik. Eklediğimiz indirimden sonra bu projemiz yeni eklediğimiz "Address" sayfasına geçtik. Bu sayfa hem teslimat, hemde fatura adresimizi arayüzden alıp SaleModel üzerine kayıt ettik.

En son aşama olarak SaleModel üzerinde ki "SaleModel.RemainingPrice" propertymizi kullanarak kullanıcının kalan tutarın hepsini ödemesini sağladık. Eğer Session üzerinde ki SaleModel'in RemainingPrice=0 olmuş ise "Sipariş Tamamlandı" sayfasına gönderdik. Bu projemizde Razor Page'e özgü özellikleri kullandık. Adress sayfasında "Html.TextboxFor" ve Html.PartialView() ile sayfamızın altında sürekli tek bir yerden kontrol etmemizi sağlayan summery kullandık. Bunu da projeyi açtığınızda incelerseniz sizin için faydalı olucaktır.

Samet ÇINAR Hakkında

2010 senesinden bu yana hem tam zamanlı hemde freelance olarak Yazılım Geliştirme Uzmanı olarak çalışmaktayım. Her gün daha güzel geliştirmeler yapmak için araştırıp öğrenmeyi, öğrendiklerimi aktarmayı çok seviyorum.

İLGİLİ YAZILAR

YORUMLAR

Yorum Yap