diff --git a/svc/queries/statement_header.go b/svc/queries/statement_header.go index 2dbea7e..41d1d79 100644 --- a/svc/queries/statement_header.go +++ b/svc/queries/statement_header.go @@ -26,58 +26,82 @@ func GetStatements(params models.StatementParams) ([]models.StatementHeader, err } query := fmt.Sprintf(` + ;WITH Opening AS ( SELECT - b.CurrAccCode AS Cari_Kod, + b.CurrAccCode AS Cari_Kod, b.DocCurrencyCode AS Para_Birimi, SUM(c.Debit - c.Credit) AS Devir_Bakiyesi + FROM trCurrAccBook b + LEFT JOIN trCurrAccBookCurrency c ON c.CurrAccBookID = b.CurrAccBookID AND c.CurrencyCode = b.DocCurrencyCode + WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%' AND b.DocumentDate < @startdate + AND EXISTS ( SELECT 1 FROM CurrAccBookATAttributesFilter f2 WHERE f2.CurrAccBookID = b.CurrAccBookID AND f2.ATAtt01 IN (%s) ) - GROUP BY b.CurrAccCode, b.DocCurrencyCode + + GROUP BY + b.CurrAccCode, + b.DocCurrencyCode ), + Movements AS ( SELECT b.CurrAccCode AS Cari_Kod, d.CurrAccDescription AS Cari_Isim, + CONVERT(varchar(10), b.DocumentDate, 23) AS Belge_Tarihi, CONVERT(varchar(10), b.DueDate, 23) AS Vade_Tarihi, + b.RefNumber AS Belge_No, b.BaseApplicationCode AS Islem_Tipi, b.LineDescription AS Aciklama, + b.DocCurrencyCode AS Para_Birimi, + c.Debit AS Borc, c.Credit AS Alacak, + SUM(c.Debit - c.Credit) - OVER (PARTITION BY b.CurrAccCode, c.CurrencyCode - ORDER BY b.DocumentDate, b.CurrAccBookID) AS Hareket_Bakiyesi, + OVER ( + PARTITION BY b.CurrAccCode, c.CurrencyCode + ORDER BY b.DocumentDate, b.CurrAccBookID + ) AS Hareket_Bakiyesi, + f.ATAtt01 AS Parislemtipi + FROM trCurrAccBook b + LEFT JOIN cdCurrAccDesc d ON b.CurrAccCode = d.CurrAccCode + LEFT JOIN trCurrAccBookCurrency c ON b.CurrAccBookID = c.CurrAccBookID AND b.DocCurrencyCode = c.CurrencyCode + LEFT JOIN CurrAccBookATAttributesFilter f ON b.CurrAccBookID = f.CurrAccBookID + WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%' AND b.DocumentDate BETWEEN @startdate AND @enddate + AND EXISTS ( SELECT 1 FROM CurrAccBookATAttributesFilter f2 WHERE f2.CurrAccBookID = b.CurrAccBookID AND f2.ATAtt01 IN (%s) ) -) +) + SELECT m.Cari_Kod, m.Cari_Isim, @@ -87,54 +111,66 @@ SELECT m.Islem_Tipi, m.Aciklama, m.Para_Birimi, + m.Borc, m.Alacak, + ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye, + m.Parislemtipi AS Parislemler + FROM Movements m + LEFT JOIN Opening o ON o.Cari_Kod = m.Cari_Kod AND o.Para_Birimi = m.Para_Birimi + UNION ALL --- Devir satırı -SELECT - @Carikod AS Cari_Kod, - MAX(d.CurrAccDescription) AS Cari_Isim, - CONVERT(varchar(10), @startdate, 23) AS Belge_Tarihi, - CONVERT(varchar(10), @startdate, 23) AS Vade_Tarihi, - 'Baslangic_devir' AS Belge_No, - 'Devir' AS Islem_Tipi, - 'Devir Bakiyesi' AS Aciklama, - b.DocCurrencyCode AS Para_Birimi, - SUM(c.Debit) AS Borc, - SUM(c.Credit) AS Alacak, - SUM(c.Debit) - SUM(c.Credit) AS Bakiye, - ( - SELECT STRING_AGG(x.ATAtt01, ',') - FROM ( - SELECT DISTINCT f2.ATAtt01 - FROM CurrAccBookATAttributesFilter f2 - INNER JOIN trCurrAccBook bb - ON f2.CurrAccBookID = bb.CurrAccBookID - WHERE bb.CurrAccCode LIKE '%%' + @Carikod + '%%' - AND bb.DocumentDate < @startdate - AND f2.ATAtt01 IN (%s) - ) x - ) AS Parislemler -FROM trCurrAccBook b -LEFT JOIN cdCurrAccDesc d - ON b.CurrAccCode = d.CurrAccCode -LEFT JOIN trCurrAccBookCurrency c - ON b.CurrAccBookID = c.CurrAccBookID - AND b.DocCurrencyCode = c.CurrencyCode -WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%' - AND b.DocumentDate < @startdate -GROUP BY b.DocCurrencyCode -ORDER BY Para_Birimi, Belge_Tarihi; -`, parislemFilter, parislemFilter, parislemFilter) +/* ✅ Devir satırı sadece Opening’den */ +SELECT + o.Cari_Kod, + d.CurrAccDescription, + + CONVERT(varchar(10), @startdate, 23), + CONVERT(varchar(10), @startdate, 23), + + 'Baslangic_devir', + 'Devir', + 'Devir Bakiyesi', + + o.Para_Birimi, + + CASE + WHEN o.Devir_Bakiyesi >= 0 THEN o.Devir_Bakiyesi + ELSE 0 + END, + + CASE + WHEN o.Devir_Bakiyesi < 0 THEN ABS(o.Devir_Bakiyesi) + ELSE 0 + END, + + o.Devir_Bakiyesi, + + '%s' + +FROM Opening o + +LEFT JOIN cdCurrAccDesc d + ON d.CurrAccCode = o.Cari_Kod + + +ORDER BY + Para_Birimi, + Belge_Tarihi; +`, + parislemFilter, + parislemFilter, + parislemFilter, + ) rows, err := db.MssqlDB.Query(query, sql.Named("startdate", params.StartDate), diff --git a/svc/queries/statements_detail.go b/svc/queries/statements_detail.go index 67b27f9..880a480 100644 --- a/svc/queries/statements_detail.go +++ b/svc/queries/statements_detail.go @@ -31,9 +31,17 @@ SELECT COALESCE(MAX(KisaKarDesc.AttributeDescription), '') AS Icerik, a.ItemCode AS Urun_Kodu, a.ColorCode AS Urun_Rengi, - SUM(a.Qty1) AS Toplam_Adet, - SUM(ABS(a.Doc_Price)) AS Toplam_Fiyat, - CAST(SUM(a.Qty1 * ABS(a.Doc_Price)) AS numeric(18,2)) AS Toplam_Tutar + SUM(a.Qty1) AS Toplam_Adet, + +CAST( + SUM(a.Qty1 * ABS(a.Doc_Price)) + / NULLIF(SUM(a.Qty1),0) +AS numeric(18,4)) AS Doviz_Fiyat, + +CAST( + SUM(a.Qty1 * ABS(a.Doc_Price)) +AS numeric(18,2)) AS Toplam_Tutar + FROM AllInvoicesWithAttributes a LEFT JOIN prItemAttribute AnaGrup ON a.ItemCode = AnaGrup.ItemCode AND AnaGrup.AttributeTypeCode = 1 diff --git a/svc/routes/login.go b/svc/routes/login.go index e05530c..dacf33e 100644 --- a/svc/routes/login.go +++ b/svc/routes/login.go @@ -3,6 +3,7 @@ package routes import ( "bssapp-backend/auth" "bssapp-backend/internal/auditlog" + "bssapp-backend/internal/security" "bssapp-backend/models" "bssapp-backend/queries" "bssapp-backend/repository" @@ -208,6 +209,22 @@ func writeLoginResponse(w http.ResponseWriter, db *sql.DB, user *models.MkUser) return } + refreshPlain, refreshHash, err := security.GenerateRefreshToken() + if err != nil { + http.Error(w, "Refresh token üretilemedi", http.StatusInternalServerError) + return + } + + refreshExp := time.Now().Add(14 * 24 * time.Hour) + rtRepo := repository.NewRefreshTokenRepository(db) + if err := rtRepo.IssueRefreshToken(user.ID, refreshHash, refreshExp); err != nil { + log.Printf("refresh token store failed user=%d err=%v", user.ID, err) + http.Error(w, "Session başlatılamadı", http.StatusInternalServerError) + return + } + + setRefreshCookie(w, refreshPlain, refreshExp) + _ = json.NewEncoder(w).Encode(map[string]any{ "token": token, "user": map[string]any{ diff --git a/ui/dist/spa/index.html b/ui/dist/spa/index.html index ccd7b17..1174c68 100644 --- a/ui/dist/spa/index.html +++ b/ui/dist/spa/index.html @@ -1 +1 @@ -