Aylık ve Haftalık Vade hesaplama SP

Merhabalar ,

Vade hesaplama işlemlerimizi bizim için otomatik oluşturan  belirtilen  duruma göre AYLIK/HAFTALIK  ödeme çizelgesi oluşturan SP’yi ekliyorum.

 

Öncelikle bir Adet tablo oluşturalım

 

CREATE TABLE [OPE].[TBL_TEMP](
[VADE_TARIH] [datetime] NULL,
[VADE_TUTAR] [decimal](8, 2) NULL,
[ODEME_TUTAR] [decimal](8, 2) NULL,
[REF_ID] [int] NULL,
[ODENDI] [bit] NULL,
[ACIKLAMA] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [OPE].[TBL_TEMP] ADD CONSTRAINT [DF_TBL_TEMP_ODENDI] DEFAULT ((0)) FOR [ODENDI]
GO

 


SP ekliyelim

CREATE PROCEDURE [dbo].[SP_VADE_HESAPLA] (@VADE_AY INT,
@TARIH DATETIME,
@TUTAR DECIMAL(8, 2),
@TURU NVARCHAR(50),
@REF_ID INT)
AS
BEGIN

TRUNCATE TABLE OPE.TBL_TEMP
DECLARE @VADE_TUTAR DECIMAL(8, 2);

IF @TURU = ‘HAFTALIK’ BEGIN

SELECT
@VADE_TUTAR = @TUTAR / @VADE_AY

WHILE @VADE_AY > 0
BEGIN

INSERT INTO OPE.TBL_TEMP (VADE_TARIH, VADE_TUTAR, REF_ID)
VALUES (DATEADD(WEEK, @VADE_AY, @TARIH), @VADE_TUTAR, @REF_ID);

SET @VADE_AY = @VADE_AY – 1

END
SELECT
ROW_NUMBER() OVER (ORDER BY VADE_TARIH ASC) AS SIRA_NO
,CONVERT(NVARCHAR(50), VADE_TARIH, 104) AS VADE_TARIH
,REF_ID
,ISNULL(VADE_TUTAR, 0) AS VADE_TUTAR
,ISNULL(ODEME_TUTAR, 0) AS ODEME_TUTAR
,ODENDI
,ACIKLAMA
FROM OPE.TBL_TEMP
END

IF @TURU=’AYLIK’ BEGIN

SELECT
@VADE_TUTAR = @TUTAR / @VADE_AY

WHILE @VADE_AY > 0
BEGIN

INSERT INTO OPE.TBL_TEMP (VADE_TARIH, VADE_TUTAR, REF_ID)
VALUES (DATEADD(MONTH, @VADE_AY, @TARIH), @VADE_TUTAR, @REF_ID);

SET @VADE_AY = @VADE_AY – 1

END
SELECT
ROW_NUMBER() OVER (ORDER BY VADE_TARIH ASC) AS SIRA_NO
,CONVERT(NVARCHAR(50), VADE_TARIH, 104) AS VADE_TARIH
,REF_ID
,ISNULL(VADE_TUTAR, 0) AS VADE_TUTAR
,ISNULL(ODEME_TUTAR, 0) AS ODEME_TUTAR
,ODENDI
,ACIKLAMA
FROM OPE.TBL_TEMP
END

END


SP çağıralım

 

EXECUTE SP_VADE_HESAPLA @VADE_AY = 12
,@TARIH = ‘2018-08-29 11:53:58.501′
,@TUTAR = 1000
,@TURU = N’AYLIK’
,@REF_ID = 22


Sonuç Ekranı

Yararlı olması dileğiyle

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir