ui: add B2B olmayan stok (orphans) page

This commit is contained in:
M_Kececi
2026-07-02 15:33:49 +03:00
parent 810c0e5eff
commit cbb853d433
19 changed files with 3365 additions and 395 deletions
@@ -0,0 +1,81 @@
package main
import (
"bssapp-backend/db"
"bssapp-backend/queries"
"context"
"encoding/json"
"flag"
"fmt"
"log"
"os"
"runtime"
"strconv"
"time"
"github.com/joho/godotenv"
)
func main() {
mode := flag.String("mode", "full", "refresh mode: full or delta")
stage := flag.String("stage", "all", "refresh stage: all, sales, stock, price, or kpi")
resumeAfter := flag.Int("resume-after", 0, "skip this many source rows before inserting; implies skip-delete")
skipDelete := flag.Bool("skip-delete", false, "skip deleting cache rows for the selected stage")
start := flag.String("start", "2022-01-01", "start date in YYYY-MM-DD")
end := flag.String("end", "", "end date in YYYY-MM-DD; default today")
mssqlTimeoutSec := flag.Int("mssql-timeout-sec", 43200, "MSSQL connection/read timeout in seconds for long refresh jobs")
flag.Parse()
_ = godotenv.Load(".env", "mail.env")
if runtime.GOOS == "windows" {
_ = godotenv.Overload(".env.local")
}
if *mssqlTimeoutSec > 0 {
timeout := strconv.Itoa(*mssqlTimeoutSec)
_ = os.Setenv("MSSQL_CONNECTION_TIMEOUT_SEC", timeout)
_ = os.Setenv("MSSQL_DIAL_TIMEOUT_SEC", timeout)
}
if err := db.ConnectMSSQL(); err != nil {
log.Fatalf("mssql connect failed: %v", err)
}
defer db.MssqlDB.Close()
pg, err := db.ConnectPostgres()
if err != nil {
log.Fatalf("postgres connect failed: %v", err)
}
defer pg.Close()
startDate, err := time.Parse("2006-01-02", *start)
if err != nil {
log.Fatalf("invalid start date: %v", err)
}
var endDate time.Time
if *end == "" {
endDate = time.Now()
} else {
endDate, err = time.Parse("2006-01-02", *end)
if err != nil {
log.Fatalf("invalid end date: %v", err)
}
}
refreshTimeout := time.Duration(*mssqlTimeoutSec) * time.Second
ctx, cancel := context.WithTimeout(context.Background(), refreshTimeout)
defer cancel()
result, err := queries.RefreshProductPerformance(ctx, pg, queries.ProductPerformanceRefreshRequest{
Mode: *mode,
Stage: *stage,
ResumeAfter: *resumeAfter,
SkipDelete: *skipDelete,
StartDate: startDate,
EndDate: endDate,
})
if err != nil {
log.Fatalf("refresh failed: %v", err)
}
out, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(out))
}