ui: update ProductPerformanceProfitability page to enhance table views and tabs management
This commit is contained in:
@@ -48,6 +48,165 @@ type ProductPerformanceRefreshResult struct {
|
|||||||
DurationMS int64 `json:"duration_ms"`
|
DurationMS int64 `json:"duration_ms"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func productPerformanceStockQuery() string {
|
||||||
|
return `
|
||||||
|
;WITH ActiveWarehouses AS (
|
||||||
|
SELECT WarehouseCode
|
||||||
|
FROM (VALUES
|
||||||
|
('1-0-12'),('1.01.2014'),('1.02.2005'),('1.02.2004'),('1-0-43'),
|
||||||
|
('4.02.2001'),('1-0-55'),('1.01.2003'),('1-0-21'),('1-0-2'),
|
||||||
|
('1.01.2004'),('1-0-49'),('1-0-37'),('1-0-29'),('1-0-28'),
|
||||||
|
('1-0-10'),('100'),('1.02.2006'),('1-0-42'),('1.01.2002'),
|
||||||
|
('1-0-52')
|
||||||
|
) W(WarehouseCode)
|
||||||
|
),
|
||||||
|
Raw AS (
|
||||||
|
SELECT
|
||||||
|
ProductCode = LTRIM(RTRIM(S.ItemCode)),
|
||||||
|
ColorCode = LTRIM(RTRIM(ISNULL(S.ColorCode, ''))),
|
||||||
|
YakaKodu = LTRIM(RTRIM(ISNULL(S.ItemDim2Code, ''))),
|
||||||
|
MovementDate = CAST(S.DocumentDate AS date),
|
||||||
|
ProcessCode = CASE
|
||||||
|
WHEN LTRIM(RTRIM(ISNULL(S.ProcessCode, ''))) <> '' THEN LTRIM(RTRIM(S.ProcessCode))
|
||||||
|
ELSE LTRIM(RTRIM(ISNULL(S.InnerProcessCode, '')))
|
||||||
|
END,
|
||||||
|
InQty = SUM(S.In_Qty1),
|
||||||
|
OutQty = SUM(S.Out_Qty1),
|
||||||
|
NetQty = SUM(S.InventoryQty1)
|
||||||
|
FROM StockWithCost S WITH(NOLOCK)
|
||||||
|
INNER JOIN ActiveWarehouses W
|
||||||
|
ON W.WarehouseCode = LTRIM(RTRIM(S.WarehouseCode))
|
||||||
|
WHERE S.ItemTypeCode = 1
|
||||||
|
AND (
|
||||||
|
LEN(LTRIM(RTRIM(S.ItemCode))) = 13
|
||||||
|
AND (
|
||||||
|
S.ItemCode LIKE 'S%'
|
||||||
|
OR S.ItemCode LIKE 'O%'
|
||||||
|
OR S.ItemCode LIKE 'N%'
|
||||||
|
OR S.ItemCode LIKE 'X%'
|
||||||
|
OR S.ItemCode LIKE 'I%'
|
||||||
|
OR S.ItemCode LIKE 'A%'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AND (@p3 = '' OR S.ItemCode LIKE @p3 + '%')
|
||||||
|
AND S.DocumentDate < DATEADD(DAY, 1, @p2)
|
||||||
|
GROUP BY
|
||||||
|
S.ItemCode,
|
||||||
|
S.ColorCode,
|
||||||
|
S.ItemDim2Code,
|
||||||
|
CAST(S.DocumentDate AS date),
|
||||||
|
CASE
|
||||||
|
WHEN LTRIM(RTRIM(ISNULL(S.ProcessCode, ''))) <> '' THEN LTRIM(RTRIM(S.ProcessCode))
|
||||||
|
ELSE LTRIM(RTRIM(ISNULL(S.InnerProcessCode, '')))
|
||||||
|
END
|
||||||
|
),
|
||||||
|
Opening AS (
|
||||||
|
SELECT
|
||||||
|
StockDate = @p1,
|
||||||
|
ProductCode,
|
||||||
|
ColorCode,
|
||||||
|
YakaKodu,
|
||||||
|
NetQty = SUM(NetQty),
|
||||||
|
InQty = CAST(0 AS decimal(18,4)),
|
||||||
|
OutQty = CAST(0 AS decimal(18,4)),
|
||||||
|
KpiInQty = CAST(0 AS decimal(18,4)),
|
||||||
|
KpiOutQty = CAST(0 AS decimal(18,4)),
|
||||||
|
SalesMovementQty = CAST(0 AS decimal(18,4)),
|
||||||
|
ProductionInQty = CAST(0 AS decimal(18,4)),
|
||||||
|
PurchaseInQty = CAST(0 AS decimal(18,4)),
|
||||||
|
ConsumptionOutQty = CAST(0 AS decimal(18,4)),
|
||||||
|
CountDiffQty = CAST(0 AS decimal(18,4))
|
||||||
|
FROM Raw
|
||||||
|
WHERE MovementDate < @p1
|
||||||
|
GROUP BY ProductCode, ColorCode, YakaKodu
|
||||||
|
),
|
||||||
|
Daily AS (
|
||||||
|
SELECT
|
||||||
|
StockDate = MovementDate,
|
||||||
|
ProductCode,
|
||||||
|
ColorCode,
|
||||||
|
YakaKodu,
|
||||||
|
NetQty = SUM(NetQty),
|
||||||
|
InQty = SUM(InQty),
|
||||||
|
OutQty = SUM(OutQty),
|
||||||
|
KpiInQty = SUM(CASE WHEN ProcessCode IN ('OP','BP','CI') THEN InQty ELSE 0 END),
|
||||||
|
KpiOutQty = SUM(CASE WHEN ProcessCode IN ('R','WS','OC','CO') THEN OutQty ELSE 0 END),
|
||||||
|
SalesMovementQty = SUM(CASE WHEN ProcessCode IN ('R','WS') THEN OutQty ELSE 0 END),
|
||||||
|
ProductionInQty = SUM(CASE WHEN ProcessCode = 'OP' THEN InQty ELSE 0 END),
|
||||||
|
PurchaseInQty = SUM(CASE WHEN ProcessCode = 'BP' THEN InQty ELSE 0 END),
|
||||||
|
ConsumptionOutQty = SUM(CASE WHEN ProcessCode = 'OC' THEN OutQty ELSE 0 END),
|
||||||
|
CountDiffQty = SUM(CASE WHEN ProcessCode IN ('CO','CI') THEN NetQty ELSE 0 END)
|
||||||
|
FROM Raw
|
||||||
|
WHERE MovementDate BETWEEN @p1 AND @p2
|
||||||
|
GROUP BY MovementDate, ProductCode, ColorCode, YakaKodu
|
||||||
|
),
|
||||||
|
Series AS (
|
||||||
|
SELECT * FROM Opening
|
||||||
|
UNION ALL
|
||||||
|
SELECT * FROM Daily
|
||||||
|
),
|
||||||
|
Collapsed AS (
|
||||||
|
SELECT
|
||||||
|
StockDate,
|
||||||
|
ProductCode,
|
||||||
|
ColorCode,
|
||||||
|
YakaKodu,
|
||||||
|
NetQty = SUM(NetQty),
|
||||||
|
InQty = SUM(InQty),
|
||||||
|
OutQty = SUM(OutQty),
|
||||||
|
KpiInQty = SUM(KpiInQty),
|
||||||
|
KpiOutQty = SUM(KpiOutQty),
|
||||||
|
SalesMovementQty = SUM(SalesMovementQty),
|
||||||
|
ProductionInQty = SUM(ProductionInQty),
|
||||||
|
PurchaseInQty = SUM(PurchaseInQty),
|
||||||
|
ConsumptionOutQty = SUM(ConsumptionOutQty),
|
||||||
|
CountDiffQty = SUM(CountDiffQty)
|
||||||
|
FROM Series
|
||||||
|
GROUP BY StockDate, ProductCode, ColorCode, YakaKodu
|
||||||
|
),
|
||||||
|
Running AS (
|
||||||
|
SELECT
|
||||||
|
StockDate,
|
||||||
|
ProductCode,
|
||||||
|
ColorCode,
|
||||||
|
YakaKodu,
|
||||||
|
StockQty = SUM(NetQty) OVER (
|
||||||
|
PARTITION BY ProductCode, ColorCode, YakaKodu
|
||||||
|
ORDER BY StockDate
|
||||||
|
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
|
||||||
|
),
|
||||||
|
InQty,
|
||||||
|
OutQty,
|
||||||
|
KpiInQty,
|
||||||
|
KpiOutQty,
|
||||||
|
SalesMovementQty,
|
||||||
|
ProductionInQty,
|
||||||
|
PurchaseInQty,
|
||||||
|
ConsumptionOutQty,
|
||||||
|
CountDiffQty
|
||||||
|
FROM Collapsed
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
StockDate,
|
||||||
|
ProductCode,
|
||||||
|
ColorCode,
|
||||||
|
YakaKodu,
|
||||||
|
StockQty,
|
||||||
|
InQty,
|
||||||
|
OutQty,
|
||||||
|
KpiInQty,
|
||||||
|
KpiOutQty,
|
||||||
|
SalesMovementQty,
|
||||||
|
ProductionInQty,
|
||||||
|
PurchaseInQty,
|
||||||
|
ConsumptionOutQty,
|
||||||
|
CountDiffQty
|
||||||
|
FROM Running
|
||||||
|
WHERE StockDate BETWEEN @p1 AND @p2
|
||||||
|
ORDER BY StockDate, ProductCode, ColorCode, YakaKodu
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
func EnsureProductPerformanceTables(pg *sql.DB) error {
|
func EnsureProductPerformanceTables(pg *sql.DB) error {
|
||||||
stmts := []string{
|
stmts := []string{
|
||||||
`
|
`
|
||||||
@@ -455,7 +614,7 @@ DO UPDATE SET
|
|||||||
|
|
||||||
func refreshProductPerformanceStock(ctx context.Context, tx *sql.Tx, startDate, endDate time.Time, productPrefix string) (int, error) {
|
func refreshProductPerformanceStock(ctx context.Context, tx *sql.Tx, startDate, endDate time.Time, productPrefix string) (int, error) {
|
||||||
log.Printf("[ProductPerformanceRefresh] stock mssql query start start=%s end=%s prefix=%s", startDate.Format("2006-01-02"), endDate.Format("2006-01-02"), productPrefix)
|
log.Printf("[ProductPerformanceRefresh] stock mssql query start start=%s end=%s prefix=%s", startDate.Format("2006-01-02"), endDate.Format("2006-01-02"), productPrefix)
|
||||||
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockSQL(), startDate, endDate, productPrefix)
|
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockQuery(), startDate, endDate, productPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@@ -512,7 +671,7 @@ func refreshProductPerformanceStockChunked(ctx context.Context, pg *sql.DB, star
|
|||||||
|
|
||||||
log.Printf("[ProductPerformanceRefresh] stock refresh start")
|
log.Printf("[ProductPerformanceRefresh] stock refresh start")
|
||||||
log.Printf("[ProductPerformanceRefresh] stock mssql query start start=%s end=%s prefix=%s", startDate.Format("2006-01-02"), endDate.Format("2006-01-02"), productPrefix)
|
log.Printf("[ProductPerformanceRefresh] stock mssql query start start=%s end=%s prefix=%s", startDate.Format("2006-01-02"), endDate.Format("2006-01-02"), productPrefix)
|
||||||
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockSQL(), startDate, endDate, productPrefix)
|
rows, err := db.MssqlDB.QueryContext(ctx, productPerformanceStockQuery(), startDate, endDate, productPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ GROUP BY SalesDate, ProductCode, ColorCode, YakaKodu, ChannelCode, CustomerCount
|
|||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
func productPerformanceStockSQL() string {
|
func productPerformanceStockSQLUnused() string {
|
||||||
return `
|
return `
|
||||||
;WITH ActiveWarehouses AS (
|
;WITH ActiveWarehouses AS (
|
||||||
SELECT WarehouseCode
|
SELECT WarehouseCode
|
||||||
|
|||||||
Reference in New Issue
Block a user