public void alSat() { // Kullanılacak nesneler ilgili sınıflardan türetildi List <Ilan> tumIlanlar = new List <Ilan>(); List <AlisEmir> alicilar = new List <AlisEmir>(); Kullanici alici = new Kullanici(); Bakiye aliciBakiye = new Bakiye(); Bakiye saticiBakiye = new Bakiye(); Stok aliciStok = new Stok(); Admin admin = new Admin(); // Kullanılacak manager nesneler ilgili sınıflardan türetildi IlanManager ilanManager = new IlanManager(new EfIlanDal()); AlisEmirManager alisEmirManager = new AlisEmirManager(new EfAlisEmirDal()); KullaniciManager kullaniManager = new KullaniciManager(new EfKullaniciDal()); BakiyeManager bakiyeManager = new BakiyeManager(new EfBakiyeDal()); StokManager stokManager = new StokManager(new EfStokDal()); AlimSatimManager alimSatimManager = new AlimSatimManager(new EfAlimSatimDal()); AdminManager adminManager = new AdminManager(new EfAdminDal()); // tüm alıcılar veritabanından bir listeye çekildi alicilar = alisEmirManager.GetAll().Where(p => p.Durum == false).ToList(); // admin bilgisi çekildi admin = adminManager.Get(new Admin { AdminId = 1 }); // alıcı varsa aşağıdaki if şartına girilir, yok ise algoritma yorulmaz, çıkılır if (alicilar.Count != 0) { // her alıcı için aşağıdaki foreach döngüsü dönüyor foreach (var mevcutalici in alicilar) { int toplamsatilanstok = 0; tumIlanlar = ilanManager.GetAll().Where(p => p.Durum == false && p.UrunId == mevcutalici.UrunId).OrderBy(p => p.BirimFiyat).ToList(); foreach (var ilan in tumIlanlar) { toplamsatilanstok += ilan.Miktar; } // alıcının bilgi ve bakiyeleri alici ve alicibakiye değişkenlerine aktarılıyor alici = kullaniManager.getById(new Kullanici { KullaniciId = mevcutalici.AliciId }); aliciBakiye = bakiyeManager.Get(new Bakiye { KullaniciId = mevcutalici.AliciId }); bool uygunUrunKontrol = true; // alıcının alacağı ürün olduğu sürece while döngüsü dönüyor while (mevcutalici.Miktar > 0 && toplamsatilanstok != 0 && uygunUrunKontrol) { // her ilan için aşağıdaki foreach döngüsü dönüyor foreach (var gecerliIlan in tumIlanlar) { // alıcının stok bilgisi alicistok değişkenine aktarılıyor aliciStok = stokManager.GetAll().SingleOrDefault(p => p.KullaniciId == mevcutalici.AliciId && p.UrunId == mevcutalici.UrunId); // satıcının bakiyesi saticibakiye değişkenine aktarılıyor saticiBakiye = bakiyeManager.Get(new Bakiye { KullaniciId = gecerliIlan.SaticiId }); AlimSatim alimSatim = new AlimSatim(); // eğer alıcının verdiği teklife uygun bir satış emri yok ise if (mevcutalici.TeklifFiyat < gecerliIlan.BirimFiyat) { uygunUrunKontrol = false; } decimal adminYuzdesi = 0.01m; // eğer alıcının bakiyesi geçerli ilanın toplam fiyatından büyükse ve alıcıyla satıcı aynı kişi değilse aşağıdaki if şartına giriliyor if (aliciBakiye.MevcutBakiye >= ((gecerliIlan.Miktar * gecerliIlan.BirimFiyat) * (1.01m)) && alici.KullaniciId != gecerliIlan.SaticiId && gecerliIlan.Durum == false && uygunUrunKontrol) { int alinanmiktar; // eğer alıcının alacağı miktar geçerli ilanın miktarından fazla ise aşağıdaki döngü çalışır if (mevcutalici.Miktar >= gecerliIlan.Miktar) { // ilgili aktarımlar gerçekleştirilir alinanmiktar = gecerliIlan.Miktar; toplamsatilanstok -= gecerliIlan.Miktar; mevcutalici.Miktar -= alinanmiktar; aliciBakiye.MevcutBakiye -= (alinanmiktar * gecerliIlan.BirimFiyat); aliciBakiye.MevcutBakiye -= (alinanmiktar * gecerliIlan.BirimFiyat) * adminYuzdesi; admin.Bakiye += (alinanmiktar * gecerliIlan.BirimFiyat) * adminYuzdesi; saticiBakiye.MevcutBakiye += (alinanmiktar * gecerliIlan.BirimFiyat); aliciStok.UrunMiktar += alinanmiktar; aliciStok.UrunOnay = true; gecerliIlan.Miktar = 0; gecerliIlan.Durum = true; // alıcının alacağı miktar sıfıra eşitse yani bittiyse, alım emri kapatılır if (mevcutalici.Miktar == 0) { mevcutalici.Durum = true; } alimSatim.Miktar = alinanmiktar; // admin bakiyesi güncellenir adminManager.Update(admin); // alıcı ve satıcının bakiye ve stok bilgileri, ilgili ilan ve alım emirleri güncellenir bakiyeManager.Update(aliciBakiye); bakiyeManager.Update(saticiBakiye); stokManager.Update(aliciStok); ilanManager.Update(gecerliIlan); alisEmirManager.Update(mevcutalici); alimSatim.AliciId = alici.KullaniciId; alimSatim.SaticiId = gecerliIlan.SaticiId; alimSatim.UrunId = gecerliIlan.UrunId; alimSatim.ToplamFiyat = (alinanmiktar * gecerliIlan.BirimFiyat); alimSatim.Tarih = DateTime.Today; alimSatimManager.Add(alimSatim); } // alıcının alacağı ürün miktarı ilgili ilan miktarından fazla değilse else bloğu çalışır else { // ilgili aktarımlar gerçekleştirilir alinanmiktar = mevcutalici.Miktar; toplamsatilanstok -= mevcutalici.Miktar; gecerliIlan.Miktar -= alinanmiktar; aliciBakiye.MevcutBakiye -= (alinanmiktar * gecerliIlan.BirimFiyat); aliciBakiye.MevcutBakiye -= (alinanmiktar * gecerliIlan.BirimFiyat) * adminYuzdesi; // aracı olan admine komisyon ödemesi işlemi admin.Bakiye += (alinanmiktar * gecerliIlan.BirimFiyat) * adminYuzdesi; saticiBakiye.MevcutBakiye += (alinanmiktar * gecerliIlan.BirimFiyat); aliciStok.UrunMiktar += alinanmiktar; aliciStok.UrunOnay = true; mevcutalici.Miktar = 0; mevcutalici.Durum = true; alimSatim.Miktar = alinanmiktar; // admin bakiyesi güncellenir adminManager.Update(admin); // alıcı ve satıcının bakiye ve stok bilgileri, ilgili ilan ve alım emirleri güncellenir bakiyeManager.Update(aliciBakiye); bakiyeManager.Update(saticiBakiye); stokManager.Update(aliciStok); ilanManager.Update(gecerliIlan); alisEmirManager.Update(mevcutalici); alimSatim.AliciId = alici.KullaniciId; alimSatim.SaticiId = gecerliIlan.SaticiId; alimSatim.UrunId = gecerliIlan.UrunId; alimSatim.ToplamFiyat = (alinanmiktar * gecerliIlan.BirimFiyat); alimSatim.Tarih = DateTime.Today; alimSatimManager.Add(alimSatim); } } } } } } }
private void btnRapor_Click(object sender, EventArgs e) { // Başlangıç tarihi bitiş tarihinden büyük ise kullanıcıya hata mesajı gösterilir if (datetimeBaslangic.Value.Date > datetimeBitis.Value.Date) { MessageBox.Show("Başlangıç tarihi bitiş tarihinden büyük olamaz !"); this.Close(); } else { // Kullanıcıya ait ilgili tarih aralığındaki alım-satımlar veritabanından getirilir alimSatims = alimSatimManager.GetAll() .Where(p => p.AliciId == _kullanici.KullaniciId || p.SaticiId == _kullanici.KullaniciId).Where(p => p.Tarih.Date >= datetimeBaslangic.Value.Date && p.Tarih <= datetimeBitis.Value.Date).ToList(); // Eğer getirilen kayıt null değilse yani mevcutsa, if koşuluna girilir if (alimSatims != null) { foreach (var alimSatim in alimSatims) { // Her bir kayıt gezilerek bir DTO olan BuyingSellingHistory dto' suna atılır, daha sonra BuySellHistory listesine eklenir BuySellHistory.Add( new BuyingSellingHistory { AliciAdi = kullaniciManager.getById(new Kullanici { KullaniciId = alimSatim.AliciId }) .KullaniciAd, SaticiAdi = kullaniciManager.getById(new Kullanici { KullaniciId = alimSatim.SaticiId }) .KullaniciAd, UrunAdi = urunManager.getById(new Urun { UrunId = alimSatim.UrunId }).UrunAd, Miktar = alimSatim.Miktar, Tarih = alimSatim.Tarih, ToplamFiyat = alimSatim.ToplamFiyat } ); } // datagridview arayüzde görüntülenmez, pdf kaynağı olması amacıyla tanımlanmış ve gizlenmiştir. Aşağıda data kaynağı olarak elimizdeki listeyi veriyoruz dataGridView1.DataSource = BuySellHistory; } // eğer alimsatims listesi yani alışveriş geçmişi boş ise, alışveriş geçmişi bulunmamaktadır mesajı gösterilir. else { MessageBox.Show("Alım satım geçmişi bulunmamaktadır !"); } if (dataGridView1.Rows.Count > 0) { // Datagridde kayıt var ise,pdf dosya filtresi ve adı belirtilir SaveFileDialog save = new SaveFileDialog(); save.Filter = "PDF (*.pdf)|*.pdf"; save.FileName = "Rapor.pdf"; bool ErrorMessage = false; if (save.ShowDialog() == DialogResult.OK) // eğer dosya kayıt ekranına gelinebilirse if koşuluna girilir { if (File.Exists(save.FileName)) { try { // eğer aynı isimde bir dosya var ise, var olan dosyayla değiştirme mesajı gelir File.Delete(save.FileName); } catch (Exception ex) { // var olan dosya silinemez ise, dosya diske yazılamadı hatası gösterilir ErrorMessage = true; MessageBox.Show("Dosya diske yazılamadı !" + ex.Message); } } if (!ErrorMessage) // eğer aynı isimde dosya yoksa ya da varolan dosya başarıyla silinmişse bu if şartına girilir { try { // bir pdf tablosu oluşturulur, bu tablonun kolon sayısı datagridin kolon sayısıyla eşit olur PdfPTable pTable = new PdfPTable(dataGridView1.Columns.Count); // tablonun tasarım özellikleri aşağıda tanımlanmıştır pTable.DefaultCell.Padding = 2; pTable.WidthPercentage = 100; pTable.HorizontalAlignment = Element.ALIGN_LEFT; // datagridview kolonları tek tek gezilip pdf tablosuna kolon olarak eklenirler foreach (DataGridViewColumn col in dataGridView1.Columns) { PdfPCell pCell = new PdfPCell(new Phrase(col.HeaderText)); pTable.AddCell(pCell); } // aynı şekilde datagridview satırları gezilerek, yeni bir döngüyle tek tek hücreler gezilerek tabloya yazılırlar foreach (DataGridViewRow viewRow in dataGridView1.Rows) { foreach (DataGridViewCell dcell in viewRow.Cells) { pTable.AddCell(dcell.Value.ToString()); } } // Aşağıda pdf dökümanı oluşturulup, tasarım boyutu vs. verilmiştir. Daha sonra oluşturulan nesneler kapatılmıştır. using (FileStream fileStream = new FileStream(save.FileName, FileMode.Create)) { Document document = new Document(PageSize.A4, 8f, 16f, 16f, 8f); PdfWriter.GetInstance(document, fileStream); document.Open(); document.Add(pTable); document.Close(); fileStream.Close(); } // Dosya yazılıp oluşturulduktan sonra kullanıcıya işlemin başarılı olduğu bildirilir MessageBox.Show("Rapor başarıyla oluşturuldu !", "Bilgi"); this.Close(); } catch (Exception ex) { MessageBox.Show("Rapor dışa aktarılırken hata meydana geldi ! " + ex.Message); } } } } else { MessageBox.Show("Geçmiş alışverişiniz bulunmamaktadır !", "Bilgi"); } } }