package queries import ( "context" "fmt" "log" "strings" "bssapp-backend/db" "bssapp-backend/internal/authz" "bssapp-backend/models" ) func GetAccounts(ctx context.Context) ([]models.Account, error) { piyasaFilter := authz.BuildMSSQLPiyasaFilter( ctx, "CASE WHEN b.CurrAccTypeCode = 1 THEN vp.VendorAtt01 ELSE f2.CustomerAtt01 END", ) if strings.TrimSpace(piyasaFilter) == "" { piyasaFilter = "1=1" } query := fmt.Sprintf(` ;WITH VendorPiyasa AS ( SELECT Cari8 = LEFT(P.CurrAccCode, 8), VendorAtt01 = MAX(P.VendorAtt01) FROM ( SELECT CurrAccTypeCode, CurrAccCode, VendorAtt01 = MAX(ISNULL([1], '')) FROM ( SELECT c.CurrAccTypeCode, c.CurrAccCode, a.AttributeTypeCode, a.AttributeCode FROM cdCurrAcc c WITH (NOLOCK) LEFT JOIN prCurrAccAttribute a WITH (NOLOCK) ON a.CurrAccTypeCode = c.CurrAccTypeCode AND a.CurrAccCode = c.CurrAccCode WHERE c.CurrAccTypeCode = 1 ) d PIVOT ( MAX(AttributeCode) FOR AttributeTypeCode IN ([1]) ) pvt GROUP BY CurrAccTypeCode, CurrAccCode ) P GROUP BY LEFT(P.CurrAccCode, 8) ) SELECT x.AccountCode, MAX(x.AccountName) AS AccountName FROM ( SELECT LEFT(b.CurrAccCode, 8) AS AccountCode, COALESCE(d.CurrAccDescription, '') AS AccountName FROM trCurrAccBook b LEFT JOIN cdCurrAccDesc d ON d.CurrAccTypeCode = b.CurrAccTypeCode AND d.CurrAccCode = b.CurrAccCode AND d.LangCode = 'TR' LEFT JOIN CustomerAttributesFilter f2 ON f2.CurrAccTypeCode = b.CurrAccTypeCode AND f2.CurrAccCode = b.CurrAccCode LEFT JOIN VendorPiyasa vp ON vp.Cari8 = LEFT(b.CurrAccCode, 8) WHERE b.CurrAccTypeCode IN (1,3) AND %s ) x GROUP BY x.AccountCode ORDER BY x.AccountCode `, piyasaFilter) log.Println("🔎 ACCOUNT PIYASA FILTER =", piyasaFilter) log.Println("🔎 ACCOUNT QUERY =", query) rows, err := db.MssqlDB.Query(query) if err != nil { return nil, fmt.Errorf("MSSQL query error: %w", err) } defer rows.Close() var accounts []models.Account for rows.Next() { var acc models.Account if err := rows.Scan( &acc.AccountCode, &acc.AccountName, ); err != nil { return nil, err } if len(acc.AccountCode) >= 4 { acc.DisplayCode = strings.TrimSpace(acc.AccountCode[:3] + " " + acc.AccountCode[3:]) } else { acc.DisplayCode = acc.AccountCode } accounts = append(accounts, acc) } return accounts, rows.Err() }