ilk
This commit is contained in:
280
svc/queries/order_get.go
Normal file
280
svc/queries/order_get.go
Normal file
@@ -0,0 +1,280 @@
|
||||
package queries
|
||||
|
||||
import (
|
||||
"bssapp-backend/db"
|
||||
"bssapp-backend/models"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// GetOrderByID — Sipariş başlığı (header) ve satırlarını (lines) getirir.
|
||||
func GetOrderByID(orderID string) (*models.OrderHeader, []models.OrderDetail, error) {
|
||||
conn := db.GetDB()
|
||||
|
||||
logger.Printf("🧾 [GetOrderByID] begin • id=%s", orderID)
|
||||
|
||||
// =====================================================
|
||||
// HEADER (Cari adı join'li)
|
||||
// =====================================================
|
||||
var header models.OrderHeader
|
||||
qHeader := `
|
||||
SELECT
|
||||
CAST(h.OrderHeaderID AS varchar(36)) AS OrderHeaderID,
|
||||
h.OrderTypeCode,
|
||||
h.ProcessCode,
|
||||
h.OrderNumber,
|
||||
h.IsCancelOrder,
|
||||
h.OrderDate,
|
||||
h.OrderTime,
|
||||
h.DocumentNumber,
|
||||
h.PaymentTerm,
|
||||
h.AverageDueDate,
|
||||
h.Description,
|
||||
h.InternalDescription,
|
||||
h.CurrAccTypeCode,
|
||||
h.CurrAccCode,
|
||||
d.CurrAccDescription,
|
||||
h.SubCurrAccID,
|
||||
h.ContactID,
|
||||
h.ShipmentMethodCode,
|
||||
h.ShippingPostalAddressID,
|
||||
h.BillingPostalAddressID,
|
||||
h.GuarantorContactID,
|
||||
h.GuarantorContactID2,
|
||||
h.RoundsmanCode,
|
||||
h.DeliveryCompanyCode,
|
||||
h.TaxTypeCode,
|
||||
h.WithHoldingTaxTypeCode,
|
||||
h.DOVCode,
|
||||
h.TaxExemptionCode,
|
||||
h.CompanyCode,
|
||||
h.OfficeCode,
|
||||
h.StoreTypeCode,
|
||||
h.StoreCode,
|
||||
h.POSTerminalID,
|
||||
h.WarehouseCode,
|
||||
h.ToWarehouseCode,
|
||||
h.OrdererCompanyCode,
|
||||
h.OrdererOfficeCode,
|
||||
h.OrdererStoreCode,
|
||||
h.GLTypeCode,
|
||||
h.DocCurrencyCode,
|
||||
h.LocalCurrencyCode,
|
||||
h.ExchangeRate,
|
||||
h.TDisRate1,
|
||||
h.TDisRate2,
|
||||
h.TDisRate3,
|
||||
h.TDisRate4,
|
||||
h.TDisRate5,
|
||||
h.DiscountReasonCode,
|
||||
h.SurplusOrderQtyToleranceRate,
|
||||
h.ImportFileNumber,
|
||||
h.ExportFileNumber,
|
||||
h.IncotermCode1,
|
||||
h.IncotermCode2,
|
||||
h.LettersOfCreditNumber,
|
||||
h.PaymentMethodCode,
|
||||
h.IsInclutedVat,
|
||||
h.IsCreditSale,
|
||||
h.IsCreditableConfirmed,
|
||||
h.CreditableConfirmedUser,
|
||||
h.CreditableConfirmedDate,
|
||||
h.IsSalesViaInternet,
|
||||
h.IsSuspended,
|
||||
h.IsCompleted,
|
||||
h.IsPrinted,
|
||||
h.IsLocked,
|
||||
h.UserLocked,
|
||||
h.IsClosed,
|
||||
h.ApplicationCode,
|
||||
h.ApplicationID,
|
||||
h.CreatedUserName,
|
||||
h.CreatedDate,
|
||||
h.LastUpdatedUserName,
|
||||
h.LastUpdatedDate,
|
||||
h.IsProposalBased
|
||||
FROM BAGGI_V3.dbo.trOrderHeader AS h
|
||||
LEFT JOIN BAGGI_V3.dbo.cdCurrAccDesc AS d
|
||||
ON h.CurrAccCode = d.CurrAccCode
|
||||
WHERE h.OrderHeaderID = @p1;
|
||||
`
|
||||
|
||||
err := conn.QueryRow(qHeader, orderID).Scan(
|
||||
&header.OrderHeaderID,
|
||||
&header.OrderTypeCode,
|
||||
&header.ProcessCode,
|
||||
&header.OrderNumber,
|
||||
&header.IsCancelOrder,
|
||||
&header.OrderDate,
|
||||
&header.OrderTime,
|
||||
&header.DocumentNumber,
|
||||
&header.PaymentTerm,
|
||||
&header.AverageDueDate,
|
||||
&header.Description,
|
||||
&header.InternalDescription,
|
||||
&header.CurrAccTypeCode,
|
||||
&header.CurrAccCode,
|
||||
&header.CurrAccDescription,
|
||||
&header.SubCurrAccID,
|
||||
&header.ContactID,
|
||||
&header.ShipmentMethodCode,
|
||||
&header.ShippingPostalAddressID,
|
||||
&header.BillingPostalAddressID,
|
||||
&header.GuarantorContactID,
|
||||
&header.GuarantorContactID2,
|
||||
&header.RoundsmanCode,
|
||||
&header.DeliveryCompanyCode,
|
||||
&header.TaxTypeCode,
|
||||
&header.WithHoldingTaxTypeCode,
|
||||
&header.DOVCode,
|
||||
&header.TaxExemptionCode,
|
||||
&header.CompanyCode,
|
||||
&header.OfficeCode,
|
||||
&header.StoreTypeCode,
|
||||
&header.StoreCode,
|
||||
&header.POSTerminalID,
|
||||
&header.WarehouseCode,
|
||||
&header.ToWarehouseCode,
|
||||
&header.OrdererCompanyCode,
|
||||
&header.OrdererOfficeCode,
|
||||
&header.OrdererStoreCode,
|
||||
&header.GLTypeCode,
|
||||
&header.DocCurrencyCode,
|
||||
&header.LocalCurrencyCode,
|
||||
&header.ExchangeRate,
|
||||
&header.TDisRate1,
|
||||
&header.TDisRate2,
|
||||
&header.TDisRate3,
|
||||
&header.TDisRate4,
|
||||
&header.TDisRate5,
|
||||
&header.DiscountReasonCode,
|
||||
&header.SurplusOrderQtyToleranceRate,
|
||||
&header.ImportFileNumber,
|
||||
&header.ExportFileNumber,
|
||||
&header.IncotermCode1,
|
||||
&header.IncotermCode2,
|
||||
&header.LettersOfCreditNumber,
|
||||
&header.PaymentMethodCode,
|
||||
&header.IsInclutedVat,
|
||||
&header.IsCreditSale,
|
||||
&header.IsCreditableConfirmed,
|
||||
&header.CreditableConfirmedUser,
|
||||
&header.CreditableConfirmedDate,
|
||||
&header.IsSalesViaInternet,
|
||||
&header.IsSuspended,
|
||||
&header.IsCompleted,
|
||||
&header.IsPrinted,
|
||||
&header.IsLocked,
|
||||
&header.UserLocked,
|
||||
&header.IsClosed,
|
||||
&header.ApplicationCode,
|
||||
&header.ApplicationID,
|
||||
&header.CreatedUserName,
|
||||
&header.CreatedDate,
|
||||
&header.LastUpdatedUserName,
|
||||
&header.LastUpdatedDate,
|
||||
&header.IsProposalBased,
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
logger.Printf("⚠️ [GetOrderByID] sipariş bulunamadı: %s", orderID)
|
||||
return nil, nil, sql.ErrNoRows
|
||||
}
|
||||
logger.Printf("❌ [GetOrderByID] header sorgu hatası: %v", err)
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
logger.Printf("✅ [GetOrderByID] header loaded • orderNo=%v currAcc=%v",
|
||||
header.OrderNumber, header.CurrAccCode.String)
|
||||
|
||||
// =====================================================
|
||||
// LINES
|
||||
// =====================================================
|
||||
qLines := `
|
||||
SELECT
|
||||
CAST(L.OrderLineID AS varchar(36)) AS OrderLineID,
|
||||
L.SortOrder,
|
||||
L.ItemTypeCode,
|
||||
L.ItemCode,
|
||||
L.ColorCode,
|
||||
L.ItemDim1Code,
|
||||
L.ItemDim2Code,
|
||||
L.ItemDim3Code,
|
||||
L.Qty1,
|
||||
L.Qty2,
|
||||
L.Price,
|
||||
L.VatRate,
|
||||
L.PCTRate,
|
||||
L.DocCurrencyCode,
|
||||
L.DeliveryDate,
|
||||
L.PlannedDateOfLading,
|
||||
L.LineDescription,
|
||||
L.IsClosed,
|
||||
L.CreatedUserName,
|
||||
L.CreatedDate,
|
||||
L.LastUpdatedUserName,
|
||||
L.LastUpdatedDate,
|
||||
P.ProductAtt42Desc AS UrunIlkGrubu,
|
||||
P.ProductAtt01Desc AS UrunAnaGrubu,
|
||||
P.ProductAtt02Desc AS UrunAltGrubu,
|
||||
P.ProductAtt38Desc AS Fit1,
|
||||
P.ProductAtt39Desc AS Fit2
|
||||
FROM BAGGI_V3.dbo.trOrderLine AS L
|
||||
LEFT JOIN ProductFilterWithDescription('TR') AS P
|
||||
ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode))
|
||||
WHERE L.OrderHeaderID = @p1
|
||||
ORDER BY L.SortOrder ASC;
|
||||
`
|
||||
|
||||
rows, err := conn.Query(qLines, orderID)
|
||||
if err != nil {
|
||||
logger.Printf("❌ [GetOrderByID] line sorgu hatası: %v", err)
|
||||
return &header, nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
lines := make([]models.OrderDetail, 0, 32)
|
||||
for rows.Next() {
|
||||
var ln models.OrderDetail
|
||||
if err := rows.Scan(
|
||||
&ln.OrderLineID,
|
||||
&ln.SortOrder,
|
||||
&ln.ItemTypeCode,
|
||||
&ln.ItemCode,
|
||||
&ln.ColorCode,
|
||||
&ln.ItemDim1Code,
|
||||
&ln.ItemDim2Code,
|
||||
&ln.ItemDim3Code,
|
||||
&ln.Qty1,
|
||||
&ln.Qty2,
|
||||
&ln.Price,
|
||||
&ln.VatRate,
|
||||
&ln.PCTRate,
|
||||
&ln.DocCurrencyCode,
|
||||
&ln.DeliveryDate,
|
||||
&ln.PlannedDateOfLading,
|
||||
&ln.LineDescription,
|
||||
&ln.IsClosed,
|
||||
&ln.CreatedUserName,
|
||||
&ln.CreatedDate,
|
||||
&ln.LastUpdatedUserName,
|
||||
&ln.LastUpdatedDate,
|
||||
&ln.UrunIlkGrubu,
|
||||
&ln.UrunAnaGrubu,
|
||||
&ln.UrunAltGrubu,
|
||||
&ln.Fit1,
|
||||
&ln.Fit2,
|
||||
); err != nil {
|
||||
return &header, nil, fmt.Errorf("line scan hatası: %w", err)
|
||||
}
|
||||
lines = append(lines, ln)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return &header, nil, fmt.Errorf("line rows hatası: %w", err)
|
||||
}
|
||||
|
||||
logger.Printf("📦 [GetOrderByID] lines loaded • count=%d", len(lines))
|
||||
return &header, lines, nil
|
||||
}
|
||||
Reference in New Issue
Block a user