Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -2,6 +2,8 @@ package queries
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"bssapp-backend/models"
|
||||
)
|
||||
|
||||
// ========================================================
|
||||
@@ -12,20 +14,209 @@ func GetOrderProductionItems(mssql *sql.DB, orderHeaderID string) (*sql.Rows, er
|
||||
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,
|
||||
|
||||
-- Şimdilik eski alanlar boş döndürülür
|
||||
CAST('' AS NVARCHAR(50)) AS OldItemCode,
|
||||
CAST('' AS NVARCHAR(50)) AS OldColor,
|
||||
CAST('' AS NVARCHAR(50)) AS OldDim2,
|
||||
CAST('' AS NVARCHAR(250)) AS OldDesc,
|
||||
ISNULL(l.ItemCode,'') AS OldItemCode,
|
||||
ISNULL(l.ColorCode,'') AS OldColor,
|
||||
ISNULL(l.ItemDim2Code,'') AS OldDim2,
|
||||
ISNULL(l.LineDescription,'') AS OldDesc,
|
||||
|
||||
ISNULL(l.ItemCode,'') AS NewItemCode,
|
||||
ISNULL(l.ColorCode,'') AS NewColor,
|
||||
ISNULL(l.ItemDim2Code,'') AS NewDim2,
|
||||
ISNULL(l.LineDescription,'') AS NewDesc
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user