Esempio n. 1
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        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");
                }
            }
        }