223 lines
6.2 KiB
Go
223 lines
6.2 KiB
Go
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
|
|
}
|