コード例 #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);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
 //  alınan parametre nesnesinin veritabanından silinmesi için ilgili managerin delete metodu çağrılır
 public bool Delete(AlimSatim entity)
 {
     return(_alimSatim.Delete(entity));
 }
コード例 #3
0
 //  alınan parametre nesnesinin veritabanına eklenmesi için ilgili managerin add metodu çağrılır
 public bool Add(AlimSatim entity)
 {
     return(_alimSatim.Add(entity));
 }
コード例 #4
0
 //  alınan parametre nesnesinin güncellenmesi için ilgili managerin update metodu çağrılır
 public bool Update(AlimSatim entity)
 {
     return(_alimSatim.Update(entity));
 }
コード例 #5
0
 // alınan parametreye göre tek bir kaydın dönmesi için ilgili managerin get metodu çağrılır
 public AlimSatim Get(AlimSatim entity)
 {
     return(_alimSatim.Get(p => p.IslemId == entity.IslemId));
 }