예제 #1
0
        public static Decimal GetToplamOriginalParcaTutarlari(List <FATURADETAYLAR> faturaDetaylar,
                                                              SERVISSTOKLAR.CONTAINER servisStoklar,
                                                              MALZEMELER.CONTAINER malzemeler,
                                                              MALZEMEOZELKODLAR.CONTAINER malzemeOzelKodlar)
        {
            decimal _orjinalParcalarToplamTutari = 0;

            faturaDetaylar.forEach(faturaDetay =>
            {
                faturaDetay.ClearManKartPuanFields();
                SERVISSTOKLAR servisStok = servisStoklar[faturaDetay.KOD];
                MALZEMELER malzeme       = null;
                if (servisStok.isNotNull())
                {
                    malzeme = malzemeler[servisStok.MALZEMEID];
                }
                if (malzeme.isNotNull() && malzeme.IsOriginal)
                {
                    MALZEMEOZELKODLAR malzemeOzelKod = malzemeOzelKodlar[malzeme.MALZEMEOZELKODID1];
                    if (malzemeOzelKod.isNotNull() && malzemeOzelKod.KOD.cto <decimal>() > 0)
                    {
                        _orjinalParcalarToplamTutari += faturaDetay.TUTAR;
                    }
                }
            });
            return(_orjinalParcalarToplamTutari);
        }
예제 #2
0
        public static Decimal GetKazanilanPuan(decimal parcaOrani, decimal harcamaOrani,
                                               List <FATURADETAYLAR> faturaDetaylar,
                                               SERVISSTOKLAR.CONTAINER servisStoklar,
                                               MALZEMELER.CONTAINER malzemeler,
                                               MALZEMEOZELKODLAR.CONTAINER malzemeOzelKodlar)
        {
            if (parcaOrani == 0)
            {
                parcaOrani = 1;
            }

            decimal _kazanilanPuan = 0;

            faturaDetaylar.forEach(faturaDetay =>
            {
                faturaDetay.ClearManKartPuanFields();
                SERVISSTOKLAR servisStok = servisStoklar[faturaDetay.KOD];
                MALZEMELER malzeme       = null;
                if (servisStok.isNotNull())
                {
                    malzeme = malzemeler[servisStok.MALZEMEID];
                }
                if (malzeme.isNotNull() && malzeme.IsOriginal)
                {
                    MALZEMEOZELKODLAR malzemeOzelKod = malzemeOzelKodlar[malzeme.MALZEMEOZELKODID1];
                    if (malzemeOzelKod.isNotNull() && malzemeOzelKod.KOD.cto <decimal>() > 0)
                    {
                        faturaDetay.MANKARTORAN     = malzemeOzelKod.KOD.cto <decimal>();
                        faturaDetay.MANKARTPUAN     = (faturaDetay.TUTAR * parcaOrani).Percent(faturaDetay.MANKARTORAN).RoundToDecimals(2);
                        faturaDetay.MANKARTHARCANAN = (faturaDetay.TUTAR * harcamaOrani).RoundToDecimals(2);
                        _kazanilanPuan += faturaDetay.MANKARTPUAN;
                    }
                    //faturaDetay.p_KdvTutari = (faturaDetay.TUTAR - faturaDetay.MANKARTHARCANAN).Percent(faturaDetay.KDVORAN);
                }
            });
            return(_kazanilanPuan);
        }
