Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,200 +0,0 @@
|
||||
package queries
|
||||
|
||||
import (
|
||||
"bssapp-backend/db"
|
||||
"bssapp-backend/internal/authz"
|
||||
"bssapp-backend/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func GetCustomerBalanceList(ctx context.Context, params models.CustomerBalanceListParams) ([]models.CustomerBalanceListRow, error) {
|
||||
// AuthZ bazli piyasa filtresi
|
||||
piyasaFilter := authz.BuildMSSQLPiyasaFilter(ctx, "D.Ozellik01")
|
||||
if strings.TrimSpace(piyasaFilter) == "" {
|
||||
piyasaFilter = "1=1"
|
||||
}
|
||||
|
||||
// Dinamik WHERE insa et
|
||||
where := make([]string, 0, 16)
|
||||
where = append(where, "D.Islem_Tarihi < DATEADD(DAY, 1, @SecilenTarih)")
|
||||
where = append(where, piyasaFilter)
|
||||
|
||||
if params.CariIlkGrup != "" {
|
||||
where = append(where, "D.Ozellik08 = @CariIlkGrup")
|
||||
}
|
||||
if params.Piyasa != "" {
|
||||
where = append(where, "D.Ozellik01 = @Piyasa")
|
||||
}
|
||||
if params.Temsilci != "" {
|
||||
where = append(where, "COALESCE(NULLIF(D.Ozellik02, ''), D.Ozellik09) = @Temsilci")
|
||||
}
|
||||
if params.RiskDurumu != "" {
|
||||
where = append(where, "D.Ozellik03 = @RiskDurumu")
|
||||
}
|
||||
if params.IslemTipi != "" {
|
||||
where = append(where, "D.PislemTipi = @IslemTipi")
|
||||
}
|
||||
if params.Ulke != "" {
|
||||
where = append(where, "D.Ozellik05 = @Ulke")
|
||||
}
|
||||
whereSQL := strings.Join(where, "\n AND ")
|
||||
cariSearchLike := "%" + strings.TrimSpace(params.CariSearch) + "%"
|
||||
outerWhere := "1=1"
|
||||
if strings.TrimSpace(params.CariSearch) != "" {
|
||||
outerWhere = `(LEFT(B.CariKodu, 8) COLLATE Turkish_100_CI_AI LIKE @CariSearchLike
|
||||
OR B.CariKodu COLLATE Turkish_100_CI_AI LIKE @CariSearchLike
|
||||
OR B.CariDetay COLLATE Turkish_100_CI_AI LIKE @CariSearchLike
|
||||
OR AC.ANA_CARI_ADI COLLATE Turkish_100_CI_AI LIKE @CariSearchLike)`
|
||||
}
|
||||
|
||||
const queryTemplate = `
|
||||
;WITH CTE_ANA_CARI AS (
|
||||
SELECT
|
||||
ANA_CARI_KODU = LEFT(CariKodu, 8),
|
||||
CariDetay,
|
||||
rn = ROW_NUMBER() OVER (
|
||||
PARTITION BY LEFT(CariKodu, 8)
|
||||
ORDER BY CariKodu
|
||||
)
|
||||
FROM dbo.MK_CARI_ILETISIM WITH (NOLOCK)
|
||||
),
|
||||
ANA_CARI AS (
|
||||
SELECT
|
||||
ANA_CARI_KODU,
|
||||
CariDetay AS ANA_CARI_ADI
|
||||
FROM CTE_ANA_CARI
|
||||
WHERE rn = 1
|
||||
),
|
||||
BASE AS (
|
||||
SELECT
|
||||
D.SirketKodu,
|
||||
D.SirketDetay,
|
||||
D.CariKodu,
|
||||
D.CariDetay,
|
||||
D.CariDoviz,
|
||||
D.Ozellik01,
|
||||
D.Ozellik02,
|
||||
D.Ozellik03,
|
||||
D.Ozellik05,
|
||||
D.Ozellik06,
|
||||
D.Ozellik07,
|
||||
D.Ozellik08,
|
||||
D.Ozellik09,
|
||||
D.PislemTipi,
|
||||
D.Bakiye,
|
||||
D.KurBakiye,
|
||||
D.Son_Guncel_Kur
|
||||
FROM dbo.DENEME02DENEME AS D WITH (NOLOCK)
|
||||
WHERE %s
|
||||
)
|
||||
SELECT
|
||||
B.Ozellik08 AS CARI_ILK_GRUP,
|
||||
B.Ozellik01 AS PIYASA,
|
||||
COALESCE(NULLIF(B.Ozellik02, ''), B.Ozellik09) AS Temsilci,
|
||||
LEFT(B.SirketDetay, 10) AS Sirket,
|
||||
LEFT(B.CariKodu, 8) AS ANA_CARI_KODU,
|
||||
AC.ANA_CARI_ADI,
|
||||
B.CariKodu,
|
||||
B.CariDetay,
|
||||
B.Ozellik03,
|
||||
B.Ozellik05,
|
||||
B.Ozellik06,
|
||||
B.Ozellik07,
|
||||
B.CariDoviz,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_2' THEN ISNULL(B.Bakiye, 0) ELSE 0 END), 0) AS Bakiye_1_2,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_2' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END), 0) AS TL_Bakiye_1_2,
|
||||
ISNULL(
|
||||
SUM(CASE WHEN B.PislemTipi = '1_2' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END) / NULLIF(MIN(B.Son_Guncel_Kur), 0),
|
||||
0
|
||||
) AS USD_Bakiye_1_2,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_3' THEN ISNULL(B.Bakiye, 0) ELSE 0 END), 0) AS Bakiye_1_3,
|
||||
ISNULL(SUM(CASE WHEN B.PislemTipi = '1_3' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END), 0) AS TL_Bakiye_1_3,
|
||||
ISNULL(
|
||||
SUM(CASE WHEN B.PislemTipi = '1_3' THEN ISNULL(B.KurBakiye, 0) ELSE 0 END) / NULLIF(MIN(B.Son_Guncel_Kur), 0),
|
||||
0
|
||||
) AS USD_Bakiye_1_3,
|
||||
CAST(NULL AS int) AS Hesap_Alinmayan_Gun,
|
||||
CAST(NULL AS varchar(32)) AS Kalan_Fatura_Ortalama_Vade_Tarihi
|
||||
FROM BASE AS B
|
||||
LEFT JOIN ANA_CARI AS AC
|
||||
ON AC.ANA_CARI_KODU = LEFT(B.CariKodu, 8)
|
||||
WHERE %s
|
||||
GROUP BY
|
||||
B.Ozellik08,
|
||||
B.Ozellik01,
|
||||
COALESCE(NULLIF(B.Ozellik02, ''), B.Ozellik09),
|
||||
LEFT(B.SirketDetay, 10),
|
||||
LEFT(B.CariKodu, 8),
|
||||
AC.ANA_CARI_ADI,
|
||||
B.CariKodu,
|
||||
B.CariDetay,
|
||||
B.Ozellik03,
|
||||
B.Ozellik05,
|
||||
B.Ozellik06,
|
||||
B.Ozellik07,
|
||||
B.CariDoviz
|
||||
ORDER BY
|
||||
LEFT(B.SirketDetay, 10),
|
||||
B.CariKodu
|
||||
OPTION (RECOMPILE);
|
||||
`
|
||||
query := fmt.Sprintf(queryTemplate, whereSQL, outerWhere)
|
||||
|
||||
rows, err := db.MssqlDB.QueryContext(
|
||||
ctx,
|
||||
query,
|
||||
sql.Named("SecilenTarih", params.SelectedDate),
|
||||
sql.Named("CariIlkGrup", params.CariIlkGrup),
|
||||
sql.Named("Piyasa", params.Piyasa),
|
||||
sql.Named("Temsilci", params.Temsilci),
|
||||
sql.Named("RiskDurumu", params.RiskDurumu),
|
||||
sql.Named("IslemTipi", params.IslemTipi),
|
||||
sql.Named("Ulke", params.Ulke),
|
||||
sql.Named("CariSearchLike", cariSearchLike),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("MSSQL query error: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
out := make([]models.CustomerBalanceListRow, 0, 512)
|
||||
|
||||
for rows.Next() {
|
||||
var r models.CustomerBalanceListRow
|
||||
if err := rows.Scan(
|
||||
&r.CariIlkGrup,
|
||||
&r.Piyasa,
|
||||
&r.Temsilci,
|
||||
&r.Sirket,
|
||||
&r.AnaCariKodu,
|
||||
&r.AnaCariAdi,
|
||||
&r.CariKodu,
|
||||
&r.CariDetay,
|
||||
&r.Ozellik03,
|
||||
&r.Ozellik05,
|
||||
&r.Ozellik06,
|
||||
&r.Ozellik07,
|
||||
&r.CariDoviz,
|
||||
&r.Bakiye12,
|
||||
&r.TLBakiye12,
|
||||
&r.USDBakiye12,
|
||||
&r.Bakiye13,
|
||||
&r.TLBakiye13,
|
||||
&r.USDBakiye13,
|
||||
&r.HesapAlinmayanGun,
|
||||
&r.KalanFaturaOrtalamaVadeTarihi,
|
||||
); err != nil {
|
||||
return nil, fmt.Errorf("row scan error: %w", err)
|
||||
}
|
||||
out = append(out, r)
|
||||
}
|
||||
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, fmt.Errorf("rows iteration error: %w", err)
|
||||
}
|
||||
|
||||
return out, nil
|
||||
}
|
||||
Reference in New Issue
Block a user