From 026c40c0b3dba78abd5c038e979b99bc2d5824ae Mon Sep 17 00:00:00 2001 From: M_Kececi Date: Thu, 19 Feb 2026 02:00:49 +0300 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- svc/queries/statement_header_pdf.go | 179 +---------------- svc/queries/statement_pdf_common.go | 35 ++++ svc/queries/statements_pdf.go | 186 ++---------------- ...ig.js.temporary.compiled.1771442346013.mjs | 125 ++++++++++++ 4 files changed, 176 insertions(+), 349 deletions(-) create mode 100644 svc/queries/statement_pdf_common.go create mode 100644 ui/quasar.config.js.temporary.compiled.1771442346013.mjs diff --git a/svc/queries/statement_header_pdf.go b/svc/queries/statement_header_pdf.go index c05f7d0..119ff30 100644 --- a/svc/queries/statement_header_pdf.go +++ b/svc/queries/statement_header_pdf.go @@ -1,187 +1,18 @@ -// queries/statements_header_pdf.go package queries import ( - "bssapp-backend/db" "bssapp-backend/models" - "database/sql" - "fmt" "log" - "strings" ) -// küçük yardımcı: boşlukları temizle, her değeri ayrı tırnakla sar -func buildQuotedHList(vals []string) string { - var pp []string - for _, v := range vals { - v = strings.TrimSpace(v) - if v != "" { - pp = append(pp, fmt.Sprintf("'%s'", v)) // '1','2' gibi - } - } - if len(pp) == 0 { - return "" - } - return strings.Join(pp, ",") -} - -/* ============================ HEADER (Ana Tablo) ============================ */ - func GetStatementsHPDF(accountCode, startDate, endDate string, parislemler []string) ([]models.StatementHeader, []string, error) { - // Account normalize - if len(accountCode) == 7 && strings.ContainsAny(accountCode, "0123456789") { - accountCode = accountCode[:3] + " " + accountCode[3:] - } - - // IN list parse et - inList := buildQuotedHList(parislemler) - parislemCond := "''" - if inList != "" { - parislemCond = inList - } - - query := fmt.Sprintf(` -;WITH Opening AS ( - SELECT - 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 -), -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, - f.ATAtt01 AS Parislemler - FROM trCurrAccBook b - LEFT JOIN cdCurrAccDesc d - ON b.CurrAccCode = d.CurrAccCode AND d.LangCode = 'TR' - 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) - ) -)`, parislemCond, parislemCond) - query += fmt.Sprintf(` -SELECT - m.Cari_Kod, - m.Cari_Isim, - m.Belge_Tarihi, - m.Vade_Tarihi, - m.Belge_No, - m.Islem_Tipi, - m.Aciklama, - m.Para_Birimi, - m.Borc, - m.Alacak, - ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye, - m.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 AND d.LangCode = 'TR' -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;`, parislemCond) - - rows, err := db.MssqlDB.Query(query, - sql.Named("Carikod", "%"+accountCode+"%"), - sql.Named("StartDate", startDate), - sql.Named("EndDate", endDate), - ) + headers, err := getStatementsForPDF(accountCode, startDate, endDate, parislemler) if err != nil { - log.Printf("❌ Header sorgu hatası: %v", err) - return nil, nil, fmt.Errorf("header sorgu hatası: %v", err) + log.Printf("Header query error: %v", err) + return nil, nil, err } - defer rows.Close() - var headers []models.StatementHeader - var belgeNos []string - for rows.Next() { - var h models.StatementHeader - if err := rows.Scan( - &h.CariKod, &h.CariIsim, - &h.BelgeTarihi, &h.VadeTarihi, - &h.BelgeNo, &h.IslemTipi, - &h.Aciklama, &h.ParaBirimi, - &h.Borc, &h.Alacak, - &h.Bakiye, &h.Parislemler, - ); err != nil { - log.Printf("❌ Header scan hatası: %v", err) - return nil, nil, err - } - headers = append(headers, h) - if h.BelgeNo != "" { - belgeNos = append(belgeNos, h.BelgeNo) - } - } - log.Printf("✅ Header verileri alındı: %d kayıt, %d belge no", len(headers), len(belgeNos)) + belgeNos := collectBelgeNos(headers) + log.Printf("Header rows fetched: %d, belge no count: %d", len(headers), len(belgeNos)) return headers, belgeNos, nil } diff --git a/svc/queries/statement_pdf_common.go b/svc/queries/statement_pdf_common.go new file mode 100644 index 0000000..2d24b45 --- /dev/null +++ b/svc/queries/statement_pdf_common.go @@ -0,0 +1,35 @@ +package queries + +import "bssapp-backend/models" + +func getStatementsForPDF( + accountCode string, + startDate string, + endDate string, + parislemler []string, +) ([]models.StatementHeader, error) { + return GetStatements(models.StatementParams{ + AccountCode: accountCode, + StartDate: startDate, + EndDate: endDate, + LangCode: "TR", + Parislemler: parislemler, + }) +} + +func collectBelgeNos(headers []models.StatementHeader) []string { + seen := make(map[string]struct{}, len(headers)) + out := make([]string, 0, len(headers)) + for _, h := range headers { + no := h.BelgeNo + if no == "" || no == "Baslangic_devir" { + continue + } + if _, ok := seen[no]; ok { + continue + } + seen[no] = struct{}{} + out = append(out, no) + } + return out +} diff --git a/svc/queries/statements_pdf.go b/svc/queries/statements_pdf.go index a1a84f9..4dcd5e4 100644 --- a/svc/queries/statements_pdf.go +++ b/svc/queries/statements_pdf.go @@ -10,179 +10,15 @@ import ( "strings" ) -// küçük yardımcı: boşlukları temizle, her değeri ayrı tırnakla sar -func buildQuotedList(vals []string) string { - var pp []string - for _, v := range vals { - v = strings.TrimSpace(v) - if v != "" { - pp = append(pp, fmt.Sprintf("'%s'", v)) // '1','2' gibi - } - } - if len(pp) == 0 { - return "" - } - return strings.Join(pp, ",") -} - -/* ============================ HEADER (Ana Tablo) ============================ */ - func GetStatementsPDF(accountCode, startDate, endDate string, parislemler []string) ([]models.StatementHeader, []string, error) { - // Account normalize - if len(accountCode) == 7 && strings.ContainsAny(accountCode, "0123456789") { - accountCode = accountCode[:3] + " " + accountCode[3:] - } - - // IN list parse et - inList := buildQuotedList(parislemler) - parislemCond := "''" - if inList != "" { - parislemCond = inList - } - - query := fmt.Sprintf(` -;WITH Opening AS ( - SELECT - 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 -), -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, - f.ATAtt01 AS Parislemler - FROM trCurrAccBook b - LEFT JOIN cdCurrAccDesc d - ON b.CurrAccCode = d.CurrAccCode AND d.LangCode = 'TR' - 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) - ) -)`, parislemCond, parislemCond) - query += fmt.Sprintf(` -SELECT - m.Cari_Kod, - m.Cari_Isim, - m.Belge_Tarihi, - m.Vade_Tarihi, - m.Belge_No, - m.Islem_Tipi, - m.Aciklama, - m.Para_Birimi, - m.Borc, - m.Alacak, - ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye, - m.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 AND d.LangCode = 'TR' -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;`, parislemCond) - - rows, err := db.MssqlDB.Query(query, - sql.Named("Carikod", "%"+accountCode+"%"), - sql.Named("StartDate", startDate), - sql.Named("EndDate", endDate), - ) + headers, err := getStatementsForPDF(accountCode, startDate, endDate, parislemler) if err != nil { - log.Printf("❌ Header sorgu hatası: %v", err) - return nil, nil, fmt.Errorf("header sorgu hatası: %v", err) + log.Printf("Header query error: %v", err) + return nil, nil, err } - defer rows.Close() - var headers []models.StatementHeader - var belgeNos []string - for rows.Next() { - var h models.StatementHeader - if err := rows.Scan( - &h.CariKod, &h.CariIsim, - &h.BelgeTarihi, &h.VadeTarihi, - &h.BelgeNo, &h.IslemTipi, - &h.Aciklama, &h.ParaBirimi, - &h.Borc, &h.Alacak, - &h.Bakiye, &h.Parislemler, - ); err != nil { - log.Printf("❌ Header scan hatası: %v", err) - return nil, nil, err - } - headers = append(headers, h) - if h.BelgeNo != "" { - belgeNos = append(belgeNos, h.BelgeNo) - } - } - log.Printf("✅ Header verileri alındı: %d kayıt, %d belge no", len(headers), len(belgeNos)) + belgeNos := collectBelgeNos(headers) + log.Printf("Header rows fetched: %d, belge no count: %d", len(headers), len(belgeNos)) return headers, belgeNos, nil } @@ -191,7 +27,7 @@ ORDER BY Para_Birimi, Belge_Tarihi;`, parislemCond) func GetDetailsMapPDF(belgeNos []string, startDate, endDate string) (map[string][]models.StatementDetail, error) { result := make(map[string][]models.StatementDetail) if len(belgeNos) == 0 { - log.Println("⚠️ GetDetailsMapPDF: belge listesi boş") + log.Println("GetDetailsMapPDF: belge listesi bos") return result, nil } @@ -258,7 +94,7 @@ LEFT JOIN cdItemAttributeDesc FitDesc AND FitTbl.AttributeCode = FitDesc.AttributeCode AND FitTbl.ItemTypeCode = FitDesc.ItemTypeCode --- Kısa Karışım +-- Kisa Karisim LEFT JOIN prItemAttribute KisaKar ON a.ItemCode = KisaKar.ItemCode AND KisaKar.AttributeTypeCode = 41 LEFT JOIN cdItemAttributeDesc KisaKarDesc @@ -274,8 +110,8 @@ ORDER BY a.InvoiceNumber, a.ItemCode, a.ColorCode;`, inBelge) sql.Named("EndDate", endDate), ) if err != nil { - log.Printf("❌ Detay sorgu hatası: %v", err) - return nil, fmt.Errorf("detay sorgu hatası: %v", err) + log.Printf("Detail query error: %v", err) + return nil, fmt.Errorf("detay sorgu hatasi: %v", err) } defer rows.Close() @@ -295,11 +131,11 @@ ORDER BY a.InvoiceNumber, a.ItemCode, a.ColorCode;`, inBelge) &d.ToplamFiyat, &d.ToplamTutar, ); err != nil { - log.Printf("❌ Detay scan hatası: %v", err) + log.Printf("Detail scan error: %v", err) return nil, err } result[d.BelgeRefNumarasi] = append(result[d.BelgeRefNumarasi], d) } - log.Printf("✅ Detay verileri alındı: %d belge için detay var", len(result)) + log.Printf("Detail rows fetched for %d belge", len(result)) return result, nil } diff --git a/ui/quasar.config.js.temporary.compiled.1771442346013.mjs b/ui/quasar.config.js.temporary.compiled.1771442346013.mjs new file mode 100644 index 0000000..4a501bd --- /dev/null +++ b/ui/quasar.config.js.temporary.compiled.1771442346013.mjs @@ -0,0 +1,125 @@ +/* eslint-disable */ +/** + * THIS FILE IS GENERATED AUTOMATICALLY. + * 1. DO NOT edit this file directly as it won't do anything. + * 2. EDIT the original quasar.config file INSTEAD. + * 3. DO NOT git commit this file. It should be ignored. + * + * This file is still here because there was an error in + * the original quasar.config file and this allows you to + * investigate the Node.js stack error. + * + * After you fix the original file, this file will be + * deleted automatically. + **/ + + +// quasar.config.js +import { defineConfig } from "@quasar/app-webpack/wrappers"; +var quasar_config_default = defineConfig(() => { + const apiBaseUrl = (process.env.VITE_API_BASE_URL || "/api").trim(); + return { + /* ===================================================== + APP INFO + ===================================================== */ + productName: "Baggi BSS", + productDescription: "Baggi Tekstil Business Support System", + /* ===================================================== + BOOT FILES + ===================================================== */ + boot: ["dayjs"], + /* ===================================================== + GLOBAL CSS + ===================================================== */ + css: ["app.css"], + /* ===================================================== + ICONS / FONTS + ===================================================== */ + extras: [ + "roboto-font", + "material-icons" + ], + /* ===================================================== + BUILD (PRODUCTION) + ===================================================== */ + build: { + vueRouterMode: "hash", + env: { + VITE_API_BASE_URL: apiBaseUrl + }, + esbuildTarget: { + browser: ["es2022", "firefox115", "chrome115", "safari14"], + node: "node20" + }, + // Cache & performance + gzip: true, + preloadChunks: true + }, + /* ===================================================== + DEV SERVER (LOCAL) + ===================================================== */ + devServer: { + server: { type: "http" }, + port: 9e3, + open: true, + // DEV proxy (CORS'suz) + proxy: [ + { + context: ["/api"], + target: "http://localhost:8080", + changeOrigin: true, + secure: false + } + ] + }, + /* ===================================================== + QUASAR FRAMEWORK + ===================================================== */ + framework: { + config: { + notify: { + position: "top", + timeout: 2500 + } + }, + lang: "tr", + plugins: [ + "Loading", + "Dialog", + "Notify" + ] + }, + animations: [], + /* ===================================================== + SSR / PWA (DISABLED) + ===================================================== */ + ssr: { + prodPort: 3e3, + middlewares: ["render"], + pwa: false + }, + pwa: { + workboxMode: "GenerateSW" + }, + /* ===================================================== + MOBILE / DESKTOP + ===================================================== */ + capacitor: { + hideSplashscreen: true + }, + electron: { + preloadScripts: ["electron-preload"], + inspectPort: 5858, + bundler: "packager", + builder: { + appId: "baggisowtfaresystem" + } + }, + bex: { + extraScripts: [] + } + }; +}); +export { + quasar_config_default as default +};