diff --git a/svc/.env.local b/svc/.env.local index e04edc3..8a42090 100644 --- a/svc/.env.local +++ b/svc/.env.local @@ -27,7 +27,8 @@ MSSQL_CONN=sqlserver://sa:Gil_0150@100.127.186.137:1433?database=BAGGI_V3&encryp # =============================== # PDF # =============================== -PDF_FONT_DIR=/opt/bssapp/svc/fonts +PDF_FONT_DIR=D:\\baggitekstilas\\software projects\\bssapp\\bssapp\\svc\\fonts API_HOST=0.0.0.0 API_PORT=8080 + diff --git a/svc/queries/order_write.go b/svc/queries/order_write.go index be73c16..680d08a 100644 --- a/svc/queries/order_write.go +++ b/svc/queries/order_write.go @@ -745,6 +745,16 @@ VALUES ( ` fmt.Println("🟪 HEADER INSERT ÇALIŞIYOR...") + fmt.Printf( + "🧾 HEADER DEBUG | CurrAccType=%v CurrAcc=%q Office=%q StoreType=%v Store=%q OrdererOffice=%q OrdererStore=%q\n", + nullableInt16(header.CurrAccTypeCode, 0).Int16, + safeNS(header.CurrAccCode), + safeNS(header.OfficeCode), + nullableInt16(header.StoreTypeCode, 0).Int16, + safeNS(header.StoreCode), + safeNS(header.OrdererOfficeCode), + safeNS(header.OrdererStoreCode), + ) // ✅ exRate burada gerçekten kullanılıyor (ExchangeRate parametresi) headerParams := []any{ @@ -785,7 +795,7 @@ VALUES ( nullableInt32ToInt16(header.CompanyCode, 1), nullableString(header.OfficeCode, "101"), nullableInt16(header.StoreTypeCode, 5), - nullableString(header.StoreCode, ""), + nullableString(models.NullString{}, ""), nullableInt16(header.POSTerminalID, 0), nullableString(header.WarehouseCode, "1-0-12"), @@ -793,7 +803,7 @@ VALUES ( nullableInt32ToInt16(header.OrdererCompanyCode, 1), nullableString(header.OrdererOfficeCode, "101"), - nullableString(header.OrdererStoreCode, ""), + nullableString(models.NullString{}, ""), nullableString(header.GLTypeCode, ""), nullableString(header.DocCurrencyCode, "TRY"), diff --git a/svc/routes/orders.go b/svc/routes/orders.go index 3e17214..efc3b58 100644 --- a/svc/routes/orders.go +++ b/svc/routes/orders.go @@ -105,7 +105,7 @@ func CreateOrderHandler(pg *sql.DB, mssql *sql.DB) http.HandlerFunc { w.Header().Set("Content-Type", "application/json; charset=utf-8") // -------------------------------------------------- - // JWT CLAIMS + // JWT CLAIMS (TEK KAYNAK) // -------------------------------------------------- claims, ok := auth.GetClaimsFromContext(r.Context()) if !ok || claims == nil { @@ -114,27 +114,43 @@ func CreateOrderHandler(pg *sql.DB, mssql *sql.DB) http.HandlerFunc { } user := utils.UserFromClaims(claims) - - if !ok || claims == nil { - http.Error(w, "Yetkisiz", http.StatusUnauthorized) - return - } - - user = utils.UserFromClaims(claims) if user == nil { - http.Error(w, "Yetkisiz", http.StatusUnauthorized) + http.Error(w, "Kullanici dogrulanamadi", http.StatusUnauthorized) return } + fmt.Printf("[CREATE] hit user=%s role=%s\n", user.Username, user.RoleCode) + var payload struct { Header models.OrderHeader `json:"header"` Lines []models.OrderDetail `json:"lines"` } if err := json.NewDecoder(r.Body).Decode(&payload); err != nil { - http.Error(w, "Geçersiz JSON", http.StatusBadRequest) + fmt.Printf("[CREATE] decode error: %v\n", err) + http.Error(w, "Gecersiz JSON", http.StatusBadRequest) return } + fmt.Printf( + "[CREATE] payload header_id=%s curr_acc=%s office=%s store=%s orderer_office=%s orderer_store=%s lines=%d\n", + payload.Header.OrderHeaderID, + payload.Header.CurrAccCode.String, + payload.Header.OfficeCode.String, + payload.Header.StoreCode.String, + payload.Header.OrdererOfficeCode.String, + payload.Header.OrdererStoreCode.String, + len(payload.Lines), + ) + fmt.Printf( + "🧾 CREATE PAYLOAD | header_id=%s curr_acc=%s office=%s store=%s orderer_office=%s orderer_store=%s lines=%d\n", + payload.Header.OrderHeaderID, + payload.Header.CurrAccCode.String, + payload.Header.OfficeCode.String, + payload.Header.StoreCode.String, + payload.Header.OrdererOfficeCode.String, + payload.Header.OrdererStoreCode.String, + len(payload.Lines), + ) // -------------------------------------------------- // INSERT @@ -142,7 +158,7 @@ func CreateOrderHandler(pg *sql.DB, mssql *sql.DB) http.HandlerFunc { newID, lineResults, err := queries.InsertOrder( payload.Header, payload.Lines, - user, // ✅ *models.User + user, // *models.User ) if err != nil { @@ -155,7 +171,14 @@ func CreateOrderHandler(pg *sql.DB, mssql *sql.DB) http.HandlerFunc { return } - http.Error(w, err.Error(), http.StatusInternalServerError) + // SYSTEM ERROR + utils.LogError("ORDER_CREATE", err) + w.WriteHeader(http.StatusInternalServerError) + _ = json.NewEncoder(w).Encode(map[string]any{ + "code": "ORDER_CREATE_FAILED", + "message": "Siparis kaydedilirken beklenmeyen bir hata olustu.", + "detail": err.Error(), + }) return } diff --git a/ui/quasar.config.js.temporary.compiled.1771597158912.mjs b/ui/quasar.config.js.temporary.compiled.1771666977328.mjs similarity index 100% rename from ui/quasar.config.js.temporary.compiled.1771597158912.mjs rename to ui/quasar.config.js.temporary.compiled.1771666977328.mjs diff --git a/ui/src/stores/orderentryStore.js b/ui/src/stores/orderentryStore.js index cbd033a..871a7c3 100644 --- a/ui/src/stores/orderentryStore.js +++ b/ui/src/stores/orderentryStore.js @@ -2611,7 +2611,33 @@ export const useOrderEntryStore = defineStore('orderentry', { 'color:#c9a873;font-weight:bold' ) + // Ensure backend string fields are sent as strings. + if (header) { + header.OfficeCode = header.OfficeCode != null ? String(header.OfficeCode) : header.OfficeCode + header.StoreCode = header.StoreCode != null ? String(header.StoreCode) : header.StoreCode + header.OrdererOfficeCode = header.OrdererOfficeCode != null ? String(header.OrdererOfficeCode) : header.OrdererOfficeCode + header.OrdererStoreCode = header.OrdererStoreCode != null ? String(header.OrdererStoreCode) : header.OrdererStoreCode + // PaymentTerm must be numeric (int16) or null for backend. + if (header.PaymentTerm === '' || header.PaymentTerm == null) { + header.PaymentTerm = null + } else if (typeof header.PaymentTerm === 'string') { + const n = Number(header.PaymentTerm) + header.PaymentTerm = Number.isNaN(n) ? null : n + } + } console.log('HEADER:', JSON.parse(JSON.stringify(header))) + console.log('HEADER KEYS:', { + OrderHeaderID: header?.OrderHeaderID, + CurrAccTypeCode: header?.CurrAccTypeCode, + CurrAccCode: header?.CurrAccCode, + OfficeCode: header?.OfficeCode, + StoreTypeCode: header?.StoreTypeCode, + StoreCode: header?.StoreCode, + OrdererOfficeCode: header?.OrdererOfficeCode, + OrdererStoreCode: header?.OrdererStoreCode, + PaymentTerm: header?.PaymentTerm, + DocCurrencyCode: header?.DocCurrencyCode + }) lines.forEach((l, i) => { console.log(`LINE[${i}]`, {