Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -26,7 +26,7 @@ func GetAccounts(ctx context.Context) ([]models.Account, error) {
|
||||
;WITH VendorPiyasa AS
|
||||
(
|
||||
SELECT
|
||||
Cari8 = LEFT(P.CurrAccCode, 8),
|
||||
Cari8 = LEFT(REPLACE(P.CurrAccCode, ' ', ''), 8),
|
||||
VendorAtt01 = MAX(P.VendorAtt01)
|
||||
FROM
|
||||
(
|
||||
@@ -53,14 +53,14 @@ func GetAccounts(ctx context.Context) ([]models.Account, error) {
|
||||
) pvt
|
||||
GROUP BY CurrAccTypeCode, CurrAccCode
|
||||
) P
|
||||
GROUP BY LEFT(P.CurrAccCode, 8)
|
||||
GROUP BY LEFT(REPLACE(P.CurrAccCode, ' ', ''), 8)
|
||||
)
|
||||
SELECT
|
||||
x.AccountCode,
|
||||
MAX(x.AccountName) AS AccountName
|
||||
FROM (
|
||||
SELECT
|
||||
LEFT(b.CurrAccCode, 8) AS AccountCode,
|
||||
LEFT(REPLACE(b.CurrAccCode, ' ', ''), 8) AS AccountCode,
|
||||
COALESCE(d.CurrAccDescription, '') AS AccountName
|
||||
FROM trCurrAccBook b
|
||||
LEFT JOIN cdCurrAccDesc d
|
||||
@@ -71,7 +71,7 @@ func GetAccounts(ctx context.Context) ([]models.Account, error) {
|
||||
ON f2.CurrAccTypeCode = b.CurrAccTypeCode
|
||||
AND f2.CurrAccCode = b.CurrAccCode
|
||||
LEFT JOIN VendorPiyasa vp
|
||||
ON vp.Cari8 = LEFT(b.CurrAccCode, 8)
|
||||
ON vp.Cari8 = LEFT(REPLACE(b.CurrAccCode, ' ', ''), 8)
|
||||
WHERE b.CurrAccTypeCode IN (1,3)
|
||||
AND %s
|
||||
) x
|
||||
@@ -110,10 +110,14 @@ func GetAccounts(ctx context.Context) ([]models.Account, error) {
|
||||
}
|
||||
|
||||
func formatAccountDisplayCode(code string) string {
|
||||
trimmed := strings.TrimSpace(code)
|
||||
runes := []rune(trimmed)
|
||||
if len(runes) <= 3 {
|
||||
return trimmed
|
||||
}
|
||||
return strings.TrimSpace(string(runes[:3]) + " " + string(runes[3:]))
|
||||
return normalizeAccountCode8(code)
|
||||
}
|
||||
|
||||
func normalizeAccountCode8(code string) string {
|
||||
trimmed := strings.TrimSpace(strings.ReplaceAll(code, " ", ""))
|
||||
runes := []rune(trimmed)
|
||||
if len(runes) > 8 {
|
||||
return string(runes[:8])
|
||||
}
|
||||
return trimmed
|
||||
}
|
||||
|
||||
@@ -1,50 +1,242 @@
|
||||
package queries
|
||||
|
||||
// GetProductStockAttributeOptionsQuery:
|
||||
// Urun ozellik filtre secenekleri (distinct aciklamalar).
|
||||
// Cascading filtre secenekleri. Kategori + Urun Ana Grubu zorunlu akisina uygundur.
|
||||
const GetProductStockAttributeOptionsQuery = `
|
||||
WITH PF AS
|
||||
DECLARE @Kategori NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p1)), '');
|
||||
DECLARE @UrunAnaGrubu NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p2)), '');
|
||||
DECLARE @UrunAltGrubu NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p3)), '');
|
||||
DECLARE @Renk NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p4)), '');
|
||||
DECLARE @Renk2 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p5)), '');
|
||||
DECLARE @UrunIcerigi NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p6)), '');
|
||||
DECLARE @Fit NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p7)), '');
|
||||
DECLARE @Drop NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p8)), '');
|
||||
DECLARE @Beden NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p9)), '');
|
||||
|
||||
DECLARE @AttrBase TABLE
|
||||
(
|
||||
ProductCode NVARCHAR(50) NOT NULL,
|
||||
Kategori NVARCHAR(100) NOT NULL,
|
||||
UrunAnaGrubu NVARCHAR(100) NOT NULL,
|
||||
UrunAltGrubu NVARCHAR(100) NOT NULL,
|
||||
UrunIcerigi NVARCHAR(100) NOT NULL,
|
||||
Fit NVARCHAR(100) NOT NULL,
|
||||
DropVal NVARCHAR(100) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @AttrBase (ProductCode, Kategori, UrunAnaGrubu, UrunAltGrubu, UrunIcerigi, Fit, DropVal)
|
||||
SELECT
|
||||
ProductCode,
|
||||
Kategori = LTRIM(RTRIM(ProductAtt44Desc)),
|
||||
UrunAnaGrubu = LTRIM(RTRIM(ProductAtt01Desc)),
|
||||
UrunAltGrubu = LTRIM(RTRIM(ProductAtt02Desc)),
|
||||
UrunIcerigi = LTRIM(RTRIM(ProductAtt41Desc)),
|
||||
Fit = LTRIM(RTRIM(ProductAtt38Desc)),
|
||||
DropVal = LTRIM(RTRIM(ProductAtt11Desc))
|
||||
FROM ProductFilterWithDescription('TR')
|
||||
WHERE LEN(ProductCode) = 13
|
||||
AND (@Kategori IS NULL OR ProductAtt44Desc = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR ProductAtt01Desc = @UrunAnaGrubu)
|
||||
AND (@UrunAltGrubu IS NULL OR ProductAtt02Desc = @UrunAltGrubu)
|
||||
AND (@UrunIcerigi IS NULL OR ProductAtt41Desc = @UrunIcerigi)
|
||||
AND (@Fit IS NULL OR ProductAtt38Desc = @Fit)
|
||||
AND (@Drop IS NULL OR ProductAtt11Desc = @Drop);
|
||||
|
||||
IF @Kategori IS NULL OR @UrunAnaGrubu IS NULL
|
||||
BEGIN
|
||||
SELECT 'kategori' AS FieldName, X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.Kategori
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.Kategori <> ''
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'urun_ana_grubu', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.UrunAnaGrubu
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.UrunAnaGrubu <> ''
|
||||
) X;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
;WITH INV AS
|
||||
(
|
||||
SELECT
|
||||
LTRIM(RTRIM(ProductAtt01Desc)) AS ProductAtt01Desc,
|
||||
LTRIM(RTRIM(ProductAtt02Desc)) AS ProductAtt02Desc,
|
||||
LTRIM(RTRIM(ProductAtt10Desc)) AS ProductAtt10Desc,
|
||||
LTRIM(RTRIM(ProductAtt11Desc)) AS ProductAtt11Desc,
|
||||
LTRIM(RTRIM(ProductAtt21Desc)) AS ProductAtt21Desc,
|
||||
LTRIM(RTRIM(ProductAtt35Desc)) AS ProductAtt35Desc,
|
||||
LTRIM(RTRIM(ProductAtt36Desc)) AS ProductAtt36Desc,
|
||||
LTRIM(RTRIM(ProductAtt44Desc)) AS ProductAtt44Desc
|
||||
FROM ProductFilterWithDescription('TR')
|
||||
WHERE LEN(ProductCode) = 13
|
||||
X.ItemCode,
|
||||
X.ColorCode,
|
||||
X.ItemDim1Code,
|
||||
X.ItemDim2Code,
|
||||
SUM(X.PickingQty1) AS PickingQty1,
|
||||
SUM(X.ReserveQty1) AS ReserveQty1,
|
||||
SUM(X.DispOrderQty1) AS DispOrderQty1,
|
||||
SUM(X.InventoryQty1) AS InventoryQty1
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
P.ItemCode, P.ColorCode, P.ItemDim1Code, P.ItemDim2Code,
|
||||
P.Qty1 AS PickingQty1, 0 AS ReserveQty1, 0 AS DispOrderQty1, 0 AS InventoryQty1
|
||||
FROM PickingStates P
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = P.ItemCode
|
||||
WHERE P.ItemTypeCode = 1
|
||||
AND LEN(P.ItemCode) = 13
|
||||
|
||||
UNION ALL
|
||||
SELECT
|
||||
R.ItemCode, R.ColorCode, R.ItemDim1Code, R.ItemDim2Code,
|
||||
0, R.Qty1, 0, 0
|
||||
FROM ReserveStates R
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = R.ItemCode
|
||||
WHERE R.ItemTypeCode = 1
|
||||
AND LEN(R.ItemCode) = 13
|
||||
|
||||
UNION ALL
|
||||
SELECT
|
||||
D.ItemCode, D.ColorCode, D.ItemDim1Code, D.ItemDim2Code,
|
||||
0, 0, D.Qty1, 0
|
||||
FROM DispOrderStates D
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = D.ItemCode
|
||||
WHERE D.ItemTypeCode = 1
|
||||
AND LEN(D.ItemCode) = 13
|
||||
|
||||
UNION ALL
|
||||
SELECT
|
||||
T.ItemCode, T.ColorCode, T.ItemDim1Code, T.ItemDim2Code,
|
||||
0, 0, 0, SUM(T.In_Qty1 - T.Out_Qty1)
|
||||
FROM trStock T WITH (NOLOCK)
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = T.ItemCode
|
||||
WHERE T.ItemTypeCode = 1
|
||||
AND LEN(T.ItemCode) = 13
|
||||
GROUP BY T.ItemCode, T.ColorCode, T.ItemDim1Code, T.ItemDim2Code
|
||||
) X
|
||||
GROUP BY X.ItemCode, X.ColorCode, X.ItemDim1Code, X.ItemDim2Code
|
||||
),
|
||||
Avail AS
|
||||
(
|
||||
SELECT
|
||||
I.ItemCode,
|
||||
Renk = LTRIM(RTRIM(I.ColorCode)),
|
||||
RenkAciklama = LTRIM(RTRIM(C.ColorDescription)),
|
||||
Renk2 = LTRIM(RTRIM(I.ItemDim2Code)),
|
||||
Beden = LTRIM(RTRIM(I.ItemDim1Code)),
|
||||
Kullanilabilir = (I.InventoryQty1 - I.PickingQty1 - I.ReserveQty1 - I.DispOrderQty1)
|
||||
FROM INV I
|
||||
LEFT JOIN cdColorDesc C WITH (NOLOCK)
|
||||
ON C.ColorCode = I.ColorCode
|
||||
AND C.LangCode = 'TR'
|
||||
WHERE (I.InventoryQty1 - I.PickingQty1 - I.ReserveQty1 - I.DispOrderQty1) > 0
|
||||
)
|
||||
SELECT 'att01' AS FieldName, ProductAtt01Desc AS FieldValue FROM PF WHERE ProductAtt01Desc <> '' GROUP BY ProductAtt01Desc
|
||||
SELECT 'kategori' AS FieldName, X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.Kategori
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.Kategori <> ''
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att02', ProductAtt02Desc FROM PF WHERE ProductAtt02Desc <> '' GROUP BY ProductAtt02Desc
|
||||
SELECT 'urun_ana_grubu', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.UrunAnaGrubu
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.UrunAnaGrubu <> ''
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att10', ProductAtt10Desc FROM PF WHERE ProductAtt10Desc <> '' GROUP BY ProductAtt10Desc
|
||||
SELECT 'urun_alt_grubu', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.UrunAltGrubu
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.UrunAltGrubu <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att11', ProductAtt11Desc FROM PF WHERE ProductAtt11Desc <> '' GROUP BY ProductAtt11Desc
|
||||
SELECT 'renk', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = CASE WHEN A.RenkAciklama <> '' THEN A.RenkAciklama ELSE A.Renk END
|
||||
FROM Avail A
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = A.ItemCode
|
||||
WHERE (CASE WHEN A.RenkAciklama <> '' THEN A.RenkAciklama ELSE A.Renk END) <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
AND (@UrunAltGrubu IS NULL OR AB.UrunAltGrubu = @UrunAltGrubu)
|
||||
AND (@UrunIcerigi IS NULL OR AB.UrunIcerigi = @UrunIcerigi)
|
||||
AND (@Fit IS NULL OR AB.Fit = @Fit)
|
||||
AND (@Drop IS NULL OR AB.DropVal = @Drop)
|
||||
AND (@Renk2 IS NULL OR A.Renk2 = @Renk2)
|
||||
AND (@Beden IS NULL OR A.Beden = @Beden)
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att21', ProductAtt21Desc FROM PF WHERE ProductAtt21Desc <> '' GROUP BY ProductAtt21Desc
|
||||
SELECT 'renk2', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = A.Renk2
|
||||
FROM Avail A
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = A.ItemCode
|
||||
WHERE A.Renk2 <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
AND (@UrunAltGrubu IS NULL OR AB.UrunAltGrubu = @UrunAltGrubu)
|
||||
AND (@UrunIcerigi IS NULL OR AB.UrunIcerigi = @UrunIcerigi)
|
||||
AND (@Fit IS NULL OR AB.Fit = @Fit)
|
||||
AND (@Drop IS NULL OR AB.DropVal = @Drop)
|
||||
AND (@Renk IS NULL OR (CASE WHEN A.RenkAciklama <> '' THEN A.RenkAciklama ELSE A.Renk END) = @Renk)
|
||||
AND (@Beden IS NULL OR A.Beden = @Beden)
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att35', ProductAtt35Desc FROM PF WHERE ProductAtt35Desc <> '' GROUP BY ProductAtt35Desc
|
||||
SELECT 'urun_icerigi', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.UrunIcerigi
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.UrunIcerigi <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att36', ProductAtt36Desc FROM PF WHERE ProductAtt36Desc <> '' GROUP BY ProductAtt36Desc
|
||||
SELECT 'fit', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.Fit
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.Fit <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'att44', ProductAtt44Desc FROM PF WHERE ProductAtt44Desc <> '' GROUP BY ProductAtt44Desc;
|
||||
SELECT 'drop', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = AB.DropVal
|
||||
FROM @AttrBase AB
|
||||
WHERE AB.DropVal <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
) X
|
||||
UNION ALL
|
||||
SELECT 'beden', X.FieldValue
|
||||
FROM (
|
||||
SELECT DISTINCT FieldValue = A.Beden
|
||||
FROM Avail A
|
||||
INNER JOIN @AttrBase AB ON AB.ProductCode = A.ItemCode
|
||||
WHERE A.Beden <> ''
|
||||
AND (@Kategori IS NULL OR AB.Kategori = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR AB.UrunAnaGrubu = @UrunAnaGrubu)
|
||||
AND (@UrunAltGrubu IS NULL OR AB.UrunAltGrubu = @UrunAltGrubu)
|
||||
AND (@UrunIcerigi IS NULL OR AB.UrunIcerigi = @UrunIcerigi)
|
||||
AND (@Fit IS NULL OR AB.Fit = @Fit)
|
||||
AND (@Drop IS NULL OR AB.DropVal = @Drop)
|
||||
AND (@Renk IS NULL OR (CASE WHEN A.RenkAciklama <> '' THEN A.RenkAciklama ELSE A.Renk END) = @Renk)
|
||||
AND (@Renk2 IS NULL OR A.Renk2 = @Renk2)
|
||||
) X;
|
||||
`
|
||||
|
||||
// GetProductStockQueryByAttributes:
|
||||
// Urun ozelliklerine gore stok detay sorgusu.
|
||||
const GetProductStockQueryByAttributes = `
|
||||
DECLARE @Att01 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p1)), '');
|
||||
DECLARE @Att02 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p2)), '');
|
||||
DECLARE @Att10 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p3)), '');
|
||||
DECLARE @Att11 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p4)), '');
|
||||
DECLARE @Att21 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p5)), '');
|
||||
DECLARE @Att35 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p6)), '');
|
||||
DECLARE @Att36 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p7)), '');
|
||||
DECLARE @Att44 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p8)), '');
|
||||
DECLARE @Kategori NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p1)), '');
|
||||
DECLARE @UrunAnaGrubu NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p2)), '');
|
||||
DECLARE @UrunAltGrubu NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p3)), '');
|
||||
DECLARE @Renk NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p4)), '');
|
||||
DECLARE @Renk2 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p5)), '');
|
||||
DECLARE @UrunIcerigi NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p6)), '');
|
||||
DECLARE @Fit NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p7)), '');
|
||||
DECLARE @Drop NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p8)), '');
|
||||
DECLARE @Beden NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p9)), '');
|
||||
|
||||
;WITH AttrFiltered AS
|
||||
(
|
||||
@@ -83,14 +275,12 @@ DECLARE @Att44 NVARCHAR(100) = NULLIF(LTRIM(RTRIM(@p8)), '');
|
||||
ProductAtt46Desc
|
||||
FROM ProductFilterWithDescription('TR')
|
||||
WHERE LEN(ProductCode) = 13
|
||||
AND (@Att01 IS NULL OR ProductAtt01Desc = @Att01)
|
||||
AND (@Att02 IS NULL OR ProductAtt02Desc = @Att02)
|
||||
AND (@Att10 IS NULL OR ProductAtt10Desc = @Att10)
|
||||
AND (@Att11 IS NULL OR ProductAtt11Desc = @Att11)
|
||||
AND (@Att21 IS NULL OR ProductAtt21Desc = @Att21)
|
||||
AND (@Att35 IS NULL OR ProductAtt35Desc = @Att35)
|
||||
AND (@Att36 IS NULL OR ProductAtt36Desc = @Att36)
|
||||
AND (@Att44 IS NULL OR ProductAtt44Desc = @Att44)
|
||||
AND (@Kategori IS NULL OR ProductAtt44Desc = @Kategori)
|
||||
AND (@UrunAnaGrubu IS NULL OR ProductAtt01Desc = @UrunAnaGrubu)
|
||||
AND (@UrunAltGrubu IS NULL OR ProductAtt02Desc = @UrunAltGrubu)
|
||||
AND (@UrunIcerigi IS NULL OR ProductAtt41Desc = @UrunIcerigi)
|
||||
AND (@Fit IS NULL OR ProductAtt38Desc = @Fit)
|
||||
AND (@Drop IS NULL OR ProductAtt11Desc = @Drop)
|
||||
),
|
||||
INV AS
|
||||
(
|
||||
@@ -157,18 +347,77 @@ INV AS
|
||||
GROUP BY
|
||||
X.CompanyCode, X.OfficeCode, X.StoreTypeCode, X.StoreCode, X.WarehouseCode,
|
||||
X.ItemTypeCode, X.ItemCode, X.ColorCode, X.ItemDim1Code, X.ItemDim2Code, X.ItemDim3Code
|
||||
),
|
||||
Avail AS
|
||||
(
|
||||
SELECT
|
||||
I.CompanyCode,
|
||||
I.OfficeCode,
|
||||
I.StoreTypeCode,
|
||||
I.StoreCode,
|
||||
I.WarehouseCode,
|
||||
I.ItemTypeCode,
|
||||
I.ItemCode,
|
||||
I.ColorCode,
|
||||
I.ItemDim1Code,
|
||||
I.ItemDim2Code,
|
||||
I.ItemDim3Code,
|
||||
Kullanilabilir = ROUND(I.InventoryQty1 - I.PickingQty1 - I.ReserveQty1 - I.DispOrderQty1, U.RoundDigit),
|
||||
RenkAciklama = LTRIM(RTRIM(C.ColorDescription))
|
||||
FROM INV I
|
||||
JOIN cdItem CI WITH (NOLOCK)
|
||||
ON CI.ItemTypeCode = I.ItemTypeCode
|
||||
AND CI.ItemCode = I.ItemCode
|
||||
LEFT JOIN cdUnitOfMeasure U WITH (NOLOCK)
|
||||
ON U.UnitOfMeasureCode = CI.UnitOfMeasureCode1
|
||||
LEFT JOIN cdColorDesc C WITH (NOLOCK)
|
||||
ON C.ColorCode = I.ColorCode
|
||||
AND C.LangCode = 'TR'
|
||||
WHERE I.ItemTypeCode = 1
|
||||
AND LEN(I.ItemCode) = 13
|
||||
AND (I.InventoryQty1 - I.PickingQty1 - I.ReserveQty1 - I.DispOrderQty1) > 0
|
||||
AND CI.IsBlocked = 0
|
||||
AND I.WarehouseCode IN
|
||||
(
|
||||
'1-0-14','1-0-10','1-0-8','1-2-5','1-2-4','1-0-12','100','1-0-28',
|
||||
'1-0-24','1-2-6','1-1-14','1-0-2','1-0-52','1-1-2','1-0-21','1-1-3',
|
||||
'1-0-33','101','1-014','1-0-49','1-0-36'
|
||||
)
|
||||
),
|
||||
Grouped AS
|
||||
(
|
||||
SELECT
|
||||
A.ItemCode,
|
||||
A.ColorCode,
|
||||
A.ItemDim2Code
|
||||
FROM Avail A
|
||||
INNER JOIN AttrFiltered AF ON AF.ProductCode = A.ItemCode
|
||||
WHERE (@Renk IS NULL OR (CASE WHEN A.RenkAciklama <> '' THEN A.RenkAciklama ELSE A.ColorCode END) = @Renk)
|
||||
AND (@Renk2 IS NULL OR A.ItemDim2Code = @Renk2)
|
||||
AND (
|
||||
@Beden IS NULL
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM Avail AB
|
||||
WHERE AB.ItemCode = A.ItemCode
|
||||
AND AB.ColorCode = A.ColorCode
|
||||
AND ISNULL(AB.ItemDim2Code, '') = ISNULL(A.ItemDim2Code, '')
|
||||
AND AB.ItemDim1Code = @Beden
|
||||
)
|
||||
)
|
||||
GROUP BY A.ItemCode, A.ColorCode, A.ItemDim2Code
|
||||
)
|
||||
SELECT
|
||||
I.WarehouseCode AS Depo_Kodu,
|
||||
A.WarehouseCode AS Depo_Kodu,
|
||||
W.WarehouseDescription AS Depo_Adi,
|
||||
IT.ItemTypeDescription AS InventoryType,
|
||||
I.ItemCode AS Urun_Kodu,
|
||||
A.ItemCode AS Urun_Kodu,
|
||||
AF.ProductDescription AS Madde_Aciklamasi,
|
||||
I.ColorCode AS Renk_Kodu,
|
||||
C.ColorDescription AS Renk_Aciklamasi,
|
||||
I.ItemDim1Code AS Beden,
|
||||
I.ItemDim2Code AS Yaka,
|
||||
ROUND(I.InventoryQty1 - I.PickingQty1 - I.ReserveQty1 - I.DispOrderQty1, U.RoundDigit) AS Kullanilabilir_Envanter,
|
||||
A.ColorCode AS Renk_Kodu,
|
||||
A.RenkAciklama AS Renk_Aciklamasi,
|
||||
A.ItemDim1Code AS Beden,
|
||||
A.ItemDim2Code AS Yaka,
|
||||
A.Kullanilabilir AS Kullanilabilir_Envanter,
|
||||
AF.ProductAtt01Desc AS URUN_ANA_GRUBU,
|
||||
AF.ProductAtt02Desc AS URUN_ALT_GRUBU,
|
||||
AF.ProductAtt10Desc AS MARKA,
|
||||
@@ -193,47 +442,32 @@ SELECT
|
||||
AF.ProductAtt38Desc AS BIRINCI_PARCA_FIT,
|
||||
AF.ProductAtt39Desc AS IKINCI_PARCA_FIT,
|
||||
AF.ProductAtt40Desc AS BOS2,
|
||||
AF.ProductAtt41Desc AS KISA_KAR,
|
||||
AF.ProductAtt41Desc AS URUN_ICERIGI,
|
||||
AF.ProductAtt42Desc AS SERI_FASON,
|
||||
AF.ProductAtt43Desc AS STOK_GIRIS_YONTEMI,
|
||||
AF.ProductAtt44Desc AS YETISKIN_GARSON,
|
||||
AF.ProductAtt45Desc AS ASKILI_YAN,
|
||||
AF.ProductAtt46Desc AS BOS3,
|
||||
P.Price AS Fiyat
|
||||
FROM INV I
|
||||
FROM Avail A
|
||||
INNER JOIN Grouped G
|
||||
ON G.ItemCode = A.ItemCode
|
||||
AND G.ColorCode = A.ColorCode
|
||||
AND ISNULL(G.ItemDim2Code, '') = ISNULL(A.ItemDim2Code, '')
|
||||
INNER JOIN AttrFiltered AF
|
||||
ON AF.ProductCode = I.ItemCode
|
||||
JOIN cdItem CI WITH (NOLOCK)
|
||||
ON CI.ItemTypeCode = I.ItemTypeCode
|
||||
AND CI.ItemCode = I.ItemCode
|
||||
LEFT JOIN cdUnitOfMeasure U WITH (NOLOCK)
|
||||
ON U.UnitOfMeasureCode = CI.UnitOfMeasureCode1
|
||||
ON AF.ProductCode = A.ItemCode
|
||||
LEFT JOIN cdWarehouseDesc W WITH (NOLOCK)
|
||||
ON W.WarehouseCode = I.WarehouseCode
|
||||
ON W.WarehouseCode = A.WarehouseCode
|
||||
AND W.LangCode = 'TR'
|
||||
LEFT JOIN bsItemTypeDesc IT WITH (NOLOCK)
|
||||
ON IT.ItemTypeCode = I.ItemTypeCode
|
||||
ON IT.ItemTypeCode = A.ItemTypeCode
|
||||
AND IT.LangCode = 'TR'
|
||||
LEFT JOIN cdColorDesc C WITH (NOLOCK)
|
||||
ON C.ColorCode = I.ColorCode
|
||||
AND C.LangCode = 'TR'
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 Price
|
||||
FROM prItemBasePrice PB WITH (NOLOCK)
|
||||
WHERE PB.ItemTypeCode = 1
|
||||
AND PB.ItemCode = I.ItemCode
|
||||
AND PB.ItemCode = A.ItemCode
|
||||
AND LEN(PB.ItemCode) = 13
|
||||
ORDER BY PB.PriceDate DESC
|
||||
) P
|
||||
WHERE
|
||||
I.ItemTypeCode = 1
|
||||
AND LEN(I.ItemCode) = 13
|
||||
AND (I.InventoryQty1 - I.PickingQty1 - I.ReserveQty1 - I.DispOrderQty1) > 0
|
||||
AND CI.IsBlocked = 0
|
||||
AND I.WarehouseCode IN
|
||||
(
|
||||
'1-0-14','1-0-10','1-0-8','1-2-5','1-2-4','1-0-12','100','1-0-28',
|
||||
'1-0-24','1-2-6','1-1-14','1-0-2','1-0-52','1-1-2','1-0-21','1-1-3',
|
||||
'1-0-33','101','1-014','1-0-49','1-0-36'
|
||||
);
|
||||
) P;
|
||||
`
|
||||
|
||||
@@ -11,13 +11,51 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func readStockAttrFilters(r *http.Request) (kategori, urunAnaGrubu, urunAltGrubu, renk, renk2, urunIcerigi, fit, drop, beden string) {
|
||||
q := r.URL.Query()
|
||||
|
||||
kategori = strings.TrimSpace(firstNonEmpty(q.Get("kategori"), q.Get("att44")))
|
||||
urunAnaGrubu = strings.TrimSpace(firstNonEmpty(q.Get("urun_ana_grubu"), q.Get("att01")))
|
||||
urunAltGrubu = strings.TrimSpace(firstNonEmpty(q.Get("urun_alt_grubu"), q.Get("att02")))
|
||||
renk = strings.TrimSpace(q.Get("renk"))
|
||||
renk2 = strings.TrimSpace(firstNonEmpty(q.Get("renk2"), q.Get("yaka")))
|
||||
urunIcerigi = strings.TrimSpace(firstNonEmpty(q.Get("urun_icerigi"), q.Get("att41")))
|
||||
fit = strings.TrimSpace(firstNonEmpty(q.Get("fit"), q.Get("att38")))
|
||||
drop = strings.TrimSpace(firstNonEmpty(q.Get("drop"), q.Get("att11")))
|
||||
beden = strings.TrimSpace(q.Get("beden"))
|
||||
return
|
||||
}
|
||||
|
||||
func firstNonEmpty(vals ...string) string {
|
||||
for _, v := range vals {
|
||||
if strings.TrimSpace(v) != "" {
|
||||
return v
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// GetProductStockAttributeOptionsHandler
|
||||
// GET /api/product-stock-attribute-options
|
||||
func GetProductStockAttributeOptionsHandler(w http.ResponseWriter, _ *http.Request) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
func GetProductStockAttributeOptionsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
kategori, urunAnaGrubu, urunAltGrubu, renk, renk2, urunIcerigi, fit, drop, beden := readStockAttrFilters(r)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
|
||||
defer cancel()
|
||||
|
||||
rows, err := db.MssqlDB.QueryContext(ctx, queries.GetProductStockAttributeOptionsQuery)
|
||||
rows, err := db.MssqlDB.QueryContext(
|
||||
ctx,
|
||||
queries.GetProductStockAttributeOptionsQuery,
|
||||
kategori,
|
||||
urunAnaGrubu,
|
||||
urunAltGrubu,
|
||||
renk,
|
||||
renk2,
|
||||
urunIcerigi,
|
||||
fit,
|
||||
drop,
|
||||
beden,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("[PRODUCT-STOCK-ATTR-OPTIONS] SQL hatasi: %v", err)
|
||||
http.Error(w, "SQL hatasi: "+err.Error(), http.StatusInternalServerError)
|
||||
@@ -26,14 +64,15 @@ func GetProductStockAttributeOptionsHandler(w http.ResponseWriter, _ *http.Reque
|
||||
defer rows.Close()
|
||||
|
||||
result := map[string][]string{
|
||||
"att01": {},
|
||||
"att02": {},
|
||||
"att10": {},
|
||||
"att11": {},
|
||||
"att21": {},
|
||||
"att35": {},
|
||||
"att36": {},
|
||||
"att44": {},
|
||||
"kategori": {},
|
||||
"urun_ana_grubu": {},
|
||||
"urun_alt_grubu": {},
|
||||
"renk": {},
|
||||
"renk2": {},
|
||||
"urun_icerigi": {},
|
||||
"fit": {},
|
||||
"drop": {},
|
||||
"beden": {},
|
||||
}
|
||||
|
||||
for rows.Next() {
|
||||
@@ -59,20 +98,12 @@ func GetProductStockAttributeOptionsHandler(w http.ResponseWriter, _ *http.Reque
|
||||
}
|
||||
|
||||
// GetProductStockQueryByAttributesHandler
|
||||
// GET /api/product-stock-query-by-attributes?att01=...&att02=...
|
||||
// GET /api/product-stock-query-by-attributes
|
||||
func GetProductStockQueryByAttributesHandler(w http.ResponseWriter, r *http.Request) {
|
||||
att01 := strings.TrimSpace(r.URL.Query().Get("att01"))
|
||||
att02 := strings.TrimSpace(r.URL.Query().Get("att02"))
|
||||
att10 := strings.TrimSpace(r.URL.Query().Get("att10"))
|
||||
att11 := strings.TrimSpace(r.URL.Query().Get("att11"))
|
||||
att21 := strings.TrimSpace(r.URL.Query().Get("att21"))
|
||||
att35 := strings.TrimSpace(r.URL.Query().Get("att35"))
|
||||
att36 := strings.TrimSpace(r.URL.Query().Get("att36"))
|
||||
att44 := strings.TrimSpace(r.URL.Query().Get("att44"))
|
||||
kategori, urunAnaGrubu, urunAltGrubu, renk, renk2, urunIcerigi, fit, drop, beden := readStockAttrFilters(r)
|
||||
|
||||
hasAny := att01 != "" || att02 != "" || att10 != "" || att11 != "" || att21 != "" || att35 != "" || att36 != "" || att44 != ""
|
||||
if !hasAny {
|
||||
http.Error(w, "En az bir urun ozelligi secilmelidir", http.StatusBadRequest)
|
||||
if kategori == "" || urunAnaGrubu == "" {
|
||||
http.Error(w, "Kategori ve Urun Ana Grubu secimi zorunludur", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -80,11 +111,23 @@ func GetProductStockQueryByAttributesHandler(w http.ResponseWriter, r *http.Requ
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 90*time.Second)
|
||||
defer cancel()
|
||||
log.Printf(
|
||||
"[PRODUCT-STOCK-BY-ATTRS] request att01=%q att02=%q att10=%q att11=%q att21=%q att35=%q att36=%q att44=%q",
|
||||
att01, att02, att10, att11, att21, att35, att36, att44,
|
||||
"[PRODUCT-STOCK-BY-ATTRS] request kategori=%q urun_ana_grubu=%q urun_alt_grubu=%q renk=%q renk2=%q urun_icerigi=%q fit=%q drop=%q beden=%q",
|
||||
kategori, urunAnaGrubu, urunAltGrubu, renk, renk2, urunIcerigi, fit, drop, beden,
|
||||
)
|
||||
|
||||
rows, err := db.MssqlDB.QueryContext(ctx, queries.GetProductStockQueryByAttributes, att01, att02, att10, att11, att21, att35, att36, att44)
|
||||
rows, err := db.MssqlDB.QueryContext(
|
||||
ctx,
|
||||
queries.GetProductStockQueryByAttributes,
|
||||
kategori,
|
||||
urunAnaGrubu,
|
||||
urunAltGrubu,
|
||||
renk,
|
||||
renk2,
|
||||
urunIcerigi,
|
||||
fit,
|
||||
drop,
|
||||
beden,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("[PRODUCT-STOCK-BY-ATTRS] SQL hatasi: %v", err)
|
||||
http.Error(w, "SQL hatasi: "+err.Error(), http.StatusInternalServerError)
|
||||
|
||||
Reference in New Issue
Block a user