예제 #3
0
        public MANKARTHAREKETLER PuanHesapla(List <FATURADETAYLAR> faturaDetaylar, decimal param_ServisId, bool param_PuanKullan, decimal param_KullanilacakPuan)
        {
            MethodReturn ret = new MethodReturn();

            if (param_PuanKullan && param_KullanilacakPuan == 0)
            {
                param_PuanKullan = false;
            }

            decimal p_MinManKartPuan = 50; // Mankart Puanýný Kullanmasý Ýçin Kartýnda en az 50 Tl Olmasý Gerekiyor
            //Orginal Parcalarin Kdv'siz Toplam Tutarlarýnýn Yuzde Kaç'ýný Mankart Puaný Ýle Ödeyebilir
            decimal p_KullanilabilirYuzde = 50;

            List <string> malzemeKodlari = null;

            SERVISSTOKLAR.CONTAINER     servisStoklar     = null;
            MALZEMELER.CONTAINER        malzemeler        = null;
            MALZEMEOZELKODLAR.CONTAINER malzemeOzelKodlar = null;

            if (ret.ok())
            {
                malzemeKodlari = faturaDetaylar.select(t => t.KOD).toList();
            }

            if (ret.ok())
            {
                servisStoklar     = new SERVISSTOKLAR.CONTAINER(SERVISSTOKLAR.SelectItemsFromCodes(param_ServisId, malzemeKodlari));
                malzemeler        = new MALZEMELER.CONTAINER(MALZEMELER.SelectItems(servisStoklar.select(t => t.MALZEMEID)));
                malzemeOzelKodlar = new MALZEMEOZELKODLAR.CONTAINER(MALZEMEOZELKODLAR.SelectAll());
            }

            MANKARTHAREKETLER manKartHareket = new MANKARTHAREKETLER()
            {
                MANKARTID = this.ID, FATURAID = 0, TARIH = DateTime.Now
            };

            ret.Result = manKartHareket;

            if (ret.ok())
            {
                decimal toplamOriginalParcaTutarlari = GetToplamOriginalParcaTutarlari(faturaDetaylar, servisStoklar, malzemeler, malzemeOzelKodlar);

                decimal manKartBakiye           = this.GetBakiye();
                decimal kullanmakIstedigiBakiye = param_KullanilacakPuan.CastToRange(0, manKartBakiye);
                decimal maxKullanilacakPuan     = toplamOriginalParcaTutarlari.Percent(p_KullanilabilirYuzde).RoundToDecimals(2);

                if (manKartBakiye >= p_MinManKartPuan && param_PuanKullan) //Bakiye Uygun ve Puan Kullanacak Ýþaretlenmiþ Ýse
                {
                    decimal kullanilanPuan   = kullanmakIstedigiBakiye.CastToRange(0, maxKullanilacakPuan);
                    decimal kalanParcaTutari = toplamOriginalParcaTutarlari - kullanilanPuan;
                    manKartHareket.HARCANANPUAN  = kullanilanPuan;
                    manKartHareket.KAZANILANPUAN = GetKazanilanPuan(
                        kalanParcaTutari.Divide(toplamOriginalParcaTutarlari),
                        kullanilanPuan.Divide(toplamOriginalParcaTutarlari),
                        faturaDetaylar, servisStoklar, malzemeler, malzemeOzelKodlar);
                }
                else
                {
                    manKartHareket.KAZANILANPUAN = GetKazanilanPuan(1, 0, faturaDetaylar, servisStoklar, malzemeler, malzemeOzelKodlar);
                }
            }

            return(manKartHareket);
        }
예제 #4
0
        public static MethodReturn PuanKullanHesapla(decimal param_FaturaId, bool param_PuanKullan, decimal param_KullanilacakPuan)
        {
            MethodReturn ret = new MethodReturn();

            if (param_PuanKullan && param_KullanilacakPuan == 0)
            {
                param_PuanKullan = false;
            }

            decimal param_ServisId = 0;

            //Mankart Ayarlar Tablosundan Okunacaklar
            //decimal p_KalanTutarPuanOrani = 0;
            decimal p_MinManKartPuan = 50; // Mankart Puanýný Kullanmasý Ýçin Kartýnda en az 50 Tl Olmasý Gerekiyor
            //Orginal Parcalarin Kdv'siz Toplam Tutarlarýnýn Yuzde Kaç'ýný Mankart Puaný Ýle Ödeyebilir
            decimal p_KullanilabilirYuzde = 50;

            FATURALAR             fatura         = null;
            List <FATURADETAYLAR> faturaDetaylar = null;
            List <string>         malzemeKodlari = null;

            SERVISSTOKLAR.CONTAINER     servisStoklar     = null;
            MALZEMELER.CONTAINER        malzemeler        = null;
            MALZEMEOZELKODLAR.CONTAINER malzemeOzelKodlar = null;
            SERVISISEMIRLER             isEmri            = null;
            MANKART mankart = null;

            fatura = FATURALAR.SelectItem(param_FaturaId);
            if (fatura.isNotNull())
            {
                param_ServisId = fatura.SERVISID;
            }
            else
            {
                ret.SetException("Fatura Bilgisine Ulaþýlamadý");
            }

            if (ret.ok())
            {
                isEmri = SERVISISEMIRLER.SelectFromIsEmirNo(fatura.ISEMIRNO);
            }

            if (ret.ok() && isEmri.isNotNull())
            {
                mankart = MANKART.SelectFromSaseNo(isEmri.SASENO);
            }

            if (mankart.isNull())
            {
                ret.SetException("Mankart Yok");
            }

            if (ret.ok())
            {
                faturaDetaylar = FATURADETAYLAR.SelectItemsFromFaturaId(param_FaturaId);
                malzemeKodlari = faturaDetaylar.select(t => t.KOD).toList();
            }

            if (ret.ok())
            {
                servisStoklar     = new SERVISSTOKLAR.CONTAINER(SERVISSTOKLAR.SelectItemsFromCodes(param_ServisId, malzemeKodlari));
                malzemeler        = new MALZEMELER.CONTAINER(MALZEMELER.SelectItems(servisStoklar.select(t => t.MALZEMEID)));
                malzemeOzelKodlar = new MALZEMEOZELKODLAR.CONTAINER(MALZEMEOZELKODLAR.SelectAll());
            }

            if (ret.ok())
            {
                decimal toplamOriginalParcaTutarlari = GetToplamOriginalParcaTutarlari(faturaDetaylar, servisStoklar, malzemeler, malzemeOzelKodlar);

                MANKARTHAREKETLER manKartHareket = MANKARTHAREKETLER.SelectFromFatura(param_FaturaId).createIsNull();
                manKartHareket.MANKARTID = mankart.ID;
                manKartHareket.FATURAID  = param_FaturaId;
                manKartHareket.TARIH     = DateTime.Now;

                decimal manKartBakiye           = mankart.GetBakiye();
                decimal kullanmakIstedigiBakiye = param_KullanilacakPuan.CastToRange(0, manKartBakiye);
                decimal maxKullanilacakPuan     = toplamOriginalParcaTutarlari.Percent(p_KullanilabilirYuzde).RoundToDecimals(2);

                if (manKartBakiye >= p_MinManKartPuan && param_PuanKullan) //Bakiye Uygun ve Puan Kullanacak Ýþaretlenmiþ Ýse
                {
                    decimal kullanilanPuan   = kullanmakIstedigiBakiye.CastToRange(0, maxKullanilacakPuan);
                    decimal kalanParcaTutari = toplamOriginalParcaTutarlari - kullanilanPuan;
                    manKartHareket.HARCANANPUAN  = kullanilanPuan;
                    manKartHareket.KAZANILANPUAN = GetKazanilanPuan(kalanParcaTutari / toplamOriginalParcaTutarlari, kullanilanPuan / toplamOriginalParcaTutarlari,
                                                                    faturaDetaylar, servisStoklar, malzemeler, malzemeOzelKodlar);
                }
                else
                {
                    manKartHareket.KAZANILANPUAN = GetKazanilanPuan(1, 0, faturaDetaylar, servisStoklar, malzemeler, malzemeOzelKodlar);
                }

                fatura.MANKARTKAZANILAN = manKartHareket.KAZANILANPUAN;
                fatura.MANKARTHARCANAN  = manKartHareket.HARCANANPUAN;

                ret = new List <ItemRawModel>().add(fatura).addRange(faturaDetaylar).add(manKartHareket).Update();
            }

            return(ret);
        }