create FUNCTION dbo._Brk_Fnc_Mutabakat_CariHareket_AltCarilerListesi (@Tarih datetime, @Sifirlar int, @KacAy int, @SUBEKODU int, @MERKEZSUBEOLARAKCALIS int,  @CariKodu nvarchar(50))
RETURNS TABLE 
AS
RETURN 
(

--MASTER

SELECT
	cari.CARI_KOD AS CariKodu
	,dbo.TRK( SUBSTRING(cari.CARI_ISIM,0,40)) AS CariAdi
	,cari.VERGI_NUMARASI AS VergiNo
	,convert(varchar, cast((CASE
		WHEN (SUM(BORC) - SUM(ALACAK)) > 0 THEN SUM(BORC - ALACAK)
		ELSE 0
	END - CASE
		WHEN (SUM(ALACAK) - SUM(BORC)) > 0 THEN SUM(ALACAK - BORC)
		ELSE 0
	END) as money), 1)  AS Bakiye

	
FROM dbo.TBLCAHAR WITH(NOLOCK)
  LEFT JOIN dbo.TBLCASABITEK cariek WITH(NOLOCK) on cariek.CARI_KOD=@CariKodu
RIGHT JOIN dbo.TBLCASABIT cari WITH(NOLOCK)  ON cari.CARI_KOD= @CariKodu
 
WHERE TBLCAHAR.TARIH < @Tarih 
  AND TBLCAHAR.CARI_KOD=@CariKodu
--AND TBLCAHAR.SUBE_KODU = @SUBEKODU
AND (CASE
         WHEN @MERKEZSUBEOLARAKCALIS = 1 AND (SELECT COUNT(*) FROM dbo.TBLSUBELER WHERE SUBE_KODU <> -1 and SUBE_KODU <> 32767 and MERKEZMI='E' and SUBE_KODU=@SUBEKODU) > 0 THEN
             'TRUE'
         ELSE
          (CASE
            WHEN TBLCAHAR.SUBE_KODU = @SUBEKODU THEN
             'TRUE'
            ELSE
             'FALSE'
          END)
       END) = 'TRUE' 


GROUP BY	 cari.CARI_KOD
			,cari.CARI_ISIM
			,cari.VERGI_NUMARASI


HAVING 
--@0
CASE WHEN @Sifirlar=0 THEN 
	CASE WHEN (CONVERT(money, CASE WHEN (SUM(BORC) - SUM(ALACAK)) > 0 THEN SUM(BORC - ALACAK) ELSE 0 END - CASE WHEN (SUM(ALACAK) - SUM(BORC)) > 0 THEN SUM(ALACAK - BORC) ELSE 0 END) <> 0) THEN 1 ELSE 0 END

ELSE
	CASE WHEN @Sifirlar=2 THEN 
		CASE WHEN MONTH(MAX(dbo.TBLCAHAR.TARIH)) > (CASE WHEN MONTH(DATEADD(month, -@KacAy , @Tarih))=12 THEN 0 ELSE MONTH(DATEADD(month, -@KacAy , @Tarih)) END) THEN 1 ELSE 0 END

	ELSE 
		CASE WHEN @Sifirlar=1 THEN  1 ELSE 0 END

	END


END=1

--MASTER END
UNION ALL
SELECT
	cari.CARI_KOD AS CariKodu
	,dbo.TRK( SUBSTRING(cari.CARI_ISIM,0,40)) AS CariAdi
	,cari.VERGI_NUMARASI AS VergiNo
	,convert(varchar, cast((CASE
		WHEN (SUM(BORC) - SUM(ALACAK)) > 0 THEN SUM(BORC - ALACAK)
		ELSE 0
	END - CASE
		WHEN (SUM(ALACAK) - SUM(BORC)) > 0 THEN SUM(ALACAK - BORC)
		ELSE 0
	END) as money), 1) AS Bakiye

	
FROM dbo.TBLCAHAR WITH(NOLOCK)
  LEFT JOIN dbo.TBLCASABITEK cariek WITH(NOLOCK) on cariek.S_YEDEK2=@CariKodu
RIGHT JOIN dbo.TBLCASABIT cari WITH(NOLOCK)  ON cari.CARI_KOD= cariek.CARI_KOD

WHERE TBLCAHAR.TARIH < @Tarih 
  AND dbo.TBLCAHAR.CARI_KOD = cariek.CARI_KOD
--AND TBLCAHAR.SUBE_KODU = @SUBEKODU
AND (CASE
         WHEN @MERKEZSUBEOLARAKCALIS = 1 AND (SELECT COUNT(*) FROM dbo.TBLSUBELER WHERE SUBE_KODU <> -1 and SUBE_KODU <> 32767 and MERKEZMI='E' and SUBE_KODU=@SUBEKODU) > 0 THEN
             'TRUE'
         ELSE
          (CASE
            WHEN TBLCAHAR.SUBE_KODU = @SUBEKODU THEN
             'TRUE'
            ELSE
             'FALSE'
          END)
       END) = 'TRUE' 


GROUP BY	 cari.CARI_KOD
			,cari.CARI_ISIM
			,cari.VERGI_NUMARASI


HAVING 
--@0
CASE WHEN @Sifirlar=0 THEN 
	CASE WHEN (CONVERT(money, CASE WHEN (SUM(BORC) - SUM(ALACAK)) > 0 THEN SUM(BORC - ALACAK) ELSE 0 END - CASE WHEN (SUM(ALACAK) - SUM(BORC)) > 0 THEN SUM(ALACAK - BORC) ELSE 0 END) <> 0) THEN 1 ELSE 0 END

ELSE
	CASE WHEN @Sifirlar=2 THEN 
		CASE WHEN MONTH(MAX(dbo.TBLCAHAR.TARIH)) > (CASE WHEN MONTH(DATEADD(month, -@KacAy , @Tarih))=12 THEN 0 ELSE MONTH(DATEADD(month, -@KacAy , @Tarih)) END) THEN 1 ELSE 0 END

	ELSE 
		CASE WHEN @Sifirlar=1 THEN  1 ELSE 0 END

	END


END=1


		 


)