SET ANSI_NULLS ON;
GO

SET QUOTED_IDENTIFIER ON;
GO

CREATE FUNCTION [dbo].[_Brk_eFlow_Ozelyaslandir]
(
    @CARIKODU TDBCARIKOD,
    @DOVIZLIMI VARCHAR(1)
)
RETURNS
--DECLARE
@TEMP TABLE
(
    CARIKOD VARCHAR(35),
    CARIISIM VARCHAR(100),
    BELGENO VARCHAR(20),
    BELGETARIHI SMALLDATETIME,
    ACIKLAMA VARCHAR(50),
    TAHSILAT FLOAT,
    ODEME FLOAT,
    VADEGUNU SMALLDATETIME,
    ASILTUTAR FLOAT,
    DOVIZTUR INT,
    DOVIZTUTAR FLOAT,
    PLASIYERKODU VARCHAR(50),
    PLASIYERISMI VARCHAR(100),
    PROJE VARCHAR(15),
    INCKEYNO INT
)
AS
BEGIN


    IF @CARIKODU = ''
    BEGIN
        SET @CARIKODU = '%';
    END;

    DECLARE @CKOD VARCHAR(100),
            @DOVTIP INT,
            @TB FLOAT,
            @TA FLOAT,
            @DB FLOAT,
            @DA FLOAT,
            @KURISIM VARCHAR(100),
            @HESAPTUTMASEKLI VARCHAR(100);
    DECLARE @CARI_KOD VARCHAR(100),
            @CARI_ISIM VARCHAR(100),
            @BELGE_NO VARCHAR(100),
            @TARIH SMALLDATETIME,
            @ACIKLAMA VARCHAR(100),
            @VADE_TARIHI SMALLDATETIME,
            @PROJE_KODU VARCHAR(100),
            @DOVIZ_TURU INT,
            @SUBE_KODU INT,
            @HAREKET_TURU VARCHAR(100),
            @BORC FLOAT,
            @ALACAK FLOAT,
            @DOVIZ_TUTAR FLOAT,
            @KAPATILMIS_TUTAR FLOAT,
            @INC_KEY_NUMBER FLOAT,
            @FIRMA_DOVIZ_TIPI FLOAT,
            @FIRMA_DOVIZ_TUTARI FLOAT,
            @PLASIYER_KODU VARCHAR(100),
            @PLASIYER_ACIKLAMA VARCHAR(100);
    DECLARE @CKODU VARCHAR(100),
            @CARIISIM VARCHAR(100),
            @BELGENO VARCHAR(100),
            @BELGETARIHI SMALLDATETIME,
            @TMP_ACIKLAMA VARCHAR(100),
            @TMP_BORC FLOAT,
            @TMP_ALACAK FLOAT,
            @VADE SMALLDATETIME,
            @SONALACAK FLOAT,
            @ASILTUTAR FLOAT,
            @DOVIZTUR INT,
            @DOVIZTUTAR FLOAT,
            @MODUL VARCHAR(100),
            @KA VARCHAR(100);
    DECLARE @BAKIYE FLOAT,
            @TOPLAM FLOAT;


    IF @DOVIZLIMI = 'E'
    BEGIN
        DECLARE CURCARI CURSOR FOR
        SELECT TRA.CARI_KOD,
               TRA.DOVIZ_TURU DOVIZTIP,
               TRA.BORC BORC,
               TRA.ALACAK ALACAK,
               TRA.BDOVTOP,
               TRA.ADOVTOP,
               ISNULL(KUR.ISIM, 'YTL') KURISIM,
               HESAPTUTMASEKLI
        FROM TBLCASABIT CARIANA
            LEFT OUTER JOIN
            (
                SELECT CARI_KOD,
                       CAHAR.DOVIZ_TURU,
                       SUM(BORC) BORC,
                       SUM(ALACAK) ALACAK,
                       SUM(   CASE
                                  WHEN BORC > 0 THEN
                                      DOVIZ_TUTAR
                                  ELSE
                                      0
                              END
                          ) BDOVTOP,
                       SUM(   CASE
                                  WHEN ALACAK > 0 THEN
                                      DOVIZ_TUTAR
                                  ELSE
                                      0
                              END
                          ) ADOVTOP
                FROM TBLCAHAR CAHAR
                WHERE (HAREKET_TURU
                      BETWEEN 'A' AND 'L'
                      )
                      AND CAHAR.DOVIZ_TURU >= 0
                      AND CAHAR.DOVIZ_TURU <= 99
                GROUP BY CARI_KOD,
                         DOVIZ_TURU
            ) TRA
                ON (CARIANA.CARI_KOD = TRA.CARI_KOD)
            LEFT OUTER JOIN NETSIS..KUR KUR
                ON (KUR.SIRA = TRA.DOVIZ_TURU)
        WHERE (CARIANA.CM_BORCT + CARIANA.CM_ALACT <> 0)
              AND TRA.CARI_KOD LIKE @CARIKODU
        ORDER BY CARIANA.CARI_KOD ASC,
                 TRA.DOVIZ_TURU;



        OPEN CURCARI;
        FETCH NEXT FROM CURCARI
        INTO @CKOD,
             @DOVTIP,
             @TB,
             @TA,
             @DB,
             @DA,
             @KURISIM,
             @HESAPTUTMASEKLI;
        WHILE @@FETCH_STATUS <> -1
        BEGIN
            IF @DOVTIP <> 0
            BEGIN
                IF @HESAPTUTMASEKLI = 'K'
                BEGIN
                    DECLARE HAREKET CURSOR FOR
                    SELECT CARI_KOD,
                           (
                               SELECT CARI_ISIM
                               FROM TBLCASABIT WITH (NOLOCK)
                               WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                           ),
                           BELGE_NO,
                           TARIH,
                           ACIKLAMA,
                           VADE_TARIHI,
                           TBLCAHAR.PROJE_KODU,
                           DOVIZ_TURU,
                           TBLCAHAR.SUBE_KODU,
                           HAREKET_TURU,
                           (CASE
                                WHEN BORC > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    BORC
                            END
                           ),
                           (CASE
                                WHEN ALACAK > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    ALACAK
                            END
                           ),
                           DOVIZ_TUTAR,
                           KAPATILMIS_TUTAR,
                           TBLCAHAR.PLASIYER_KODU,
                           PLASIYER_ACIKLAMA,
                           INC_KEY_NUMBER
                    FROM TBLCAHAR WITH (NOLOCK)
                        LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                            ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                    WHERE DOVIZ_TUTAR <> KAPATILMIS_TUTAR
                          AND (CARI_KOD = @CKOD)
                          AND DOVIZ_TURU = @DOVTIP
                    ORDER BY VADE_TARIHI DESC;

                    OPEN HAREKET;
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @HAREKET_TURU,
                         @BORC,
                         @ALACAK,
                         @DOVIZ_TUTAR,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA,
                         @INC_KEY_NUMBER;
                    WHILE @@FETCH_STATUS <> -1
                    BEGIN
                        SET @SONALACAK = (@BORC + @ALACAK);
                        SET @ASILTUTAR = (@BORC + @ALACAK);
                        IF @BORC > 0
                            SET @BORC = @BORC - @KAPATILMIS_TUTAR;
                        IF @ALACAK > 0
                            SET @ALACAK = @ALACAK - @KAPATILMIS_TUTAR;
                        INSERT INTO @TEMP
                        VALUES
                        (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                         @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                        FETCH NEXT FROM HAREKET
                        INTO @CARI_KOD,
                             @CARI_ISIM,
                             @BELGE_NO,
                             @TARIH,
                             @ACIKLAMA,
                             @VADE_TARIHI,
                             @PROJE_KODU,
                             @DOVIZ_TURU,
                             @SUBE_KODU,
                             @HAREKET_TURU,
                             @BORC,
                             @ALACAK,
                             @DOVIZ_TUTAR,
                             @KAPATILMIS_TUTAR,
                             @PLASIYER_KODU,
                             @PLASIYER_ACIKLAMA,
                             @INC_KEY_NUMBER;
                    END;
                    CLOSE HAREKET;
                    DEALLOCATE HAREKET;
                END;

                IF @HESAPTUTMASEKLI = 'Y '
                   AND @DB < @DA
                BEGIN
                    SET @BAKIYE = @DA - @DB; -- ALACAK

                    DECLARE HAREKET CURSOR FOR
                    SELECT CARI_KOD,
                           (
                               SELECT CARI_ISIM
                               FROM TBLCASABIT WITH (NOLOCK)
                               WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                           ),
                           BELGE_NO,
                           TARIH,
                           ACIKLAMA,
                           VADE_TARIHI,
                           TBLCAHAR.PROJE_KODU,
                           DOVIZ_TURU,
                           TBLCAHAR.SUBE_KODU,
                           (CASE
                                WHEN BORC > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    BORC
                            END
                           ),
                           (CASE
                                WHEN ALACAK > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    ALACAK
                            END
                           ),
                           INC_KEY_NUMBER,
                           DOVIZ_TUTAR,
                           FIRMA_DOVIZ_TIPI,
                           FIRMA_DOVIZ_TUTARI,
                           KAPATILMIS_TUTAR,
                           TBLCAHAR.PLASIYER_KODU,
                           PLASIYER_ACIKLAMA
                    FROM TBLCAHAR WITH (NOLOCK)
                        LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                            ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                    WHERE (CARI_KOD = @CKOD)
                          AND NOT (
                                      (DOVIZ_TURU > 0)
                                      AND (DOVIZ_TUTAR = 0)
                                  )
                          AND (DOVIZ_TURU = @DOVTIP)
                          AND (CASE
                                   WHEN ALACAK > 0
                                        AND DOVIZ_TURU <> 0 THEN
                                       DOVIZ_TUTAR
                                   ELSE
                                       ALACAK
                               END
                              ) > 0
                    ORDER BY VADE_TARIHI DESC;
                    OPEN HAREKET;
                    SET @TOPLAM = 0;
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @BORC,
                         @ALACAK,
                         @INC_KEY_NUMBER,
                         @DOVIZ_TUTAR,
                         @FIRMA_DOVIZ_TIPI,
                         @FIRMA_DOVIZ_TUTARI,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA;
                    WHILE @@FETCH_STATUS <> -1 AND (@BAKIYE > @TOPLAM)
                    BEGIN

                        SET @TOPLAM = @TOPLAM + @ALACAK;
                        SET @SONALACAK = @ALACAK;
                        SET @ASILTUTAR = @ALACAK;
                        IF @TOPLAM >= @BAKIYE
                        BEGIN
                            SET @SONALACAK = @ALACAK;
                            SET @ALACAK = (@TOPLAM - @BAKIYE - @ALACAK) * -1;
                            IF @SONALACAK = @ALACAK
                                SET @SONALACAK = @ALACAK;
                            ELSE
                                SET @SONALACAK = @ALACAK;
                        END;

                        INSERT INTO @TEMP
                        VALUES
                        (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                         @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                        FETCH NEXT FROM HAREKET
                        INTO @CARI_KOD,
                             @CARI_ISIM,
                             @BELGE_NO,
                             @TARIH,
                             @ACIKLAMA,
                             @VADE_TARIHI,
                             @PROJE_KODU,
                             @DOVIZ_TURU,
                             @SUBE_KODU,
                             @BORC,
                             @ALACAK,
                             @INC_KEY_NUMBER,
                             @DOVIZ_TUTAR,
                             @FIRMA_DOVIZ_TIPI,
                             @FIRMA_DOVIZ_TUTARI,
                             @KAPATILMIS_TUTAR,
                             @PLASIYER_KODU,
                             @PLASIYER_ACIKLAMA;
                    END;
                    CLOSE HAREKET;
                    DEALLOCATE HAREKET;
                END;

                IF @HESAPTUTMASEKLI = 'Y '
                   AND @DA < @DB
                BEGIN
                    SET @BAKIYE = @DB - @DA; -- BORC
                    DECLARE HAREKET CURSOR FOR
                    SELECT CARI_KOD,
                           (
                               SELECT CARI_ISIM
                               FROM TBLCASABIT WITH (NOLOCK)
                               WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                           ),
                           BELGE_NO,
                           TARIH,
                           ACIKLAMA,
                           VADE_TARIHI,
                           TBLCAHAR.PROJE_KODU,
                           DOVIZ_TURU,
                           TBLCAHAR.SUBE_KODU,
                           (CASE
                                WHEN BORC > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    BORC
                            END
                           ),
                           (CASE
                                WHEN ALACAK > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    ALACAK
                            END
                           ),
                           INC_KEY_NUMBER,
                           DOVIZ_TUTAR,
                           FIRMA_DOVIZ_TIPI,
                           FIRMA_DOVIZ_TUTARI,
                           KAPATILMIS_TUTAR,
                           TBLCAHAR.PLASIYER_KODU,
                           PLASIYER_ACIKLAMA
                    FROM TBLCAHAR WITH (NOLOCK)
                        LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                            ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                    WHERE (CARI_KOD = @CKOD)
                          AND NOT (
                                      (DOVIZ_TURU > 0)
                                      AND (DOVIZ_TUTAR = 0)
                                  )
                          AND (DOVIZ_TURU = @DOVTIP)
                          AND (CASE
                                   WHEN BORC > 0
                                        AND DOVIZ_TURU <> 0 THEN
                                       DOVIZ_TUTAR
                                   ELSE
                                       BORC
                               END
                              ) > 0
                    ORDER BY VADE_TARIHI DESC;

                    OPEN HAREKET;
                    SET @TOPLAM = 0;
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @BORC,
                         @ALACAK,
                         @INC_KEY_NUMBER,
                         @DOVIZ_TUTAR,
                         @FIRMA_DOVIZ_TIPI,
                         @FIRMA_DOVIZ_TUTARI,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA;
                    WHILE @@FETCH_STATUS <> -1 AND (@BAKIYE > @TOPLAM)
                    BEGIN

                        SET @TOPLAM = @TOPLAM + @BORC;
                        SET @SONALACAK = @BORC;
                        SET @ASILTUTAR = @BORC;
                        IF @TOPLAM >= @BAKIYE
                        BEGIN
                            SET @SONALACAK = @BORC;
                            SET @BORC = (@TOPLAM - @BAKIYE - @BORC) * -1;
                            IF @SONALACAK = @BORC
                                SET @SONALACAK = @BORC;
                            ELSE
                                SET @SONALACAK = @BORC;
                        END;

                        INSERT INTO @TEMP
                        VALUES
                        (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                         @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                        FETCH NEXT FROM HAREKET
                        INTO @CARI_KOD,
                             @CARI_ISIM,
                             @BELGE_NO,
                             @TARIH,
                             @ACIKLAMA,
                             @VADE_TARIHI,
                             @PROJE_KODU,
                             @DOVIZ_TURU,
                             @SUBE_KODU,
                             @BORC,
                             @ALACAK,
                             @INC_KEY_NUMBER,
                             @DOVIZ_TUTAR,
                             @FIRMA_DOVIZ_TIPI,
                             @FIRMA_DOVIZ_TUTARI,
                             @KAPATILMIS_TUTAR,
                             @PLASIYER_KODU,
                             @PLASIYER_ACIKLAMA;
                    END;
                    CLOSE HAREKET;
                    DEALLOCATE HAREKET;
                END;
            END;

            IF @DOVTIP = 0
            BEGIN

                IF @HESAPTUTMASEKLI = 'K'
                BEGIN
                    DECLARE HAREKET CURSOR FOR
                    SELECT CARI_KOD,
                           (
                               SELECT CARI_ISIM
                               FROM TBLCASABIT WITH (NOLOCK)
                               WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                           ),
                           BELGE_NO,
                           TARIH,
                           ACIKLAMA,
                           VADE_TARIHI,
                           TBLCAHAR.PROJE_KODU,
                           DOVIZ_TURU,
                           TBLCAHAR.SUBE_KODU,
                           HAREKET_TURU,
                           (CASE
                                WHEN BORC > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    BORC
                            END
                           ),
                           (CASE
                                WHEN ALACAK > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    ALACAK
                            END
                           ),
                           DOVIZ_TUTAR,
                           KAPATILMIS_TUTAR,
                           TBLCAHAR.PLASIYER_KODU,
                           PLASIYER_ACIKLAMA,
                           INC_KEY_NUMBER
                    FROM TBLCAHAR WITH (NOLOCK)
                        LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                            ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                    WHERE BORC + ALACAK <> KAPATILMIS_TUTAR
                          AND (CARI_KOD = @CKOD)
                          AND DOVIZ_TURU = @DOVTIP
                    ORDER BY VADE_TARIHI DESC;

                    OPEN HAREKET;
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @HAREKET_TURU,
                         @BORC,
                         @ALACAK,
                         @DOVIZ_TUTAR,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA,
                         @INC_KEY_NUMBER;
                    WHILE @@FETCH_STATUS <> -1
                    BEGIN
                        SET @SONALACAK = (@BORC + @ALACAK);
                        SET @ASILTUTAR = (@BORC + @ALACAK);
                        IF @BORC > 0
                            SET @BORC = @BORC - @KAPATILMIS_TUTAR;
                        IF @ALACAK > 0
                            SET @ALACAK = @ALACAK - @KAPATILMIS_TUTAR;
                        INSERT INTO @TEMP
                        VALUES
                        (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                         @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                        FETCH NEXT FROM HAREKET
                        INTO @CARI_KOD,
                             @CARI_ISIM,
                             @BELGE_NO,
                             @TARIH,
                             @ACIKLAMA,
                             @VADE_TARIHI,
                             @PROJE_KODU,
                             @DOVIZ_TURU,
                             @SUBE_KODU,
                             @HAREKET_TURU,
                             @BORC,
                             @ALACAK,
                             @DOVIZ_TUTAR,
                             @KAPATILMIS_TUTAR,
                             @PLASIYER_KODU,
                             @PLASIYER_ACIKLAMA,
                             @INC_KEY_NUMBER;
                    END;
                    CLOSE HAREKET;
                    DEALLOCATE HAREKET;
                END;


                IF @HESAPTUTMASEKLI = 'Y '
                   AND @TB < @TA
                BEGIN
                    SET @BAKIYE = @TA - @TB; -- ALACAK

                    DECLARE HAREKET CURSOR FOR
                    SELECT CARI_KOD,
                           (
                               SELECT CARI_ISIM
                               FROM TBLCASABIT WITH (NOLOCK)
                               WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                           ),
                           BELGE_NO,
                           TARIH,
                           ACIKLAMA,
                           VADE_TARIHI,
                           TBLCAHAR.PROJE_KODU,
                           DOVIZ_TURU,
                           TBLCAHAR.SUBE_KODU,
                           (CASE
                                WHEN BORC > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    BORC
                            END
                           ),
                           (CASE
                                WHEN ALACAK > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    ALACAK
                            END
                           ),
                           INC_KEY_NUMBER,
                           DOVIZ_TUTAR,
                           FIRMA_DOVIZ_TIPI,
                           FIRMA_DOVIZ_TUTARI,
                           KAPATILMIS_TUTAR,
                           TBLCAHAR.PLASIYER_KODU,
                           PLASIYER_ACIKLAMA
                    FROM TBLCAHAR WITH (NOLOCK)
                        LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                            ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                    WHERE (CARI_KOD = @CKOD)
                          AND (DOVIZ_TURU = @DOVTIP)
                          AND (CASE
                                   WHEN ALACAK > 0
                                        AND DOVIZ_TURU <> 0 THEN
                                       DOVIZ_TUTAR
                                   ELSE
                                       ALACAK
                               END
                              ) > 0
                    ORDER BY VADE_TARIHI DESC;
                    OPEN HAREKET;
                    SET @TOPLAM = 0;
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @BORC,
                         @ALACAK,
                         @INC_KEY_NUMBER,
                         @DOVIZ_TUTAR,
                         @FIRMA_DOVIZ_TIPI,
                         @FIRMA_DOVIZ_TUTARI,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA;
                    WHILE @@FETCH_STATUS <> -1 AND (@BAKIYE > @TOPLAM)
                    BEGIN

                        SET @TOPLAM = @TOPLAM + @ALACAK;
                        SET @SONALACAK = @ALACAK;
                        SET @ASILTUTAR = @ALACAK;
                        IF @TOPLAM >= @BAKIYE
                        BEGIN
                            SET @SONALACAK = @ALACAK;
                            SET @ALACAK = (@TOPLAM - @BAKIYE - @ALACAK) * -1;
                            IF @SONALACAK = @ALACAK
                                SET @SONALACAK = @ALACAK;
                            ELSE
                                SET @SONALACAK = @ALACAK;
                        END;

                        INSERT INTO @TEMP
                        VALUES
                        (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                         @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                        FETCH NEXT FROM HAREKET
                        INTO @CARI_KOD,
                             @CARI_ISIM,
                             @BELGE_NO,
                             @TARIH,
                             @ACIKLAMA,
                             @VADE_TARIHI,
                             @PROJE_KODU,
                             @DOVIZ_TURU,
                             @SUBE_KODU,
                             @BORC,
                             @ALACAK,
                             @INC_KEY_NUMBER,
                             @DOVIZ_TUTAR,
                             @FIRMA_DOVIZ_TIPI,
                             @FIRMA_DOVIZ_TUTARI,
                             @KAPATILMIS_TUTAR,
                             @PLASIYER_KODU,
                             @PLASIYER_ACIKLAMA;
                    END;
                    CLOSE HAREKET;
                    DEALLOCATE HAREKET;
                END;

                IF @HESAPTUTMASEKLI = 'Y '
                   AND @TA < @TB
                BEGIN
                    SET @BAKIYE = @TB - @TA; -- BORC
                    DECLARE HAREKET CURSOR FOR
                    SELECT CARI_KOD,
                           (
                               SELECT CARI_ISIM
                               FROM TBLCASABIT WITH (NOLOCK)
                               WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                           ),
                           BELGE_NO,
                           TARIH,
                           ACIKLAMA,
                           VADE_TARIHI,
                           TBLCAHAR.PROJE_KODU,
                           DOVIZ_TURU,
                           TBLCAHAR.SUBE_KODU,
                           (CASE
                                WHEN BORC > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    BORC
                            END
                           ),
                           (CASE
                                WHEN ALACAK > 0
                                     AND DOVIZ_TURU <> 0 THEN
                                    DOVIZ_TUTAR
                                ELSE
                                    ALACAK
                            END
                           ),
                           INC_KEY_NUMBER,
                           DOVIZ_TUTAR,
                           FIRMA_DOVIZ_TIPI,
                           FIRMA_DOVIZ_TUTARI,
                           KAPATILMIS_TUTAR,
                           TBLCAHAR.PLASIYER_KODU,
                           PLASIYER_ACIKLAMA
                    FROM TBLCAHAR WITH (NOLOCK)
                        LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                            ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                    WHERE (CARI_KOD = @CKOD)
                          AND (DOVIZ_TURU = @DOVTIP)
                          AND (CASE
                                   WHEN BORC > 0
                                        AND DOVIZ_TURU <> 0 THEN
                                       DOVIZ_TUTAR
                                   ELSE
                                       BORC
                               END
                              ) > 0
                    ORDER BY VADE_TARIHI DESC;

                    OPEN HAREKET;
                    SET @TOPLAM = 0;
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @BORC,
                         @ALACAK,
                         @INC_KEY_NUMBER,
                         @DOVIZ_TUTAR,
                         @FIRMA_DOVIZ_TIPI,
                         @FIRMA_DOVIZ_TUTARI,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA;
                    WHILE @@FETCH_STATUS <> -1 AND (@BAKIYE > @TOPLAM)
                    BEGIN

                        SET @TOPLAM = @TOPLAM + @BORC;
                        SET @SONALACAK = @BORC;
                        SET @ASILTUTAR = @BORC;

                        IF @TOPLAM >= @BAKIYE
                        BEGIN
                            SET @SONALACAK = @BORC;
                            SET @BORC = (@TOPLAM - @BAKIYE - @BORC) * -1;
                            IF @SONALACAK = @BORC
                                SET @SONALACAK = @BORC;
                            ELSE
                                SET @SONALACAK = @BORC;
                        END;

                        INSERT INTO @TEMP
                        VALUES
                        (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                         @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                        FETCH NEXT FROM HAREKET
                        INTO @CARI_KOD,
                             @CARI_ISIM,
                             @BELGE_NO,
                             @TARIH,
                             @ACIKLAMA,
                             @VADE_TARIHI,
                             @PROJE_KODU,
                             @DOVIZ_TURU,
                             @SUBE_KODU,
                             @BORC,
                             @ALACAK,
                             @INC_KEY_NUMBER,
                             @DOVIZ_TUTAR,
                             @FIRMA_DOVIZ_TIPI,
                             @FIRMA_DOVIZ_TUTARI,
                             @KAPATILMIS_TUTAR,
                             @PLASIYER_KODU,
                             @PLASIYER_ACIKLAMA;
                    END;
                    CLOSE HAREKET;
                    DEALLOCATE HAREKET;
                END;
            END;


            FETCH NEXT FROM CURCARI
            INTO @CKOD,
                 @DOVTIP,
                 @TB,
                 @TA,
                 @DB,
                 @DA,
                 @KURISIM,
                 @HESAPTUTMASEKLI;

        END;

        CLOSE CURCARI;
        DEALLOCATE CURCARI;

    END;

    IF @DOVIZLIMI = 'H'
    BEGIN
        DECLARE CURCARI CURSOR FOR
        SELECT CARI_KOD,
               0,
               CM_BORCT,
               CM_ALACT,
               0,
               0,
               'YTL',
               HESAPTUTMASEKLI
        FROM TBLCASABIT
        WHERE CARI_KOD LIKE @CARIKODU
        ORDER BY CARI_KOD;



        OPEN CURCARI;
        FETCH NEXT FROM CURCARI
        INTO @CKOD,
             @DOVTIP,
             @TB,
             @TA,
             @DB,
             @DA,
             @KURISIM,
             @HESAPTUTMASEKLI;
        WHILE @@FETCH_STATUS <> -1
        BEGIN
            IF @HESAPTUTMASEKLI = 'K'
            BEGIN
                DECLARE HAREKET CURSOR FOR
                SELECT CARI_KOD,
                       (
                           SELECT CARI_ISIM
                           FROM TBLCASABIT WITH (NOLOCK)
                           WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                       ),
                       BELGE_NO,
                       TARIH,
                       ACIKLAMA,
                       VADE_TARIHI,
                       TBLCAHAR.PROJE_KODU,
                       DOVIZ_TURU,
                       TBLCAHAR.SUBE_KODU,
                       HAREKET_TURU,
                       (CASE
                            WHEN BORC > 0
                                 AND DOVIZ_TURU <> 0 THEN
                                DOVIZ_TUTAR
                            ELSE
                                BORC
                        END
                       ),
                       (CASE
                            WHEN ALACAK > 0
                                 AND DOVIZ_TURU <> 0 THEN
                                DOVIZ_TUTAR
                            ELSE
                                ALACAK
                        END
                       ),
                       DOVIZ_TUTAR,
                       KAPATILMIS_TUTAR,
                       TBLCAHAR.PLASIYER_KODU,
                       PLASIYER_ACIKLAMA,
                       INC_KEY_NUMBER
                FROM TBLCAHAR WITH (NOLOCK)
                    LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                        ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                WHERE BORC + ALACAK <> KAPATILMIS_TUTAR
                      AND (CARI_KOD = @CKOD)
                      AND DOVIZ_TURU = @DOVTIP
                ORDER BY VADE_TARIHI DESC;

                OPEN HAREKET;
                FETCH NEXT FROM HAREKET
                INTO @CARI_KOD,
                     @CARI_ISIM,
                     @BELGE_NO,
                     @TARIH,
                     @ACIKLAMA,
                     @VADE_TARIHI,
                     @PROJE_KODU,
                     @DOVIZ_TURU,
                     @SUBE_KODU,
                     @HAREKET_TURU,
                     @BORC,
                     @ALACAK,
                     @DOVIZ_TUTAR,
                     @KAPATILMIS_TUTAR,
                     @PLASIYER_KODU,
                     @PLASIYER_ACIKLAMA,
                     @INC_KEY_NUMBER;
                WHILE @@FETCH_STATUS <> -1
                BEGIN
                    SET @SONALACAK = (@BORC + @ALACAK);
                    SET @ASILTUTAR = (@BORC + @ALACAK);
                    IF @BORC > 0
                        SET @BORC = @BORC - @KAPATILMIS_TUTAR;
                    IF @ALACAK > 0
                        SET @ALACAK = @ALACAK - @KAPATILMIS_TUTAR;
                    INSERT INTO @TEMP
                    VALUES
                    (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                     @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @HAREKET_TURU,
                         @BORC,
                         @ALACAK,
                         @DOVIZ_TUTAR,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA,
                         @INC_KEY_NUMBER;
                END;
                CLOSE HAREKET;
                DEALLOCATE HAREKET;
            END;

            IF @HESAPTUTMASEKLI = 'Y '
               AND @TB < @TA
            BEGIN
                SET @BAKIYE = @TA - @TB; -- ALACAK
                DECLARE HAREKET CURSOR FOR
                SELECT CARI_KOD,
                       (
                           SELECT CARI_ISIM
                           FROM TBLCASABIT WITH (NOLOCK)
                           WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                       ),
                       BELGE_NO,
                       TARIH,
                       ACIKLAMA,
                       VADE_TARIHI,
                       TBLCAHAR.PROJE_KODU,
                       DOVIZ_TURU,
                       TBLCAHAR.SUBE_KODU,
                       BORC,
                       ALACAK,
                       INC_KEY_NUMBER,
                       DOVIZ_TUTAR,
                       FIRMA_DOVIZ_TIPI,
                       FIRMA_DOVIZ_TUTARI,
                       KAPATILMIS_TUTAR,
                       TBLCAHAR.PLASIYER_KODU,
                       PLASIYER_ACIKLAMA
                FROM TBLCAHAR WITH (NOLOCK)
                    LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                        ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                WHERE (CARI_KOD = @CKOD)
                      --AND (CASE WHEN ALACAK>0 AND DOVIZ_TURU <> 0 THEN DOVIZ_TUTAR ELSE ALACAK END)>0
                      AND ALACAK > 0
                ORDER BY VADE_TARIHI DESC;
                OPEN HAREKET;
                SET @TOPLAM = 0;
                FETCH NEXT FROM HAREKET
                INTO @CARI_KOD,
                     @CARI_ISIM,
                     @BELGE_NO,
                     @TARIH,
                     @ACIKLAMA,
                     @VADE_TARIHI,
                     @PROJE_KODU,
                     @DOVIZ_TURU,
                     @SUBE_KODU,
                     @BORC,
                     @ALACAK,
                     @INC_KEY_NUMBER,
                     @DOVIZ_TUTAR,
                     @FIRMA_DOVIZ_TIPI,
                     @FIRMA_DOVIZ_TUTARI,
                     @KAPATILMIS_TUTAR,
                     @PLASIYER_KODU,
                     @PLASIYER_ACIKLAMA;
                WHILE @@FETCH_STATUS <> -1 AND (@BAKIYE > @TOPLAM)
                BEGIN

                    SET @TOPLAM = @TOPLAM + @ALACAK;
                    SET @SONALACAK = @ALACAK;
                    SET @ASILTUTAR = @ALACAK;
                    IF @TOPLAM >= @BAKIYE
                    BEGIN
                        SET @SONALACAK = @ALACAK;
                        SET @ALACAK = (@TOPLAM - @BAKIYE - @ALACAK) * -1;
                        IF @SONALACAK = @ALACAK
                            SET @SONALACAK = @ALACAK;
                        ELSE
                            SET @SONALACAK = @ALACAK;
                    END;

                    INSERT INTO @TEMP
                    VALUES
                    (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                     @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @BORC,
                         @ALACAK,
                         @INC_KEY_NUMBER,
                         @DOVIZ_TUTAR,
                         @FIRMA_DOVIZ_TIPI,
                         @FIRMA_DOVIZ_TUTARI,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA;
                END;
                CLOSE HAREKET;
                DEALLOCATE HAREKET;
            END;

            IF @HESAPTUTMASEKLI = 'Y '
               AND @TA < @TB
            BEGIN
                SET @BAKIYE = @TB - @TA; -- BORC
                DECLARE HAREKET CURSOR FOR
                SELECT CARI_KOD,
                       (
                           SELECT CARI_ISIM
                           FROM TBLCASABIT WITH (NOLOCK)
                           WHERE TBLCASABIT.CARI_KOD = TBLCAHAR.CARI_KOD
                       ),
                       BELGE_NO,
                       TARIH,
                       ACIKLAMA,
                       VADE_TARIHI,
                       TBLCAHAR.PROJE_KODU,
                       DOVIZ_TURU,
                       TBLCAHAR.SUBE_KODU,
                       BORC,
                       ALACAK,
                       INC_KEY_NUMBER,
                       DOVIZ_TUTAR,
                       FIRMA_DOVIZ_TIPI,
                       FIRMA_DOVIZ_TUTARI,
                       KAPATILMIS_TUTAR,
                       TBLCAHAR.PLASIYER_KODU,
                       PLASIYER_ACIKLAMA
                FROM TBLCAHAR WITH (NOLOCK)
                    LEFT OUTER JOIN TBLCARIPLASIYER WITH (NOLOCK)
                        ON (TBLCAHAR.PLASIYER_KODU = TBLCARIPLASIYER.PLASIYER_KODU)
                WHERE (CARI_KOD = @CKOD)
                      --AND (CASE WHEN BORC>0 AND DOVIZ_TURU <> 0 THEN DOVIZ_TUTAR ELSE BORC END)>0
                      AND BORC > 0
                ORDER BY VADE_TARIHI DESC;
                OPEN HAREKET;
                SET @TOPLAM = 0;
                FETCH NEXT FROM HAREKET
                INTO @CARI_KOD,
                     @CARI_ISIM,
                     @BELGE_NO,
                     @TARIH,
                     @ACIKLAMA,
                     @VADE_TARIHI,
                     @PROJE_KODU,
                     @DOVIZ_TURU,
                     @SUBE_KODU,
                     @BORC,
                     @ALACAK,
                     @INC_KEY_NUMBER,
                     @DOVIZ_TUTAR,
                     @FIRMA_DOVIZ_TIPI,
                     @FIRMA_DOVIZ_TUTARI,
                     @KAPATILMIS_TUTAR,
                     @PLASIYER_KODU,
                     @PLASIYER_ACIKLAMA;
                WHILE @@FETCH_STATUS <> -1 AND (@BAKIYE > @TOPLAM)
                BEGIN

                    SET @TOPLAM = @TOPLAM + @BORC;
                    SET @SONALACAK = @BORC;
                    SET @ASILTUTAR = @BORC;
                    IF @TOPLAM >= @BAKIYE
                    BEGIN
                        SET @SONALACAK = @BORC;
                        SET @BORC = (@TOPLAM - @BAKIYE - @BORC) * -1;
                        IF @SONALACAK = @BORC
                            SET @SONALACAK = @BORC;
                        ELSE
                            SET @SONALACAK = @BORC;
                    END;

                    INSERT INTO @TEMP
                    VALUES
                    (@CARI_KOD, @CARI_ISIM, @BELGE_NO, @TARIH, @ACIKLAMA, @BORC, @ALACAK, @VADE_TARIHI, @ASILTUTAR,
                     @DOVIZ_TURU, @DOVIZ_TUTAR, @PLASIYER_KODU, @PLASIYER_ACIKLAMA, @PROJE_KODU, @INC_KEY_NUMBER);
                    FETCH NEXT FROM HAREKET
                    INTO @CARI_KOD,
                         @CARI_ISIM,
                         @BELGE_NO,
                         @TARIH,
                         @ACIKLAMA,
                         @VADE_TARIHI,
                         @PROJE_KODU,
                         @DOVIZ_TURU,
                         @SUBE_KODU,
                         @BORC,
                         @ALACAK,
                         @INC_KEY_NUMBER,
                         @DOVIZ_TUTAR,
                         @FIRMA_DOVIZ_TIPI,
                         @FIRMA_DOVIZ_TUTARI,
                         @KAPATILMIS_TUTAR,
                         @PLASIYER_KODU,
                         @PLASIYER_ACIKLAMA;
                END;
                CLOSE HAREKET;
                DEALLOCATE HAREKET;
            END;


            FETCH NEXT FROM CURCARI
            INTO @CKOD,
                 @DOVTIP,
                 @TB,
                 @TA,
                 @DB,
                 @DA,
                 @KURISIM,
                 @HESAPTUTMASEKLI;

        END;


        CLOSE CURCARI;
        DEALLOCATE CURCARI;



    END;



    RETURN;

END;
GO






-- SELECT *
-- FROM
-- (SELECT * FROM [dbo].[_Brk_eFlow_Ozelyaslandir]('120-42-0001', 'H') ) o
-- ORDER BY o.VADEGUNU;