Kod: Tümünü seç
CREATE OR REPLACE FUNCTION "F_LOKAL_ZAM_HESAPLA" (
as_tur in varchar2,
al_sbs_muhatap_no in NUMERIC,
al_bgp_servis_no in NUMERIC ,
al_bgp_gelirkod_no in NUMERIC,
al_bgs_beyan_no in NUMERIC ,
ai_yil in NUMERIC,
ai_donem in NUMERIC,
ad_islem_tarihi in date ,
ad_vade_tarihi_arg in date ,
adec_tutar in number
)
return numeric
is
ldec_ZamTutar decimal;
ldec_FaizTutar decimal ;
ll_bgp_gelirkod_faiz NUMERIC ;
ll_hata_deger long ;
ls_hata varchar2(200) ;
i Integer ;
li_yil Integer ;
li_ay Integer ;
li_gun Integer ;
ld_bas_tar date ;
ld_bit_tar date ;
ld_vade_tarihi date ;
ls_turu varchar2(200) ;
ldec_aylik_oran decimal ;
li_ay_sayisi integer ;
ld_ilk_tarih date ;
ld_son_tarih date ;
li_temp_gun integer ;
ldec_eski_oran decimal;
ldec_minimum_tutar decimal;
ls_gecikme_zammi varchar2(200) ;
ls_gecikme_tutari varchar2(200) ;
ls_gecikme_turu varchar2(200) ;
ls_gelir_faiz varchar2(200) ;
li_gun_sayisi integer ;
ldec_gunluk_oran decimal ;
ll_vbarisi_no NUMBER;
ll_tecil_no NUMBER ;
ld_uygulama_tarihi date ;
ad_vade_tarihi date;
ldec_gecikme_faizi Decimal ;
li_islem_ay_sayisi integer ;
ld_baslangic_tarih Date ;
ldec_ZamTutar_ara Decimal;
rec_bgp_zam ALL_TABLES.TABLE_NAME%TYPE ;
begin
ad_vade_tarihi := ad_vade_tarihi_arg;
If adec_tutar = 0 Then
RETURN 0;
End If;
SELECT MAX(bgs_vbarisi_no)
INTO ll_vbarisi_no
FROM BGS_TAHAK
WHERE SBS_MUHATAP_NO = al_sbs_muhatap_no
AND BGP_SERVIS_NO = al_bgp_servis_no
AND BGP_GELIRKOD_NO = al_bgp_gelirkod_no
AND YIL = ai_yil
AND DONEM = ai_donem
AND BGS_BEYAN_NO = al_bgs_beyan_no;
IF ll_vbarisi_no is null THEN
ll_vbarisi_no := 0;
END IF;
SELECT MAX(bgs_tecil_no)
INTO ll_tecil_no
FROM BGS_TAHAK
WHERE SBS_MUHATAP_NO = al_sbs_muhatap_no
AND BGP_SERVIS_NO = al_bgp_servis_no
AND BGP_GELIRKOD_NO = al_bgp_gelirkod_no
AND YIL = ai_yil
AND DONEM = ai_donem
AND BGS_BEYAN_NO = al_bgs_beyan_no;
IF ll_tecil_no is null THEN
ll_tecil_no := 0;
END IF;
IF ll_vbarisi_no> 0 OR ll_tecil_no>0 THEN
IF ad_vade_tarihi Is Null OR (ad_islem_tarihi <= ad_vade_tarihi) THEN
RETURN 0;
END IF;
IF ad_islem_tarihi = '01/09/2003' AND ad_vade_tarihi = '31/08/2003' THEN
Return 0;
END IF;
IF ad_islem_tarihi = '01/03/2004' AND ad_vade_tarihi = '29.02.2004' THEN
Return 0;
END IF;
ELSE
SELECT MAX(UYGULAMA_TARIHI)
INTO ld_uygulama_tarihi
FROM BGP_TAKSIT_VADE
WHERE BGP_SERVIS_NO = al_bgp_servis_no
AND YIL = ai_yil
AND DONEM = ai_donem;
IF (ld_uygulama_tarihi) IS NOT NULL THEN
IF (ad_islem_tarihi <= ld_uygulama_tarihi) THEN
RETURN 0;
END IF;
IF ad_islem_tarihi <= ad_vade_tarihi THEN
RETURN 0;
END IF;
ELSE
IF ad_vade_tarihi Is Null OR (ad_islem_tarihi <= ad_vade_tarihi) THEN
RETURN 0;
END IF;
END IF ;
END IF;
ls_gecikme_zammi := 'H';
ls_gecikme_tutari := 'H';
SELECT GECIKME_ZAMMI,GECIKME_FAIZI,GECIKME_TURU
INTO ls_gecikme_zammi,ls_gecikme_tutari, ls_gecikme_turu
FROM bgp_gelirkod
WHERE bgp_gelirkod.no = al_bgp_gelirkod_no;
IF SQLCODE <> 0 THEN
RETURN 0;
END IF;
IF as_tur = 'Z' And ls_gecikme_zammi = 'H' Then
RETURN 0;
END IF;
IF as_tur = 'F' And ls_gecikme_tutari = 'H' Then
RETURN 0;
END IF;
If f_bgp_gelirkod('FAIZ',ll_bgp_gelirkod_faiz,ls_gelir_faiz) = -1 Then
Return 0;
End If;
ld_vade_tarihi := NULL;
If ls_gecikme_tutari = 'E' AND as_tur = 'F' Then
SELECT MIN(bgs_tahak.tahak_tar)
INTO ld_vade_tarihi FROM bgs_tahak
WHERE bgs_tahak.sbs_muhatap_no = al_sbs_muhatap_no
AND bgs_tahak.bgp_servis_no = al_bgp_servis_no
AND bgs_tahak.bgp_gelirkod_no = ll_bgp_gelirkod_faiz
AND bgs_tahak.bgs_beyan_no = al_bgs_beyan_no
AND bgs_tahak.yil = ai_yil
AND bgs_tahak.donem = ai_donem;
IF SQLCODE <> 0 THEN
RETURN 0;
END IF;
If ld_vade_tarihi Is Not Null Then
ad_vade_tarihi := ld_vade_tarihi;
End If;
End If;
ldec_FaizTutar := 0;
ldec_ZamTutar := 0;
ld_ilk_tarih := ad_vade_tarihi;
ldec_eski_oran := 0;
FOR rec_bgp_zam IN (SELECT
NO,BASLANGIC_TARIHI,BITIS_TARIHI,MINIMUM_TUTAR,ORAN,ACIKLAMA,
SIS_KULLANICI_NO,ISLEMTAR FROM BGP_ZAM )
LOOP
ld_bas_tar := rec_bgp_zam.BASLANGIC_TARIHI;
ld_bit_tar := rec_bgp_zam.BITIS_TARIHI;
ldec_aylik_oran := rec_bgp_zam.ORAN;
IF ll_vbarisi_no > 0 THEN
ldec_aylik_oran := 10;
END IF;
ldec_minimum_tutar := rec_bgp_zam.MINIMUM_TUTAR;
ldec_aylik_oran := ldec_aylik_oran / 100;
ldec_gunluk_oran := ldec_aylik_oran / 30;
/*-*/
If not (ld_bit_tar Is Not Null And ad_vade_tarihi > ld_bit_tar) Then
If ld_bas_tar Is Not Null And ad_islem_tarihi < ld_bas_tar Then
Exit;
END IF;
If ls_gecikme_turu = 'A' Then
If ad_islem_tarihi > ld_bit_tar And ld_bit_tar Is NOT Null Then
li_yil := YEAR( ld_bit_tar );
li_ay := MONTH( ld_bit_tar ) ;
li_gun := F_DAY( ld_ilk_tarih );
If F_DAY ( ld_ilk_tarih ) < F_DAY ( ld_bit_tar ) Then
li_ay := li_ay + 1;
IF li_ay > 12 THEN
li_yil := li_yil + 1;
li_ay := 1;
END IF;
End If ;
li_temp_gun := F_AYIN_GUN_SAYISI (to_date('01/'||
to_char(li_ay)||'/'||to_char(li_yil),'dd/mm/yyyy'));
If li_gun > li_temp_gun Then
li_gun := li_temp_gun;
End If;
ld_son_tarih := To_Date(li_gun || '/'||
to_char(li_ay)||'/'||to_char(li_yil),'dd/mm/yyyy') ;
Else
ld_son_tarih := ad_islem_tarihi;
End If ;
li_ay_sayisi := f_ay_sayisi(ld_ilk_tarih,ld_son_tarih);
If f_Day(ld_ilk_tarih) = f_Ayin_Gun_Sayisi(To_Date('01/'||
to_char(Month(ld_ilk_tarih))||'/'||to_char(Year(ld_ilk_tarih)),'dd/mm/yyyy'))
And
f_Day(ld_son_tarih) = f_Ayin_Gun_Sayisi(To_Date('01/'||
to_char(Month(ld_son_tarih))||'/'||to_char(Year(ld_son_tarih)),'dd/mm/yyyy'))
Then
If F_Day(ld_ilk_tarih) < F_Day(ld_son_tarih) Then
li_ay_sayisi := li_ay_sayisi - 1;
End If;
End If;
If ld_ilk_tarih < ld_bas_tar Then
li_ay_sayisi := li_ay_sayisi - 1;
ldec_ZamTutar := ldec_ZamTutar + (adec_tutar * ldec_eski_oran );
End If;
ldec_ZamTutar := ldec_ZamTutar + (adec_tutar * li_ay_sayisi *
ldec_aylik_oran );
IF ad_islem_tarihi > '31.07.2004' AND
ad_islem_tarihi < '01.10.2004' AND ll_vbarisi_no > 0 THEN
ld_son_tarih := '28.07.2004';
ld_baslangic_tarih := '01.08.2004';
li_ay_sayisi := f_ay_sayisi(ad_vade_tarihi,ld_son_tarih);
ldec_ZamTutar := (adec_tutar * li_ay_sayisi * ldec_aylik_oran );
ldec_gecikme_faizi := 5;
li_islem_ay_sayisi := f_ay_sayisi( ld_baslangic_tarih , ad_islem_tarihi
);
ldec_gecikme_faizi := ldec_gecikme_faizi / 100;
ldec_ZamTutar := ldec_ZamTutar + ( adec_tutar * ldec_gecikme_faizi *
li_islem_ay_sayisi );
ldec_ZamTutar_ara := ( adec_tutar * ldec_gecikme_faizi *
li_islem_ay_sayisi );
END IF ;
If ldec_ZamTutar < ldec_minimum_tutar Then
ldec_ZamTutar := ldec_minimum_tutar;
End If;
ld_ilk_tarih := ld_son_tarih;
ldec_eski_oran := ldec_aylik_oran;
Else
If ad_vade_tarihi > ld_bas_tar Then
ld_ilk_tarih := ad_vade_tarihi;
Else
ld_ilk_tarih := ld_bas_tar;
End If;
If ad_islem_tarihi < ld_bit_tar Then
ld_son_tarih := ad_islem_tarihi;
Else
ld_son_tarih := ld_bit_tar;
End If;
li_gun_sayisi := ld_ilk_tarih - ld_son_tarih;
if (adec_tutar * li_gun_sayisi * ldec_gunluk_oran ) >= ldec_minimum_tutar
then
ldec_ZamTutar := ldec_ZamTutar + (adec_tutar * li_gun_sayisi *
ldec_gunluk_oran ) ;
Elsif (adec_tutar * li_gun_sayisi * ldec_gunluk_oran ) <
ldec_minimum_tutar Then
ldec_ZamTutar := ldec_ZamTutar + ldec_minimum_tutar;
End If;
End If;
END IF;/*-*/
END LOOP ;
ldec_ZamTutar := ldec_ZamTutar - ldec_FaizTutar ;
IF ldec_ZamTutar < 0 THEN
ldec_ZamTutar := 0 ;
END IF;
If ldec_ZamTutar > 0 Then
IF al_bgp_servis_no = 2342 THEN
ldec_ZamTutar := f_yuvarla('S',ai_yil,ldec_ZamTutar);
ELSE
ldec_ZamTutar := f_yuvarla('Z',ai_yil,ldec_ZamTutar);
END IF;
End If;
Return ldec_ZamTutar;
end;
Kod: Tümünü seç
var
sonuc: variant;
begin
with sp_ado2.Parameters do
begin
ParamByName('AS_TUR').Value := 'Z';
ParamByName('AL_SBS_MUHATAP_NO').Value := 2;
ParamByName('AL_BGP_SERVIS_NO').Value := 1230;
ParamByName('AL_BGP_GELIRKOD_NO').Value := 1231;
ParamByName('AL_BGS_BEYAN_NO').Value := 2291114;
ParamByName('AI_YIL').Value := 2002;
ParamByName('AI_DONEM').Value := 2;
ParamByName('AD_ISLEM_TARIHI').Value := strtodate('25.07.2005');
ParamByName('AD_VADE_TARIHI_ARG').Value := strtodate('30.11.2002');
ParamByName('ADEC_TUTAR').Value := 19.96;
end;
sp_ado2.ExecProc;
sonuc := sp_ado2.Parameters.ParamValues['return_value'];
ShowMessage(sonuc);