package queries import ( "database/sql" "bssapp-backend/models" ) // ======================================================== // 📌 GetOrderProductionItems — OrderHeaderID için U ürünleri // ======================================================== func GetOrderProductionItems(mssql *sql.DB, orderHeaderID string) (*sql.Rows, error) { return mssql.Query(` SELECT CAST(l.OrderHeaderID AS NVARCHAR(50)) AS OrderHeaderID, CAST(l.OrderLineID AS NVARCHAR(50)) AS OrderLineID, l.ItemTypeCode AS ItemTypeCode, ISNULL(l.ItemDim1Code,'') AS OldDim1, ISNULL(l.ItemDim3Code,'') AS OldDim3, ISNULL(l.ItemCode,'') AS OldItemCode, ISNULL(l.ColorCode,'') AS OldColor, ISNULL(l.ItemDim2Code,'') AS OldDim2, ISNULL(l.LineDescription,'') AS OldDesc, CAST('' AS NVARCHAR(60)) AS NewItemCode, CAST('' AS NVARCHAR(30)) AS NewColor, CAST('' AS NVARCHAR(30)) AS NewDim2, CAST('' AS NVARCHAR(250)) AS NewDesc, CAST(0 AS bit) AS IsVariantMissing FROM dbo.trOrderLine l WHERE l.OrderHeaderID = @p1 AND ISNULL(l.ItemCode,'') LIKE 'U%' ORDER BY l.SortOrder, l.OrderLineID `, orderHeaderID) } // ======================================================== // 📌 InsertMissingProductionVariants — eksik prItemVariant ekler // ======================================================== func InsertMissingProductionVariants(mssql *sql.DB, orderHeaderID string, username string) (int64, error) { query := ` ;WITH Missing AS ( SELECT DISTINCT l.ItemTypeCode, l.ItemCode, l.ColorCode, l.ItemDim1Code, l.ItemDim2Code, l.ItemDim3Code FROM dbo.trOrderLine l LEFT JOIN dbo.prItemVariant pv ON pv.ItemTypeCode = l.ItemTypeCode AND pv.ItemCode = l.ItemCode AND pv.ColorCode = l.ColorCode AND ISNULL(pv.ItemDim1Code,'') = ISNULL(l.ItemDim1Code,'') AND ISNULL(pv.ItemDim2Code,'') = ISNULL(l.ItemDim2Code,'') AND ISNULL(pv.ItemDim3Code,'') = ISNULL(l.ItemDim3Code,'') WHERE l.OrderHeaderID = @p1 AND ISNULL(l.ItemCode,'') LIKE 'U%' AND pv.ItemCode IS NULL ), MaxPlu AS ( SELECT ISNULL(MAX(PLU),0) AS BasePlu FROM dbo.prItemVariant WITH (UPDLOCK, HOLDLOCK) ) INSERT INTO dbo.prItemVariant ( ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code, PLU, CreatedUserName, CreatedDate, LastUpdatedUserName, LastUpdatedDate ) SELECT m.ItemTypeCode, m.ItemCode, m.ColorCode, m.ItemDim1Code, m.ItemDim2Code, m.ItemDim3Code, mp.BasePlu + ROW_NUMBER() OVER (ORDER BY m.ItemCode, m.ColorCode, m.ItemDim1Code, m.ItemDim2Code, m.ItemDim3Code), @p2, GETDATE(), @p2, GETDATE() FROM Missing m CROSS JOIN MaxPlu mp; ` res, err := mssql.Exec(query, orderHeaderID, username) if err != nil { return 0, err } return res.RowsAffected() } // ======================================================== // OrderProductionUpdate - variant kontrolu ve guncelleme // ======================================================== func GetOrderLineDims(mssql *sql.DB, orderHeaderID string, orderLineID string) (int16, string, string, string, error) { var itemTypeCode int16 var dim1 string var dim2 string var dim3 string err := mssql.QueryRow(` SELECT ItemTypeCode, ISNULL(ItemDim1Code,'') AS ItemDim1Code, ISNULL(ItemDim2Code,'') AS ItemDim2Code, ISNULL(ItemDim3Code,'') AS ItemDim3Code FROM dbo.trOrderLine WHERE OrderHeaderID = @p1 AND OrderLineID = @p2 `, orderHeaderID, orderLineID).Scan(&itemTypeCode, &dim1, &dim2, &dim3) return itemTypeCode, dim1, dim2, dim3, err } func VariantExists(mssql *sql.DB, itemTypeCode int16, itemCode string, colorCode string, dim1 string, dim2 string, dim3 string) (bool, error) { var exists int err := mssql.QueryRow(` SELECT TOP 1 1 FROM dbo.prItemVariant WHERE ItemTypeCode = @p1 AND ItemCode = @p2 AND ColorCode = @p3 AND ISNULL(ItemDim1Code,'') = ISNULL(@p4,'') AND ISNULL(ItemDim2Code,'') = ISNULL(@p5,'') AND ISNULL(ItemDim3Code,'') = ISNULL(@p6,'') `, itemTypeCode, itemCode, colorCode, dim1, dim2, dim3).Scan(&exists) if err == sql.ErrNoRows { return false, nil } if err != nil { return false, err } return true, nil } func InsertMissingVariantsTx(tx *sql.Tx, missing []models.OrderProductionMissingVariant, username string) (int64, error) { if len(missing) == 0 { return 0, nil } var basePlu int64 if err := tx.QueryRow(` SELECT ISNULL(MAX(PLU),0) AS BasePlu FROM dbo.prItemVariant WITH (UPDLOCK, HOLDLOCK) `).Scan(&basePlu); err != nil { return 0, err } var inserted int64 for i, v := range missing { plu := basePlu + int64(i) + 1 res, err := tx.Exec(` IF NOT EXISTS ( SELECT 1 FROM dbo.prItemVariant WHERE ItemTypeCode = @p1 AND ItemCode = @p2 AND ColorCode = @p3 AND ISNULL(ItemDim1Code,'') = ISNULL(@p4,'') AND ISNULL(ItemDim2Code,'') = ISNULL(@p5,'') AND ISNULL(ItemDim3Code,'') = ISNULL(@p6,'') ) INSERT INTO dbo.prItemVariant ( ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code, PLU, CreatedUserName, CreatedDate, LastUpdatedUserName, LastUpdatedDate ) VALUES ( @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, GETDATE(), @p8, GETDATE() ); `, v.ItemTypeCode, v.ItemCode, v.ColorCode, v.ItemDim1Code, v.ItemDim2Code, v.ItemDim3Code, plu, username) if err != nil { return inserted, err } if rows, err := res.RowsAffected(); err == nil { inserted += rows } } return inserted, nil } func UpdateOrderLinesTx(tx *sql.Tx, orderHeaderID string, lines []models.OrderProductionUpdateLine, username string) (int64, error) { var updated int64 for _, line := range lines { res, err := tx.Exec(` UPDATE dbo.trOrderLine SET ItemCode = @p1, ColorCode = @p2, ItemDim2Code = @p3, LineDescription = COALESCE(NULLIF(@p4,''), LineDescription), LastUpdatedUserName = @p5, LastUpdatedDate = GETDATE() WHERE OrderHeaderID = @p6 AND OrderLineID = @p7 `, line.NewItemCode, line.NewColor, line.NewDim2, line.NewDesc, username, orderHeaderID, line.OrderLineID) if err != nil { return updated, err } if rows, err := res.RowsAffected(); err == nil { updated += rows } } return updated, nil }