Compare commits
59 Commits
f8b07a6aea
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ced1b1649 | ||
|
|
76e7ca2e4a | ||
|
|
ed81fdf84f | ||
|
|
026c40c0b3 | ||
|
|
0136e6638b | ||
|
|
7184a40dd3 | ||
|
|
de58ef1043 | ||
|
|
744e20591d | ||
|
|
1263531edd | ||
|
|
d2bd0684c1 | ||
|
|
13f8801379 | ||
|
|
c3a1627152 | ||
|
|
727069910d | ||
|
|
1f95099677 | ||
|
|
dc36699a2b | ||
|
|
0e63370810 | ||
|
|
ea7d426436 | ||
|
|
369db87091 | ||
|
|
400220995b | ||
|
|
eff80a3211 | ||
|
|
00fc69601e | ||
|
|
3d508868c8 | ||
|
|
46c617b8f5 | ||
|
|
3bbb8539c7 | ||
|
|
5ca00065e6 | ||
|
|
93446e6a69 | ||
|
|
4b455814b4 | ||
|
|
291603163b | ||
|
|
e4cdae58d4 | ||
|
|
6483678267 | ||
|
|
fde9b4469f | ||
|
|
90ed98d59f | ||
|
|
88c20d844f | ||
|
|
cf8352dbaf | ||
|
|
5429305a6e | ||
|
|
88c189a48d | ||
|
|
8eaee91537 | ||
|
|
199390bc66 | ||
|
|
1c1df2521e | ||
|
|
68790c9f4e | ||
|
|
3eac743225 | ||
|
|
d82cea0b54 | ||
|
|
8c0f18eee3 | ||
|
|
3faaf57768 | ||
|
|
10adf327f4 | ||
|
|
47b3e9172f | ||
|
|
9cf575d71d | ||
|
|
585e98afb8 | ||
|
|
76ba649366 | ||
|
|
801ed23cd9 | ||
|
|
2c6515b580 | ||
|
|
6f842043b2 | ||
|
|
7edf87055e | ||
|
|
484512ff25 | ||
|
|
0a14f87a3e | ||
|
|
daedff2880 | ||
|
|
54182e97c5 | ||
|
|
14d71ba925 | ||
|
|
5124ad78af |
12
.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Node
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Build
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Deploy output
|
||||||
|
svc/public/
|
||||||
|
svc/public/**
|
||||||
|
|
||||||
|
ui/dist/
|
||||||
|
ui/dist/**
|
||||||
212
deploy/deploy.sh
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
export NODE_OPTIONS="--max_old_space_size=4096"
|
||||||
|
export CI="true"
|
||||||
|
export npm_config_progress="false"
|
||||||
|
export npm_config_loglevel="warn"
|
||||||
|
export FORCE_COLOR="0"
|
||||||
|
|
||||||
|
LOG_FILE="/var/log/bssapp_deploy.log"
|
||||||
|
APP_DIR="/opt/bssapp"
|
||||||
|
LOCK_FILE="/tmp/bssapp_deploy.lock"
|
||||||
|
RUNTIME_BACKUP_DIR=""
|
||||||
|
RUNTIME_PRESERVE_FILES=(
|
||||||
|
".env"
|
||||||
|
"mail.env"
|
||||||
|
"svc/.env"
|
||||||
|
"svc/mail.env"
|
||||||
|
"svc/fonts"
|
||||||
|
"svc/public"
|
||||||
|
)
|
||||||
|
|
||||||
|
log_step() {
|
||||||
|
echo "== $1 =="
|
||||||
|
}
|
||||||
|
|
||||||
|
backup_runtime_files() {
|
||||||
|
RUNTIME_BACKUP_DIR="$(mktemp -d /tmp/bssapp-runtime.XXXXXX)"
|
||||||
|
|
||||||
|
for rel in "${RUNTIME_PRESERVE_FILES[@]}"; do
|
||||||
|
src="$APP_DIR/$rel"
|
||||||
|
dst="$RUNTIME_BACKUP_DIR/$rel"
|
||||||
|
if [[ -e "$src" ]]; then
|
||||||
|
mkdir -p "$(dirname "$dst")"
|
||||||
|
cp -a "$src" "$dst"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
restore_runtime_files() {
|
||||||
|
[[ -n "$RUNTIME_BACKUP_DIR" && -d "$RUNTIME_BACKUP_DIR" ]] || return 0
|
||||||
|
find "$RUNTIME_BACKUP_DIR" -mindepth 1 -print -quit | grep -q . || return 0
|
||||||
|
cp -a "$RUNTIME_BACKUP_DIR/." "$APP_DIR/"
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup_runtime_backup() {
|
||||||
|
if [[ -n "$RUNTIME_BACKUP_DIR" && -d "$RUNTIME_BACKUP_DIR" ]]; then
|
||||||
|
rm -rf "$RUNTIME_BACKUP_DIR"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_runtime_env_files() {
|
||||||
|
[[ -f "$APP_DIR/.env" ]] || touch "$APP_DIR/.env"
|
||||||
|
[[ -f "$APP_DIR/mail.env" ]] || touch "$APP_DIR/mail.env"
|
||||||
|
[[ -f "$APP_DIR/svc/.env" ]] || touch "$APP_DIR/svc/.env"
|
||||||
|
[[ -f "$APP_DIR/svc/mail.env" ]] || touch "$APP_DIR/svc/mail.env"
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_pdf_fonts() {
|
||||||
|
local font_dir="$APP_DIR/svc/fonts"
|
||||||
|
local sys_font_dir="/usr/share/fonts/truetype/dejavu"
|
||||||
|
|
||||||
|
mkdir -p "$font_dir"
|
||||||
|
|
||||||
|
if [[ ! -f "$font_dir/DejaVuSans.ttf" && -f "$sys_font_dir/DejaVuSans.ttf" ]]; then
|
||||||
|
cp -a "$sys_font_dir/DejaVuSans.ttf" "$font_dir/DejaVuSans.ttf"
|
||||||
|
fi
|
||||||
|
if [[ ! -f "$font_dir/DejaVuSans-Bold.ttf" && -f "$sys_font_dir/DejaVuSans-Bold.ttf" ]]; then
|
||||||
|
cp -a "$sys_font_dir/DejaVuSans-Bold.ttf" "$font_dir/DejaVuSans-Bold.ttf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$font_dir/DejaVuSans.ttf" || ! -f "$font_dir/DejaVuSans-Bold.ttf" ]]; then
|
||||||
|
echo "ERROR: Required PDF fonts missing in $font_dir"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_ui_permissions() {
|
||||||
|
local ui_root="$APP_DIR/ui/dist/spa"
|
||||||
|
|
||||||
|
if [[ ! -d "$ui_root" ]]; then
|
||||||
|
echo "ERROR: UI build output not found at $ui_root"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod 755 /opt "$APP_DIR" "$APP_DIR/ui" "$APP_DIR/ui/dist" "$ui_root"
|
||||||
|
find "$ui_root" -type d -exec chmod 755 {} \;
|
||||||
|
find "$ui_root" -type f -exec chmod 644 {} \;
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_ui_readable_by_nginx() {
|
||||||
|
local ui_index="$APP_DIR/ui/dist/spa/index.html"
|
||||||
|
|
||||||
|
if [[ ! -f "$ui_index" ]]; then
|
||||||
|
echo "ERROR: UI index not found at $ui_index"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if id -u www-data >/dev/null 2>&1; then
|
||||||
|
if ! su -s /bin/sh -c "test -r '$ui_index'" www-data; then
|
||||||
|
echo "ERROR: www-data cannot read $ui_index"
|
||||||
|
namei -l "$ui_index" || true
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
build_api_binary() {
|
||||||
|
if ! command -v go >/dev/null 2>&1; then
|
||||||
|
echo "ERROR: go command not found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export GOPATH="${GOPATH:-/var/cache/bssapp-go}"
|
||||||
|
export GOMODCACHE="${GOMODCACHE:-$GOPATH/pkg/mod}"
|
||||||
|
export GOCACHE="${GOCACHE:-/var/cache/bssapp-go-build}"
|
||||||
|
mkdir -p "$GOPATH" "$GOMODCACHE" "$GOCACHE"
|
||||||
|
|
||||||
|
cd "$APP_DIR/svc"
|
||||||
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-w -s" -o "$APP_DIR/svc/bssapp" ./main.go
|
||||||
|
chmod +x "$APP_DIR/svc/bssapp"
|
||||||
|
}
|
||||||
|
|
||||||
|
restart_services() {
|
||||||
|
systemctl daemon-reload || true
|
||||||
|
|
||||||
|
systemctl restart bssapp
|
||||||
|
if ! systemctl is-active --quiet bssapp; then
|
||||||
|
echo "ERROR: bssapp service failed to start"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if systemctl cat nginx >/dev/null 2>&1; then
|
||||||
|
systemctl restart nginx
|
||||||
|
if ! systemctl is-active --quiet nginx; then
|
||||||
|
echo "ERROR: nginx service failed to start"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "WARN: nginx service not found; frontend may be unreachable."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
run_deploy() {
|
||||||
|
trap cleanup_runtime_backup EXIT
|
||||||
|
|
||||||
|
exec 9>"$LOCK_FILE"
|
||||||
|
if ! flock -n 9; then
|
||||||
|
echo "[$(date '+%F %T')] Deploy already running. Skipping new request."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=============================="
|
||||||
|
echo "[DEPLOY START] $(date '+%F %T')"
|
||||||
|
echo "=============================="
|
||||||
|
|
||||||
|
cd "$APP_DIR"
|
||||||
|
|
||||||
|
log_step "GIT SYNC"
|
||||||
|
backup_runtime_files
|
||||||
|
git fetch origin
|
||||||
|
git reset --hard origin/master
|
||||||
|
git clean -fdx \
|
||||||
|
-e .env \
|
||||||
|
-e mail.env \
|
||||||
|
-e svc/.env \
|
||||||
|
-e svc/mail.env \
|
||||||
|
-e svc/fonts \
|
||||||
|
-e svc/public \
|
||||||
|
-e svc/bssapp
|
||||||
|
restore_runtime_files
|
||||||
|
echo "DEPLOY COMMIT: $(git rev-parse --short HEAD)"
|
||||||
|
|
||||||
|
log_step "BUILD UI"
|
||||||
|
cd "$APP_DIR/ui"
|
||||||
|
npm ci --no-audit --no-fund --include=optional
|
||||||
|
npm i -D --no-audit --no-fund sass-embedded@1.93.2
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
log_step "ENSURE UI PERMISSIONS"
|
||||||
|
ensure_ui_permissions
|
||||||
|
ensure_ui_readable_by_nginx
|
||||||
|
|
||||||
|
log_step "BUILD API"
|
||||||
|
build_api_binary
|
||||||
|
|
||||||
|
log_step "ENSURE ENV FILES"
|
||||||
|
ensure_runtime_env_files
|
||||||
|
|
||||||
|
log_step "ENSURE PDF FONTS"
|
||||||
|
ensure_pdf_fonts
|
||||||
|
|
||||||
|
log_step "RESTART SERVICES"
|
||||||
|
restart_services
|
||||||
|
|
||||||
|
echo "[DEPLOY FINISHED] $(date '+%F %T')"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${1:-}" == "--run" ]]; then
|
||||||
|
mkdir -p "$(dirname "$LOG_FILE")"
|
||||||
|
if command -v logger >/dev/null 2>&1; then
|
||||||
|
run_deploy 2>&1 | tee -a "$LOG_FILE" >(logger -t bssapp-deploy -p user.info)
|
||||||
|
exit ${PIPESTATUS[0]}
|
||||||
|
else
|
||||||
|
run_deploy >>"$LOG_FILE" 2>&1
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
nohup /bin/bash "$0" --run </dev/null >/dev/null 2>&1 &
|
||||||
|
exit 0
|
||||||
57
deploy/hooks.json
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "bssapp-deploy",
|
||||||
|
"execute-command": "/bin/bash",
|
||||||
|
"command-working-directory": "/opt/bssapp",
|
||||||
|
"pass-arguments-to-command": [
|
||||||
|
{
|
||||||
|
"source": "string",
|
||||||
|
"name": "/opt/bssapp/deploy/deploy.sh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"trigger-rule": {
|
||||||
|
"or": [
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"type": "value",
|
||||||
|
"value": "Bearer bssapp-secret-2026",
|
||||||
|
"parameter": {
|
||||||
|
"source": "header",
|
||||||
|
"name": "Authorization"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"type": "value",
|
||||||
|
"value": "bssapp-secret-2026",
|
||||||
|
"parameter": {
|
||||||
|
"source": "header",
|
||||||
|
"name": "Authorization"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"type": "value",
|
||||||
|
"value": "X-BSSAPP-SECRET: bssapp-secret-2026",
|
||||||
|
"parameter": {
|
||||||
|
"source": "header",
|
||||||
|
"name": "Authorization"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"type": "value",
|
||||||
|
"value": "bssapp-secret-2026",
|
||||||
|
"parameter": {
|
||||||
|
"source": "header",
|
||||||
|
"name": "X-BSSAPP-SECRET"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
33
svc/.env.local
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# ===============================
|
||||||
|
# SECURITY
|
||||||
|
# ===============================
|
||||||
|
JWT_SECRET=bssapp_super_secret_key_1234567890
|
||||||
|
PASSWORD_RESET_SECRET=1dc7d6d52fd0459a8b1f288a6590428e760f54339f8e47beb20db36b6df6070b
|
||||||
|
|
||||||
|
# ===============================
|
||||||
|
# URLS (PRODUCTION)
|
||||||
|
# ===============================
|
||||||
|
APP_FRONTEND_URL=http://46.224.33.150
|
||||||
|
API_URL=http://46.224.33.150
|
||||||
|
|
||||||
|
# Eğer Nginx ile /api varsa:
|
||||||
|
# API_URL=http://46.224.33.150/api
|
||||||
|
|
||||||
|
# ===============================
|
||||||
|
# UI
|
||||||
|
# ===============================
|
||||||
|
UI_DIR=/opt/bssapp/ui/dist
|
||||||
|
|
||||||
|
# ===============================
|
||||||
|
# DATABASES
|
||||||
|
# ===============================
|
||||||
|
POSTGRES_CONN=host=46.224.33.150 port=5432 user=postgres password=tayitkan dbname=baggib2b sslmode=disable
|
||||||
|
MSSQL_CONN=sqlserver://sa:Gil_0150@100.127.186.137:1433?database=BAGGI_V3&encrypt=disable
|
||||||
|
|
||||||
|
# ===============================
|
||||||
|
# PDF
|
||||||
|
# ===============================
|
||||||
|
PDF_FONT_DIR=/opt/bssapp/svc/fonts
|
||||||
|
API_HOST=0.0.0.0
|
||||||
|
API_PORT=8080
|
||||||
|
|
||||||
@@ -12,12 +12,11 @@ import (
|
|||||||
|
|
||||||
var MssqlDB *sql.DB
|
var MssqlDB *sql.DB
|
||||||
|
|
||||||
|
// ConnectMSSQL MSSQL baglantisini ortam degiskeninden baslatir.
|
||||||
func ConnectMSSQL() {
|
func ConnectMSSQL() {
|
||||||
connString := strings.TrimSpace(os.Getenv("MSSQL_CONN"))
|
connString := strings.TrimSpace(os.Getenv("MSSQL_CONN"))
|
||||||
|
|
||||||
if connString == "" {
|
if connString == "" {
|
||||||
// Fallback
|
log.Fatal("MSSQL_CONN tanımlı değil")
|
||||||
connString = "server=100.127.186.137;user id=sa;password=Gi l_0150;port=1433;database=BAGGI_V3"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@@ -26,12 +25,11 @@ func ConnectMSSQL() {
|
|||||||
log.Fatal("MSSQL bağlantı hatası:", err)
|
log.Fatal("MSSQL bağlantı hatası:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = MssqlDB.Ping()
|
if err = MssqlDB.Ping(); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Fatal("MSSQL erişilemiyor:", err)
|
log.Fatal("MSSQL erişilemiyor:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("✅ MSSQL bağlantısı başarılı!")
|
fmt.Println("MSSQL bağlantısı başarılı")
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDB() *sql.DB {
|
func GetDB() *sql.DB {
|
||||||
|
|||||||
@@ -13,14 +13,11 @@ import (
|
|||||||
|
|
||||||
var PgDB *sql.DB
|
var PgDB *sql.DB
|
||||||
|
|
||||||
// ConnectPostgres → PostgreSQL veritabanına bağlanır
|
// ConnectPostgres PostgreSQL veritabanına bağlanır.
|
||||||
func ConnectPostgres() (*sql.DB, error) {
|
func ConnectPostgres() (*sql.DB, error) {
|
||||||
// Bağlantı stringi (istersen .env’den oku)
|
connStr := strings.TrimSpace(os.Getenv("POSTGRES_CONN"))
|
||||||
connStr := os.Getenv("POSTGRES_CONN")
|
|
||||||
if connStr == "" {
|
if connStr == "" {
|
||||||
// fallback → sabit tanımlı bağlantı
|
return nil, fmt.Errorf("POSTGRES_CONN tanımlı değil")
|
||||||
connStr = "host= 46.224.33.150 port=5432 user=postgres password=tayitkan dbname=baggib2b sslmode=disable"
|
|
||||||
//connStr = "host=172.16.0.3 port=5432 user=postgres password=tayitkan dbname=baggib2b sslmode=disable"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
db, err := sql.Open("postgres", connStr)
|
db, err := sql.Open("postgres", connStr)
|
||||||
@@ -28,15 +25,13 @@ func ConnectPostgres() (*sql.DB, error) {
|
|||||||
return nil, fmt.Errorf("PostgreSQL bağlantı hatası: %w", err)
|
return nil, fmt.Errorf("PostgreSQL bağlantı hatası: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================
|
// Bağlantı havuzu ayarları (audit log uyumlu).
|
||||||
// 🔹 BAĞLANTI HAVUZU (AUDIT LOG UYUMLU)
|
db.SetMaxOpenConns(30)
|
||||||
// =======================================================
|
|
||||||
db.SetMaxOpenConns(30) // audit + api paralel çalışsın
|
|
||||||
db.SetMaxIdleConns(10)
|
db.SetMaxIdleConns(10)
|
||||||
db.SetConnMaxLifetime(30 * time.Minute)
|
db.SetConnMaxLifetime(30 * time.Minute)
|
||||||
db.SetConnMaxIdleTime(5 * time.Minute) // 🔥 uzun idle audit bağlantılarını kapat
|
db.SetConnMaxIdleTime(5 * time.Minute)
|
||||||
|
|
||||||
// 🔹 Test et
|
// Bağlantıyı test et.
|
||||||
if err = db.Ping(); err != nil {
|
if err = db.Ping(); err != nil {
|
||||||
// Some managed PostgreSQL servers require TLS. If the current DSN uses
|
// Some managed PostgreSQL servers require TLS. If the current DSN uses
|
||||||
// sslmode=disable and server rejects with "no encryption", retry once
|
// sslmode=disable and server rejects with "no encryption", retry once
|
||||||
@@ -45,7 +40,7 @@ func ConnectPostgres() (*sql.DB, error) {
|
|||||||
strings.Contains(err.Error(), "no encryption") &&
|
strings.Contains(err.Error(), "no encryption") &&
|
||||||
strings.Contains(strings.ToLower(connStr), "sslmode=disable") {
|
strings.Contains(strings.ToLower(connStr), "sslmode=disable") {
|
||||||
secureConnStr := strings.Replace(connStr, "sslmode=disable", "sslmode=require", 1)
|
secureConnStr := strings.Replace(connStr, "sslmode=disable", "sslmode=require", 1)
|
||||||
log.Println("⚠️ PostgreSQL requires TLS, retrying with sslmode=require")
|
log.Println("PostgreSQL TLS gerektiriyor, sslmode=require ile tekrar deneniyor")
|
||||||
|
|
||||||
_ = db.Close()
|
_ = db.Close()
|
||||||
db, err = sql.Open("postgres", secureConnStr)
|
db, err = sql.Open("postgres", secureConnStr)
|
||||||
@@ -66,13 +61,12 @@ func ConnectPostgres() (*sql.DB, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("✅ PostgreSQL bağlantısı başarılı!")
|
log.Println("PostgreSQL bağlantısı başarılı")
|
||||||
PgDB = db
|
PgDB = db
|
||||||
return db, nil
|
return db, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPostgresUsers → test amaçlı ilk 5 kullanıcıyı listeler
|
// GetPostgresUsers test amaçlı ilk 5 kullanıcıyı listeler.
|
||||||
func GetPostgresUsers(db *sql.DB) error {
|
func GetPostgresUsers(db *sql.DB) error {
|
||||||
query := `SELECT id, code, email FROM mk_dfusr ORDER BY id LIMIT 5`
|
query := `SELECT id, code, email FROM mk_dfusr ORDER BY id LIMIT 5`
|
||||||
rows, err := db.Query(query)
|
rows, err := db.Query(query)
|
||||||
@@ -81,14 +75,14 @@ func GetPostgresUsers(db *sql.DB) error {
|
|||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
fmt.Println("📋 İlk 5 PostgreSQL kullanıcısı:")
|
fmt.Println("İlk 5 PostgreSQL kullanıcısı:")
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id int
|
var id int
|
||||||
var code, email string
|
var code, email string
|
||||||
if err := rows.Scan(&id, &code, &email); err != nil {
|
if err := rows.Scan(&id, &code, &email); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf(" ➜ ID: %-4d | USER: %-20s | EMAIL: %s\n", id, code, email)
|
fmt.Printf(" -> ID: %-4d | USER: %-20s | EMAIL: %s\n", id, code, email)
|
||||||
}
|
}
|
||||||
|
|
||||||
return rows.Err()
|
return rows.Err()
|
||||||
|
|||||||
51
svc/main.go
@@ -212,19 +212,19 @@ func InitRoutes(pgDB *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) *mux.Router
|
|||||||
// ============================================================
|
// ============================================================
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
"/api/password/change", "POST",
|
"/api/password/change", "POST",
|
||||||
"system", "update",
|
"auth", "update",
|
||||||
wrapV3(http.HandlerFunc(routes.FirstPasswordChangeHandler(pgDB))),
|
wrapV3(http.HandlerFunc(routes.FirstPasswordChangeHandler(pgDB))),
|
||||||
)
|
)
|
||||||
|
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
"/api/activity-logs", "GET",
|
"/api/activity-logs", "GET",
|
||||||
"user", "view",
|
"system", "read",
|
||||||
wrapV3(routes.AdminActivityLogsHandler(pgDB)),
|
wrapV3(routes.AdminActivityLogsHandler(pgDB)),
|
||||||
)
|
)
|
||||||
|
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
"/api/test-mail", "POST",
|
"/api/test-mail", "POST",
|
||||||
"user", "insert",
|
"system", "update",
|
||||||
wrapV3(routes.TestMailHandler(ml)),
|
wrapV3(routes.TestMailHandler(ml)),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -235,12 +235,12 @@ func InitRoutes(pgDB *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) *mux.Router
|
|||||||
|
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
rolePerm, "GET",
|
rolePerm, "GET",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(routes.GetRolePermissionMatrix(pgDB)),
|
wrapV3(routes.GetRolePermissionMatrix(pgDB)),
|
||||||
)
|
)
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
rolePerm, "POST",
|
rolePerm, "POST",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(routes.SaveRolePermissionMatrix(pgDB)),
|
wrapV3(routes.SaveRolePermissionMatrix(pgDB)),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -248,12 +248,12 @@ func InitRoutes(pgDB *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) *mux.Router
|
|||||||
|
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
userPerm, "GET",
|
userPerm, "GET",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(routes.GetUserPermissionsHandler(pgDB)),
|
wrapV3(routes.GetUserPermissionsHandler(pgDB)),
|
||||||
)
|
)
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
userPerm, "POST",
|
userPerm, "POST",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(routes.SaveUserPermissionsHandler(pgDB)),
|
wrapV3(routes.SaveUserPermissionsHandler(pgDB)),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -286,17 +286,17 @@ func InitRoutes(pgDB *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) *mux.Router
|
|||||||
|
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
"/api/role-dept-permissions/list", "GET",
|
"/api/role-dept-permissions/list", "GET",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(http.HandlerFunc(rdHandler.List)),
|
wrapV3(http.HandlerFunc(rdHandler.List)),
|
||||||
)
|
)
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
rdPerm, "GET",
|
rdPerm, "GET",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(http.HandlerFunc(rdHandler.Get)),
|
wrapV3(http.HandlerFunc(rdHandler.Get)),
|
||||||
)
|
)
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
rdPerm, "POST",
|
rdPerm, "POST",
|
||||||
"user", "update",
|
"system", "update",
|
||||||
wrapV3(http.HandlerFunc(rdHandler.Save)),
|
wrapV3(http.HandlerFunc(rdHandler.Save)),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -325,6 +325,11 @@ func InitRoutes(pgDB *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) *mux.Router
|
|||||||
"user", "update",
|
"user", "update",
|
||||||
wrapV3(routes.UserDetailRoute(pgDB)),
|
wrapV3(routes.UserDetailRoute(pgDB)),
|
||||||
)
|
)
|
||||||
|
bindV3(r, pgDB,
|
||||||
|
"/api/users/{id}", "DELETE",
|
||||||
|
"user", "delete",
|
||||||
|
wrapV3(routes.UserDetailRoute(pgDB)),
|
||||||
|
)
|
||||||
|
|
||||||
bindV3(r, pgDB,
|
bindV3(r, pgDB,
|
||||||
"/api/users/{id}/admin-reset-password", "POST",
|
"/api/users/{id}/admin-reset-password", "POST",
|
||||||
@@ -611,8 +616,21 @@ func main() {
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
log.Println("✅ Server çalışıyor: http://localhost:8080")
|
host := strings.TrimSpace(os.Getenv("API_HOST"))
|
||||||
log.Fatal(http.ListenAndServe(":8080", handler))
|
port := strings.TrimSpace(os.Getenv("API_PORT"))
|
||||||
|
|
||||||
|
if host == "" {
|
||||||
|
host = "0.0.0.0"
|
||||||
|
}
|
||||||
|
if port == "" {
|
||||||
|
port = "8080"
|
||||||
|
}
|
||||||
|
|
||||||
|
addr := host + ":" + port
|
||||||
|
|
||||||
|
log.Println("🚀 Server running at:", addr)
|
||||||
|
log.Fatal(http.ListenAndServe(addr, handler))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func mountSPA(r *mux.Router) {
|
func mountSPA(r *mux.Router) {
|
||||||
@@ -672,12 +690,17 @@ func uiRootDir() string {
|
|||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
candidates := []string{"../ui/dist", "./ui/dist"}
|
candidates := []string{
|
||||||
|
"../ui/dist/spa",
|
||||||
|
"./ui/dist/spa",
|
||||||
|
"../ui/dist",
|
||||||
|
"./ui/dist",
|
||||||
|
}
|
||||||
for _, d := range candidates {
|
for _, d := range candidates {
|
||||||
if fi, err := os.Stat(d); err == nil && fi.IsDir() {
|
if fi, err := os.Stat(d); err == nil && fi.IsDir() {
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return "../ui/dist"
|
return "../ui/dist/spa"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,29 +10,49 @@ import (
|
|||||||
|
|
||||||
func AuthMiddleware(db *sql.DB, next http.Handler) http.Handler {
|
func AuthMiddleware(db *sql.DB, next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
authHeader := r.Header.Get("Authorization")
|
authHeader := r.Header.Get("Authorization")
|
||||||
if authHeader == "" {
|
if authHeader == "" {
|
||||||
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
log.Printf(
|
||||||
|
"AUTH_MIDDLEWARE 401 reason=missing_authorization_header method=%s path=%s",
|
||||||
|
r.Method,
|
||||||
|
r.URL.Path,
|
||||||
|
)
|
||||||
|
http.Error(w, "unauthorized: authorization header missing", http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
parts := strings.SplitN(authHeader, " ", 2)
|
parts := strings.SplitN(authHeader, " ", 2)
|
||||||
if len(parts) != 2 || parts[0] != "Bearer" {
|
if len(parts) != 2 || parts[0] != "Bearer" {
|
||||||
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
log.Printf(
|
||||||
|
"AUTH_MIDDLEWARE 401 reason=invalid_authorization_format method=%s path=%s raw=%q",
|
||||||
|
r.Method,
|
||||||
|
r.URL.Path,
|
||||||
|
authHeader,
|
||||||
|
)
|
||||||
|
http.Error(w, "unauthorized: invalid authorization format", http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
claims, err := auth.ValidateToken(parts[1])
|
claims, err := auth.ValidateToken(parts[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
log.Printf(
|
||||||
|
"AUTH_MIDDLEWARE 401 reason=token_validation_failed method=%s path=%s err=%v",
|
||||||
|
r.Method,
|
||||||
|
r.URL.Path,
|
||||||
|
err,
|
||||||
|
)
|
||||||
|
http.Error(w, "unauthorized: token validation failed", http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔥 BU SATIR ŞART
|
|
||||||
ctx := auth.WithClaims(r.Context(), claims)
|
ctx := auth.WithClaims(r.Context(), claims)
|
||||||
|
log.Printf(
|
||||||
log.Printf("🔐 AUTH CTX SET user=%d role=%s", claims.ID, claims.RoleCode)
|
"AUTH_MIDDLEWARE PASS user=%d role=%s method=%s path=%s",
|
||||||
|
claims.ID,
|
||||||
|
claims.RoleCode,
|
||||||
|
r.Method,
|
||||||
|
r.URL.Path,
|
||||||
|
)
|
||||||
|
|
||||||
next.ServeHTTP(w, r.WithContext(ctx))
|
next.ServeHTTP(w, r.WithContext(ctx))
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -859,7 +859,12 @@ func AuthzGuardByRoute(pg *sql.DB) func(http.Handler) http.Handler {
|
|||||||
// =====================================================
|
// =====================================================
|
||||||
claims, ok := auth.GetClaimsFromContext(r.Context())
|
claims, ok := auth.GetClaimsFromContext(r.Context())
|
||||||
if !ok || claims == nil {
|
if !ok || claims == nil {
|
||||||
http.Error(w, "unauthorized", http.StatusUnauthorized)
|
log.Printf(
|
||||||
|
"AUTHZ_BY_ROUTE 401 reason=claims_missing method=%s path=%s",
|
||||||
|
r.Method,
|
||||||
|
r.URL.Path,
|
||||||
|
)
|
||||||
|
http.Error(w, "unauthorized: token missing or invalid", http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -873,7 +878,7 @@ func AuthzGuardByRoute(pg *sql.DB) func(http.Handler) http.Handler {
|
|||||||
r.Method, r.URL.Path,
|
r.Method, r.URL.Path,
|
||||||
)
|
)
|
||||||
|
|
||||||
http.Error(w, "route not resolved", 403)
|
http.Error(w, "route not resolved", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -881,7 +886,22 @@ func AuthzGuardByRoute(pg *sql.DB) func(http.Handler) http.Handler {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("❌ AUTHZ: path template error: %v", err)
|
log.Printf("❌ AUTHZ: path template error: %v", err)
|
||||||
|
|
||||||
http.Error(w, "route template error", 403)
|
http.Error(w, "route template error", http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Password change must be reachable for every authenticated user.
|
||||||
|
// This avoids permission deadlocks during forced first-password flow.
|
||||||
|
if pathTemplate == "/api/password/change" {
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Self permission endpoints are required right after login
|
||||||
|
// to hydrate UI permission state for the authenticated user.
|
||||||
|
switch pathTemplate {
|
||||||
|
case "/api/permissions/routes", "/api/permissions/effective":
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -908,7 +928,12 @@ func AuthzGuardByRoute(pg *sql.DB) func(http.Handler) http.Handler {
|
|||||||
pathTemplate,
|
pathTemplate,
|
||||||
)
|
)
|
||||||
|
|
||||||
http.Error(w, "route permission not found", 403)
|
if pathTemplate == "/api/password/change" {
|
||||||
|
http.Error(w, "password change route permission not found", http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Error(w, "route permission not found", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -935,7 +960,12 @@ func AuthzGuardByRoute(pg *sql.DB) func(http.Handler) http.Handler {
|
|||||||
err,
|
err,
|
||||||
)
|
)
|
||||||
|
|
||||||
http.Error(w, "forbidden", 403)
|
if pathTemplate == "/api/password/change" {
|
||||||
|
http.Error(w, "password change permission check failed", http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Error(w, "forbidden", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -948,7 +978,12 @@ func AuthzGuardByRoute(pg *sql.DB) func(http.Handler) http.Handler {
|
|||||||
action,
|
action,
|
||||||
)
|
)
|
||||||
|
|
||||||
http.Error(w, "forbidden", 403)
|
if pathTemplate == "/api/password/change" {
|
||||||
|
http.Error(w, "password change forbidden: permission denied", http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Error(w, "forbidden", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 58 KiB |
@@ -183,7 +183,6 @@ WHERE
|
|||||||
AND h.ProcessCode = 'WS'
|
AND h.ProcessCode = 'WS'
|
||||||
AND h.IsClosed = 0
|
AND h.IsClosed = 0
|
||||||
AND ISNULL(l.TotalAmount,0) > 0
|
AND ISNULL(l.TotalAmount,0) > 0
|
||||||
AND (ISNULL(l.PackedAmount,0) * 100.0) / NULLIF(l.TotalAmount,0) >= 100
|
|
||||||
|
|
||||||
AND EXISTS (
|
AND EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
@@ -322,7 +321,6 @@ WHERE
|
|||||||
) t
|
) t
|
||||||
WHERE t.OrderHeaderID = h.OrderHeaderID
|
WHERE t.OrderHeaderID = h.OrderHeaderID
|
||||||
AND t.TotalAmount > 0
|
AND t.TotalAmount > 0
|
||||||
AND (t.PackedAmount * 100.0) / NULLIF(t.TotalAmount,0) >= 100
|
|
||||||
);
|
);
|
||||||
`, strings.Join(placeholders, ","), piyasaWhere)
|
`, strings.Join(placeholders, ","), piyasaWhere)
|
||||||
|
|
||||||
|
|||||||
@@ -10,74 +10,135 @@ import (
|
|||||||
|
|
||||||
// Ana tabloyu getiren fonksiyon (Vue header tablosu için)
|
// Ana tabloyu getiren fonksiyon (Vue header tablosu için)
|
||||||
func GetStatements(params models.StatementParams) ([]models.StatementHeader, error) {
|
func GetStatements(params models.StatementParams) ([]models.StatementHeader, error) {
|
||||||
|
|
||||||
// AccountCode normalize: "ZLA0127" → "ZLA 0127"
|
// AccountCode normalize: "ZLA0127" → "ZLA 0127"
|
||||||
if len(params.AccountCode) == 7 && strings.ContainsAny(params.AccountCode, "0123456789") {
|
if len(params.AccountCode) == 7 && strings.ContainsAny(params.AccountCode, "0123456789") {
|
||||||
params.AccountCode = params.AccountCode[:3] + " " + params.AccountCode[3:]
|
params.AccountCode = params.AccountCode[:3] + " " + params.AccountCode[3:]
|
||||||
}
|
}
|
||||||
|
if strings.TrimSpace(params.LangCode) == "" {
|
||||||
|
params.LangCode = "TR"
|
||||||
|
}
|
||||||
|
|
||||||
// Parislemler []string → '1','2','3'
|
// Parislemler []string → '1','2','3'
|
||||||
parislemFilter := "''"
|
parislemFilter := "''"
|
||||||
if len(params.Parislemler) > 0 {
|
if len(params.Parislemler) > 0 {
|
||||||
quoted := make([]string, len(params.Parislemler))
|
quoted := make([]string, 0, len(params.Parislemler))
|
||||||
for i, v := range params.Parislemler {
|
for _, v := range params.Parislemler {
|
||||||
quoted[i] = fmt.Sprintf("'%s'", v)
|
v = strings.TrimSpace(v)
|
||||||
|
if v == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
quoted = append(quoted, fmt.Sprintf("'%s'", strings.ReplaceAll(v, "'", "''")))
|
||||||
|
}
|
||||||
|
if len(quoted) > 0 {
|
||||||
|
parislemFilter = strings.Join(quoted, ",")
|
||||||
}
|
}
|
||||||
parislemFilter = strings.Join(quoted, ",")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
query := fmt.Sprintf(`
|
query := fmt.Sprintf(`
|
||||||
;WITH Opening AS (
|
;WITH CurrDesc AS (
|
||||||
SELECT
|
SELECT
|
||||||
b.CurrAccCode AS Cari_Kod,
|
CurrAccCode,
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
MAX(CurrAccDescription) AS CurrAccDescription
|
||||||
SUM(c.Debit - c.Credit) AS Devir_Bakiyesi
|
FROM cdCurrAccDesc
|
||||||
|
WHERE LangCode = @LangCode
|
||||||
|
GROUP BY CurrAccCode
|
||||||
|
),
|
||||||
|
|
||||||
|
/* =========================================================
|
||||||
|
✅ Bu aralıkta hareket var mı?
|
||||||
|
Varsa : Devir = startdate öncesi
|
||||||
|
Yoksa : Devir = enddate dahil (enddate itibariyle bakiye)
|
||||||
|
========================================================= */
|
||||||
|
HasMovement AS (
|
||||||
|
SELECT
|
||||||
|
CASE WHEN EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM trCurrAccBook b
|
||||||
|
INNER JOIN CurrAccBookATAttributesFilter f
|
||||||
|
ON f.CurrAccBookID = b.CurrAccBookID
|
||||||
|
AND f.ATAtt01 IN (%s)
|
||||||
|
WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
||||||
|
AND b.DocumentDate BETWEEN @startdate AND @enddate
|
||||||
|
) THEN 1 ELSE 0 END AS HasMov
|
||||||
|
),
|
||||||
|
|
||||||
|
/* =========================================================
|
||||||
|
✅ Opening (Devir) — TEK CARİ KOD ALTINDA KONSOLİDE
|
||||||
|
Cari_Kod = @Carikod (sabit)
|
||||||
|
========================================================= */
|
||||||
|
Opening AS (
|
||||||
|
SELECT
|
||||||
|
@Carikod AS Cari_Kod,
|
||||||
|
b.DocCurrencyCode AS Para_Birimi,
|
||||||
|
SUM(ISNULL(c.Debit,0) - ISNULL(c.Credit,0)) AS Devir_Bakiyesi
|
||||||
FROM trCurrAccBook b
|
FROM trCurrAccBook b
|
||||||
|
CROSS JOIN HasMovement hm
|
||||||
|
INNER JOIN CurrAccBookATAttributesFilter f2
|
||||||
|
ON f2.CurrAccBookID = b.CurrAccBookID
|
||||||
|
AND f2.ATAtt01 IN (%s)
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
LEFT JOIN trCurrAccBookCurrency c
|
||||||
ON c.CurrAccBookID = b.CurrAccBookID
|
ON c.CurrAccBookID = b.CurrAccBookID
|
||||||
AND c.CurrencyCode = b.DocCurrencyCode
|
AND c.CurrencyCode = b.DocCurrencyCode
|
||||||
WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
||||||
AND b.DocumentDate < @startdate
|
AND (
|
||||||
AND EXISTS (
|
(hm.HasMov = 1 AND b.DocumentDate < @startdate) -- hareket varsa: klasik devir
|
||||||
SELECT 1
|
OR (hm.HasMov = 0 AND b.DocumentDate <= @enddate) -- hareket yoksa: enddate itibariyle bakiye
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
WHERE f2.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
)
|
)
|
||||||
GROUP BY b.CurrAccCode, b.DocCurrencyCode
|
GROUP BY b.DocCurrencyCode
|
||||||
),
|
),
|
||||||
|
|
||||||
|
/* =========================================================
|
||||||
|
✅ Hareketler (Movements) — TEK CARİ KOD ALTINDA KONSOLİDE
|
||||||
|
Cari_Kod = @Carikod (sabit)
|
||||||
|
Running sadece aralıktaki hareketlerden gelir.
|
||||||
|
========================================================= */
|
||||||
Movements AS (
|
Movements AS (
|
||||||
SELECT
|
SELECT
|
||||||
b.CurrAccCode AS Cari_Kod,
|
@Carikod AS Cari_Kod,
|
||||||
d.CurrAccDescription AS Cari_Isim,
|
|
||||||
|
COALESCE(
|
||||||
|
(SELECT TOP 1 cd.CurrAccDescription
|
||||||
|
FROM CurrDesc cd
|
||||||
|
WHERE cd.CurrAccCode = @Carikod),
|
||||||
|
(SELECT TOP 1 cd.CurrAccDescription
|
||||||
|
FROM CurrDesc cd
|
||||||
|
WHERE cd.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
||||||
|
ORDER BY cd.CurrAccCode)
|
||||||
|
) AS Cari_Isim,
|
||||||
|
|
||||||
CONVERT(varchar(10), b.DocumentDate, 23) AS Belge_Tarihi,
|
CONVERT(varchar(10), b.DocumentDate, 23) AS Belge_Tarihi,
|
||||||
CONVERT(varchar(10), b.DueDate, 23) AS Vade_Tarihi,
|
CONVERT(varchar(10), b.DueDate, 23) AS Vade_Tarihi,
|
||||||
b.RefNumber AS Belge_No,
|
|
||||||
|
b.RefNumber AS Belge_No,
|
||||||
b.BaseApplicationCode AS Islem_Tipi,
|
b.BaseApplicationCode AS Islem_Tipi,
|
||||||
b.LineDescription AS Aciklama,
|
b.LineDescription AS Aciklama,
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
c.Debit AS Borc,
|
b.DocCurrencyCode AS Para_Birimi,
|
||||||
c.Credit AS Alacak,
|
|
||||||
SUM(c.Debit - c.Credit)
|
ISNULL(c.Debit,0) AS Borc,
|
||||||
OVER (PARTITION BY b.CurrAccCode, c.CurrencyCode
|
ISNULL(c.Credit,0) AS Alacak,
|
||||||
ORDER BY b.DocumentDate, b.CurrAccBookID) AS Hareket_Bakiyesi,
|
|
||||||
|
SUM(ISNULL(c.Debit,0) - ISNULL(c.Credit,0))
|
||||||
|
OVER (
|
||||||
|
PARTITION BY b.DocCurrencyCode
|
||||||
|
ORDER BY b.DocumentDate, b.CurrAccBookID
|
||||||
|
) AS Hareket_Bakiyesi,
|
||||||
|
|
||||||
f.ATAtt01 AS Parislemtipi
|
f.ATAtt01 AS Parislemtipi
|
||||||
|
|
||||||
FROM trCurrAccBook b
|
FROM trCurrAccBook b
|
||||||
LEFT JOIN cdCurrAccDesc d
|
INNER JOIN CurrAccBookATAttributesFilter f
|
||||||
ON b.CurrAccCode = d.CurrAccCode
|
ON f.CurrAccBookID = b.CurrAccBookID
|
||||||
|
AND f.ATAtt01 IN (%s)
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
LEFT JOIN trCurrAccBookCurrency c
|
||||||
ON b.CurrAccBookID = c.CurrAccBookID
|
ON c.CurrAccBookID = b.CurrAccBookID
|
||||||
AND b.DocCurrencyCode = c.CurrencyCode
|
AND c.CurrencyCode = b.DocCurrencyCode
|
||||||
LEFT JOIN CurrAccBookATAttributesFilter f
|
|
||||||
ON b.CurrAccBookID = f.CurrAccBookID
|
|
||||||
WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
||||||
AND b.DocumentDate BETWEEN @startdate AND @enddate
|
AND b.DocumentDate BETWEEN @startdate AND @enddate
|
||||||
AND EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
WHERE f2.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
m.Cari_Kod,
|
m.Cari_Kod,
|
||||||
m.Cari_Isim,
|
m.Cari_Isim,
|
||||||
@@ -89,52 +150,62 @@ SELECT
|
|||||||
m.Para_Birimi,
|
m.Para_Birimi,
|
||||||
m.Borc,
|
m.Borc,
|
||||||
m.Alacak,
|
m.Alacak,
|
||||||
|
|
||||||
|
/* ✅ Bakiye = Devir + Aralıktaki Running */
|
||||||
ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye,
|
ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye,
|
||||||
|
|
||||||
m.Parislemtipi AS Parislemler
|
m.Parislemtipi AS Parislemler
|
||||||
|
|
||||||
FROM Movements m
|
FROM Movements m
|
||||||
LEFT JOIN Opening o
|
LEFT JOIN Opening o
|
||||||
ON o.Cari_Kod = m.Cari_Kod
|
ON o.Cari_Kod = m.Cari_Kod
|
||||||
AND o.Para_Birimi = m.Para_Birimi
|
AND o.Para_Birimi = m.Para_Birimi
|
||||||
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
|
|
||||||
-- Devir satırı
|
/* =========================================================
|
||||||
|
✅ Devir Satırı (kur bazında) — Opening'den gelir
|
||||||
|
Hareket varsa: startdate öncesi
|
||||||
|
Hareket yoksa: enddate itibariyle bakiye
|
||||||
|
========================================================= */
|
||||||
SELECT
|
SELECT
|
||||||
@Carikod AS Cari_Kod,
|
o.Cari_Kod,
|
||||||
MAX(d.CurrAccDescription) AS Cari_Isim,
|
COALESCE(
|
||||||
|
(SELECT TOP 1 cd.CurrAccDescription
|
||||||
|
FROM CurrDesc cd
|
||||||
|
WHERE cd.CurrAccCode = @Carikod),
|
||||||
|
(SELECT TOP 1 cd.CurrAccDescription
|
||||||
|
FROM CurrDesc cd
|
||||||
|
WHERE cd.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
||||||
|
ORDER BY cd.CurrAccCode)
|
||||||
|
) AS Cari_Isim,
|
||||||
|
|
||||||
CONVERT(varchar(10), @startdate, 23) AS Belge_Tarihi,
|
CONVERT(varchar(10), @startdate, 23) AS Belge_Tarihi,
|
||||||
CONVERT(varchar(10), @startdate, 23) AS Vade_Tarihi,
|
CONVERT(varchar(10), @startdate, 23) AS Vade_Tarihi,
|
||||||
'Baslangic_devir' AS Belge_No,
|
|
||||||
'Devir' AS Islem_Tipi,
|
|
||||||
'Devir Bakiyesi' AS Aciklama,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
SUM(c.Debit) AS Borc,
|
|
||||||
SUM(c.Credit) AS Alacak,
|
|
||||||
SUM(c.Debit) - SUM(c.Credit) AS Bakiye,
|
|
||||||
(
|
|
||||||
SELECT STRING_AGG(x.ATAtt01, ',')
|
|
||||||
FROM (
|
|
||||||
SELECT DISTINCT f2.ATAtt01
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
INNER JOIN trCurrAccBook bb
|
|
||||||
ON f2.CurrAccBookID = bb.CurrAccBookID
|
|
||||||
WHERE bb.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
|
||||||
AND bb.DocumentDate < @startdate
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
) x
|
|
||||||
) AS Parislemler
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN cdCurrAccDesc d
|
|
||||||
ON b.CurrAccCode = d.CurrAccCode
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON b.CurrAccBookID = c.CurrAccBookID
|
|
||||||
AND b.DocCurrencyCode = c.CurrencyCode
|
|
||||||
WHERE b.CurrAccCode LIKE '%%' + @Carikod + '%%'
|
|
||||||
AND b.DocumentDate < @startdate
|
|
||||||
GROUP BY b.DocCurrencyCode
|
|
||||||
|
|
||||||
ORDER BY Para_Birimi, Belge_Tarihi;
|
'Baslangic_devir' AS Belge_No,
|
||||||
`, parislemFilter, parislemFilter, parislemFilter)
|
'Devir' AS Islem_Tipi,
|
||||||
|
'Devir Bakiyesi' AS Aciklama,
|
||||||
|
|
||||||
|
o.Para_Birimi,
|
||||||
|
|
||||||
|
CASE WHEN o.Devir_Bakiyesi >= 0 THEN o.Devir_Bakiyesi ELSE 0 END AS Borc,
|
||||||
|
CASE WHEN o.Devir_Bakiyesi < 0 THEN ABS(o.Devir_Bakiyesi) ELSE 0 END AS Alacak,
|
||||||
|
|
||||||
|
o.Devir_Bakiyesi AS Bakiye,
|
||||||
|
|
||||||
|
CAST(NULL AS varchar(32)) AS Parislemler
|
||||||
|
|
||||||
|
FROM Opening o
|
||||||
|
|
||||||
|
ORDER BY
|
||||||
|
Para_Birimi,
|
||||||
|
Belge_Tarihi;
|
||||||
|
`,
|
||||||
|
parislemFilter, // HasMovement
|
||||||
|
parislemFilter, // Opening
|
||||||
|
parislemFilter, // Movements
|
||||||
|
)
|
||||||
|
|
||||||
rows, err := db.MssqlDB.Query(query,
|
rows, err := db.MssqlDB.Query(query,
|
||||||
sql.Named("startdate", params.StartDate),
|
sql.Named("startdate", params.StartDate),
|
||||||
|
|||||||
@@ -1,187 +1,18 @@
|
|||||||
// queries/statements_header_pdf.go
|
|
||||||
package queries
|
package queries
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bssapp-backend/db"
|
|
||||||
"bssapp-backend/models"
|
"bssapp-backend/models"
|
||||||
"database/sql"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// küçük yardımcı: boşlukları temizle, her değeri ayrı tırnakla sar
|
|
||||||
func buildQuotedHList(vals []string) string {
|
|
||||||
var pp []string
|
|
||||||
for _, v := range vals {
|
|
||||||
v = strings.TrimSpace(v)
|
|
||||||
if v != "" {
|
|
||||||
pp = append(pp, fmt.Sprintf("'%s'", v)) // '1','2' gibi
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(pp) == 0 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return strings.Join(pp, ",")
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============================ HEADER (Ana Tablo) ============================ */
|
|
||||||
|
|
||||||
func GetStatementsHPDF(accountCode, startDate, endDate string, parislemler []string) ([]models.StatementHeader, []string, error) {
|
func GetStatementsHPDF(accountCode, startDate, endDate string, parislemler []string) ([]models.StatementHeader, []string, error) {
|
||||||
// Account normalize
|
headers, err := getStatementsForPDF(accountCode, startDate, endDate, parislemler)
|
||||||
if len(accountCode) == 7 && strings.ContainsAny(accountCode, "0123456789") {
|
|
||||||
accountCode = accountCode[:3] + " " + accountCode[3:]
|
|
||||||
}
|
|
||||||
|
|
||||||
// IN list parse et
|
|
||||||
inList := buildQuotedHList(parislemler)
|
|
||||||
parislemCond := "''"
|
|
||||||
if inList != "" {
|
|
||||||
parislemCond = inList
|
|
||||||
}
|
|
||||||
|
|
||||||
query := fmt.Sprintf(`
|
|
||||||
;WITH Opening AS (
|
|
||||||
SELECT
|
|
||||||
b.CurrAccCode AS Cari_Kod,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
SUM(c.Debit - c.Credit) AS Devir_Bakiyesi
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON c.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND c.CurrencyCode = b.DocCurrencyCode
|
|
||||||
WHERE b.CurrAccCode LIKE @Carikod
|
|
||||||
AND b.DocumentDate < @StartDate
|
|
||||||
AND EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
WHERE f2.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
)
|
|
||||||
GROUP BY b.CurrAccCode, b.DocCurrencyCode
|
|
||||||
),
|
|
||||||
Movements AS (
|
|
||||||
SELECT
|
|
||||||
b.CurrAccCode AS Cari_Kod,
|
|
||||||
d.CurrAccDescription AS Cari_Isim,
|
|
||||||
CONVERT(varchar(10), b.DocumentDate, 23) AS Belge_Tarihi,
|
|
||||||
CONVERT(varchar(10), b.DueDate, 23) AS Vade_Tarihi,
|
|
||||||
b.RefNumber AS Belge_No,
|
|
||||||
b.BaseApplicationCode AS Islem_Tipi,
|
|
||||||
b.LineDescription AS Aciklama,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
c.Debit AS Borc,
|
|
||||||
c.Credit AS Alacak,
|
|
||||||
SUM(c.Debit - c.Credit)
|
|
||||||
OVER (PARTITION BY b.CurrAccCode, c.CurrencyCode
|
|
||||||
ORDER BY b.DocumentDate, b.CurrAccBookID) AS Hareket_Bakiyesi,
|
|
||||||
f.ATAtt01 AS Parislemler
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN cdCurrAccDesc d
|
|
||||||
ON b.CurrAccCode = d.CurrAccCode AND d.LangCode = 'TR'
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON b.CurrAccBookID = c.CurrAccBookID
|
|
||||||
AND b.DocCurrencyCode = c.CurrencyCode
|
|
||||||
LEFT JOIN CurrAccBookATAttributesFilter f
|
|
||||||
ON b.CurrAccBookID = f.CurrAccBookID
|
|
||||||
WHERE b.CurrAccCode LIKE @Carikod
|
|
||||||
AND b.DocumentDate BETWEEN @StartDate AND @EndDate
|
|
||||||
AND EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
WHERE f2.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
)
|
|
||||||
)`, parislemCond, parislemCond)
|
|
||||||
query += fmt.Sprintf(`
|
|
||||||
SELECT
|
|
||||||
m.Cari_Kod,
|
|
||||||
m.Cari_Isim,
|
|
||||||
m.Belge_Tarihi,
|
|
||||||
m.Vade_Tarihi,
|
|
||||||
m.Belge_No,
|
|
||||||
m.Islem_Tipi,
|
|
||||||
m.Aciklama,
|
|
||||||
m.Para_Birimi,
|
|
||||||
m.Borc,
|
|
||||||
m.Alacak,
|
|
||||||
ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye,
|
|
||||||
m.Parislemler
|
|
||||||
FROM Movements m
|
|
||||||
LEFT JOIN Opening o
|
|
||||||
ON o.Cari_Kod = m.Cari_Kod
|
|
||||||
AND o.Para_Birimi = m.Para_Birimi
|
|
||||||
|
|
||||||
UNION ALL
|
|
||||||
|
|
||||||
-- Devir satırı
|
|
||||||
SELECT
|
|
||||||
@Carikod AS Cari_Kod,
|
|
||||||
MAX(d.CurrAccDescription) AS Cari_Isim,
|
|
||||||
CONVERT(varchar(10), @StartDate, 23) AS Belge_Tarihi,
|
|
||||||
CONVERT(varchar(10), @StartDate, 23) AS Vade_Tarihi,
|
|
||||||
'Baslangic_devir' AS Belge_No,
|
|
||||||
'Devir' AS Islem_Tipi,
|
|
||||||
'Devir Bakiyesi' AS Aciklama,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
SUM(c.Debit) AS Borc,
|
|
||||||
SUM(c.Credit) AS Alacak,
|
|
||||||
SUM(c.Debit) - SUM(c.Credit) AS Bakiye,
|
|
||||||
(
|
|
||||||
SELECT STRING_AGG(x.ATAtt01, ',')
|
|
||||||
FROM (
|
|
||||||
SELECT DISTINCT f2.ATAtt01
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
INNER JOIN trCurrAccBook bb
|
|
||||||
ON f2.CurrAccBookID = bb.CurrAccBookID
|
|
||||||
WHERE bb.CurrAccCode LIKE @Carikod
|
|
||||||
AND bb.DocumentDate < @StartDate
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
) x
|
|
||||||
) AS Parislemler
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN cdCurrAccDesc d
|
|
||||||
ON b.CurrAccCode = d.CurrAccCode AND d.LangCode = 'TR'
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON b.CurrAccBookID = c.CurrAccBookID
|
|
||||||
AND b.DocCurrencyCode = c.CurrencyCode
|
|
||||||
WHERE b.CurrAccCode LIKE @Carikod
|
|
||||||
AND b.DocumentDate < @StartDate
|
|
||||||
GROUP BY b.DocCurrencyCode
|
|
||||||
|
|
||||||
ORDER BY Para_Birimi, Belge_Tarihi;`, parislemCond)
|
|
||||||
|
|
||||||
rows, err := db.MssqlDB.Query(query,
|
|
||||||
sql.Named("Carikod", "%"+accountCode+"%"),
|
|
||||||
sql.Named("StartDate", startDate),
|
|
||||||
sql.Named("EndDate", endDate),
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("❌ Header sorgu hatası: %v", err)
|
log.Printf("Header query error: %v", err)
|
||||||
return nil, nil, fmt.Errorf("header sorgu hatası: %v", err)
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
var headers []models.StatementHeader
|
belgeNos := collectBelgeNos(headers)
|
||||||
var belgeNos []string
|
log.Printf("Header rows fetched: %d, belge no count: %d", len(headers), len(belgeNos))
|
||||||
for rows.Next() {
|
|
||||||
var h models.StatementHeader
|
|
||||||
if err := rows.Scan(
|
|
||||||
&h.CariKod, &h.CariIsim,
|
|
||||||
&h.BelgeTarihi, &h.VadeTarihi,
|
|
||||||
&h.BelgeNo, &h.IslemTipi,
|
|
||||||
&h.Aciklama, &h.ParaBirimi,
|
|
||||||
&h.Borc, &h.Alacak,
|
|
||||||
&h.Bakiye, &h.Parislemler,
|
|
||||||
); err != nil {
|
|
||||||
log.Printf("❌ Header scan hatası: %v", err)
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
headers = append(headers, h)
|
|
||||||
if h.BelgeNo != "" {
|
|
||||||
belgeNos = append(belgeNos, h.BelgeNo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Printf("✅ Header verileri alındı: %d kayıt, %d belge no", len(headers), len(belgeNos))
|
|
||||||
return headers, belgeNos, nil
|
return headers, belgeNos, nil
|
||||||
}
|
}
|
||||||
|
|||||||
35
svc/queries/statement_pdf_common.go
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package queries
|
||||||
|
|
||||||
|
import "bssapp-backend/models"
|
||||||
|
|
||||||
|
func getStatementsForPDF(
|
||||||
|
accountCode string,
|
||||||
|
startDate string,
|
||||||
|
endDate string,
|
||||||
|
parislemler []string,
|
||||||
|
) ([]models.StatementHeader, error) {
|
||||||
|
return GetStatements(models.StatementParams{
|
||||||
|
AccountCode: accountCode,
|
||||||
|
StartDate: startDate,
|
||||||
|
EndDate: endDate,
|
||||||
|
LangCode: "TR",
|
||||||
|
Parislemler: parislemler,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func collectBelgeNos(headers []models.StatementHeader) []string {
|
||||||
|
seen := make(map[string]struct{}, len(headers))
|
||||||
|
out := make([]string, 0, len(headers))
|
||||||
|
for _, h := range headers {
|
||||||
|
no := h.BelgeNo
|
||||||
|
if no == "" || no == "Baslangic_devir" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if _, ok := seen[no]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
seen[no] = struct{}{}
|
||||||
|
out = append(out, no)
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
@@ -31,9 +31,17 @@ SELECT
|
|||||||
COALESCE(MAX(KisaKarDesc.AttributeDescription), '') AS Icerik,
|
COALESCE(MAX(KisaKarDesc.AttributeDescription), '') AS Icerik,
|
||||||
a.ItemCode AS Urun_Kodu,
|
a.ItemCode AS Urun_Kodu,
|
||||||
a.ColorCode AS Urun_Rengi,
|
a.ColorCode AS Urun_Rengi,
|
||||||
SUM(a.Qty1) AS Toplam_Adet,
|
SUM(a.Qty1) AS Toplam_Adet,
|
||||||
SUM(ABS(a.Doc_Price)) AS Toplam_Fiyat,
|
|
||||||
CAST(SUM(a.Qty1 * ABS(a.Doc_Price)) AS numeric(18,2)) AS Toplam_Tutar
|
CAST(
|
||||||
|
SUM(a.Qty1 * ABS(a.Doc_Price))
|
||||||
|
/ NULLIF(SUM(a.Qty1),0)
|
||||||
|
AS numeric(18,4)) AS Doviz_Fiyat,
|
||||||
|
|
||||||
|
CAST(
|
||||||
|
SUM(a.Qty1 * ABS(a.Doc_Price))
|
||||||
|
AS numeric(18,2)) AS Toplam_Tutar
|
||||||
|
|
||||||
FROM AllInvoicesWithAttributes a
|
FROM AllInvoicesWithAttributes a
|
||||||
LEFT JOIN prItemAttribute AnaGrup
|
LEFT JOIN prItemAttribute AnaGrup
|
||||||
ON a.ItemCode = AnaGrup.ItemCode AND AnaGrup.AttributeTypeCode = 1
|
ON a.ItemCode = AnaGrup.ItemCode AND AnaGrup.AttributeTypeCode = 1
|
||||||
|
|||||||
@@ -10,179 +10,15 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// küçük yardımcı: boşlukları temizle, her değeri ayrı tırnakla sar
|
|
||||||
func buildQuotedList(vals []string) string {
|
|
||||||
var pp []string
|
|
||||||
for _, v := range vals {
|
|
||||||
v = strings.TrimSpace(v)
|
|
||||||
if v != "" {
|
|
||||||
pp = append(pp, fmt.Sprintf("'%s'", v)) // '1','2' gibi
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(pp) == 0 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return strings.Join(pp, ",")
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============================ HEADER (Ana Tablo) ============================ */
|
|
||||||
|
|
||||||
func GetStatementsPDF(accountCode, startDate, endDate string, parislemler []string) ([]models.StatementHeader, []string, error) {
|
func GetStatementsPDF(accountCode, startDate, endDate string, parislemler []string) ([]models.StatementHeader, []string, error) {
|
||||||
// Account normalize
|
headers, err := getStatementsForPDF(accountCode, startDate, endDate, parislemler)
|
||||||
if len(accountCode) == 7 && strings.ContainsAny(accountCode, "0123456789") {
|
|
||||||
accountCode = accountCode[:3] + " " + accountCode[3:]
|
|
||||||
}
|
|
||||||
|
|
||||||
// IN list parse et
|
|
||||||
inList := buildQuotedList(parislemler)
|
|
||||||
parislemCond := "''"
|
|
||||||
if inList != "" {
|
|
||||||
parislemCond = inList
|
|
||||||
}
|
|
||||||
|
|
||||||
query := fmt.Sprintf(`
|
|
||||||
;WITH Opening AS (
|
|
||||||
SELECT
|
|
||||||
b.CurrAccCode AS Cari_Kod,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
SUM(c.Debit - c.Credit) AS Devir_Bakiyesi
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON c.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND c.CurrencyCode = b.DocCurrencyCode
|
|
||||||
WHERE b.CurrAccCode LIKE @Carikod
|
|
||||||
AND b.DocumentDate < @StartDate
|
|
||||||
AND EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
WHERE f2.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
)
|
|
||||||
GROUP BY b.CurrAccCode, b.DocCurrencyCode
|
|
||||||
),
|
|
||||||
Movements AS (
|
|
||||||
SELECT
|
|
||||||
b.CurrAccCode AS Cari_Kod,
|
|
||||||
d.CurrAccDescription AS Cari_Isim,
|
|
||||||
CONVERT(varchar(10), b.DocumentDate, 23) AS Belge_Tarihi,
|
|
||||||
CONVERT(varchar(10), b.DueDate, 23) AS Vade_Tarihi,
|
|
||||||
b.RefNumber AS Belge_No,
|
|
||||||
b.BaseApplicationCode AS Islem_Tipi,
|
|
||||||
b.LineDescription AS Aciklama,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
c.Debit AS Borc,
|
|
||||||
c.Credit AS Alacak,
|
|
||||||
SUM(c.Debit - c.Credit)
|
|
||||||
OVER (PARTITION BY b.CurrAccCode, c.CurrencyCode
|
|
||||||
ORDER BY b.DocumentDate, b.CurrAccBookID) AS Hareket_Bakiyesi,
|
|
||||||
f.ATAtt01 AS Parislemler
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN cdCurrAccDesc d
|
|
||||||
ON b.CurrAccCode = d.CurrAccCode AND d.LangCode = 'TR'
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON b.CurrAccBookID = c.CurrAccBookID
|
|
||||||
AND b.DocCurrencyCode = c.CurrencyCode
|
|
||||||
LEFT JOIN CurrAccBookATAttributesFilter f
|
|
||||||
ON b.CurrAccBookID = f.CurrAccBookID
|
|
||||||
WHERE b.CurrAccCode LIKE @Carikod
|
|
||||||
AND b.DocumentDate BETWEEN @StartDate AND @EndDate
|
|
||||||
AND EXISTS (
|
|
||||||
SELECT 1
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
WHERE f2.CurrAccBookID = b.CurrAccBookID
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
)
|
|
||||||
)`, parislemCond, parislemCond)
|
|
||||||
query += fmt.Sprintf(`
|
|
||||||
SELECT
|
|
||||||
m.Cari_Kod,
|
|
||||||
m.Cari_Isim,
|
|
||||||
m.Belge_Tarihi,
|
|
||||||
m.Vade_Tarihi,
|
|
||||||
m.Belge_No,
|
|
||||||
m.Islem_Tipi,
|
|
||||||
m.Aciklama,
|
|
||||||
m.Para_Birimi,
|
|
||||||
m.Borc,
|
|
||||||
m.Alacak,
|
|
||||||
ISNULL(o.Devir_Bakiyesi,0) + m.Hareket_Bakiyesi AS Bakiye,
|
|
||||||
m.Parislemler
|
|
||||||
FROM Movements m
|
|
||||||
LEFT JOIN Opening o
|
|
||||||
ON o.Cari_Kod = m.Cari_Kod
|
|
||||||
AND o.Para_Birimi = m.Para_Birimi
|
|
||||||
|
|
||||||
UNION ALL
|
|
||||||
|
|
||||||
-- Devir satırı
|
|
||||||
SELECT
|
|
||||||
@Carikod AS Cari_Kod,
|
|
||||||
MAX(d.CurrAccDescription) AS Cari_Isim,
|
|
||||||
CONVERT(varchar(10), @StartDate, 23) AS Belge_Tarihi,
|
|
||||||
CONVERT(varchar(10), @StartDate, 23) AS Vade_Tarihi,
|
|
||||||
'Baslangic_devir' AS Belge_No,
|
|
||||||
'Devir' AS Islem_Tipi,
|
|
||||||
'Devir Bakiyesi' AS Aciklama,
|
|
||||||
b.DocCurrencyCode AS Para_Birimi,
|
|
||||||
SUM(c.Debit) AS Borc,
|
|
||||||
SUM(c.Credit) AS Alacak,
|
|
||||||
SUM(c.Debit) - SUM(c.Credit) AS Bakiye,
|
|
||||||
(
|
|
||||||
SELECT STRING_AGG(x.ATAtt01, ',')
|
|
||||||
FROM (
|
|
||||||
SELECT DISTINCT f2.ATAtt01
|
|
||||||
FROM CurrAccBookATAttributesFilter f2
|
|
||||||
INNER JOIN trCurrAccBook bb
|
|
||||||
ON f2.CurrAccBookID = bb.CurrAccBookID
|
|
||||||
WHERE bb.CurrAccCode LIKE @Carikod
|
|
||||||
AND bb.DocumentDate < @StartDate
|
|
||||||
AND f2.ATAtt01 IN (%s)
|
|
||||||
) x
|
|
||||||
) AS Parislemler
|
|
||||||
FROM trCurrAccBook b
|
|
||||||
LEFT JOIN cdCurrAccDesc d
|
|
||||||
ON b.CurrAccCode = d.CurrAccCode AND d.LangCode = 'TR'
|
|
||||||
LEFT JOIN trCurrAccBookCurrency c
|
|
||||||
ON b.CurrAccBookID = c.CurrAccBookID
|
|
||||||
AND b.DocCurrencyCode = c.CurrencyCode
|
|
||||||
WHERE b.CurrAccCode LIKE @Carikod
|
|
||||||
AND b.DocumentDate < @StartDate
|
|
||||||
GROUP BY b.DocCurrencyCode
|
|
||||||
|
|
||||||
ORDER BY Para_Birimi, Belge_Tarihi;`, parislemCond)
|
|
||||||
|
|
||||||
rows, err := db.MssqlDB.Query(query,
|
|
||||||
sql.Named("Carikod", "%"+accountCode+"%"),
|
|
||||||
sql.Named("StartDate", startDate),
|
|
||||||
sql.Named("EndDate", endDate),
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("❌ Header sorgu hatası: %v", err)
|
log.Printf("Header query error: %v", err)
|
||||||
return nil, nil, fmt.Errorf("header sorgu hatası: %v", err)
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
var headers []models.StatementHeader
|
belgeNos := collectBelgeNos(headers)
|
||||||
var belgeNos []string
|
log.Printf("Header rows fetched: %d, belge no count: %d", len(headers), len(belgeNos))
|
||||||
for rows.Next() {
|
|
||||||
var h models.StatementHeader
|
|
||||||
if err := rows.Scan(
|
|
||||||
&h.CariKod, &h.CariIsim,
|
|
||||||
&h.BelgeTarihi, &h.VadeTarihi,
|
|
||||||
&h.BelgeNo, &h.IslemTipi,
|
|
||||||
&h.Aciklama, &h.ParaBirimi,
|
|
||||||
&h.Borc, &h.Alacak,
|
|
||||||
&h.Bakiye, &h.Parislemler,
|
|
||||||
); err != nil {
|
|
||||||
log.Printf("❌ Header scan hatası: %v", err)
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
headers = append(headers, h)
|
|
||||||
if h.BelgeNo != "" {
|
|
||||||
belgeNos = append(belgeNos, h.BelgeNo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Printf("✅ Header verileri alındı: %d kayıt, %d belge no", len(headers), len(belgeNos))
|
|
||||||
return headers, belgeNos, nil
|
return headers, belgeNos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +27,7 @@ ORDER BY Para_Birimi, Belge_Tarihi;`, parislemCond)
|
|||||||
func GetDetailsMapPDF(belgeNos []string, startDate, endDate string) (map[string][]models.StatementDetail, error) {
|
func GetDetailsMapPDF(belgeNos []string, startDate, endDate string) (map[string][]models.StatementDetail, error) {
|
||||||
result := make(map[string][]models.StatementDetail)
|
result := make(map[string][]models.StatementDetail)
|
||||||
if len(belgeNos) == 0 {
|
if len(belgeNos) == 0 {
|
||||||
log.Println("⚠️ GetDetailsMapPDF: belge listesi boş")
|
log.Println("GetDetailsMapPDF: belge listesi bos")
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +55,11 @@ SELECT
|
|||||||
MAX(ISNULL(KisaKarDesc.AttributeDescription, '')) AS Icerik,
|
MAX(ISNULL(KisaKarDesc.AttributeDescription, '')) AS Icerik,
|
||||||
|
|
||||||
a.ItemCode, a.ColorCode,
|
a.ItemCode, a.ColorCode,
|
||||||
SUM(a.Qty1), SUM(ABS(a.Doc_Price)),
|
SUM(a.Qty1),
|
||||||
|
CAST(
|
||||||
|
SUM(a.Qty1 * ABS(a.Doc_Price))
|
||||||
|
/ NULLIF(SUM(a.Qty1), 0)
|
||||||
|
AS numeric(18,4)),
|
||||||
CAST(SUM(a.Qty1 * ABS(a.Doc_Price)) AS numeric(18,2))
|
CAST(SUM(a.Qty1 * ABS(a.Doc_Price)) AS numeric(18,2))
|
||||||
|
|
||||||
FROM AllInvoicesWithAttributes a
|
FROM AllInvoicesWithAttributes a
|
||||||
@@ -258,7 +98,7 @@ LEFT JOIN cdItemAttributeDesc FitDesc
|
|||||||
AND FitTbl.AttributeCode = FitDesc.AttributeCode
|
AND FitTbl.AttributeCode = FitDesc.AttributeCode
|
||||||
AND FitTbl.ItemTypeCode = FitDesc.ItemTypeCode
|
AND FitTbl.ItemTypeCode = FitDesc.ItemTypeCode
|
||||||
|
|
||||||
-- Kısa Karışım
|
-- Kisa Karisim
|
||||||
LEFT JOIN prItemAttribute KisaKar
|
LEFT JOIN prItemAttribute KisaKar
|
||||||
ON a.ItemCode = KisaKar.ItemCode AND KisaKar.AttributeTypeCode = 41
|
ON a.ItemCode = KisaKar.ItemCode AND KisaKar.AttributeTypeCode = 41
|
||||||
LEFT JOIN cdItemAttributeDesc KisaKarDesc
|
LEFT JOIN cdItemAttributeDesc KisaKarDesc
|
||||||
@@ -274,8 +114,8 @@ ORDER BY a.InvoiceNumber, a.ItemCode, a.ColorCode;`, inBelge)
|
|||||||
sql.Named("EndDate", endDate),
|
sql.Named("EndDate", endDate),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("❌ Detay sorgu hatası: %v", err)
|
log.Printf("Detail query error: %v", err)
|
||||||
return nil, fmt.Errorf("detay sorgu hatası: %v", err)
|
return nil, fmt.Errorf("detay sorgu hatasi: %v", err)
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
@@ -295,11 +135,11 @@ ORDER BY a.InvoiceNumber, a.ItemCode, a.ColorCode;`, inBelge)
|
|||||||
&d.ToplamFiyat,
|
&d.ToplamFiyat,
|
||||||
&d.ToplamTutar,
|
&d.ToplamTutar,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.Printf("❌ Detay scan hatası: %v", err)
|
log.Printf("Detail scan error: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
result[d.BelgeRefNumarasi] = append(result[d.BelgeRefNumarasi], d)
|
result[d.BelgeRefNumarasi] = append(result[d.BelgeRefNumarasi], d)
|
||||||
}
|
}
|
||||||
log.Printf("✅ Detay verileri alındı: %d belge için detay var", len(result))
|
log.Printf("Detail rows fetched for %d belge", len(result))
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -234,11 +234,18 @@ func (r *UserRepository) GetLegacyUserForLogin(login string) (*models.User, erro
|
|||||||
COALESCE(u.upass,'') as upass,
|
COALESCE(u.upass,'') as upass,
|
||||||
u.is_active,
|
u.is_active,
|
||||||
COALESCE(u.email,''),
|
COALESCE(u.email,''),
|
||||||
COALESCE(u.dfrole_id,0) as role_id,
|
COALESCE(ru.dfrole_id,0) as role_id,
|
||||||
COALESCE(dr.code,'') as role_code,
|
COALESCE(dr.code,'') as role_code,
|
||||||
COALESCE(u.force_password_change,false)
|
COALESCE(u.force_password_change,false)
|
||||||
FROM dfusr u
|
FROM dfusr u
|
||||||
LEFT JOIN dfrole dr ON dr.id = u.dfrole_id
|
LEFT JOIN LATERAL (
|
||||||
|
SELECT dfrole_id
|
||||||
|
FROM dfrole_usr
|
||||||
|
WHERE dfusr_id = u.id
|
||||||
|
ORDER BY dfrole_id
|
||||||
|
LIMIT 1
|
||||||
|
) ru ON true
|
||||||
|
LEFT JOIN dfrole dr ON dr.id = ru.dfrole_id
|
||||||
WHERE u.is_active = true
|
WHERE u.is_active = true
|
||||||
AND (
|
AND (
|
||||||
LOWER(u.code) = LOWER($1)
|
LOWER(u.code) = LOWER($1)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ func AdminResetPasswordHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
// 4️⃣ UPDATE mk_dfusr
|
// 4️⃣ UPDATE mk_dfusr
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
_, err = db.Exec(`
|
res, err := db.Exec(`
|
||||||
UPDATE mk_dfusr
|
UPDATE mk_dfusr
|
||||||
SET
|
SET
|
||||||
password_hash = $1,
|
password_hash = $1,
|
||||||
@@ -77,6 +77,24 @@ func AdminResetPasswordHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
affected, _ := res.RowsAffected()
|
||||||
|
if affected == 0 {
|
||||||
|
_, err = db.Exec(`
|
||||||
|
UPDATE dfusr
|
||||||
|
SET
|
||||||
|
upass = $1,
|
||||||
|
force_password_change = true,
|
||||||
|
last_updated_date = NOW()
|
||||||
|
WHERE id = $2
|
||||||
|
AND is_active = true
|
||||||
|
`, string(hash), userID)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "legacy password reset failed", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
// 5️⃣ REFRESH TOKEN REVOKE
|
// 5️⃣ REFRESH TOKEN REVOKE
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
|
|||||||
@@ -6,10 +6,13 @@ import (
|
|||||||
"bssapp-backend/internal/security"
|
"bssapp-backend/internal/security"
|
||||||
"bssapp-backend/models"
|
"bssapp-backend/models"
|
||||||
"bssapp-backend/repository"
|
"bssapp-backend/repository"
|
||||||
|
"bssapp-backend/services"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
@@ -17,115 +20,254 @@ import (
|
|||||||
|
|
||||||
func FirstPasswordChangeHandler(db *sql.DB) http.HandlerFunc {
|
func FirstPasswordChangeHandler(db *sql.DB) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// 1️⃣ JWT CLAIMS
|
|
||||||
// --------------------------------------------------
|
|
||||||
claims, ok := auth.GetClaimsFromContext(r.Context())
|
claims, ok := auth.GetClaimsFromContext(r.Context())
|
||||||
if !ok || claims == nil {
|
if !ok || claims == nil {
|
||||||
http.Error(w, "unauthorized", http.StatusUnauthorized)
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 401 reason=claims_missing method=%s path=%s",
|
||||||
|
r.Method,
|
||||||
|
r.URL.Path,
|
||||||
|
)
|
||||||
|
http.Error(w, "yetkisiz: token eksik veya geçersiz", http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// 2️⃣ PAYLOAD
|
|
||||||
// --------------------------------------------------
|
|
||||||
var req struct {
|
var req struct {
|
||||||
CurrentPassword string `json:"current_password"`
|
CurrentPassword string `json:"current_password"`
|
||||||
NewPassword string `json:"new_password"`
|
NewPassword string `json:"new_password"`
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||||
http.Error(w, "invalid payload", http.StatusBadRequest)
|
http.Error(w, "geçersiz istek gövdesi", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req.CurrentPassword = strings.TrimSpace(req.CurrentPassword)
|
||||||
|
req.NewPassword = strings.TrimSpace(req.NewPassword)
|
||||||
if req.CurrentPassword == "" || req.NewPassword == "" {
|
if req.CurrentPassword == "" || req.NewPassword == "" {
|
||||||
http.Error(w, "password fields required", http.StatusUnprocessableEntity)
|
http.Error(w, "şifre alanları zorunludur", http.StatusUnprocessableEntity)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
mkRepo := repository.NewMkUserRepository(db)
|
||||||
// 3️⃣ LOAD USER (mk_dfusr)
|
legacyRepo := repository.NewUserRepository(db)
|
||||||
// --------------------------------------------------
|
|
||||||
var currentHash string
|
|
||||||
err := db.QueryRow(`
|
|
||||||
SELECT password_hash
|
|
||||||
FROM mk_dfusr
|
|
||||||
WHERE id = $1
|
|
||||||
`, claims.ID).Scan(¤tHash)
|
|
||||||
|
|
||||||
if err != nil || currentHash == "" {
|
mkUser, mkErr := mkRepo.GetByID(claims.ID)
|
||||||
http.Error(w, "user not found", http.StatusUnauthorized)
|
hasMkUser := mkErr == nil
|
||||||
|
if mkErr != nil && !errors.Is(mkErr, repository.ErrMkUserNotFound) {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=mk_lookup_failed user_id=%d err=%v",
|
||||||
|
claims.ID,
|
||||||
|
mkErr,
|
||||||
|
)
|
||||||
|
http.Error(w, "kullanıcı sorgulama hatası", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
var legacyUser *models.User
|
||||||
// 4️⃣ CURRENT PASSWORD CHECK
|
|
||||||
// --------------------------------------------------
|
// If user already exists in mk_dfusr with hash, verify against mk hash.
|
||||||
if bcrypt.CompareHashAndPassword(
|
// Otherwise verify against legacy dfusr password before migration.
|
||||||
[]byte(currentHash),
|
if hasMkUser && strings.TrimSpace(mkUser.PasswordHash) != "" {
|
||||||
[]byte(req.CurrentPassword),
|
if bcrypt.CompareHashAndPassword(
|
||||||
) != nil {
|
[]byte(mkUser.PasswordHash),
|
||||||
http.Error(w, "mevcut şifre hatalı", http.StatusUnauthorized)
|
[]byte(req.CurrentPassword),
|
||||||
return
|
) != nil {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 401 reason=current_password_mismatch_mk user_id=%d username=%s",
|
||||||
|
claims.ID,
|
||||||
|
claims.Username,
|
||||||
|
)
|
||||||
|
http.Error(w, "mevcut şifre hatalı", http.StatusUnauthorized)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var err error
|
||||||
|
legacyUser, err = legacyRepo.GetLegacyUserForLogin(claims.Username)
|
||||||
|
if err != nil || legacyUser == nil || !legacyUser.IsActive {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 401 reason=legacy_user_not_found user_id=%d username=%s err=%v",
|
||||||
|
claims.ID,
|
||||||
|
claims.Username,
|
||||||
|
err,
|
||||||
|
)
|
||||||
|
http.Error(w, "yetkisiz: kullanıcı bulunamadı", http.StatusUnauthorized)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !hasMkUser && int64(legacyUser.ID) != claims.ID {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 401 reason=legacy_id_mismatch user_id=%d legacy_id=%d username=%s",
|
||||||
|
claims.ID,
|
||||||
|
legacyUser.ID,
|
||||||
|
claims.Username,
|
||||||
|
)
|
||||||
|
http.Error(w, "yetkisiz: kullanıcı bulunamadı", http.StatusUnauthorized)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if !services.CheckPasswordWithLegacy(legacyUser, req.CurrentPassword) {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 401 reason=current_password_mismatch_legacy user_id=%d username=%s",
|
||||||
|
claims.ID,
|
||||||
|
claims.Username,
|
||||||
|
)
|
||||||
|
http.Error(w, "mevcut şifre hatalı", http.StatusUnauthorized)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// 5️⃣ PASSWORD POLICY
|
|
||||||
// --------------------------------------------------
|
|
||||||
if err := security.ValidatePassword(req.NewPassword); err != nil {
|
if err := security.ValidatePassword(req.NewPassword); err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusUnprocessableEntity)
|
http.Error(w, err.Error(), http.StatusUnprocessableEntity)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// 6️⃣ HASH NEW PASSWORD
|
|
||||||
// --------------------------------------------------
|
|
||||||
hash, err := bcrypt.GenerateFromPassword(
|
hash, err := bcrypt.GenerateFromPassword(
|
||||||
[]byte(req.NewPassword),
|
[]byte(req.NewPassword),
|
||||||
bcrypt.DefaultCost,
|
bcrypt.DefaultCost,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "password hash error", http.StatusInternalServerError)
|
http.Error(w, "şifre hash hatası", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
tx, err := db.Begin()
|
||||||
// 7️⃣ UPDATE mk_dfusr
|
|
||||||
// --------------------------------------------------
|
|
||||||
_, err = db.Exec(`
|
|
||||||
UPDATE mk_dfusr
|
|
||||||
SET
|
|
||||||
password_hash = $1,
|
|
||||||
force_password_change = false,
|
|
||||||
password_updated_at = NOW(),
|
|
||||||
updated_at = NOW()
|
|
||||||
WHERE id = $2
|
|
||||||
`, string(hash), claims.ID)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "password update failed", http.StatusInternalServerError)
|
http.Error(w, "işlem başlatılamadı", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer tx.Rollback()
|
||||||
|
|
||||||
|
migratedFromLegacy := false
|
||||||
|
|
||||||
|
if hasMkUser {
|
||||||
|
res, err := tx.Exec(`
|
||||||
|
UPDATE mk_dfusr
|
||||||
|
SET
|
||||||
|
password_hash = $1,
|
||||||
|
force_password_change = false,
|
||||||
|
password_updated_at = NOW(),
|
||||||
|
updated_at = NOW()
|
||||||
|
WHERE id = $2
|
||||||
|
`, string(hash), claims.ID)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=password_update_failed user_id=%d err=%v",
|
||||||
|
claims.ID,
|
||||||
|
err,
|
||||||
|
)
|
||||||
|
http.Error(w, "şifre güncellenemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
affected, _ := res.RowsAffected()
|
||||||
|
if affected == 0 {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=password_update_no_rows user_id=%d",
|
||||||
|
claims.ID,
|
||||||
|
)
|
||||||
|
http.Error(w, "şifre güncellenemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if legacyUser == nil {
|
||||||
|
// Defensive fallback, should not happen.
|
||||||
|
legacyUser, err = legacyRepo.GetLegacyUserForLogin(claims.Username)
|
||||||
|
if err != nil || legacyUser == nil {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=legacy_reload_failed user_id=%d username=%s err=%v",
|
||||||
|
claims.ID,
|
||||||
|
claims.Username,
|
||||||
|
err,
|
||||||
|
)
|
||||||
|
http.Error(w, "legacy kullanıcı yeniden yüklenemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !hasMkUser && int64(legacyUser.ID) != claims.ID {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=legacy_reload_id_mismatch user_id=%d legacy_id=%d username=%s",
|
||||||
|
claims.ID,
|
||||||
|
legacyUser.ID,
|
||||||
|
claims.Username,
|
||||||
|
)
|
||||||
|
http.Error(w, "legacy kullanıcı yeniden yüklenemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = tx.Exec(`
|
||||||
|
INSERT INTO mk_dfusr (
|
||||||
|
id,
|
||||||
|
username,
|
||||||
|
email,
|
||||||
|
full_name,
|
||||||
|
mobile,
|
||||||
|
address,
|
||||||
|
is_active,
|
||||||
|
password_hash,
|
||||||
|
force_password_change,
|
||||||
|
password_updated_at,
|
||||||
|
created_at,
|
||||||
|
updated_at
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
$1,$2,$3,$4,$5,$6,$7,$8,false,NOW(),NOW(),NOW()
|
||||||
|
)
|
||||||
|
ON CONFLICT (id)
|
||||||
|
DO UPDATE SET
|
||||||
|
username = EXCLUDED.username,
|
||||||
|
email = EXCLUDED.email,
|
||||||
|
full_name = EXCLUDED.full_name,
|
||||||
|
mobile = EXCLUDED.mobile,
|
||||||
|
address = EXCLUDED.address,
|
||||||
|
is_active = EXCLUDED.is_active,
|
||||||
|
password_hash = EXCLUDED.password_hash,
|
||||||
|
force_password_change = false,
|
||||||
|
password_updated_at = NOW(),
|
||||||
|
updated_at = NOW()
|
||||||
|
`,
|
||||||
|
int64(legacyUser.ID),
|
||||||
|
strings.TrimSpace(legacyUser.Username),
|
||||||
|
strings.TrimSpace(legacyUser.Email),
|
||||||
|
strings.TrimSpace(legacyUser.FullName),
|
||||||
|
strings.TrimSpace(legacyUser.Mobile),
|
||||||
|
strings.TrimSpace(legacyUser.Address),
|
||||||
|
legacyUser.IsActive,
|
||||||
|
string(hash),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=legacy_migration_failed user_id=%d username=%s err=%v",
|
||||||
|
claims.ID,
|
||||||
|
claims.Username,
|
||||||
|
err,
|
||||||
|
)
|
||||||
|
http.Error(w, "legacy geçişi başarısız", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
migratedFromLegacy = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tx.Commit(); err != nil {
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 500 reason=tx_commit_failed user_id=%d err=%v",
|
||||||
|
claims.ID,
|
||||||
|
err,
|
||||||
|
)
|
||||||
|
http.Error(w, "işlem tamamlanamadı", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
_ = repository.NewRefreshTokenRepository(db).RevokeAllForUser(claims.ID)
|
||||||
// 8️⃣ REFRESH TOKEN REVOKE
|
|
||||||
// --------------------------------------------------
|
|
||||||
_ = repository.
|
|
||||||
NewRefreshTokenRepository(db).
|
|
||||||
RevokeAllForUser(claims.ID)
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// 9️⃣ NEW JWT (TEK DOĞRU YOL)
|
|
||||||
// --------------------------------------------------
|
|
||||||
newClaims := auth.BuildClaimsFromUser(
|
newClaims := auth.BuildClaimsFromUser(
|
||||||
&models.MkUser{
|
&models.MkUser{
|
||||||
ID: claims.ID,
|
ID: claims.ID,
|
||||||
Username: claims.Username,
|
Username: claims.Username,
|
||||||
|
RoleID: claims.RoleID,
|
||||||
RoleCode: claims.RoleCode,
|
RoleCode: claims.RoleCode,
|
||||||
|
DepartmentCodes: claims.DepartmentCodes,
|
||||||
V3Username: claims.V3Username,
|
V3Username: claims.V3Username,
|
||||||
V3UserGroup: claims.V3UserGroup,
|
V3UserGroup: claims.V3UserGroup,
|
||||||
SessionID: claims.SessionID,
|
SessionID: claims.SessionID,
|
||||||
@@ -140,22 +282,20 @@ func FirstPasswordChangeHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
false,
|
false,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "token generation failed", http.StatusInternalServerError)
|
http.Error(w, "token üretilemedi", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
source := "mk_password_update"
|
||||||
// 🔟 AUDIT
|
if migratedFromLegacy {
|
||||||
// --------------------------------------------------
|
source = "legacy_migration_completed"
|
||||||
|
}
|
||||||
auditlog.ForcePasswordChangeCompleted(
|
auditlog.ForcePasswordChangeCompleted(
|
||||||
r.Context(),
|
r.Context(),
|
||||||
claims.ID,
|
claims.ID,
|
||||||
"self_change",
|
source,
|
||||||
)
|
)
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
// 1️⃣1️⃣ RESPONSE
|
|
||||||
// --------------------------------------------------
|
|
||||||
_ = json.NewEncoder(w).Encode(map[string]any{
|
_ = json.NewEncoder(w).Encode(map[string]any{
|
||||||
"token": newToken,
|
"token": newToken,
|
||||||
"user": map[string]any{
|
"user": map[string]any{
|
||||||
@@ -163,7 +303,14 @@ func FirstPasswordChangeHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
"username": claims.Username,
|
"username": claims.Username,
|
||||||
"force_password_change": false,
|
"force_password_change": false,
|
||||||
},
|
},
|
||||||
|
"migrated_from_legacy": migratedFromLegacy,
|
||||||
})
|
})
|
||||||
log.Printf("✅ FIRST-PASS claims user=%d role=%s", claims.ID, claims.RoleCode)
|
|
||||||
|
log.Printf(
|
||||||
|
"FIRST_PASSWORD_CHANGE 200 user=%d role=%s migrated_from_legacy=%v",
|
||||||
|
claims.ID,
|
||||||
|
claims.RoleCode,
|
||||||
|
migratedFromLegacy,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package routes
|
|||||||
import (
|
import (
|
||||||
"bssapp-backend/auth"
|
"bssapp-backend/auth"
|
||||||
"bssapp-backend/internal/auditlog"
|
"bssapp-backend/internal/auditlog"
|
||||||
|
"bssapp-backend/internal/security"
|
||||||
"bssapp-backend/models"
|
"bssapp-backend/models"
|
||||||
"bssapp-backend/queries"
|
"bssapp-backend/queries"
|
||||||
"bssapp-backend/repository"
|
"bssapp-backend/repository"
|
||||||
@@ -29,6 +30,76 @@ type LoginRequest struct {
|
|||||||
Password string `json:"password"`
|
Password string `json:"password"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func looksLikeBcryptHash(value string) bool {
|
||||||
|
return strings.HasPrefix(value, "$2a$") ||
|
||||||
|
strings.HasPrefix(value, "$2b$") ||
|
||||||
|
strings.HasPrefix(value, "$2y$")
|
||||||
|
}
|
||||||
|
|
||||||
|
func ensureLegacyUserReadyForSession(db *sql.DB, legacyUser *models.User) (int64, error) {
|
||||||
|
desiredID := int64(legacyUser.ID)
|
||||||
|
|
||||||
|
_, err := db.Exec(`
|
||||||
|
INSERT INTO mk_dfusr (
|
||||||
|
id,
|
||||||
|
username,
|
||||||
|
email,
|
||||||
|
full_name,
|
||||||
|
mobile,
|
||||||
|
address,
|
||||||
|
is_active,
|
||||||
|
password_hash,
|
||||||
|
force_password_change,
|
||||||
|
created_at,
|
||||||
|
updated_at
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
$1,$2,$3,$4,$5,$6,$7,'',true,NOW(),NOW()
|
||||||
|
)
|
||||||
|
ON CONFLICT (id)
|
||||||
|
DO UPDATE SET
|
||||||
|
username = EXCLUDED.username,
|
||||||
|
email = EXCLUDED.email,
|
||||||
|
full_name = COALESCE(NULLIF(EXCLUDED.full_name, ''), mk_dfusr.full_name),
|
||||||
|
mobile = COALESCE(NULLIF(EXCLUDED.mobile, ''), mk_dfusr.mobile),
|
||||||
|
address = COALESCE(NULLIF(EXCLUDED.address, ''), mk_dfusr.address),
|
||||||
|
is_active = EXCLUDED.is_active,
|
||||||
|
force_password_change = true,
|
||||||
|
updated_at = NOW()
|
||||||
|
`,
|
||||||
|
desiredID,
|
||||||
|
strings.TrimSpace(legacyUser.Username),
|
||||||
|
strings.TrimSpace(legacyUser.Email),
|
||||||
|
strings.TrimSpace(legacyUser.FullName),
|
||||||
|
strings.TrimSpace(legacyUser.Mobile),
|
||||||
|
strings.TrimSpace(legacyUser.Address),
|
||||||
|
legacyUser.IsActive,
|
||||||
|
)
|
||||||
|
if err == nil {
|
||||||
|
return desiredID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mkRepo := repository.NewMkUserRepository(db)
|
||||||
|
existing, lookupErr := mkRepo.GetByUsername(legacyUser.Username)
|
||||||
|
if lookupErr != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, updErr := db.Exec(`
|
||||||
|
UPDATE mk_dfusr
|
||||||
|
SET
|
||||||
|
is_active = $1,
|
||||||
|
force_password_change = true,
|
||||||
|
updated_at = NOW()
|
||||||
|
WHERE id = $2
|
||||||
|
`, legacyUser.IsActive, existing.ID)
|
||||||
|
if updErr != nil {
|
||||||
|
return 0, updErr
|
||||||
|
}
|
||||||
|
|
||||||
|
return existing.ID, nil
|
||||||
|
}
|
||||||
|
|
||||||
func LoginHandler(db *sql.DB) http.HandlerFunc {
|
func LoginHandler(db *sql.DB) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
@@ -83,19 +154,36 @@ func LoginHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
||||||
// mk_dfusr authoritative
|
// mk_dfusr authoritative
|
||||||
if strings.TrimSpace(mkUser.PasswordHash) != "" {
|
mkHash := strings.TrimSpace(mkUser.PasswordHash)
|
||||||
|
if mkHash != "" {
|
||||||
|
if looksLikeBcryptHash(mkHash) {
|
||||||
|
cmpErr := bcrypt.CompareHashAndPassword(
|
||||||
|
[]byte(mkHash),
|
||||||
|
[]byte(pass),
|
||||||
|
)
|
||||||
|
if cmpErr == nil {
|
||||||
|
_ = mkRepo.TouchLastLogin(mkUser.ID)
|
||||||
|
writeLoginResponse(w, db, mkUser)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if bcrypt.CompareHashAndPassword(
|
if !mkUser.ForcePasswordChange {
|
||||||
[]byte(mkUser.PasswordHash),
|
http.Error(w, "invalid credentials", http.StatusUnauthorized)
|
||||||
[]byte(pass),
|
return
|
||||||
) != nil {
|
}
|
||||||
http.Error(w, "Kullanıcı adı veya parola hatalı", http.StatusUnauthorized)
|
|
||||||
return
|
log.Printf(
|
||||||
|
"LOGIN FALLBACK legacy allowed (force_password_change=true) username=%s id=%d",
|
||||||
|
mkUser.Username,
|
||||||
|
mkUser.ID,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
log.Printf(
|
||||||
|
"LOGIN FALLBACK legacy allowed (non-bcrypt mk hash) username=%s id=%d",
|
||||||
|
mkUser.Username,
|
||||||
|
mkUser.ID,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = mkRepo.TouchLastLogin(mkUser.ID)
|
|
||||||
writeLoginResponse(w, db, mkUser)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
// password_hash boşsa legacy fallback
|
// password_hash boşsa legacy fallback
|
||||||
} else if err != repository.ErrMkUserNotFound {
|
} else if err != repository.ErrMkUserNotFound {
|
||||||
@@ -133,31 +221,30 @@ func LoginHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ==================================================
|
// ==================================================
|
||||||
// 3️⃣ MIGRATION (dfusr → mk_dfusr)
|
// 3️⃣ LEGACY SESSION (PENDING MIGRATION)
|
||||||
|
// - mk_dfusr migration is completed in /api/password/change
|
||||||
// ==================================================
|
// ==================================================
|
||||||
newHash, err := bcrypt.GenerateFromPassword(
|
mkID, err := ensureLegacyUserReadyForSession(db, legacyUser)
|
||||||
[]byte(pass),
|
|
||||||
bcrypt.DefaultCost,
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, "Şifre üretilemedi", http.StatusInternalServerError)
|
log.Printf("LEGACY LOGIN MIGRATION BIND FAILED username=%s err=%v", login, err)
|
||||||
|
http.Error(w, "Giriş yapılamadı", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
mkUser, err = mkRepo.CreateFromLegacy(legacyUser, string(newHash))
|
mkUser = &models.MkUser{
|
||||||
if err != nil {
|
ID: mkID,
|
||||||
log.Println("❌ CREATE_FROM_LEGACY FAILED:", err)
|
Username: legacyUser.Username,
|
||||||
http.Error(w, "Kullanıcı migrate edilemedi", http.StatusInternalServerError)
|
Email: legacyUser.Email,
|
||||||
return
|
IsActive: legacyUser.IsActive,
|
||||||
|
RoleID: int64(legacyUser.RoleID),
|
||||||
|
RoleCode: legacyUser.RoleCode,
|
||||||
|
ForcePasswordChange: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔥 KRİTİK: TOKEN GUARD İÇİN GARANTİ
|
|
||||||
mkUser.ForcePasswordChange = true
|
|
||||||
|
|
||||||
auditlog.Write(auditlog.ActivityLog{
|
auditlog.Write(auditlog.ActivityLog{
|
||||||
ActionType: "LEGACY_USER_MIGRATED",
|
ActionType: "LEGACY_USER_LOGIN_PENDING_MIGRATION",
|
||||||
ActionCategory: "security",
|
ActionCategory: "security",
|
||||||
Description: "dfusr -> mk_dfusr on login",
|
Description: "legacy giriş başarılı, ilk şifre değişikliği gerekli",
|
||||||
IsSuccess: true,
|
IsSuccess: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -216,6 +303,22 @@ func writeLoginResponse(w http.ResponseWriter, db *sql.DB, user *models.MkUser)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
refreshPlain, refreshHash, err := security.GenerateRefreshToken()
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Refresh token üretilemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshExp := time.Now().Add(14 * 24 * time.Hour)
|
||||||
|
rtRepo := repository.NewRefreshTokenRepository(db)
|
||||||
|
if err := rtRepo.IssueRefreshToken(user.ID, refreshHash, refreshExp); err != nil {
|
||||||
|
log.Printf("refresh token store failed user=%d err=%v", user.ID, err)
|
||||||
|
http.Error(w, "Session başlatılamadı", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
setRefreshCookie(w, refreshPlain, refreshExp)
|
||||||
|
|
||||||
_ = json.NewEncoder(w).Encode(map[string]any{
|
_ = json.NewEncoder(w).Encode(map[string]any{
|
||||||
"token": token,
|
"token": token,
|
||||||
"user": map[string]any{
|
"user": map[string]any{
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ func getOrderHeaderFromDB(db *sql.DB, orderID string) (*OrderHeader, error) {
|
|||||||
ISNULL((
|
ISNULL((
|
||||||
SELECT TOP (1) ca.AttributeDescription
|
SELECT TOP (1) ca.AttributeDescription
|
||||||
FROM BAGGI_V3.dbo.cdCurrAccAttributeDesc AS ca WITH (NOLOCK)
|
FROM BAGGI_V3.dbo.cdCurrAccAttributeDesc AS ca WITH (NOLOCK)
|
||||||
WHERE ca.CurrAccTypeCode = 3
|
WHERE ca.CurrAccTypeCode IN (1,3)
|
||||||
AND ca.AttributeTypeCode = 2 -- 🟡 Müşteri Temsilcisi
|
AND ca.AttributeTypeCode = 2 -- 🟡 Müşteri Temsilcisi
|
||||||
AND ca.AttributeCode = f.CustomerAtt02
|
AND ca.AttributeCode = f.CustomerAtt02
|
||||||
AND ca.LangCode = 'TR'
|
AND ca.LangCode = 'TR'
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/lib/pq"
|
||||||
)
|
)
|
||||||
|
|
||||||
type IdTitleOption struct {
|
type IdTitleOption struct {
|
||||||
@@ -57,7 +58,7 @@ type RoleDepartmentPermissionHandler struct {
|
|||||||
func NewRoleDepartmentPermissionHandler(db *sql.DB) *RoleDepartmentPermissionHandler {
|
func NewRoleDepartmentPermissionHandler(db *sql.DB) *RoleDepartmentPermissionHandler {
|
||||||
|
|
||||||
return &RoleDepartmentPermissionHandler{
|
return &RoleDepartmentPermissionHandler{
|
||||||
DB: db, // ✅ EKLENDİ
|
DB: db, // Added
|
||||||
Repo: permissions.NewRoleDepartmentPermissionRepo(db),
|
Repo: permissions.NewRoleDepartmentPermissionRepo(db),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -417,7 +418,7 @@ func (h *PermissionHandler) GetUserOverrides(w http.ResponseWriter, r *http.Requ
|
|||||||
|
|
||||||
list, err := h.Repo.GetUserOverridesByUserID(userID)
|
list, err := h.Repo.GetUserOverridesByUserID(userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("❌ USER OVERRIDE LOAD ERROR:", err)
|
log.Println("USER OVERRIDE LOAD ERROR:", err)
|
||||||
http.Error(w, "db error", http.StatusInternalServerError)
|
http.Error(w, "db error", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -425,6 +426,138 @@ func (h *PermissionHandler) GetUserOverrides(w http.ResponseWriter, r *http.Requ
|
|||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
_ = json.NewEncoder(w).Encode(list)
|
_ = json.NewEncoder(w).Encode(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type routePermissionSeed struct {
|
||||||
|
Module string
|
||||||
|
Action string
|
||||||
|
Path string
|
||||||
|
}
|
||||||
|
|
||||||
|
type moduleActionSeed struct {
|
||||||
|
Module string
|
||||||
|
Action string
|
||||||
|
}
|
||||||
|
|
||||||
|
type permissionSnapshot struct {
|
||||||
|
user map[string]bool
|
||||||
|
roleDept map[string]bool
|
||||||
|
role map[string]bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func permissionKey(module, action string) string {
|
||||||
|
return module + "|" + action
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadPermissionSnapshot(
|
||||||
|
db *sql.DB,
|
||||||
|
userID int64,
|
||||||
|
roleID int64,
|
||||||
|
deptCodes []string,
|
||||||
|
) (permissionSnapshot, error) {
|
||||||
|
snapshot := permissionSnapshot{
|
||||||
|
user: make(map[string]bool, 128),
|
||||||
|
roleDept: make(map[string]bool, 128),
|
||||||
|
role: make(map[string]bool, 128),
|
||||||
|
}
|
||||||
|
|
||||||
|
userRows, err := db.Query(`
|
||||||
|
SELECT module_code, action, allowed
|
||||||
|
FROM mk_sys_user_permissions
|
||||||
|
WHERE user_id = $1
|
||||||
|
`, userID)
|
||||||
|
if err != nil {
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
for userRows.Next() {
|
||||||
|
var module, action string
|
||||||
|
var allowed bool
|
||||||
|
if err := userRows.Scan(&module, &action, &allowed); err != nil {
|
||||||
|
_ = userRows.Close()
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
snapshot.user[permissionKey(module, action)] = allowed
|
||||||
|
}
|
||||||
|
if err := userRows.Err(); err != nil {
|
||||||
|
_ = userRows.Close()
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
_ = userRows.Close()
|
||||||
|
|
||||||
|
if len(deptCodes) > 0 {
|
||||||
|
roleDeptRows, err := db.Query(`
|
||||||
|
SELECT module_code, action, BOOL_OR(allowed) AS allowed
|
||||||
|
FROM vw_role_dept_permissions
|
||||||
|
WHERE role_id = $1
|
||||||
|
AND department_code = ANY($2)
|
||||||
|
GROUP BY module_code, action
|
||||||
|
`,
|
||||||
|
roleID,
|
||||||
|
pq.Array(deptCodes),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
for roleDeptRows.Next() {
|
||||||
|
var module, action string
|
||||||
|
var allowed bool
|
||||||
|
if err := roleDeptRows.Scan(&module, &action, &allowed); err != nil {
|
||||||
|
_ = roleDeptRows.Close()
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
snapshot.roleDept[permissionKey(module, action)] = allowed
|
||||||
|
}
|
||||||
|
if err := roleDeptRows.Err(); err != nil {
|
||||||
|
_ = roleDeptRows.Close()
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
_ = roleDeptRows.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
roleRows, err := db.Query(`
|
||||||
|
SELECT module_code, action, allowed
|
||||||
|
FROM mk_sys_role_permissions
|
||||||
|
WHERE role_id = $1
|
||||||
|
`, roleID)
|
||||||
|
if err != nil {
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
for roleRows.Next() {
|
||||||
|
var module, action string
|
||||||
|
var allowed bool
|
||||||
|
if err := roleRows.Scan(&module, &action, &allowed); err != nil {
|
||||||
|
_ = roleRows.Close()
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
snapshot.role[permissionKey(module, action)] = allowed
|
||||||
|
}
|
||||||
|
if err := roleRows.Err(); err != nil {
|
||||||
|
_ = roleRows.Close()
|
||||||
|
return snapshot, err
|
||||||
|
}
|
||||||
|
_ = roleRows.Close()
|
||||||
|
|
||||||
|
return snapshot, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolvePermissionFromSnapshot(
|
||||||
|
s permissionSnapshot,
|
||||||
|
module string,
|
||||||
|
action string,
|
||||||
|
) bool {
|
||||||
|
key := permissionKey(module, action)
|
||||||
|
|
||||||
|
if allowed, ok := s.user[key]; ok {
|
||||||
|
return allowed
|
||||||
|
}
|
||||||
|
if allowed, ok := s.roleDept[key]; ok {
|
||||||
|
return allowed
|
||||||
|
}
|
||||||
|
if allowed, ok := s.role[key]; ok {
|
||||||
|
return allowed
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func GetUserRoutePermissionsHandler(db *sql.DB) http.HandlerFunc {
|
func GetUserRoutePermissionsHandler(db *sql.DB) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
@@ -436,10 +569,16 @@ func GetUserRoutePermissionsHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
repo := permissions.NewPermissionRepository(db)
|
snapshot, err := loadPermissionSnapshot(
|
||||||
|
db,
|
||||||
// JWT’den departmanlar
|
int64(claims.ID),
|
||||||
depts := claims.DepartmentCodes
|
int64(claims.RoleID),
|
||||||
|
claims.DepartmentCodes,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
rows, err := db.Query(`
|
rows, err := db.Query(`
|
||||||
SELECT DISTINCT
|
SELECT DISTINCT
|
||||||
@@ -454,17 +593,9 @@ func GetUserRoutePermissionsHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
type Row struct {
|
routeSeeds := make([]routePermissionSeed, 0, 128)
|
||||||
Route string `json:"route"`
|
|
||||||
CanAccess bool `json:"can_access"`
|
|
||||||
}
|
|
||||||
|
|
||||||
list := make([]Row, 0, 64)
|
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
|
||||||
var module, action, path string
|
var module, action, path string
|
||||||
|
|
||||||
if err := rows.Scan(
|
if err := rows.Scan(
|
||||||
&module,
|
&module,
|
||||||
&action,
|
&action,
|
||||||
@@ -473,22 +604,26 @@ func GetUserRoutePermissionsHandler(db *sql.DB) http.HandlerFunc {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
allowed, err := repo.ResolvePermissionChain(
|
routeSeeds = append(routeSeeds, routePermissionSeed{
|
||||||
int64(claims.ID),
|
Module: module,
|
||||||
int64(claims.RoleID),
|
Action: action,
|
||||||
depts,
|
Path: path,
|
||||||
module,
|
})
|
||||||
action,
|
}
|
||||||
)
|
if err := rows.Err(); err != nil {
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
if err != nil {
|
return
|
||||||
log.Println("PERM RESOLVE ERROR:", err)
|
}
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
|
list := make([]Row, 0, len(routeSeeds))
|
||||||
|
for _, route := range routeSeeds {
|
||||||
list = append(list, Row{
|
list = append(list, Row{
|
||||||
Route: path,
|
Route: route.Path,
|
||||||
CanAccess: allowed,
|
CanAccess: resolvePermissionFromSnapshot(
|
||||||
|
snapshot,
|
||||||
|
route.Module,
|
||||||
|
route.Action,
|
||||||
|
),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,18 +642,17 @@ func GetMyEffectivePermissions(db *sql.DB) http.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
repo := permissions.NewPermissionRepository(db)
|
snapshot, err := loadPermissionSnapshot(
|
||||||
|
db,
|
||||||
// ✅ JWT'DEN DEPARTMENTS
|
int64(claims.ID),
|
||||||
depts := claims.DepartmentCodes
|
int64(claims.RoleID),
|
||||||
|
claims.DepartmentCodes,
|
||||||
log.Printf("🧪 EFFECTIVE PERM | user=%d role=%d depts=%v",
|
|
||||||
claims.ID,
|
|
||||||
claims.RoleID,
|
|
||||||
depts,
|
|
||||||
)
|
)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// all system perms
|
|
||||||
all, err := db.Query(`
|
all, err := db.Query(`
|
||||||
SELECT DISTINCT module_code, action
|
SELECT DISTINCT module_code, action
|
||||||
FROM mk_sys_routes
|
FROM mk_sys_routes
|
||||||
@@ -529,14 +663,7 @@ func GetMyEffectivePermissions(db *sql.DB) http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
defer all.Close()
|
defer all.Close()
|
||||||
|
|
||||||
type Row struct {
|
moduleActions := make([]moduleActionSeed, 0, 128)
|
||||||
Module string `json:"module"`
|
|
||||||
Action string `json:"action"`
|
|
||||||
Allowed bool `json:"allowed"`
|
|
||||||
}
|
|
||||||
|
|
||||||
list := make([]Row, 0, 128)
|
|
||||||
|
|
||||||
for all.Next() {
|
for all.Next() {
|
||||||
|
|
||||||
var m, a string
|
var m, a string
|
||||||
@@ -544,22 +671,32 @@ func GetMyEffectivePermissions(db *sql.DB) http.HandlerFunc {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
allowed, err := repo.ResolvePermissionChain(
|
moduleActions = append(moduleActions, moduleActionSeed{
|
||||||
int64(claims.ID),
|
Module: m,
|
||||||
int64(claims.RoleID),
|
Action: a,
|
||||||
depts,
|
})
|
||||||
m,
|
}
|
||||||
a,
|
if err := all.Err(); err != nil {
|
||||||
)
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
type Row struct {
|
||||||
continue
|
Module string `json:"module"`
|
||||||
}
|
Action string `json:"action"`
|
||||||
|
Allowed bool `json:"allowed"`
|
||||||
|
}
|
||||||
|
|
||||||
|
list := make([]Row, 0, len(moduleActions))
|
||||||
|
for _, item := range moduleActions {
|
||||||
list = append(list, Row{
|
list = append(list, Row{
|
||||||
Module: m,
|
Module: item.Module,
|
||||||
Action: a,
|
Action: item.Action,
|
||||||
Allowed: allowed,
|
Allowed: resolvePermissionFromSnapshot(
|
||||||
|
snapshot,
|
||||||
|
item.Module,
|
||||||
|
item.Action,
|
||||||
|
),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package routes
|
package routes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bssapp-backend/auth"
|
||||||
"bssapp-backend/internal/auditlog"
|
"bssapp-backend/internal/auditlog"
|
||||||
"bssapp-backend/internal/mailer"
|
"bssapp-backend/internal/mailer"
|
||||||
"bssapp-backend/internal/security"
|
"bssapp-backend/internal/security"
|
||||||
@@ -51,6 +52,8 @@ func UserDetailRoute(db *sql.DB) http.Handler {
|
|||||||
handleUserGet(db, w, userID)
|
handleUserGet(db, w, userID)
|
||||||
case http.MethodPut:
|
case http.MethodPut:
|
||||||
handleUserUpdate(db, w, r, userID)
|
handleUserUpdate(db, w, r, userID)
|
||||||
|
case http.MethodDelete:
|
||||||
|
handleUserDelete(db, w, r, userID)
|
||||||
case http.MethodOptions:
|
case http.MethodOptions:
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
default:
|
default:
|
||||||
@@ -323,6 +326,102 @@ func handleUserUpdate(db *sql.DB, w http.ResponseWriter, r *http.Request, userID
|
|||||||
_ = json.NewEncoder(w).Encode(map[string]any{"success": true})
|
_ = json.NewEncoder(w).Encode(map[string]any{"success": true})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ======================================================
|
||||||
|
// 🗑️ DELETE USER (HARD DELETE)
|
||||||
|
// ======================================================
|
||||||
|
func handleUserDelete(db *sql.DB, w http.ResponseWriter, r *http.Request, userID int64) {
|
||||||
|
claims, _ := auth.GetClaimsFromContext(r.Context())
|
||||||
|
if claims != nil && int64(claims.ID) == userID {
|
||||||
|
http.Error(w, "Kendi kullanicinizi silemezsiniz", http.StatusConflict)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tx, err := db.Begin()
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Transaction baslatilamadi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer tx.Rollback()
|
||||||
|
|
||||||
|
var username string
|
||||||
|
_ = tx.QueryRow(`
|
||||||
|
SELECT username
|
||||||
|
FROM mk_dfusr
|
||||||
|
WHERE id = $1
|
||||||
|
`, userID).Scan(&username)
|
||||||
|
|
||||||
|
if strings.TrimSpace(username) == "" {
|
||||||
|
_ = tx.QueryRow(`
|
||||||
|
SELECT code
|
||||||
|
FROM dfusr
|
||||||
|
WHERE id = $1
|
||||||
|
`, userID).Scan(&username)
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.TrimSpace(username) == "" {
|
||||||
|
http.Error(w, "Kullanici bulunamadi", http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanupQueries := []string{
|
||||||
|
`DELETE FROM mk_refresh_tokens WHERE mk_user_id = $1`,
|
||||||
|
`DELETE FROM mk_dfusr_password_reset WHERE mk_dfusr_id = $1`,
|
||||||
|
`DELETE FROM dfusr_password_reset WHERE dfusr_id = $1`,
|
||||||
|
`DELETE FROM mk_sys_user_permissions WHERE user_id = $1`,
|
||||||
|
`DELETE FROM dfrole_usr WHERE dfusr_id = $1`,
|
||||||
|
`DELETE FROM dfusr_dprt WHERE dfusr_id = $1`,
|
||||||
|
`DELETE FROM dfusr_piyasa WHERE dfusr_id = $1`,
|
||||||
|
`DELETE FROM dfusr_nebim_user WHERE dfusr_id = $1`,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, q := range cleanupQueries {
|
||||||
|
if _, err := tx.Exec(q, userID); err != nil {
|
||||||
|
log.Printf("❌ [UserDetail] cleanup failed user_id=%d err=%v query=%s", userID, err, q)
|
||||||
|
http.Error(w, "Kullanici baglantilari silinemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := tx.Exec(`DELETE FROM mk_dfusr WHERE id = $1`, userID); err != nil {
|
||||||
|
log.Printf("❌ [UserDetail] delete mk_dfusr failed user_id=%d err=%v", userID, err)
|
||||||
|
http.Error(w, "Kullanici silinemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := tx.Exec(`DELETE FROM dfusr WHERE id = $1`, userID); err != nil {
|
||||||
|
log.Printf("❌ [UserDetail] delete dfusr failed user_id=%d err=%v", userID, err)
|
||||||
|
http.Error(w, "Kullanici silinemedi", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tx.Commit(); err != nil {
|
||||||
|
log.Printf("❌ [UserDetail] delete commit failed user_id=%d err=%v", userID, err)
|
||||||
|
http.Error(w, "Commit basarisiz", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if claims != nil {
|
||||||
|
auditlog.Enqueue(r.Context(), auditlog.ActivityLog{
|
||||||
|
ActionType: "user_delete",
|
||||||
|
ActionCategory: "user_admin",
|
||||||
|
ActionTarget: fmt.Sprintf("/api/users/%d", userID),
|
||||||
|
Description: "user deleted from mk_dfusr and dfusr",
|
||||||
|
Username: claims.Username,
|
||||||
|
RoleCode: claims.RoleCode,
|
||||||
|
DfUsrID: int64(claims.ID),
|
||||||
|
TargetDfUsrID: userID,
|
||||||
|
TargetUsername: username,
|
||||||
|
IsSuccess: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = json.NewEncoder(w).Encode(map[string]any{
|
||||||
|
"success": true,
|
||||||
|
"deleted": userID,
|
||||||
|
"username": username,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// ======================================================
|
// ======================================================
|
||||||
// 🔐 ADMIN — PASSWORD RESET MAIL
|
// 🔐 ADMIN — PASSWORD RESET MAIL
|
||||||
// ======================================================
|
// ======================================================
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ package services
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bssapp-backend/models"
|
"bssapp-backend/models"
|
||||||
|
"crypto/md5"
|
||||||
|
"crypto/sha1"
|
||||||
|
"encoding/hex"
|
||||||
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
@@ -16,7 +20,6 @@ func CheckPasswordWithLegacy(user *models.User, plain string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
plain = strings.TrimSpace(plain)
|
|
||||||
if plain == "" {
|
if plain == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -28,11 +31,100 @@ func CheckPasswordWithLegacy(user *models.User, plain string) bool {
|
|||||||
|
|
||||||
// 1️⃣ bcrypt hash mi?
|
// 1️⃣ bcrypt hash mi?
|
||||||
if isBcryptHash(stored) {
|
if isBcryptHash(stored) {
|
||||||
return bcrypt.CompareHashAndPassword([]byte(stored), []byte(plain)) == nil
|
candidates := make([]string, 0, 10)
|
||||||
|
seen := map[string]struct{}{}
|
||||||
|
add := func(v string) {
|
||||||
|
if v == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, ok := seen[v]; ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
seen[v] = struct{}{}
|
||||||
|
candidates = append(candidates, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
add(plain)
|
||||||
|
trimmed := strings.TrimSpace(plain)
|
||||||
|
add(trimmed)
|
||||||
|
|
||||||
|
bases := append([]string(nil), candidates...)
|
||||||
|
for _, base := range bases {
|
||||||
|
md5Sum := md5.Sum([]byte(base))
|
||||||
|
md5Hex := hex.EncodeToString(md5Sum[:])
|
||||||
|
add(md5Hex)
|
||||||
|
add(strings.ToUpper(md5Hex))
|
||||||
|
|
||||||
|
sha1Sum := sha1.Sum([]byte(base))
|
||||||
|
sha1Hex := hex.EncodeToString(sha1Sum[:])
|
||||||
|
add(sha1Hex)
|
||||||
|
add(strings.ToUpper(sha1Hex))
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastErr error
|
||||||
|
for _, candidate := range candidates {
|
||||||
|
if err := bcrypt.CompareHashAndPassword([]byte(stored), []byte(candidate)); err == nil {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
lastErr = err
|
||||||
|
}
|
||||||
|
if encoded, ok := encodeLegacySingleByte(candidate); ok {
|
||||||
|
if err := bcrypt.CompareHashAndPassword([]byte(stored), encoded); err == nil {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
lastErr = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if lastErr != nil {
|
||||||
|
log.Printf(
|
||||||
|
"LEGACY BCRYPT MISMATCH stored_len=%d candidates=%d last_err=%v",
|
||||||
|
len(stored),
|
||||||
|
len(candidates),
|
||||||
|
lastErr,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2️⃣ TAM LEGACY — düz metin (eski kayıtlar)
|
// 2️⃣ TAM LEGACY — düz metin (eski kayıtlar)
|
||||||
return stored == plain
|
if stored == plain {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
trimmed := strings.TrimSpace(plain)
|
||||||
|
if trimmed != plain && trimmed != "" && stored == trimmed {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3️⃣ Legacy hash variants seen in old dfusr.upass data.
|
||||||
|
if isHexDigest(stored, 32) {
|
||||||
|
sumRaw := md5.Sum([]byte(plain))
|
||||||
|
if strings.EqualFold(stored, hex.EncodeToString(sumRaw[:])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if trimmed != plain && trimmed != "" {
|
||||||
|
sumTrim := md5.Sum([]byte(trimmed))
|
||||||
|
if strings.EqualFold(stored, hex.EncodeToString(sumTrim[:])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if isHexDigest(stored, 40) {
|
||||||
|
sumRaw := sha1.Sum([]byte(plain))
|
||||||
|
if strings.EqualFold(stored, hex.EncodeToString(sumRaw[:])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if trimmed != plain && trimmed != "" {
|
||||||
|
sumTrim := sha1.Sum([]byte(trimmed))
|
||||||
|
if strings.EqualFold(stored, hex.EncodeToString(sumTrim[:])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func isBcryptHash(s string) bool {
|
func isBcryptHash(s string) bool {
|
||||||
@@ -40,3 +132,46 @@ func isBcryptHash(s string) bool {
|
|||||||
strings.HasPrefix(s, "$2b$") ||
|
strings.HasPrefix(s, "$2b$") ||
|
||||||
strings.HasPrefix(s, "$2y$")
|
strings.HasPrefix(s, "$2y$")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isHexDigest(s string, expectedLen int) bool {
|
||||||
|
if len(s) != expectedLen {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for _, r := range s {
|
||||||
|
if (r < '0' || r > '9') &&
|
||||||
|
(r < 'a' || r > 'f') &&
|
||||||
|
(r < 'A' || r > 'F') {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// encodeLegacySingleByte converts text to a Turkish-compatible single-byte
|
||||||
|
// representation (similar to Windows-1254 / ISO-8859-9) for legacy bcrypt data.
|
||||||
|
func encodeLegacySingleByte(s string) ([]byte, bool) {
|
||||||
|
out := make([]byte, 0, len(s))
|
||||||
|
for _, r := range s {
|
||||||
|
switch r {
|
||||||
|
case 'Ğ':
|
||||||
|
out = append(out, 0xD0)
|
||||||
|
case 'ğ':
|
||||||
|
out = append(out, 0xF0)
|
||||||
|
case 'İ':
|
||||||
|
out = append(out, 0xDD)
|
||||||
|
case 'ı':
|
||||||
|
out = append(out, 0xFD)
|
||||||
|
case 'Ş':
|
||||||
|
out = append(out, 0xDE)
|
||||||
|
case 'ş':
|
||||||
|
out = append(out, 0xFE)
|
||||||
|
default:
|
||||||
|
if r >= 0 && r <= 0xFF {
|
||||||
|
out = append(out, byte(r))
|
||||||
|
} else {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out, true
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
VITE_API_BASE_URL=http://localhost:8080
|
VITE_API_BASE_URL=http://localhost:8080/api
|
||||||
|
|||||||
@@ -146,8 +146,6 @@ createQuasarApp(createApp, quasarUserOptions)
|
|||||||
|
|
||||||
return Promise[ method ]([
|
return Promise[ method ]([
|
||||||
|
|
||||||
import(/* webpackMode: "eager" */ 'boot/axios'),
|
|
||||||
|
|
||||||
import(/* webpackMode: "eager" */ 'boot/dayjs')
|
import(/* webpackMode: "eager" */ 'boot/dayjs')
|
||||||
|
|
||||||
]).then(bootFiles => {
|
]).then(bootFiles => {
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/**
|
|
||||||
* THIS FILE IS GENERATED AUTOMATICALLY.
|
|
||||||
* DO NOT EDIT.
|
|
||||||
*
|
|
||||||
* You are probably looking on adding startup/initialization code.
|
|
||||||
* Use "quasar new boot <name>" and add it there.
|
|
||||||
* One boot file per concern. Then reference the file(s) in quasar.config file > boot:
|
|
||||||
* boot: ['file', ...] // do not add ".js" extension to it.
|
|
||||||
*
|
|
||||||
* Boot files are your "main.js"
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import { Quasar } from 'quasar'
|
|
||||||
import { markRaw } from 'vue'
|
|
||||||
import RootComponent from 'app/src/App.vue'
|
|
||||||
|
|
||||||
import createStore from 'app/src/stores/index'
|
|
||||||
import createRouter from 'app/src/router/index'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default async function (createAppFn, quasarUserOptions) {
|
|
||||||
|
|
||||||
|
|
||||||
// Create the app instance.
|
|
||||||
// Here we inject into it the Quasar UI, the router & possibly the store.
|
|
||||||
const app = createAppFn(RootComponent)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app.use(Quasar, quasarUserOptions)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const store = typeof createStore === 'function'
|
|
||||||
? await createStore({})
|
|
||||||
: createStore
|
|
||||||
|
|
||||||
|
|
||||||
app.use(store)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const router = markRaw(
|
|
||||||
typeof createRouter === 'function'
|
|
||||||
? await createRouter({store})
|
|
||||||
: createRouter
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
// make router instance available in store
|
|
||||||
|
|
||||||
store.use(({ store }) => { store.router = router })
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Expose the app, the router and the store.
|
|
||||||
// Note that we are not mounting the app here, since bootstrapping will be
|
|
||||||
// different depending on whether we are in a browser or on the server.
|
|
||||||
return {
|
|
||||||
app,
|
|
||||||
store,
|
|
||||||
router
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/**
|
|
||||||
* THIS FILE IS GENERATED AUTOMATICALLY.
|
|
||||||
* DO NOT EDIT.
|
|
||||||
*
|
|
||||||
* You are probably looking on adding startup/initialization code.
|
|
||||||
* Use "quasar new boot <name>" and add it there.
|
|
||||||
* One boot file per concern. Then reference the file(s) in quasar.config file > boot:
|
|
||||||
* boot: ['file', ...] // do not add ".js" extension to it.
|
|
||||||
*
|
|
||||||
* Boot files are your "main.js"
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
import { createApp } from 'vue'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import '@quasar/extras/roboto-font/roboto-font.css'
|
|
||||||
|
|
||||||
import '@quasar/extras/material-icons/material-icons.css'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// We load Quasar stylesheet file
|
|
||||||
import 'quasar/dist/quasar.sass'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import 'src/css/app.css'
|
|
||||||
|
|
||||||
|
|
||||||
import createQuasarApp from './app.js'
|
|
||||||
import quasarUserOptions from './quasar-user-options.js'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const publicPath = `/`
|
|
||||||
|
|
||||||
|
|
||||||
async function start ({
|
|
||||||
app,
|
|
||||||
router
|
|
||||||
, store
|
|
||||||
}, bootFiles) {
|
|
||||||
|
|
||||||
let hasRedirected = false
|
|
||||||
const getRedirectUrl = url => {
|
|
||||||
try { return router.resolve(url).href }
|
|
||||||
catch (err) {}
|
|
||||||
|
|
||||||
return Object(url) === url
|
|
||||||
? null
|
|
||||||
: url
|
|
||||||
}
|
|
||||||
const redirect = url => {
|
|
||||||
hasRedirected = true
|
|
||||||
|
|
||||||
if (typeof url === 'string' && /^https?:\/\//.test(url)) {
|
|
||||||
window.location.href = url
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const href = getRedirectUrl(url)
|
|
||||||
|
|
||||||
// continue if we didn't fail to resolve the url
|
|
||||||
if (href !== null) {
|
|
||||||
window.location.href = href
|
|
||||||
window.location.reload()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const urlPath = window.location.href.replace(window.location.origin, '')
|
|
||||||
|
|
||||||
for (let i = 0; hasRedirected === false && i < bootFiles.length; i++) {
|
|
||||||
try {
|
|
||||||
await bootFiles[i]({
|
|
||||||
app,
|
|
||||||
router,
|
|
||||||
store,
|
|
||||||
ssrContext: null,
|
|
||||||
redirect,
|
|
||||||
urlPath,
|
|
||||||
publicPath
|
|
||||||
})
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
if (err && err.url) {
|
|
||||||
redirect(err.url)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
console.error('[Quasar] boot error:', err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasRedirected === true) return
|
|
||||||
|
|
||||||
|
|
||||||
app.use(router)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
app.mount('#q-app')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
createQuasarApp(createApp, quasarUserOptions)
|
|
||||||
|
|
||||||
.then(app => {
|
|
||||||
// eventually remove this when Cordova/Capacitor/Electron support becomes old
|
|
||||||
const [ method, mapFn ] = Promise.allSettled !== void 0
|
|
||||||
? [
|
|
||||||
'allSettled',
|
|
||||||
bootFiles => bootFiles.map(result => {
|
|
||||||
if (result.status === 'rejected') {
|
|
||||||
console.error('[Quasar] boot error:', result.reason)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return result.value.default
|
|
||||||
})
|
|
||||||
]
|
|
||||||
: [
|
|
||||||
'all',
|
|
||||||
bootFiles => bootFiles.map(entry => entry.default)
|
|
||||||
]
|
|
||||||
|
|
||||||
return Promise[ method ]([
|
|
||||||
|
|
||||||
import(/* webpackMode: "eager" */ 'boot/dayjs')
|
|
||||||
|
|
||||||
]).then(bootFiles => {
|
|
||||||
const boot = mapFn(bootFiles).filter(entry => typeof entry === 'function')
|
|
||||||
start(app, boot)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/**
|
|
||||||
* THIS FILE IS GENERATED AUTOMATICALLY.
|
|
||||||
* DO NOT EDIT.
|
|
||||||
*
|
|
||||||
* You are probably looking on adding startup/initialization code.
|
|
||||||
* Use "quasar new boot <name>" and add it there.
|
|
||||||
* One boot file per concern. Then reference the file(s) in quasar.config file > boot:
|
|
||||||
* boot: ['file', ...] // do not add ".js" extension to it.
|
|
||||||
*
|
|
||||||
* Boot files are your "main.js"
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import App from 'app/src/App.vue'
|
|
||||||
let appPrefetch = typeof App.preFetch === 'function'
|
|
||||||
? App.preFetch
|
|
||||||
: (
|
|
||||||
// Class components return the component options (and the preFetch hook) inside __c property
|
|
||||||
App.__c !== void 0 && typeof App.__c.preFetch === 'function'
|
|
||||||
? App.__c.preFetch
|
|
||||||
: false
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
function getMatchedComponents (to, router) {
|
|
||||||
const route = to
|
|
||||||
? (to.matched ? to : router.resolve(to).route)
|
|
||||||
: router.currentRoute.value
|
|
||||||
|
|
||||||
if (!route) { return [] }
|
|
||||||
|
|
||||||
const matched = route.matched.filter(m => m.components !== void 0)
|
|
||||||
|
|
||||||
if (matched.length === 0) { return [] }
|
|
||||||
|
|
||||||
return Array.prototype.concat.apply([], matched.map(m => {
|
|
||||||
return Object.keys(m.components).map(key => {
|
|
||||||
const comp = m.components[key]
|
|
||||||
return {
|
|
||||||
path: m.path,
|
|
||||||
c: comp
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
export function addPreFetchHooks ({ router, store, publicPath }) {
|
|
||||||
// Add router hook for handling preFetch.
|
|
||||||
// Doing it after initial route is resolved so that we don't double-fetch
|
|
||||||
// the data that we already have. Using router.beforeResolve() so that all
|
|
||||||
// async components are resolved.
|
|
||||||
router.beforeResolve((to, from, next) => {
|
|
||||||
const
|
|
||||||
urlPath = window.location.href.replace(window.location.origin, ''),
|
|
||||||
matched = getMatchedComponents(to, router),
|
|
||||||
prevMatched = getMatchedComponents(from, router)
|
|
||||||
|
|
||||||
let diffed = false
|
|
||||||
const preFetchList = matched
|
|
||||||
.filter((m, i) => {
|
|
||||||
return diffed || (diffed = (
|
|
||||||
!prevMatched[i] ||
|
|
||||||
prevMatched[i].c !== m.c ||
|
|
||||||
m.path.indexOf('/:') > -1 // does it has params?
|
|
||||||
))
|
|
||||||
})
|
|
||||||
.filter(m => m.c !== void 0 && (
|
|
||||||
typeof m.c.preFetch === 'function'
|
|
||||||
// Class components return the component options (and the preFetch hook) inside __c property
|
|
||||||
|| (m.c.__c !== void 0 && typeof m.c.__c.preFetch === 'function')
|
|
||||||
))
|
|
||||||
.map(m => m.c.__c !== void 0 ? m.c.__c.preFetch : m.c.preFetch)
|
|
||||||
|
|
||||||
|
|
||||||
if (appPrefetch !== false) {
|
|
||||||
preFetchList.unshift(appPrefetch)
|
|
||||||
appPrefetch = false
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (preFetchList.length === 0) {
|
|
||||||
return next()
|
|
||||||
}
|
|
||||||
|
|
||||||
let hasRedirected = false
|
|
||||||
const redirect = url => {
|
|
||||||
hasRedirected = true
|
|
||||||
next(url)
|
|
||||||
}
|
|
||||||
const proceed = () => {
|
|
||||||
|
|
||||||
if (hasRedirected === false) { next() }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
preFetchList.reduce(
|
|
||||||
(promise, preFetch) => promise.then(() => hasRedirected === false && preFetch({
|
|
||||||
store,
|
|
||||||
currentRoute: to,
|
|
||||||
previousRoute: from,
|
|
||||||
redirect,
|
|
||||||
urlPath,
|
|
||||||
publicPath
|
|
||||||
})),
|
|
||||||
Promise.resolve()
|
|
||||||
)
|
|
||||||
.then(proceed)
|
|
||||||
.catch(e => {
|
|
||||||
console.error(e)
|
|
||||||
proceed()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/**
|
|
||||||
* THIS FILE IS GENERATED AUTOMATICALLY.
|
|
||||||
* DO NOT EDIT.
|
|
||||||
*
|
|
||||||
* You are probably looking on adding startup/initialization code.
|
|
||||||
* Use "quasar new boot <name>" and add it there.
|
|
||||||
* One boot file per concern. Then reference the file(s) in quasar.config file > boot:
|
|
||||||
* boot: ['file', ...] // do not add ".js" extension to it.
|
|
||||||
*
|
|
||||||
* Boot files are your "main.js"
|
|
||||||
**/
|
|
||||||
|
|
||||||
import lang from 'quasar/lang/tr.js'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import {Loading,Dialog,Notify} from 'quasar'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default { config: {"notify":{"position":"top","timeout":2500}},lang,plugins: {Loading,Dialog,Notify} }
|
|
||||||
|
|
||||||
1
ui/dist/spa/css/358.36bfde07.css
vendored
@@ -1 +0,0 @@
|
|||||||
.ol-page[data-v-68dfbebc]{padding:10px}.ol-filter-bar[data-v-68dfbebc]{margin-bottom:8px}.ol-filter-row[data-v-68dfbebc]{align-items:center;display:flex;flex-wrap:nowrap;gap:10px}.ol-filter-input[data-v-68dfbebc]{flex:0 0 136px;min-width:118px;width:136px}.ol-search[data-v-68dfbebc]{flex:1 1 360px;max-width:420px;min-width:240px}.ol-filter-actions[data-v-68dfbebc]{display:flex;flex:0 0 auto;flex-wrap:nowrap;gap:8px}.ol-filter-total[data-v-68dfbebc]{align-items:flex-end;align-self:center;display:flex;flex:0 0 auto;flex-direction:column;gap:2px;justify-content:center;line-height:1.2;margin-left:auto;min-width:250px}.ol-total-line[data-v-68dfbebc]{align-items:baseline;display:flex;gap:8px;white-space:nowrap}.ol-total-label[data-v-68dfbebc]{color:#4b5563;font-size:12px}.ol-total-value[data-v-68dfbebc]{font-size:13px}.ol-table[data-v-68dfbebc] .q-table thead th{font-size:11px;padding:4px 6px;white-space:nowrap}.ol-table[data-v-68dfbebc] .q-table tbody td{font-size:11px;padding:3px 6px}.ol-col-multiline[data-v-68dfbebc]{display:block;display:-webkit-box;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:normal!important;word-break:break-word;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:2.35em}.ol-col-cari[data-v-68dfbebc]{max-width:160px}.ol-col-short[data-v-68dfbebc]{max-width:88px}.ol-col-desc[data-v-68dfbebc]{max-width:160px}.ol-pack-rate-cell[data-v-68dfbebc]{font-weight:700}.pack-rate-danger[data-v-68dfbebc]{color:#c62828}.pack-rate-warn[data-v-68dfbebc]{color:#8a6d00}.pack-rate-ok[data-v-68dfbebc]{color:#1f7a4f}@media (max-width:1440px){.ol-filter-row[data-v-68dfbebc]{align-items:flex-start;flex-wrap:wrap}.ol-filter-actions[data-v-68dfbebc]{flex-wrap:wrap}.ol-filter-input[data-v-68dfbebc]{flex:1 1 140px}.ol-filter-total[data-v-68dfbebc]{align-items:flex-start;margin-left:0;margin-top:6px;min-width:100%}.ol-total-line[data-v-68dfbebc]{justify-content:space-between;width:100%}}
|
|
||||||
1
ui/dist/spa/css/398.961173a2.css
vendored
@@ -1 +0,0 @@
|
|||||||
.bulk-close-page[data-v-734820af]{padding:10px}.bulk-filter-bar[data-v-734820af]{margin-bottom:8px}.bulk-filter-row[data-v-734820af]{align-items:flex-start;display:flex;flex-wrap:wrap;gap:10px}.bulk-search[data-v-734820af]{flex:1 1 420px;max-width:520px;min-width:320px}.bulk-filter-actions[data-v-734820af]{display:flex;flex-wrap:wrap;gap:8px}.bulk-summary[data-v-734820af]{align-items:flex-end;display:flex;flex-direction:column;font-size:12px;margin-left:auto;min-width:140px}.bulk-table[data-v-734820af] .q-table thead th{font-size:11px;font-weight:700;white-space:nowrap}.bulk-table[data-v-734820af] .q-table tbody td{font-size:11px;white-space:nowrap}.pack-rate-danger[data-v-734820af]{color:#c62828}.pack-rate-warn[data-v-734820af]{color:#8a6d00}.pack-rate-ok[data-v-734820af]{color:#1f7a4f}@media (max-width:1200px){.bulk-summary[data-v-734820af]{align-items:flex-start;margin-left:0}}
|
|
||||||
1
ui/dist/spa/css/54.b237f020.css
vendored
@@ -1 +0,0 @@
|
|||||||
.rdp-list-page[data-v-a17e51d4]{--rdp-header-h:56px;--rdp-filter-h:96px;background:#fff;display:flex;flex-direction:column;height:calc(100vh - var(--rdp-header-h));overflow:auto;padding:10px}.rdp-filter-bar[data-v-a17e51d4]{align-items:center;background:#fff;border-bottom:1px solid #ddd;box-shadow:0 1px 2px #0000000f;display:flex;margin-bottom:8px;min-height:var(--rdp-filter-h);padding:10px 12px;position:sticky;top:0;z-index:600}.rdp-filter-row[data-v-a17e51d4]{align-items:flex-end;display:flex;flex-wrap:nowrap;gap:12px}.rdp-filter-input[data-v-a17e51d4]{max-width:300px;min-width:180px}.rdp-search[data-v-a17e51d4]{flex:1 1 360px;max-width:520px;min-width:300px}.rdp-config-menus[data-v-a17e51d4],.rdp-filter-actions[data-v-a17e51d4]{align-items:center;display:flex;flex:0 0 auto;gap:8px;white-space:nowrap}.rdp-menu-list[data-v-a17e51d4]{max-height:420px;min-width:260px}.rdp-summary[data-v-a17e51d4]{align-self:center;background:#f9fafb;border:1px solid #e0e0e0;border-radius:6px;color:#4b5563;font-size:12px;margin-left:auto;padding:8px 12px;white-space:nowrap}.rdp-table[data-v-a17e51d4] .q-table__middle{max-height:none!important;overflow:visible!important}.rdp-table[data-v-a17e51d4] .q-table thead th{background:#fff;box-shadow:0 2px 4px #00000014;font-size:11px;position:sticky;top:var(--rdp-filter-h);white-space:nowrap;z-index:500}.rdp-table[data-v-a17e51d4] .q-table tbody td{font-size:11px;padding:3px 6px}.rdp-table[data-v-a17e51d4] .q-checkbox__inner{pointer-events:none}.rdp-table[data-v-a17e51d4] .freeze-col{background:#fff;position:sticky;z-index:510}.rdp-table[data-v-a17e51d4] thead .freeze-col{background:#fff;z-index:520}.rdp-table[data-v-a17e51d4] .freeze-1{left:0}.rdp-table[data-v-a17e51d4] .freeze-2{left:56px}.rdp-table[data-v-a17e51d4] .freeze-3{left:276px}@media (max-width:1400px){.rdp-filter-row[data-v-a17e51d4]{align-items:flex-start;flex-wrap:wrap}.rdp-config-menus[data-v-a17e51d4],.rdp-filter-actions[data-v-a17e51d4]{flex-wrap:wrap}.rdp-summary[data-v-a17e51d4]{margin-left:0;margin-top:6px;min-width:100%}}
|
|
||||||
1
ui/dist/spa/css/607.8d5cccce.css
vendored
@@ -1 +0,0 @@
|
|||||||
.perm-gateway[data-v-57a9abef]{padding:24px}
|
|
||||||
1
ui/dist/spa/css/713.e99910ab.css
vendored
@@ -1 +0,0 @@
|
|||||||
.login-bg[data-v-2ea21061]{min-height:100%;position:relative}.login-bg[data-v-2ea21061]:before{background:url(/images/Baggi-Fabrika-resmi.jpg) no-repeat 50%;background-size:cover;content:"";inset:0;opacity:.3;position:absolute}.login-bg[data-v-2ea21061]>*{position:relative;z-index:1}.login-card[data-v-2ea21061]{background:var(--q-secondary);border-radius:16px;color:#fff;max-width:90%;width:400px}.login-title[data-v-2ea21061]{color:var(--q-primary);font-size:1.3rem;font-weight:700}.custom-input[data-v-2ea21061]{background:#fdfcfc;border-radius:8px}.full-width[data-v-2ea21061]{width:100%}.login-card[data-v-2ea21061] .q-field__input,.login-card[data-v-2ea21061] .q-field__native{color:var(--q-primary)!important;font-weight:600}.login-card[data-v-2ea21061] .q-field__native::placeholder{color:#95711699}.login-card[data-v-2ea21061] .q-field--focused .q-field__native,.login-card[data-v-2ea21061] .q-field__label{color:var(--q-primary)}.login-card[data-v-2ea21061] input:-webkit-autofill{-webkit-text-fill-color:var(--q-primary)!important;-webkit-transition:background-color 9999s ease-in-out 0s;transition:background-color 9999s ease-in-out 0s}
|
|
||||||
1
ui/dist/spa/css/784.5916f342.css
vendored
@@ -1 +0,0 @@
|
|||||||
.user-gateway-page[data-v-7b115e06]{background:#fafafa}.gateway-container[data-v-7b115e06]{max-width:900px;padding:24px;width:100%}.gateway-header[data-v-7b115e06]{text-align:center}.gateway-actions[data-v-7b115e06]{justify-content:center}.gateway-card[data-v-7b115e06]{transition:all .2s ease;width:280px}.gateway-card[data-v-7b115e06]:hover{box-shadow:0 8px 24px #00000014;transform:translateY(-4px)}
|
|
||||||
1
ui/dist/spa/css/app.53116624.css
vendored
@@ -1 +0,0 @@
|
|||||||
.with-bg{min-height:100%;position:relative}.with-bg:before{background:url(/images/Baggi-tekstilas-logolu.jpg) no-repeat top;background-size:400px auto;content:"";inset:0;opacity:.15;pointer-events:none;position:absolute;z-index:0}.with-bg>*{position:relative;z-index:1}.q-page{margin-top:5px}@media (max-width:768px){.with-bg:before{background-size:260px auto}}.filter-sticky{position:sticky;top:56px;z-index:300}.filter-collapsible,.filter-sticky{background:#fff}.table-scroll{height:calc(100vh - 56px);margin-top:0;overflow-x:auto;overflow-y:auto;position:relative}.sticky-table .q-table__middle{max-height:none!important;overflow:visible!important}.sticky-table .q-table__top{background:#fff;box-shadow:0 2px 4px #00000014;position:sticky;top:0;z-index:220}.sticky-table thead th{background:#fff;position:sticky;top:40px;z-index:210}.sticky-bar{background:#fff;border-bottom:1px solid #ddd;padding:4px 8px;position:sticky;top:0;z-index:230}.sticky-table thead th{max-width:400px;min-width:80px;overflow:auto;resize:horizontal}.sticky-table td{font-size:.95rem;font-weight:600;line-height:1.2rem;max-width:400px;min-width:80px;overflow-wrap:break-word!important;padding:4px 8px!important;white-space:normal!important;word-break:break-word!important}.baggi-ppct{display:block;margin:30px auto 0;max-width:400px;opacity:.4}.col-desc{font-size:.75rem!important;line-height:1.1rem;max-width:220px!important;min-width:180px!important;overflow-wrap:break-word;white-space:normal!important;width:220px!important;word-break:break-word!important}.custom-table{font-size:.8rem}.custom-table th{background:#fff;color:#222;font-weight:800}.custom-table td{color:#333;font-weight:600}.custom-subtable{background:#fafafa;font-size:.72rem}.custom-subtable th{background:#f9f9f9;color:#555;font-weight:500}.custom-subtable td{color:#666;font-weight:400}.col-narrow{font-size:.72rem;max-width:90px;overflow:hidden;padding:2px 6px!important;text-overflow:ellipsis;white-space:nowrap}.group-row{background:#f1f1f1!important;border-bottom:2px solid #ccc;border-top:2px solid #ccc;color:#222;font-weight:700!important}.balance-card{align-items:center;border-radius:8px;display:flex;justify-content:center;min-height:120px;width:100%}.q-table td[data-col=BELGE_NO],.q-table td[data-col=Belge_No],.q-table td[data-col=belge_no]{color:var(--q-primary)!important;font-weight:600!important}.permissions-toolbar{align-items:center;background:#fff;border-bottom:1px solid #ddd;display:flex;gap:12px;padding:8px 16px;position:sticky;top:42px;z-index:300}.permissions-table-scroll{height:calc(100vh - 112px);overflow-x:auto;overflow-y:auto;position:relative}.permissions-table .q-table__middle{max-height:none!important;overflow:auto!important;padding-top:0}.permissions-table thead th{background:#fff;box-shadow:0 2px 4px #00000014;top:10px;z-index:210}.permissions-table td{background:#fff;font-size:.95rem;line-height:1.2rem;max-width:400px;min-width:80px;overflow-wrap:break-word!important;padding:4px 8px!important;white-space:normal!important;word-break:break-word!important}.permissions-table .permissions-sticky-col{background:#fff;box-shadow:2px 0 4px #0000000a;left:0;position:sticky;z-index:205}:root{--header-h:0px;--filter-h:72px;--save-h:60px;--grid-header-h:172px;--sub-header-h:34px;--drawer-w:240px;--col-model:90px;--col-renk:80px;--col-ana:100px;--col-alt:100px;--col-aciklama:140px;--col-adet:70px;--col-fiyat:70px;--col-pb:70px;--col-tutar:70px;--grp-title-w:90px;--grp-title-gap:4px;--beden-w:44px;--beden-h:28px;--beden-count:16;--baggi-gold:#c9a227;--baggi-gold-pale:#fff9e6;--baggi-gold-light:#fff7d2;--baggi-cream:#fffef9;--baggi-gray-border:#bbb}*,:after,:before{box-sizing:border-box}body,html{height:100%;margin:0}body{background:#fff;color:#222;font-family:Inter,Segoe UI,Arial,sans-serif;font-size:14px;line-height:1.4}#q-app,.q-page-container{margin:0;padding:0}.q-layout__page{top:0!important}.order-page{background:#fff;display:flex;flex-direction:column;height:calc(100vh - var(--header-h));overflow-x:visible;overflow-y:auto}.body--drawer-left-open .q-page-container{margin-left:var(--drawer-w);width:calc(100% - var(--drawer-w))}.body--drawer-left-closed .q-page-container{margin-left:0;width:100%}.order-scroll-x{flex:1}.order-page::-webkit-scrollbar-thumb,.order-scroll-x::-webkit-scrollbar{height:8px;width:8px}.order-scroll-x::-webkit-scrollbar-thumb{background:#c0a75e;border-radius:4px}.order-scroll-x::-webkit-scrollbar-track{background:#f9f5e6}.q-header{box-shadow:0 1px 2px #00000014;position:sticky;top:0;z-index:1000}.sticky-stack{background:#fff;box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;margin-top:0!important;position:sticky;top:var(--header-h);z-index:950}.filter-bar{background:#fafafa;margin-top:0!important;padding:12px 24px}.filter-bar,.save-toolbar{border-bottom:1px solid #ddd}.save-toolbar{align-items:center;background:var(--baggi-gold-pale);border-top:1px solid #ddd;display:flex;justify-content:space-between;padding:10px 16px;z-index:940}.save-toolbar .label{color:#6a5314;font-weight:700}.save-toolbar .value{color:#000;font-weight:700}.save-toolbar .q-btn{border-radius:6px;font-weight:600;text-transform:none}.order-grid-header{background:var(--baggi-cream);border-bottom:2px solid var(--baggi-gray-border);box-shadow:0 2px 3px #0000000d;display:grid;grid-auto-flow:column;grid-template-columns:var(--col-model) var(--col-renk) var(--col-ana) var(--col-alt) var(--col-aciklama) calc(var(--grp-title-w) + var(--grp-title-gap) + var(--beden-w)*var(--beden-count)) var(--col-adet) var(--col-fiyat) var(--col-pb) var(--col-tutar) var(--col-termin);position:sticky;top:calc(var(--header-h) + var(--filter-h) + var(--save-h));z-index:700}.order-grid-header .col-fixed{align-items:center;background:var(--baggi-gold-light);border:1px solid #aaa;display:flex;font-size:12.5px;font-weight:700;height:var(--grid-header-h);justify-content:center;transform:rotate(180deg);writing-mode:vertical-lr}.order-grid-header .aciklama-col{background:#fff9c4;border-right:2px solid #a6a6a6}.order-grid-header .beden-block{background:#fff;border:1px solid #ccc;display:flex;flex-direction:column;height:var(--grid-header-h)}.order-grid-header .grp-row{align-items:center;display:flex;height:var(--beden-h)}.order-grid-header .grp-title{font-size:12px;font-weight:700;padding-right:4px;text-align:right;width:var(--grp-title-w)}.order-grid-header .grp-body{display:grid;grid-auto-columns:var(--beden-w);grid-auto-flow:column}.order-grid-header .grp-cell.hdr{align-items:center;border:1px solid #bbb;display:flex;font-size:11.5px;font-weight:600;height:var(--beden-h);justify-content:center;width:var(--beden-w)}.order-grid-header .total-row{align-items:stretch;background:#fff59d;display:flex;justify-content:space-between}.order-grid-header .total-cell{align-items:center;background:var(--baggi-gold-pale);border-right:1px solid #bbb;display:flex;font-size:12px;font-weight:700;justify-content:center;transform:rotate(180deg);width:var(--col-adet);writing-mode:vertical-lr}.order-sub-header{align-items:center;background:linear-gradient(90deg,#fffbe9,#fff4c4 50%,#fff1b0);border-bottom:1px solid #d6c06a;border-top:1px solid #d6c06a;box-sizing:border-box;display:grid;grid-auto-flow:column;grid-template-columns:var(--col-model) var(--col-renk) var(--col-ana) var(--col-alt) var(--col-aciklama) calc(var(--grp-title-w) + var(--grp-title-gap) + var(--beden-w)*var(--beden-count)) var(--col-adet) var(--col-fiyat) var(--col-pb) var(--col-tutar) var(--col-termin);height:var(--sub-header-h);justify-items:stretch;margin-right:0!important;margin:0!important;min-height:var(--sub-header-h);padding-right:0!important;padding:0!important;position:sticky;top:calc(var(--header-h) + var(--filter-h) + var(--save-h) + var(--grid-header-h));z-index:650}:root{--col-termin:142px}.order-sub-header .sub-left{align-items:center;color:#2b1f05;display:flex;font-weight:800;grid-column:1/span 5;padding-left:6px}.order-sub-header .sub-center{align-items:center;box-sizing:border-box;display:grid;grid-auto-columns:var(--beden-w);grid-auto-flow:column;grid-column:6/7;height:100%;justify-content:start;margin-left:var(--grp-title-gap);padding-left:var(--grp-title-w);width:calc(var(--grp-title-w) + var(--grp-title-gap) + var(--beden-w)*var(--beden-count))}.order-sub-header .beden-cell{align-items:center;background:#fffdf3;border:1px solid #d8c16b;border-right:none;box-sizing:border-box;display:flex;font-size:12px;font-weight:600;height:100%;justify-content:center;width:var(--beden-w)}.order-sub-header .beden-cell:last-child{border-right:1px solid #d8c16b}.order-sub-header .sub-right{align-items:flex-end;color:#3b2f09;display:flex;flex-direction:column;font-size:13.5px;font-weight:900;grid-column:7/-1;justify-content:center;line-height:1.3;padding-right:0;text-align:right;text-transform:uppercase;transform:translateX(-60px)}.order-sub-header:hover{background:linear-gradient(90deg,#fff9cf,#fff3b0 70%,#ffe88f)}:root{--sub-header-h:60px}.order-sub-header{overflow:hidden}.order-grid-body{background:#fff;margin-top:0!important;padding-top:var(--sub-header-h);position:relative;z-index:100}.summary-row{display:grid;grid-template-columns:var(--col-model) var(--col-renk) var(--col-ana) var(--col-alt) var(--col-aciklama) calc(var(--grp-title-w) + var(--grp-title-gap) + var(--beden-w)*var(--beden-count)) var(--col-adet) var(--col-fiyat) var(--col-pb) var(--col-tutar) var(--col-termin)}.summary-row .cell{box-sizing:border-box;color:#222;font-size:13px;height:var(--beden-h)}.summary-row.row-closed{background:#f5f5f5;opacity:.55}.summary-row.row-closed:hover{background:#f5f5f5!important}.summary-row:nth-child(odd){background:#fffef9}.summary-row .grp-area{display:flex;flex-direction:column;justify-content:center;transform:translateX(calc(var(--grp-title-w) - var(--beden-w)))}.summary-row .grp-row{display:grid;grid-auto-columns:var(--beden-w);grid-auto-flow:column}.summary-row .grp-row .cell.beden{align-items:center;border:1px solid #ddd;display:flex;font-size:12px;height:var(--beden-h);justify-content:center;width:var(--beden-w)}.cell.beden.ghost{border:1px solid #0000!important;opacity:0;pointer-events:none}.summary-row .cell.adet,.summary-row .cell.fiyat,.summary-row .cell.pb,.summary-row .cell.termin,.summary-row .cell.tutar{border-left:none!important;color:#000;font-weight:600;height:100%}.summary-row .cell.tutar{border-right:none!important;justify-content:flex-end;padding-right:8px;text-align:right}.summary-row .cell.termin{align-items:center;background:#fffef9;justify-content:center;min-width:var(--col-termin)}.summary-row .cell.termin .q-input{box-sizing:border-box;max-width:142px!important;width:100%}.summary-row .cell.termin input{font-size:13px;text-align:center}.editor{background:#fffef9;border-top:1px solid #ddd;margin-top:24px;padding:16px;position:relative;z-index:50}.editor:before{background:linear-gradient(90deg,#c9a227,#e5d28b,#fff7d2);border-radius:2px;content:"";display:block;height:4px;margin-bottom:12px}.editor .q-input,.editor .q-select{font-size:14px;margin-bottom:8px}.cell.termin .termin-label{align-items:center;background:#fffef9;border-left:1px solid #ccc;box-sizing:border-box;color:#222;display:flex;font-size:13px;font-weight:600;height:100%;justify-content:center;width:100%}@media (max-width:1024px){:root{--beden-w:40px;--col-aciklama:120px}.order-grid-header .col-fixed{font-size:11px}.order-sub-header{font-size:12.5px}}@media (max-width:768px){:root{--beden-w:36px;--col-model:70px;--col-renk:60px;--col-aciklama:100px}.order-page{font-size:13px}.order-grid-header .total-cell{font-size:10.5px}}.summary-row .cell{align-items:center;display:flex;height:auto;justify-content:center;padding:4px 6px;text-align:center;white-space:normal;word-wrap:break-word}.summary-row .grp-area,.summary-row .grp-row,.summary-row .grp-row .cell.beden{align-items:center;height:100%}.summary-row .cell.aciklama{align-items:flex-start!important;background:#fff!important;border-right:1px solid #ccc!important;box-sizing:border-box!important;display:flex!important;flex-direction:column!important;font-size:13px!important;grid-column:5/6!important;justify-content:flex-start!important;line-height:1.4!important;margin-right:-92px!important;min-height:36px!important;overflow-wrap:break-word!important;padding:6px 12px!important;position:relative!important;text-align:left!important;white-space:normal!important;width:calc(var(--col-aciklama) + 92px)!important;word-break:break-word!important;z-index:10!important}.order-grid-header .col-fixed,.summary-row .cell,.summary-row .grp-row .cell.beden{border-color:#bbb!important}.summary-row .cell:not(:last-child){border-right:1px solid #bdbdbd!important}.summary-row{border-bottom:1px solid #ccc}.summary-row:last-child{border-bottom:2px solid #b7a33a}.summary-row .cell,.summary-row .grp-row .cell.beden{border-bottom:1px solid #ddd!important}.summary-row:hover{background:#fffce0}.summary-row.is-editing{background:#fff3cd;outline:2px solid #caa83f;z-index:2}.editor .q-btn:hover{background:#d2b04d;color:#fff}.summary-row:hover .cell,.summary-row:hover .grp-row .cell.beden{border-bottom:1px solid #ccc!important}.stok-red{color:#e53935;font-weight:600}.stok-yellow{color:#f9a825;font-weight:600}.stok-green{color:#43a047;font-weight:600}.q-banner.rounded-borders{border-radius:8px}.order-gateway{background:linear-gradient(145deg,#fff,#fafafa);height:100%}.order-btn{border-radius:12px;font-size:1.2rem;min-width:280px;padding:20px 40px;transition:all .2s ease}.order-btn:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-3px)}.body--drawer-left-open .order-page{overflow-x:visible;width:calc(100vw - var(--drawer-w))}.order-scroll-x{box-sizing:border-box;max-width:100%}.order-grid-body,.order-grid-header,.order-sub-header{box-sizing:border-box;min-width:fit-content;width:100%}.body--drawer-left-open .filter-bar,.body--drawer-left-open .order-grid-body,.body--drawer-left-open .order-grid-header,.body--drawer-left-open .order-sub-header,.body--drawer-left-open .save-toolbar{box-sizing:border-box;margin-left:0;margin-right:0;overflow-x:hidden;width:calc(100vw - var(--drawer-w))}.body--drawer-left-closed .filter-bar,.body--drawer-left-closed .order-grid-body,.body--drawer-left-closed .order-grid-header,.body--drawer-left-closed .order-sub-header,.body--drawer-left-closed .save-toolbar{width:100vw}.order-grid-body,.order-grid-header,.order-sub-header{border-right:2px solid var(--baggi-gold)}.body--drawer-left-open .filter-bar,.body--drawer-left-open .order-grid-body,.body--drawer-left-open .order-grid-header,.body--drawer-left-open .order-page,.body--drawer-left-open .order-sub-header,.body--drawer-left-open .save-toolbar{margin-right:0!important;overflow-x:visible!important;padding-right:0!important;width:calc(100vw - var(--drawer-w) - 8px)}.order-grid-body{border-right:2px solid var(--baggi-gold)}.order-scroll-x{align-items:flex-start;background:#fff;display:flex;flex-direction:column;overflow-x:auto;overflow-y:visible}.filter-bar,.order-grid-header,.order-sub-header,.save-toolbar{box-sizing:border-box;min-width:100%;width:fit-content}.order-grid-body{box-sizing:border-box;width:fit-content}.summary-row.row-closed{opacity:.65;pointer-events:none}.summary-row.row-closed,.summary-row.row-closed:hover{background:#e6e6e6!important}.summary-row.row-closed.is-editing{outline:none!important}.filter-bar,.order-grid-body,.order-grid-header,.order-sub-header,.save-toolbar{border-right:none!important;margin-right:0!important;padding-right:0!important}.summary-row.row-error{background:#c1001514}.row-error-icon{left:4px;position:absolute;top:50%;transform:translateY(-50%)}.body--drawer-left-closed .order-scroll-x,.body--drawer-left-open .order-scroll-x{overflow-x:auto;width:100%}:root{--ol-header-h:56px;--ol-filter-h:96px}.ol-page{background:#fff;display:flex;flex-direction:column;height:calc(100vh - var(--ol-header-h));overflow:auto}.ol-filter-bar{align-items:center;box-shadow:0 1px 2px #0000000f;display:flex;min-height:var(--ol-filter-h);padding:10px 16px}.ol-table .q-table__middle{max-height:none!important;overflow:visible!important}.ol-table thead th{background:#fff;box-shadow:0 2px 4px #00000014;font-weight:700;position:sticky;top:var(--ol-filter-h);z-index:500}.ol-table .q-table__body .q-tr:nth-child(odd){background-color:#f7f7f7!important}.ol-table .q-table__body .q-tr:nth-child(2n){background-color:#fff!important}.ol-table .q-table__body .q-tr:hover{background-color:#fff7d1!important;transition:background-color .15s ease}.ol-table .q-td{font-size:.9rem;line-height:1.3;padding:6px 8px!important}.q-header{z-index:1000!important}.q-drawer{z-index:950!important}@media (max-width:768px){:root{--ol-filter-h:64px}.ol-filter-bar{padding:8px 12px}}.ol-table .q-table__body .q-tr:nth-child(odd),.ol-table tbody tr:nth-child(odd){background-color:#faf8ef!important}.ol-table .q-table__body .q-tr:nth-child(2n),.ol-table tbody tr:nth-child(2n){background-color:#fff!important}.ol-table .q-table__body .q-tr:hover,.ol-table tbody tr:hover{background-color:#fff4cc!important;transition:background-color .2s ease}.ol-qbanner{background:#f9fafb;border:1px solid #e0e0e0;border-radius:6px;padding:8px 12px}.ol-qbanner-amount{color:#1976d2;margin-left:6px}.ol-col-multiline{line-height:1.25rem;overflow:hidden;white-space:normal!important;word-break:break-word}.ol-col-cari{font-size:.88rem;font-weight:600;max-width:200px;min-width:150px}.ol-col-cari,.ol-col-desc{display:-webkit-box;-webkit-box-orient:vertical}.ol-col-desc{color:#444;font-size:.82rem;max-width:220px;min-width:160px}.ol-table .q-td.ol-col-cari,.ol-table .q-td.ol-col-desc{padding-bottom:6px!important;padding-top:6px!important}.ol-table th.ol-col-cari,.ol-table th.ol-col-desc{white-space:nowrap}.ol-filter-bar{background:#fff;border-bottom:1px solid #ddd;padding:10px 12px;position:sticky;top:0;z-index:600}.ol-filter-row{align-items:flex-end;display:flex;flex-wrap:nowrap;gap:12px}.ol-filter-input{max-width:260px;min-width:180px}.ol-search{min-width:280px}.ol-filter-actions{align-items:center;display:flex;gap:8px;white-space:nowrap}.ol-filter-total{background:#f9fafb;border:1px solid #e0e0e0;border-radius:6px;margin-left:auto;padding:8px 12px;white-space:nowrap}@media (max-width:1200px){.ol-filter-row{flex-wrap:wrap;row-gap:8px}.ol-filter-total{justify-content:flex-end;width:100%}}.order-gateway{min-height:100vh}.draft-card{max-width:90vw;width:320px}.act-page{background:#fff;height:calc(100vh - 56px);overflow:auto}.act-filter-bar{background:#fff;border-bottom:1px solid #ddd;box-shadow:0 1px 2px #0000000f;padding:10px 16px;position:sticky;top:0;z-index:620}.act-filter-row{align-items:flex-end;display:flex;flex-wrap:nowrap;gap:12px}.act-filter-input{max-width:240px;min-width:160px}.act-filter-wide{min-width:260px}.act-filter-actions{display:flex;gap:8px;margin-left:auto;white-space:nowrap}.act-table{font-size:.85rem}.act-table thead th{background:#fff;box-shadow:0 2px 4px #00000014;font-weight:700;position:sticky;top:56px;z-index:500}.act-table tbody tr:nth-child(odd){background:#faf8ef}.act-table tbody tr:nth-child(2n){background:#fff}.act-table tbody tr:hover{background:#fff4cc}.act-table .q-td{font-weight:600;line-height:1.25;padding:6px 8px!important}.act-row-success{background:#43a0470f}.act-row-fail{background:#d32f2f0f}.act-badge-ok{background:#43a047}.act-badge-fail{background:#e53935}.act-col-narrow{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.act-col-route{font-size:.8rem;max-width:260px;white-space:normal;word-break:break-word}.act-col-meta{color:#555;font-size:.75rem}.ol-col-piyasa{padding-bottom:6px!important;padding-top:6px!important;vertical-align:top}.piyasa-wrap{align-content:flex-start;column-gap:6px;display:flex;flex-wrap:wrap;max-height:none;overflow:visible;row-gap:4px}.piyasa-chip{flex:0 0 calc(25% - 6px);font-size:11px;font-weight:600;line-height:1.1;max-width:calc(25% - 6px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-detail-page{background:#fafafa}.image-preview{border-radius:6px;width:100%}.image-thumb{border-radius:4px;width:100%}.workorder-page{padding-bottom:80px}.permissions-page{background:#fff;display:flex;flex-direction:column;height:calc(100vh - 56px)}.permissions-table-scroll{background:#fff;flex:1;overflow:auto}.permissions-table{font-size:.85rem}.permissions-table thead th{background:var(--baggi-cream);box-shadow:0 2px 3px #0000000f;color:#222;font-weight:800;position:sticky;top:0;z-index:300}.permissions-table td{color:#333;font-weight:600;padding:6px 8px!important}.permissions-table tbody tr:nth-child(odd){background:#fffef7}.permissions-table tbody tr:nth-child(2n){background:#fff}.permissions-table tbody tr:hover{background:#fff4cc}.permissions-sticky-col{background:#fff;box-shadow:2px 0 4px #0000000a;font-weight:700;left:0;position:sticky;z-index:250}.permissions-table .q-th .column{gap:2px}
|
|
||||||
BIN
ui/dist/spa/css/app.53116624.css.gz
vendored
6
ui/dist/spa/css/vendor.724dcfab.css
vendored
BIN
ui/dist/spa/css/vendor.724dcfab.css.gz
vendored
BIN
ui/dist/spa/favicon.ico
vendored
|
Before Width: | Height: | Size: 33 KiB |
BIN
ui/dist/spa/icons/baggi-icon.png
vendored
|
Before Width: | Height: | Size: 145 KiB |
BIN
ui/dist/spa/icons/favicon-128x128.png
vendored
|
Before Width: | Height: | Size: 3.0 KiB |
BIN
ui/dist/spa/icons/favicon-16x16.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
ui/dist/spa/icons/favicon-32x32.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
ui/dist/spa/icons/favicon-96x96.png
vendored
|
Before Width: | Height: | Size: 2.3 KiB |
BIN
ui/dist/spa/images/Baggi-Exclusive-Logo.jpg
vendored
|
Before Width: | Height: | Size: 364 KiB |
BIN
ui/dist/spa/images/Baggi-Fabrika-resmi.jpg
vendored
|
Before Width: | Height: | Size: 117 KiB |
BIN
ui/dist/spa/images/Baggi-tekstilas-logolu.jpg
vendored
|
Before Width: | Height: | Size: 142 KiB |
1
ui/dist/spa/index.html
vendored
@@ -1 +0,0 @@
|
|||||||
<!DOCTYPE html><html><head><title>Baggi SS</title><meta charset=utf-8><meta name=description content="A Quasar Project"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=/icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=/icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/icons/favicon-16x16.png><link rel=icon type=image/ico href=/favicon.ico><script defer src=/js/vendor.1e1ff7a5.js></script><script defer src=/js/app.292f5316.js></script><link href=/css/vendor.724dcfab.css rel=stylesheet><link href=/css/app.53116624.css rel=stylesheet></head><body><div id=q-app></div></body></html>
|
|
||||||
1
ui/dist/spa/js/238.471bb852.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[238],{2238:(e,a,l)=>{l.r(a),l.d(a,{default:()=>_});var t=l(1347),r=l(7763),o=l(4187),s=l(455),n=l(3022),i=l(2986),u=l(5767);const d={class:"q-mt-xs"},c={__name:"ResetPassword",setup(e){const a=(0,n.A)(),l=(0,s.lq)(),c=(0,s.rd)(),v=(0,u.n)(),g=(0,o.KR)(""),m=(0,o.KR)(""),p=(0,o.KR)(""),b=(0,o.KR)(!1),y=(0,o.KR)(!0),k=(0,o.KR)(!1),f=(0,o.KR)(null),x=(0,o.KR)(!1),h=(0,o.KR)(!1),w=e=>!!e&&e.length>=8||"En az 8 karakter olmalı",A=e=>e===m.value||"Parolalar eşleşmiyor",q=(0,t.EW)(()=>k.value&&m.value.length>=8&&m.value===p.value&&!b.value),C=(0,t.EW)(()=>{const e=m.value||"";let a=0;e.length>=8&&a++,/[A-Z]/.test(e)&&a++,/[0-9]/.test(e)&&a++,/[^A-Za-z0-9]/.test(e)&&a++;const l=[{value:.1,label:"Çok zayıf",color:"red",textColor:"text-red"},{value:.25,label:"Zayıf",color:"orange",textColor:"text-orange"},{value:.5,label:"Orta",color:"amber",textColor:"text-amber"},{value:.75,label:"İyi",color:"blue",textColor:"text-blue"},{value:1,label:"Güçlü",color:"green",textColor:"text-green"}];return l[Math.min(a,l.length-1)]});async function _(){f.value=null,b.value=!0;try{const e=await(0,i.bE)("/password/reset",{token:g.value,password:m.value});if(!e?.success||!e?.token)throw new Error("reset-failed");v.token=e.token,v.user=e.user,v.permissions=Array.isArray(e.permissions)?e.permissions:[],v.role_id=Number(e.user?.role_id||null),v.forcePasswordChange=!1,v.lastLogin=(new Date).toISOString(),localStorage.setItem("token",v.token),localStorage.setItem("user",JSON.stringify(v.user)),localStorage.setItem("permissions",JSON.stringify(v.permissions)),localStorage.setItem("role_id",String(v.role_id)),localStorage.setItem("lastLogin",v.lastLogin),localStorage.setItem("forcePasswordChange","0"),a.notify({type:"positive",message:"Parolanız güncellendi, giriş yapıldı",position:"top-right"}),c.replace("/app")}catch(e){f.value=e?.message||"Parola politikaya uymuyor (büyük/küçük/rakam/özel karakter)",a.notify({type:"negative",message:f.value,position:"top-right"})}finally{b.value=!1}}return(0,t.sV)(async()=>{try{if(g.value=decodeURIComponent(l.params.token||""),!g.value)throw new Error("empty-token");await i.Ay.get(`/password/reset/validate/${g.value}`),k.value=!0}catch{k.value=!1}finally{y.value=!1}}),(e,a)=>{const l=(0,t.g2)("q-inner-loading"),s=(0,t.g2)("q-card-section"),n=(0,t.g2)("q-separator"),i=(0,t.g2)("q-icon"),u=(0,t.g2)("q-input"),v=(0,t.g2)("q-linear-progress"),g=(0,t.g2)("q-banner"),S=(0,t.g2)("q-btn"),L=(0,t.g2)("q-card-actions"),R=(0,t.g2)("q-card"),I=(0,t.g2)("q-page");return(0,t.uX)(),(0,t.Wv)(I,{class:"flex flex-center bg-grey-2"},{default:(0,t.k6)(()=>[y.value?((0,t.uX)(),(0,t.Wv)(l,{key:0,showing:""})):k.value?((0,t.uX)(),(0,t.Wv)(R,{key:1,class:"q-pa-sm",style:{width:"420px","max-width":"90vw"}},{default:(0,t.k6)(()=>[(0,t.bF)(s,null,{default:(0,t.k6)(()=>[...a[5]||(a[5]=[(0,t.Lk)("div",{class:"text-h6 text-weight-bold"}," 🔐 Parola Sıfırlama ",-1),(0,t.Lk)("div",{class:"text-caption text-grey-7 q-mt-xs"}," Yeni parolanızı belirleyin ",-1)])]),_:1}),(0,t.bF)(n),(0,t.bF)(s,null,{default:(0,t.k6)(()=>[(0,t.bF)(u,{modelValue:m.value,"onUpdate:modelValue":a[1]||(a[1]=e=>m.value=e),type:x.value?"text":"password",label:"Yeni Parola",dense:"",filled:"",rules:[w]},{append:(0,t.k6)(()=>[(0,t.bF)(i,{name:x.value?"visibility_off":"visibility",class:"cursor-pointer",onClick:a[0]||(a[0]=e=>x.value=!x.value)},null,8,["name"])]),_:1},8,["modelValue","type","rules"]),(0,t.Lk)("div",d,[(0,t.bF)(v,{value:C.value.value,color:C.value.color,rounded:"",size:"6px"},null,8,["value","color"]),(0,t.Lk)("div",{class:(0,r.C4)(["text-caption q-mt-xs",C.value.textColor])},(0,r.v_)(C.value.label),3)]),(0,t.bF)(u,{modelValue:p.value,"onUpdate:modelValue":a[3]||(a[3]=e=>p.value=e),type:h.value?"text":"password",label:"Parola Tekrar",dense:"",filled:"",class:"q-mt-sm",rules:[A]},{append:(0,t.k6)(()=>[(0,t.bF)(i,{name:h.value?"visibility_off":"visibility",class:"cursor-pointer",onClick:a[2]||(a[2]=e=>h.value=!h.value)},null,8,["name"])]),_:1},8,["modelValue","type","rules"]),f.value?((0,t.uX)(),(0,t.Wv)(g,{key:0,class:"bg-red-1 text-red q-mt-md",rounded:""},{default:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(f.value),1)]),_:1})):(0,t.Q3)("",!0)]),_:1}),(0,t.bF)(L,{align:"right"},{default:(0,t.k6)(()=>[(0,t.bF)(S,{label:"PAROLAYI GÜNCELLE",color:"primary",loading:b.value,disable:!q.value,onClick:_},null,8,["loading","disable"])]),_:1})]),_:1})):((0,t.uX)(),(0,t.Wv)(R,{key:2,class:"q-pa-md text-center",style:{width:"420px","max-width":"90vw"}},{default:(0,t.k6)(()=>[a[6]||(a[6]=(0,t.Lk)("div",{class:"text-h6 text-red"}," Bağlantı Geçersiz ",-1)),a[7]||(a[7]=(0,t.Lk)("div",{class:"text-caption text-grey-7 q-mt-sm"}," Parola sıfırlama bağlantısı süresi dolmuş veya daha önce kullanılmış olabilir. ",-1)),(0,t.bF)(S,{label:"GİRİŞ SAYFASINA DÖN",color:"primary",class:"q-mt-md",onClick:a[4]||(a[4]=e=>(0,o.R1)(c).push("/"))})]),_:1}))]),_:1})}}};var v=l(5013),g=l(8356),m=l(3341),p=l(222),b=l(6915),y=l(6067),k=l(3933),f=l(3880),x=l(7453),h=l(5034),w=l(2677),A=l(272),q=l.n(A);const C=c,_=C;q()(c,"components",{QPage:v.A,QInnerLoading:g.A,QCard:m.A,QCardSection:p.A,QSeparator:b.A,QInput:y.A,QIcon:k.A,QLinearProgress:f.A,QBanner:x.A,QCardActions:h.A,QBtn:w.A})}}]);
|
|
||||||
1
ui/dist/spa/js/251.ec73d906.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[251],{5251:(e,a,t)=>{t.r(a),t.d(a,{default:()=>K});var l=t(1347),s=t(4187),i=t(8633),o=t(7763),n=t(891),r=t(705),c=t(2986);const u=(0,r.nY)("activityLogStore",{state:()=>({loading:!1,rows:[],total:0,pagination:{page:1,rowsPerPage:0,sortBy:"created_at",descending:!0},filters:{username:"",actionCategory:null,actionType:"",success:null,dateFrom:"",dateTo:""}}),actions:{async fetchLogs(){this.loading=!0;try{const e={};this.pagination.rowsPerPage>0&&(e.page=this.pagination.page,e.limit=this.pagination.rowsPerPage),this.filters.username&&(e.username=this.filters.username),this.filters.actionCategory&&(e.action_category=this.filters.actionCategory),this.filters.actionType&&(e.action_type=this.filters.actionType),null!==this.filters.success&&(e.success=this.filters.success),this.filters.dateFrom&&(e.date_from=this.filters.dateFrom),this.filters.dateTo&&(e.date_to=this.filters.dateTo);const a=await(0,c.Jt)("/activity-logs",e);this.rows=a.items||[],this.total=a.total||0}finally{this.loading=!1}},quickRoleChange(){this.filters.actionCategory="role_permission",this.filters.actionType="role_department_permission_change",this.pagination.page=1,this.fetchLogs()},onTableRequest(e){const{page:a,rowsPerPage:t,sortBy:l,descending:s}=e.pagination;this.pagination.page=a,this.pagination.rowsPerPage=t,this.pagination.sortBy=l,this.pagination.descending=s,this.fetchLogs()},resetFilters(){this.filters={username:"",actionCategory:null,actionType:"",success:null,dateFrom:"",dateTo:""},this.pagination.page=1,this.fetchLogs()}}});var d=t(5767),g=t(588);const p={class:"act-filter-bar"},f={class:"act-filter-row"},b={class:"act-filter-actions"},m={class:"row q-col-gutter-md"},h={class:"col-6"},_={class:"col-6"},k={key:1},y={__name:"ActivityLogs",setup(e){const{canRead:a,canUpdate:t}=(0,g.J)(),r=a("user"),c=t("user"),y=(0,s.KR)(!1),v=(0,s.KR)({before:"",after:""}),R=u(),w=(0,d.n)(),F=[{label:"Auth",value:"auth"},{label:"Navigation",value:"nav"},{label:"Yetkilendirme (User)",value:"user_permission"},{label:"Yetkilendirme (Role)",value:"role_permission"},{label:"Genel Yetki",value:"permission"}],L=[{label:"User Permission Change",value:"user_permission_change"},{label:"Role Permission Change",value:"permission_change"},{label:"Role + Dept Change",value:"role_department_permission_change"},{label:"Login",value:"login"},{label:"Logout",value:"logout"}],C=[{label:"Başarılı",value:!0},{label:"Hatalı",value:!1}],A=[{name:"created_at",label:"Zaman",field:"created_at",sortable:!0},{name:"username",label:"İşlemi Yapan",field:"username",sortable:!0},{name:"target_username",label:"Hedef Kullanıcı",field:"target_username"},{name:"role_code",label:"Rol",field:"role_code"},{name:"action_category",label:"Kategori",field:"action_category"},{name:"action_type",label:"Action",field:"action_type"},{name:"action_target",label:"Route",field:"action_target"},{name:"http_status",label:"HTTP",field:"http_status"},{name:"duration_ms",label:"Süre (ms)",field:"duration_ms"},{name:"diff",label:"Değişiklik"},{name:"is_success",label:"Sonuç",field:"is_success"}];function V(e){return e?n.Ay.formatDate(e,"YYYY-MM-DD HH:mm:ss"):"-"}function q(){w.isAuthenticated&&w.token&&R.fetchLogs()}function T(e){v.value={before:P(e.change_before),after:P(e.change_after)},y.value=!0}function P(e){if(!e)return"-";try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}return(0,l.sV)(()=>{q()}),(0,l.wB)(()=>w.token,e=>{e&&q()},{immediate:!0}),(e,a)=>{const t=(0,l.g2)("q-input"),n=(0,l.g2)("q-select"),u=(0,l.g2)("q-btn"),d=(0,l.g2)("q-card-section"),g=(0,l.g2)("q-separator"),w=(0,l.g2)("q-banner"),q=(0,l.g2)("q-card-actions"),P=(0,l.g2)("q-card"),Q=(0,l.g2)("q-dialog"),x=(0,l.g2)("q-td"),B=(0,l.g2)("q-badge"),S=(0,l.g2)("q-table"),U=(0,l.g2)("q-page"),D=(0,l.gN)("close-popup");return(0,s.R1)(r)?((0,l.uX)(),(0,l.Wv)(U,{key:0,class:"act-page with-bg"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",p,[(0,l.Lk)("div",f,[(0,l.bF)(t,{dense:"",filled:"",modelValue:(0,s.R1)(R).filters.username,"onUpdate:modelValue":a[0]||(a[0]=e=>(0,s.R1)(R).filters.username=e),label:"Kullanıcı",clearable:"",class:"act-filter-input",onKeyup:a[1]||(a[1]=(0,i.jR)(e=>(0,s.R1)(R).fetchLogs(),["enter"]))},null,8,["modelValue"]),(0,l.bF)(n,{dense:"",filled:"",modelValue:(0,s.R1)(R).filters.actionCategory,"onUpdate:modelValue":[a[2]||(a[2]=e=>(0,s.R1)(R).filters.actionCategory=e),a[3]||(a[3]=e=>(0,s.R1)(R).fetchLogs())],options:F,label:"Kategori",clearable:"","emit-value":"","map-options":"",class:"act-filter-input"},null,8,["modelValue"]),(0,l.bF)(n,{dense:"",filled:"",modelValue:(0,s.R1)(R).filters.actionType,"onUpdate:modelValue":[a[4]||(a[4]=e=>(0,s.R1)(R).filters.actionType=e),a[5]||(a[5]=e=>(0,s.R1)(R).fetchLogs())],options:L,label:"Action",clearable:"","emit-value":"","map-options":"",class:"act-filter-input"},null,8,["modelValue"]),(0,l.bF)(n,{dense:"",filled:"",modelValue:(0,s.R1)(R).filters.success,"onUpdate:modelValue":[a[6]||(a[6]=e=>(0,s.R1)(R).filters.success=e),a[7]||(a[7]=e=>(0,s.R1)(R).fetchLogs())],options:C,label:"Sonuç",clearable:"","emit-value":"","map-options":"",class:"act-filter-input"},null,8,["modelValue"]),(0,l.bF)(t,{dense:"",filled:"",type:"date",modelValue:(0,s.R1)(R).filters.dateFrom,"onUpdate:modelValue":[a[8]||(a[8]=e=>(0,s.R1)(R).filters.dateFrom=e),a[9]||(a[9]=e=>(0,s.R1)(R).fetchLogs())],label:"Başlangıç",class:"act-filter-input"},null,8,["modelValue"]),(0,l.bF)(t,{dense:"",filled:"",type:"date",modelValue:(0,s.R1)(R).filters.dateTo,"onUpdate:modelValue":[a[10]||(a[10]=e=>(0,s.R1)(R).filters.dateTo=e),a[11]||(a[11]=e=>(0,s.R1)(R).fetchLogs())],label:"Bitiş",class:"act-filter-input"},null,8,["modelValue"]),(0,l.Lk)("div",b,[(0,l.bF)(u,{color:"primary",unelevated:"",label:"Ara",onClick:a[12]||(a[12]=e=>(0,s.R1)(R).fetchLogs())}),(0,l.bF)(u,{flat:"",label:"Temizle",onClick:a[13]||(a[13]=e=>(0,s.R1)(R).resetFilters())}),(0,s.R1)(c)?((0,l.uX)(),(0,l.Wv)(u,{key:0,outline:"",color:"secondary",label:"Rol Değişimleri",onClick:a[14]||(a[14]=e=>(0,s.R1)(R).quickRoleChange())})):(0,l.Q3)("",!0)])])]),(0,l.bF)(S,{class:"act-table sticky-table","row-key":"created_at",rows:(0,s.R1)(R).rows,columns:A,loading:(0,s.R1)(R).loading,"binary-state-sort":""},{"body-cell-created_at":(0,l.k6)(e=>[(0,l.bF)(x,{props:e},{default:(0,l.k6)(()=>[(0,l.eW)((0,o.v_)(V(e.row.created_at)),1)]),_:2},1032,["props"])]),"body-cell-action_target":(0,l.k6)(e=>[(0,l.bF)(x,{props:e,class:"act-col-route"},{default:(0,l.k6)(()=>[(0,l.eW)((0,o.v_)(e.row.action_target),1)]),_:2},1032,["props"])]),"body-cell-http_status":(0,l.k6)(e=>[(0,l.bF)(x,{props:e},{default:(0,l.k6)(()=>[e.row.http_status?((0,l.uX)(),(0,l.Wv)(B,{key:0,label:e.row.http_status,class:(0,o.C4)(e.row.http_status<300?"act-badge-ok":"act-badge-fail")},null,8,["label","class"])):(0,l.Q3)("",!0)]),_:2},1032,["props"])]),"body-cell-diff":(0,l.k6)(e=>[(0,l.bF)(x,{props:e},{default:(0,l.k6)(()=>[e.row.change_before||e.row.change_after?((0,l.uX)(),(0,l.Wv)(u,{key:0,dense:"",flat:"",color:"primary",icon:"compare_arrows",onClick:a=>T(e.row)},null,8,["onClick"])):((0,l.uX)(),(0,l.CE)("span",k,"-"))]),_:2},1032,["props"])]),"body-cell-is_success":(0,l.k6)(e=>[(0,l.bF)(x,{props:e},{default:(0,l.k6)(()=>[(0,l.bF)(B,{label:e.row.is_success?"OK":"FAIL",class:(0,o.C4)(e.row.is_success?"act-badge-ok":"act-badge-fail")},null,8,["label","class"])]),_:2},1032,["props"])]),"no-data":(0,l.k6)(()=>[...a[19]||(a[19]=[(0,l.Lk)("div",{class:"full-width row flex-center q-pa-md text-grey-6"}," Log kaydı bulunamadı. ",-1)])]),default:(0,l.k6)(()=>[(0,l.bF)(Q,{modelValue:y.value,"onUpdate:modelValue":a[15]||(a[15]=e=>y.value=e)},{default:(0,l.k6)(()=>[(0,l.bF)(P,{style:{"min-width":"700px"}},{default:(0,l.k6)(()=>[(0,l.bF)(d,{class:"text-h6"},{default:(0,l.k6)(()=>[...a[16]||(a[16]=[(0,l.eW)(" Rol Değişiklik Detayı ",-1)])]),_:1}),(0,l.bF)(g),(0,l.bF)(d,null,{default:(0,l.k6)(()=>[(0,l.Lk)("div",m,[(0,l.Lk)("div",h,[a[17]||(a[17]=(0,l.Lk)("div",{class:"text-bold q-mb-sm"},"Önce",-1)),(0,l.bF)(w,{class:"bg-grey-2 text-black"},{default:(0,l.k6)(()=>[(0,l.Lk)("pre",null,(0,o.v_)(v.value.before),1)]),_:1})]),(0,l.Lk)("div",_,[a[18]||(a[18]=(0,l.Lk)("div",{class:"text-bold q-mb-sm"},"Sonra",-1)),(0,l.bF)(w,{class:"bg-green-1 text-black"},{default:(0,l.k6)(()=>[(0,l.Lk)("pre",null,(0,o.v_)(v.value.after),1)]),_:1})])])]),_:1}),(0,l.bF)(q,{align:"right"},{default:(0,l.k6)(()=>[(0,l.bo)((0,l.bF)(u,{flat:"",label:"Kapat"},null,512),[[D]])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["rows","loading"])]),_:1})):((0,l.uX)(),(0,l.Wv)(U,{key:1,class:"q-pa-md flex flex-center"},{default:(0,l.k6)(()=>[...a[20]||(a[20]=[(0,l.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var v=t(5013),R=t(6067),w=t(6941),F=t(2677),L=t(6087),C=t(45),A=t(3341),V=t(222),q=t(6915),T=t(7453),P=t(5034),Q=t(8785),x=t(8155),B=t(8657),S=t(272),U=t.n(S);const D=y,K=D;U()(y,"components",{QPage:v.A,QInput:R.A,QSelect:w.A,QBtn:F.A,QTable:L.A,QDialog:C.A,QCard:A.A,QCardSection:V.A,QSeparator:q.A,QBanner:T.A,QCardActions:P.A,QTd:Q.A,QBadge:x.A}),U()(y,"directives",{ClosePopup:B.A})}}]);
|
|
||||||
1
ui/dist/spa/js/28.1861262a.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[28],{28:(e,t,s)=>{s.r(t),s.d(t,{default:()=>i});var l=s(1347);const o={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},n={__name:"ErrorNotFound",setup(e){return(e,t)=>{const s=(0,l.g2)("q-btn");return(0,l.uX)(),(0,l.CE)("div",o,[(0,l.Lk)("div",null,[t[0]||(t[0]=(0,l.Lk)("div",{style:{"font-size":"30vh"}}," 404 ",-1)),t[1]||(t[1]=(0,l.Lk)("div",{class:"text-h2",style:{opacity:".4"}}," Oops. Nothing here... ",-1)),(0,l.bF)(s,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])])}}};var a=s(2677),r=s(272),c=s.n(r);const u=n,i=u;c()(n,"components",{QBtn:a.A})}}]);
|
|
||||||
1
ui/dist/spa/js/330.aa2a2894.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[330],{8330:(e,l,a)=>{a.r(l),a.d(l,{default:()=>y});var n=a(1347),u=a(7763),t=a(4187),s=a(455),r=a(2986),i=a(5767);const d={__name:"FirstPasswordChange",setup(e){const l=(0,s.rd)(),a=(0,i.n)(),d=(0,t.KR)(""),o=(0,t.KR)(""),c=(0,t.KR)(""),v=(0,t.KR)(!1),g=(0,t.KR)("");async function m(){if(g.value="",d.value&&o.value&&c.value)if(o.value===c.value){v.value=!0;try{await r.Ay.post("/password/change",{current_password:d.value,new_password:o.value}),a.clearSession(),l.replace("/login")}catch(e){g.value=e?.data?.message||e?.message||"Şifre güncellenemedi"}finally{v.value=!1}}else g.value="Yeni şifreler eşleşmiyor";else g.value="Tüm alanlar zorunludur"}return(e,l)=>{const a=(0,n.g2)("q-card-section"),t=(0,n.g2)("q-input"),s=(0,n.g2)("q-banner"),r=(0,n.g2)("q-btn"),i=(0,n.g2)("q-card-actions"),p=(0,n.g2)("q-card"),b=(0,n.g2)("q-page");return(0,n.uX)(),(0,n.Wv)(b,{class:"flex flex-center"},{default:(0,n.k6)(()=>[(0,n.bF)(p,{style:{width:"420px","max-width":"90vw"}},{default:(0,n.k6)(()=>[(0,n.bF)(a,null,{default:(0,n.k6)(()=>[...l[3]||(l[3]=[(0,n.Lk)("div",{class:"text-h6"},"Şifre Yenileme Zorunlu",-1),(0,n.Lk)("div",{class:"text-caption text-grey-7 q-mt-xs"}," Sistemi kullanabilmek için yeni bir şifre belirlemelisiniz. ",-1)])]),_:1}),(0,n.bF)(a,{class:"q-gutter-md"},{default:(0,n.k6)(()=>[(0,n.bF)(t,{modelValue:d.value,"onUpdate:modelValue":l[0]||(l[0]=e=>d.value=e),type:"password",label:"Mevcut Şifre",outlined:"",dense:""},null,8,["modelValue"]),(0,n.bF)(t,{modelValue:o.value,"onUpdate:modelValue":l[1]||(l[1]=e=>o.value=e),type:"password",label:"Yeni Şifre",outlined:"",dense:""},null,8,["modelValue"]),(0,n.bF)(t,{modelValue:c.value,"onUpdate:modelValue":l[2]||(l[2]=e=>c.value=e),type:"password",label:"Yeni Şifre (Tekrar)",outlined:"",dense:""},null,8,["modelValue"]),g.value?((0,n.uX)(),(0,n.Wv)(s,{key:0,class:"bg-red-1 text-red q-mt-sm",rounded:""},{default:(0,n.k6)(()=>[(0,n.eW)((0,u.v_)(g.value),1)]),_:1})):(0,n.Q3)("",!0)]),_:1}),(0,n.bF)(i,{align:"right"},{default:(0,n.k6)(()=>[(0,n.bF)(r,{label:"Kaydet",color:"primary",loading:v.value,onClick:m},null,8,["loading"])]),_:1})]),_:1})]),_:1})}}};var o=a(5013),c=a(3341),v=a(222),g=a(6067),m=a(7453),p=a(5034),b=a(2677),f=a(272),k=a.n(f);const w=d,y=w;k()(d,"components",{QPage:o.A,QCard:c.A,QCardSection:v.A,QInput:g.A,QBanner:m.A,QCardActions:p.A,QBtn:b.A})}}]);
|
|
||||||
1
ui/dist/spa/js/358.629c6b73.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[358],{2358:(e,t,r)=>{r.r(t),r.d(t,{default:()=>H});var l=r(1347),a=r(4187),i=r(7763),o=r(455),s=r(3022),n=(r(939),r(6461),r(7049),r(6593),r(705)),d=r(2986);let c=0;const p=(0,n.nY)("orderlist",{state:()=>({orders:[],loading:!1,error:null,filters:{search:"",CurrAccCode:"",OrderDate:""}}),getters:{filteredOrders(e){let t=e.orders;return e.filters.CurrAccCode&&(t=t.filter(t=>t.CurrAccCode===e.filters.CurrAccCode)),e.filters.OrderDate&&(t=t.filter(t=>t.OrderDate?.startsWith(e.filters.OrderDate))),t},totalVisibleUSD(){return this.filteredOrders.reduce((e,t)=>{const r=Number(t.TotalAmountUSD||0);return e+(Number.isFinite(r)?r:0)},0)},totalPackedVisibleUSD(){return this.filteredOrders.reduce((e,t)=>{const r=Number(t.PackedUSD||0);return e+(Number.isFinite(r)?r:0)},0)},packedVisibleRatePct(){return this.totalVisibleUSD?this.totalPackedVisibleUSD/this.totalVisibleUSD*100:0}},actions:{async fetchOrders(){const e=++c,t=this.filters.search??"",r=String(t).trim();console.groupCollapsed(`%c[orders] FETCH rid=${e}`,"color:#1976d2;font-weight:bold"),console.log("raw =",JSON.stringify(t),"len=",String(t).length),console.log("trimmed =",JSON.stringify(r),"len=",r.length),console.log("filters =",JSON.parse(JSON.stringify(this.filters))),console.log("lastRID =",c),console.groupEnd(),this.loading=!0,this.error=null;try{const t={};r&&(t.search=r);const l=await d.Ay.get("/orders/list",{params:t});if(e!==c)return void console.warn(`[orders] IGNORE stale response rid=${e} last=${c}`);const a=l?.data;this.orders=Array.isArray(a)?a:[],console.groupCollapsed(`%c[orders] RESPONSE rid=${e} count=${this.orders.length}`,"color:#2e7d32;font-weight:bold"),console.log("status =",l?.status),console.log("sample =",this.orders.slice(0,5).map(e=>({id:e.OrderHeaderID,no:e.OrderNumber,code:e.CurrAccCode,name:e.CurrAccDescription})));const i=this.orders.map(e=>String(e.OrderHeaderID)),o=i.filter((e,t)=>i.indexOf(e)!==t);o.length&&console.warn("DUPLICATE OrderHeaderID sample =",o.slice(0,10)),console.groupEnd()}catch(t){if(e!==c)return;console.error("[orders] FETCH FAILED",t?.response?.status,t?.response?.data||t),this.orders=[],this.error=t?.response?.data||t?.message||"Sipariş listesi alınamadı"}finally{e===c&&(this.loading=!1)}}}});var u=r(5767),m=r(588);const b={class:"ol-filter-bar"},h={class:"ol-filter-row"},f={class:"ol-filter-actions"},g={class:"ol-filter-total"},k={class:"ol-total-line"},w={class:"ol-total-value"},y={class:"ol-total-line"},C={class:"ol-total-value"},D={class:"ol-total-line"},x={class:"ol-col-multiline"},S={class:"ol-col-multiline"},v={class:"ol-col-multiline"},_={class:"ol-col-multiline"},F={__name:"OrderList",setup(e){const{canRead:t}=(0,m.J)(),r=t("order"),n=(0,o.rd)(),c=(0,s.A)(),F=p();let O=null;function A(){const e=(0,u.n)();if(!e?.token)return void c.notify({type:"negative",message:"Oturum bulunamadı",position:"top-right"});const t=new URLSearchParams({search:F.filters.search||"",CurrAccCode:F.filters.CurrAccCode||"",OrderDate:F.filters.OrderDate||""});d.Ay.get(`/orders/export?${t.toString()}`,{responseType:"blob"}).then(e=>e.data).then(e=>{const t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="siparis_listesi.xlsx",t.click()}).catch(()=>{c.notify({type:"negative",message:"Excel dosyasi indirilemedi",position:"top-right"})})}function R(e){if(!e)return"";const[t,r,l]=String(e).split("-");return t&&r&&l?`${l}.${r}.${t}`:e}function P(e){const t=Number(e||0);return t<=50?"pack-rate-danger":t<100?"pack-rate-warn":"pack-rate-ok"}(0,l.wB)(()=>F.filters.search,()=>{clearTimeout(O),O=setTimeout(()=>{F.fetchOrders()},400)});const T=[{name:"select",label:"",field:"select",align:"center",sortable:!1},{name:"OrderNumber",label:"Sipariş No",field:"OrderNumber",align:"left",sortable:!0,style:"min-width:108px;white-space:nowrap",headerStyle:"min-width:108px;white-space:nowrap"},{name:"OrderDate",label:"Tarih",field:"OrderDate",align:"center",sortable:!0,style:"min-width:82px;white-space:nowrap",headerStyle:"min-width:82px;white-space:nowrap"},{name:"CurrAccCode",label:"Cari Kod",field:"CurrAccCode",align:"left",sortable:!0,style:"min-width:82px;white-space:nowrap",headerStyle:"min-width:82px;white-space:nowrap"},{name:"CurrAccDescription",label:"Cari Adı",field:"CurrAccDescription",align:"left",sortable:!0,classes:"ol-col-cari",headerClasses:"ol-col-cari",style:"width:160px;max-width:160px",headerStyle:"width:160px;max-width:160px"},{name:"MusteriTemsilcisi",label:"Temsilci",field:"MusteriTemsilcisi",align:"left",sortable:!0,classes:"ol-col-short",headerClasses:"ol-col-short",style:"width:88px;max-width:88px",headerStyle:"width:88px;max-width:88px"},{name:"Piyasa",label:"Piyasa",field:"Piyasa",align:"left",sortable:!0,classes:"ol-col-short",headerClasses:"ol-col-short",style:"width:72px;max-width:72px",headerStyle:"width:72px;max-width:72px"},{name:"CreditableConfirmedDate",label:"Onay",field:"CreditableConfirmedDate",align:"center",sortable:!0,style:"min-width:86px;white-space:nowrap",headerStyle:"min-width:86px;white-space:nowrap"},{name:"DocCurrencyCode",label:"PB",field:"DocCurrencyCode",align:"center",sortable:!0,style:"min-width:46px;white-space:nowrap",headerStyle:"min-width:46px;white-space:nowrap"},{name:"TotalAmount",label:"Tutar",field:"TotalAmount",align:"right",sortable:!0,style:"min-width:120px;white-space:nowrap",headerStyle:"min-width:120px;white-space:nowrap",format:(e,t)=>Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2})+" "+t.DocCurrencyCode},{name:"TotalAmountUSD",label:"Tutar (USD)",field:"TotalAmountUSD",align:"right",sortable:!0,style:"min-width:120px;white-space:nowrap",headerStyle:"min-width:120px;white-space:nowrap",format:e=>Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2})+" USD"},{name:"PackedAmount",label:"Paketlenen",field:"PackedAmount",align:"right",sortable:!0,style:"min-width:120px;white-space:nowrap",headerStyle:"min-width:120px;white-space:nowrap",format:(e,t)=>Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2})+" "+t.DocCurrencyCode},{name:"PackedUSD",label:"Paketlenen (USD)",field:"PackedUSD",align:"right",sortable:!0,style:"min-width:120px;white-space:nowrap",headerStyle:"min-width:120px;white-space:nowrap",format:e=>Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2})+" USD"},{name:"PackedRatePct",label:"Paketlenme %",field:"PackedRatePct",align:"right",sortable:!0,classes:"ol-pack-rate-cell",headerClasses:"ol-pack-rate-cell",style:"min-width:96px;white-space:nowrap",headerStyle:"min-width:96px;white-space:nowrap",format:e=>Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2})+" %"},{name:"IsCreditableConfirmed",label:"Durum",field:"IsCreditableConfirmed",align:"center",sortable:!0},{name:"Description",label:"Açıklama",field:"Description",align:"left",sortable:!1,classes:"ol-col-desc",headerClasses:"ol-col-desc",style:"width:160px;max-width:160px",headerStyle:"width:160px;max-width:160px"},{name:"pdf",label:"PDF",field:"pdf",align:"center",sortable:!1}];function L(e){e?.OrderHeaderID?n.push({name:"order-edit",params:{orderHeaderID:e.OrderHeaderID},query:{mode:"edit"}}):c.notify({type:"warning",message:"OrderHeaderID bulunamadı"})}async function U(e){if(e?.OrderHeaderID)try{const t=await d.Ay.get(`/order/pdf/${e.OrderHeaderID}`,{responseType:"blob"});window.open(URL.createObjectURL(t.data),"_blank")}catch(t){const r=await(0,d.hi)(t),l=t?.status||t?.response?.status||"-";console.error(`PDF load error [${l}] /order/pdf/${e.OrderHeaderID}: ${r}`),c.notify({type:"negative",message:`PDF yuklenemedi (${l}): ${r}`})}}function I(){F.filters.search="",F.filters.CurrAccCode="",F.filters.OrderDate="",F.fetchOrders(),c.notify({type:"info",message:"Filtreler temizlendi",position:"top-right"})}return(0,l.sV)(()=>{F.fetchOrders()}),(e,t)=>{const o=(0,l.g2)("q-icon"),s=(0,l.g2)("q-input"),n=(0,l.g2)("q-tooltip"),d=(0,l.g2)("q-btn"),c=(0,l.g2)("q-td"),p=(0,l.g2)("q-table"),u=(0,l.g2)("q-banner"),m=(0,l.g2)("q-page");return(0,a.R1)(r)?((0,l.uX)(),(0,l.Wv)(m,{key:0,class:"ol-page"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",b,[(0,l.Lk)("div",h,[(0,l.bF)(s,{modelValue:(0,a.R1)(F).filters.search,"onUpdate:modelValue":t[0]||(t[0]=e=>(0,a.R1)(F).filters.search=e),class:"ol-filter-input ol-search",dense:"",filled:"",debounce:"300",clearable:"",label:"Arama (Sipariş No / Cari / Açıklama)"},{append:(0,l.k6)(()=>[(0,l.bF)(o,{name:"search"})]),_:1},8,["modelValue"]),(0,l.bF)(s,{modelValue:(0,a.R1)(F).filters.CurrAccCode,"onUpdate:modelValue":t[1]||(t[1]=e=>(0,a.R1)(F).filters.CurrAccCode=e),class:"ol-filter-input",dense:"",filled:"",clearable:"",label:"Cari Kodu"},null,8,["modelValue"]),(0,l.bF)(s,{modelValue:(0,a.R1)(F).filters.OrderDate,"onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.R1)(F).filters.OrderDate=e),class:"ol-filter-input",dense:"",filled:"",type:"date",label:"Sipariş Tarihi"},null,8,["modelValue"]),(0,l.Lk)("div",f,[(0,l.bF)(d,{label:"Temizle",icon:"clear",color:"grey-7",flat:"",disable:(0,a.R1)(F).loading,onClick:I},{default:(0,l.k6)(()=>[(0,l.bF)(n,null,{default:(0,l.k6)(()=>[...t[3]||(t[3]=[(0,l.eW)("Tüm filtreleri temizle",-1)])]),_:1})]),_:1},8,["disable"]),(0,l.bF)(d,{label:"Yenile",color:"primary",icon:"refresh",loading:(0,a.R1)(F).loading,onClick:(0,a.R1)(F).fetchOrders},null,8,["loading","onClick"]),(0,l.bF)(d,{label:"Excel'e Aktar",icon:"download",color:"primary",outline:"",disable:(0,a.R1)(F).loading||0===(0,a.R1)(F).filteredOrders.length,onClick:A},null,8,["disable"])]),(0,l.Lk)("div",g,[(0,l.Lk)("div",k,[t[4]||(t[4]=(0,l.Lk)("span",{class:"ol-total-label"},"Toplam USD:",-1)),(0,l.Lk)("strong",w,(0,i.v_)((0,a.R1)(F).totalVisibleUSD.toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2})),1)]),(0,l.Lk)("div",y,[t[5]||(t[5]=(0,l.Lk)("span",{class:"ol-total-label"},"Paketlenen USD:",-1)),(0,l.Lk)("strong",C,(0,i.v_)((0,a.R1)(F).totalPackedVisibleUSD.toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2})),1)]),(0,l.Lk)("div",D,[t[6]||(t[6]=(0,l.Lk)("span",{class:"ol-total-label"},"Paketlenme %:",-1)),(0,l.Lk)("strong",{class:(0,i.C4)(["ol-total-value",P((0,a.R1)(F).packedVisibleRatePct)])},(0,i.v_)((0,a.R1)(F).packedVisibleRatePct.toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2})),3)])])])]),(0,l.bF)(p,{title:"Mevcut Siparişler",class:"ol-table",flat:"",bordered:"",dense:"",separator:"cell","row-key":"OrderHeaderID",rows:(0,a.R1)(F).filteredOrders,columns:T,loading:(0,a.R1)(F).loading,"no-data-label":"Sipariş bulunamadı","rows-per-page-options":[0],"hide-bottom":""},{"body-cell-IsCreditableConfirmed":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"text-center q-gutter-sm"},{default:(0,l.k6)(()=>[(0,l.bF)(d,{icon:"picture_as_pdf",color:"red",flat:"",round:"",dense:"",onClick:t=>U(e.row)},{default:(0,l.k6)(()=>[(0,l.bF)(n,null,{default:(0,l.k6)(()=>[...t[7]||(t[7]=[(0,l.eW)("Siparişi PDF olarak aç",-1)])]),_:1})]),_:2},1032,["onClick"]),(0,l.bF)(o,{name:e.row.IsCreditableConfirmed?"check_circle":"cancel",color:e.row.IsCreditableConfirmed?"green":"red",size:"20px"},{default:(0,l.k6)(()=>[(0,l.bF)(n,null,{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.row.IsCreditableConfirmed?"Onaylı":"Onaysız"),1)]),_:2},1024)]),_:2},1032,["name","color"])]),_:2},1032,["props"])]),"body-cell-OrderDate":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"text-center"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(R(e.row.OrderDate)),1)]),_:2},1032,["props"])]),"body-cell-CreditableConfirmedDate":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"text-center"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(R(e.row.CreditableConfirmedDate)),1)]),_:2},1032,["props"])]),"body-cell-PackedAmount":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"text-right text-weight-medium"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(Number(e.row.PackedAmount||0).toLocaleString("tr-TR",{minimumFractionDigits:2}))+" "+(0,i.v_)(e.row.DocCurrencyCode),1)]),_:2},1032,["props"])]),"body-cell-PackedUSD":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"text-right text-weight-medium"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(Number(e.row.PackedUSD||0).toLocaleString("tr-TR",{minimumFractionDigits:2}))+" USD ",1)]),_:2},1032,["props"])]),"body-cell-PackedRatePct":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:(0,i.C4)(["text-right text-weight-bold ol-pack-rate-cell",P(e.row.PackedRatePct)])},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(Number(e.row.PackedRatePct||0).toLocaleString("tr-TR",{minimumFractionDigits:2}))+" % ",1)]),_:2},1032,["props","class"])]),"body-cell-CurrAccDescription":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"ol-col-cari"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",x,(0,i.v_)(e.value),1),e.value?((0,l.uX)(),(0,l.Wv)(n,{key:0},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.value),1)]),_:2},1024)):(0,l.Q3)("",!0)]),_:2},1032,["props"])]),"body-cell-MusteriTemsilcisi":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"ol-col-short"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",S,(0,i.v_)(e.value),1),e.value?((0,l.uX)(),(0,l.Wv)(n,{key:0},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.value),1)]),_:2},1024)):(0,l.Q3)("",!0)]),_:2},1032,["props"])]),"body-cell-Piyasa":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"ol-col-short"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",v,(0,i.v_)(e.value),1),e.value?((0,l.uX)(),(0,l.Wv)(n,{key:0},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.value),1)]),_:2},1024)):(0,l.Q3)("",!0)]),_:2},1032,["props"])]),"body-cell-Description":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"ol-col-desc"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",_,(0,i.v_)(e.value),1),e.value?((0,l.uX)(),(0,l.Wv)(n,{key:0},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.value),1)]),_:2},1024)):(0,l.Q3)("",!0)]),_:2},1032,["props"])]),"body-cell-select":(0,l.k6)(e=>[(0,l.bF)(c,{props:e,class:"text-center"},{default:(0,l.k6)(()=>[(0,l.bF)(d,{icon:"open_in_new",color:"primary",flat:"",round:"",dense:"",onClick:t=>L(e.row)},{default:(0,l.k6)(()=>[(0,l.bF)(n,null,{default:(0,l.k6)(()=>[...t[8]||(t[8]=[(0,l.eW)("Siparişi Aç",-1)])]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["props"])]),_:1},8,["rows","loading"]),(0,a.R1)(F).error?((0,l.uX)(),(0,l.Wv)(u,{key:0,class:"bg-red text-white q-mt-sm"},{default:(0,l.k6)(()=>[(0,l.eW)(" Hata: "+(0,i.v_)((0,a.R1)(F).error),1)]),_:1})):(0,l.Q3)("",!0)]),_:1})):((0,l.uX)(),(0,l.Wv)(m,{key:1,class:"q-pa-md flex flex-center"},{default:(0,l.k6)(()=>[...t[9]||(t[9]=[(0,l.Lk)("div",{class:"text-negative text-subtitle1"}," Bu modüle erişim yetkiniz yok. ",-1)])]),_:1}))}}};var O=r(2968),A=r(5013),R=r(6067),P=r(3933),T=r(2677),L=r(8387),U=r(6087),I=r(8785),N=r(7453),W=r(272),V=r.n(W);const $=(0,O.A)(F,[["__scopeId","data-v-68dfbebc"]]),H=$;V()(F,"components",{QPage:A.A,QInput:R.A,QIcon:P.A,QBtn:T.A,QTooltip:L.A,QTable:U.A,QTd:I.A,QBanner:N.A})}}]);
|
|
||||||
BIN
ui/dist/spa/js/358.629c6b73.js.gz
vendored
1
ui/dist/spa/js/398.9152643f.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[398],{5398:(e,r,t)=>{t.r(r),t.d(r,{default:()=>T});t(939),t(3872),t(7049);var l=t(1347),a=t(4187),s=t(7763),o=t(9765),i=t(3022),n=t(588),d=(t(6461),t(4520),t(3142),t(8832),t(8825),t(2528),t(4207),t(9188),t(1118),t(705)),c=t(2986);const u=(0,d.nY)("orderBulkClose",{state:()=>({orders:[],selectedOrderNumbers:[],search:"",loading:!1,closing:!1,error:null}),getters:{selectedCount(e){return e.selectedOrderNumbers.length},totalCount(e){return e.orders.length}},actions:{isSelected(e){return this.selectedOrderNumbers.includes(e)},setSelected(e,r){e&&(r?this.selectedOrderNumbers.includes(e)||this.selectedOrderNumbers.push(e):this.selectedOrderNumbers=this.selectedOrderNumbers.filter(r=>r!==e))},toggleSelectMany(e,r){const t=Array.from(new Set((e||[]).filter(Boolean)));if(r){const e=new Set(this.selectedOrderNumbers);return t.forEach(r=>e.add(r)),void(this.selectedOrderNumbers=Array.from(e))}const l=new Set(t);this.selectedOrderNumbers=this.selectedOrderNumbers.filter(e=>!l.has(e))},clearSelection(){this.selectedOrderNumbers=[]},async fetchOrders(){this.loading=!0,this.error=null;try{const e=String(this.search||"").trim(),r={};e&&(r.search=e);const t=await c.Ay.get("/orders/close-ready",{params:r});this.orders=Array.isArray(t?.data)?t.data:[];const l=new Set(this.orders.map(e=>e.OrderNumber));this.selectedOrderNumbers=this.selectedOrderNumbers.filter(e=>l.has(e))}catch(e){this.orders=[],this.error=e?.response?.data||e?.message||"Siparişler alınamadı"}finally{this.loading=!1}},async closeSelectedOrders(){if(!this.selectedOrderNumbers.length)return{affected:0};this.closing=!0,this.error=null;try{const e={order_numbers:this.selectedOrderNumbers},r=await c.Ay.post("/orders/bulk-close",e),t=Number(r?.data?.affected||0),l=new Set(this.selectedOrderNumbers);return this.orders=this.orders.filter(e=>!l.has(e.OrderNumber)),this.selectedOrderNumbers=[],{affected:t}}catch(e){throw this.error=e?.response?.data||e?.message||"Toplu kapatma başarısız",e}finally{this.closing=!1}}}}),b={class:"bulk-filter-bar"},m={class:"bulk-filter-row"},g={class:"bulk-filter-actions"},p={class:"bulk-summary"},h={__name:"OrderBulkClose",setup(e){const r=(0,i.A)(),t=u(),{canUpdate:d}=(0,n.J)(),c=d("order"),h=[{name:"select",label:"",field:"select",align:"center"},{name:"OrderNumber",label:"Sipariş No",field:"OrderNumber",align:"left",sortable:!0},{name:"OrderDate",label:"Tarih",field:"OrderDate",align:"left",sortable:!0},{name:"CurrAccCode",label:"Cari Kod",field:"CurrAccCode",align:"left",sortable:!0},{name:"CurrAccDescription",label:"Cari Adı",field:"CurrAccDescription",align:"left",sortable:!0},{name:"DocCurrencyCode",label:"PB",field:"DocCurrencyCode",align:"center",sortable:!0},{name:"TotalAmountUSD",label:"Toplam USD",field:"TotalAmountUSD",align:"right",sortable:!0},{name:"PackedUSD",label:"Paket USD",field:"PackedUSD",align:"right",sortable:!0},{name:"PackedRatePct",label:"Paket %",field:"PackedRatePct",align:"right",sortable:!0},{name:"Description",label:"Açıklama",field:"Description",align:"left"}],k=(0,l.EW)(()=>!!t.totalCount&&t.orders.every(e=>t.isSelected(e.OrderNumber)));let f=null;function y(e){const r=t.orders.map(e=>e.OrderNumber);t.toggleSelectMany(r,e)}function O(e){if(!e)return"";const[r,t,l]=String(e).split("-");return r&&t&&l?`${l}.${t}.${r}`:e}function S(e){return`${Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2})} %`}function v(e){const r=Number(e||0);return r<=50?"pack-rate-danger":r<100?"pack-rate-warn":"pack-rate-ok"}function C(e){return Number(e||0).toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2})}function N(){t.selectedCount&&o.A.create({title:"Toplu Kapatma",message:`${t.selectedCount} sipariş kapatılacak. Onaylıyor musunuz?`,cancel:!0,persistent:!0,ok:{color:"negative",label:"Kapat"}}).onOk(async()=>{try{const{affected:e}=await t.closeSelectedOrders();r.notify({type:"positive",message:`${e} sipariş başarıyla kapatıldı.`,position:"top-right"}),await t.fetchOrders()}catch{r.notify({type:"negative",message:t.error||"Toplu kapatma başarısız",position:"top-right"})}})}return(0,l.wB)(()=>t.search,()=>{clearTimeout(f),f=setTimeout(()=>{c.value&&t.fetchOrders()},350)}),(0,l.sV)(()=>{c.value&&t.fetchOrders()}),(e,r)=>{const o=(0,l.g2)("q-icon"),i=(0,l.g2)("q-input"),n=(0,l.g2)("q-btn"),d=(0,l.g2)("q-checkbox"),u=(0,l.g2)("q-th"),f=(0,l.g2)("q-td"),w=(0,l.g2)("q-table"),A=(0,l.g2)("q-banner"),R=(0,l.g2)("q-page");return(0,a.R1)(c)?((0,l.uX)(),(0,l.Wv)(R,{key:0,class:"bulk-close-page"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",b,[(0,l.Lk)("div",m,[(0,l.bF)(i,{modelValue:(0,a.R1)(t).search,"onUpdate:modelValue":r[0]||(r[0]=e=>(0,a.R1)(t).search=e),dense:"",filled:"",clearable:"",class:"bulk-search",label:"Arama (Sipariş No / Cari / Açıklama)"},{append:(0,l.k6)(()=>[(0,l.bF)(o,{name:"search"})]),_:1},8,["modelValue"]),(0,l.Lk)("div",g,[(0,l.bF)(n,{label:"Yenile",icon:"refresh",color:"primary",loading:(0,a.R1)(t).loading,onClick:(0,a.R1)(t).fetchOrders},null,8,["loading","onClick"]),(0,l.bF)(n,{label:"Seçimi Temizle",icon:"clear",flat:"",color:"grey-7",disable:(0,a.R1)(t).closing||!(0,a.R1)(t).selectedCount,onClick:(0,a.R1)(t).clearSelection},null,8,["disable","onClick"]),(0,l.bF)(n,{label:"Seçilenleri Toplu Kapat",icon:"task_alt",color:"negative",loading:(0,a.R1)(t).closing,disable:(0,a.R1)(t).loading||(0,a.R1)(t).closing||!(0,a.R1)(t).selectedCount,onClick:N},null,8,["loading","disable"])]),(0,l.Lk)("div",p,[(0,l.Lk)("div",null,[r[1]||(r[1]=(0,l.eW)("Toplam: ",-1)),(0,l.Lk)("strong",null,(0,s.v_)((0,a.R1)(t).totalCount),1)]),(0,l.Lk)("div",null,[r[2]||(r[2]=(0,l.eW)("Seçilen: ",-1)),(0,l.Lk)("strong",null,(0,s.v_)((0,a.R1)(t).selectedCount),1)])])])]),(0,l.bF)(w,{class:"bulk-table",flat:"",bordered:"",dense:"","row-key":"OrderNumber",rows:(0,a.R1)(t).orders,columns:h,loading:(0,a.R1)(t).loading,"no-data-label":"Kapatmaya uygun sipariş bulunamadı","rows-per-page-options":[0],"hide-bottom":""},{"header-cell-select":(0,l.k6)(e=>[(0,l.bF)(u,{props:e,class:"text-center"},{default:(0,l.k6)(()=>[(0,l.bF)(d,{"model-value":k.value,disable:!(0,a.R1)(t).totalCount||(0,a.R1)(t).closing,"onUpdate:modelValue":y},null,8,["model-value","disable"])]),_:2},1032,["props"])]),"body-cell-select":(0,l.k6)(e=>[(0,l.bF)(f,{props:e,class:"text-center"},{default:(0,l.k6)(()=>[(0,l.bF)(d,{"model-value":(0,a.R1)(t).isSelected(e.row.OrderNumber),disable:(0,a.R1)(t).closing,"onUpdate:modelValue":r=>(0,a.R1)(t).setSelected(e.row.OrderNumber,r)},null,8,["model-value","disable","onUpdate:modelValue"])]),_:2},1032,["props"])]),"body-cell-OrderDate":(0,l.k6)(e=>[(0,l.bF)(f,{props:e},{default:(0,l.k6)(()=>[(0,l.eW)((0,s.v_)(O(e.row.OrderDate)),1)]),_:2},1032,["props"])]),"body-cell-PackedRatePct":(0,l.k6)(e=>[(0,l.bF)(f,{props:e,class:(0,s.C4)(["text-right text-weight-bold",v(e.row.PackedRatePct)])},{default:(0,l.k6)(()=>[(0,l.eW)((0,s.v_)(S(e.row.PackedRatePct)),1)]),_:2},1032,["props","class"])]),"body-cell-TotalAmountUSD":(0,l.k6)(e=>[(0,l.bF)(f,{props:e,class:"text-right"},{default:(0,l.k6)(()=>[(0,l.eW)((0,s.v_)(C(e.row.TotalAmountUSD)),1)]),_:2},1032,["props"])]),"body-cell-PackedUSD":(0,l.k6)(e=>[(0,l.bF)(f,{props:e,class:"text-right"},{default:(0,l.k6)(()=>[(0,l.eW)((0,s.v_)(C(e.row.PackedUSD)),1)]),_:2},1032,["props"])]),_:1},8,["rows","loading"]),(0,a.R1)(t).error?((0,l.uX)(),(0,l.Wv)(A,{key:0,class:"bg-red text-white q-mt-sm"},{default:(0,l.k6)(()=>[(0,l.eW)((0,s.v_)((0,a.R1)(t).error),1)]),_:1})):(0,l.Q3)("",!0)]),_:1})):((0,l.uX)(),(0,l.Wv)(R,{key:1,class:"q-pa-md flex flex-center"},{default:(0,l.k6)(()=>[...r[3]||(r[3]=[(0,l.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var k=t(2968),f=t(5013),y=t(6067),O=t(3933),S=t(2677),v=t(6087),C=t(2517),N=t(8349),w=t(8785),A=t(7453),R=t(272),D=t.n(R);const _=(0,k.A)(h,[["__scopeId","data-v-734820af"]]),T=_;D()(h,"components",{QPage:f.A,QInput:y.A,QIcon:O.A,QBtn:S.A,QTable:v.A,QTh:C.A,QCheckbox:N.A,QTd:w.A,QBanner:A.A})}}]);
|
|
||||||
1
ui/dist/spa/js/432.939f1ebd.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[432],{8432:(e,l,a)=>{a.r(l),a.d(l,{default:()=>F});a(939),a(6461),a(7049);var s=a(1347),r=a(4187),t=a(7763),o=a(455),n=a(705),i=a(2986);const c=(0,n.nY)("userlist",{state:()=>({users:[],loading:!1,error:null,filters:{search:"",onlyActive:!1}}),getters:{filteredUsers(e){let l=e.users;const a=e.filters.search?.toLowerCase()||"";return a&&(l=l.filter(e=>e.code?.toLowerCase().includes(a)||e.nebim_username?.toLowerCase().includes(a)||e.role_names?.toLowerCase().includes(a)||e.department_names?.toLowerCase().includes(a)||e.piyasa_names?.toLowerCase().includes(a))),e.filters.onlyActive&&(l=l.filter(e=>e.is_active)),l}},actions:{async fetchUsers(){this.loading=!0,this.error=null;try{const e={};this.filters.search&&(e.search=this.filters.search);const{data:l}=await i.Ay.get("/users/list",{params:e});this.users=Array.isArray(l)?l:[],console.log("✅ User listesi alındı:",this.users.length)}catch(e){console.error("❌ User listesi alınamadı:",e),this.users=[],this.error=e?.message||"Kullanıcı listesi alınamadı"}finally{this.loading=!1}}}});var u=a(588);const d={class:"ol-filter-bar"},m={class:"ol-filter-row"},p={class:"ol-filter-actions"},b={class:"piyasa-wrap"},f={__name:"UserList",setup(e){const{canRead:l,canWrite:a,canUpdate:n}=(0,u.J)(),i=l("user"),f=a("user"),_=n("user"),g=(0,o.rd)(),k=c(),y=[{name:"open",label:"",align:"center"},{name:"id",label:"No",field:e=>e.id,sortable:!0},{name:"code",label:"Kullanıcı",field:e=>e.code||"",sortable:!0,sort:(e,l)=>e.localeCompare(l,"tr",{sensitivity:"base"})},{name:"nebim_username",label:"Nebim",field:e=>e.nebim_username||"",sortable:!0,sort:(e,l)=>e.localeCompare(l,"tr")},{name:"user_group_code",label:"Grup",field:e=>e.user_group_code||"",sortable:!0,sort:(e,l)=>e.localeCompare(l,"tr")},{name:"is_active",label:"Durum",field:e=>e.is_active,align:"center",sortable:!0,sort:(e,l)=>Number(l)-Number(e)},{name:"role_names",label:"Roller",field:e=>e.role_names||"",sortable:!0,sort:(e,l)=>e.localeCompare(l,"tr")},{name:"department_names",label:"Departmanlar",field:e=>e.department_names||"",sortable:!0,sort:(e,l)=>e.localeCompare(l,"tr")},{name:"piyasa_names",label:"Piyasalar",field:e=>e.piyasa_names||"",sortable:!0,sort:(e,l)=>e.localeCompare(l,"tr")}];function h(e){return e?e.split(",").map(e=>e.trim()):[]}function v(e){const l=_.value?"user-edit":"user-view";g.push({name:l,params:{id:String(e)}})}function w(){f.value&&g.push({name:"user-new"})}function C(e){return e?e.split(",").map(e=>e.trim()).filter(Boolean).slice(0,24):[]}return(0,s.sV)(()=>{i.value&&k.fetchUsers()}),(e,l)=>{const a=(0,s.g2)("q-icon"),o=(0,s.g2)("q-input"),n=(0,s.g2)("q-toggle"),c=(0,s.g2)("q-btn"),u=(0,s.g2)("q-td"),_=(0,s.g2)("q-chip"),g=(0,s.g2)("q-table"),R=(0,s.g2)("q-banner"),A=(0,s.g2)("q-page");return(0,r.R1)(i)?((0,s.uX)(),(0,s.Wv)(A,{key:0,class:"ol-page with-bg"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",d,[(0,s.Lk)("div",m,[(0,s.bF)(o,{class:"ol-filter-input ol-search",dense:"",filled:"",clearable:"",modelValue:(0,r.R1)(k).filters.search,"onUpdate:modelValue":[l[0]||(l[0]=e=>(0,r.R1)(k).filters.search=e),(0,r.R1)(k).fetchUsers],label:"Arama (Kullanıcı / Rol / Piyasa)",debounce:"300"},{append:(0,s.k6)(()=>[(0,s.bF)(a,{name:"search"})]),_:1},8,["modelValue","onUpdate:modelValue"]),(0,s.bF)(n,{modelValue:(0,r.R1)(k).filters.onlyActive,"onUpdate:modelValue":l[1]||(l[1]=e=>(0,r.R1)(k).filters.onlyActive=e),label:"Sadece Aktifler"},null,8,["modelValue"]),(0,s.Lk)("div",p,[(0,r.R1)(i)?((0,s.uX)(),(0,s.Wv)(c,{key:0,label:"Yenile",icon:"refresh",color:"primary",loading:(0,r.R1)(k).loading,disable:!(0,r.R1)(i),onClick:(0,r.R1)(k).fetchUsers},null,8,["loading","disable","onClick"])):(0,s.Q3)("",!0),(0,r.R1)(f)?((0,s.uX)(),(0,s.Wv)(c,{key:1,label:"Yeni Kullanıcı",icon:"person_add",color:"primary",outline:"",onClick:w})):(0,s.Q3)("",!0)])])]),(0,s.bF)(g,{title:"Mevcut Kullanıcılar",class:"ol-table",flat:"",bordered:"",dense:"",separator:"cell","row-key":"id",rows:(0,r.R1)(k).filteredUsers,columns:y,loading:(0,r.R1)(k).loading,"no-data-label":"Kullanıcı bulunamadı","rows-per-page-options":[0],"hide-bottom":""},{"body-cell-open":(0,s.k6)(e=>[(0,s.bF)(u,{class:"text-center"},{default:(0,s.k6)(()=>[(0,r.R1)(i)?((0,s.uX)(),(0,s.Wv)(c,{key:0,icon:"open_in_new",color:"primary",flat:"",round:"",dense:"",onClick:l=>v(e.row.id)},null,8,["onClick"])):(0,s.Q3)("",!0)]),_:2},1024)]),"body-cell-is_active":(0,s.k6)(e=>[(0,s.bF)(u,{class:"text-center"},{default:(0,s.k6)(()=>[(0,s.bF)(a,{name:e.row.is_active?"check_circle":"cancel",color:e.row.is_active?"green":"red",size:"18px"},null,8,["name","color"])]),_:2},1024)]),"body-cell-role_names":(0,s.k6)(e=>[(0,s.bF)(u,null,{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(h(e.row.role_names),e=>((0,s.uX)(),(0,s.Wv)(_,{key:e,dense:"",color:"primary","text-color":"white",class:"q-mr-xs"},{default:(0,s.k6)(()=>[(0,s.eW)((0,t.v_)(e),1)]),_:2},1024))),128))]),_:2},1024)]),"body-cell-department_names":(0,s.k6)(e=>[(0,s.bF)(u,null,{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(h(e.row.department_names),e=>((0,s.uX)(),(0,s.Wv)(_,{key:e,dense:"",color:"grey-7","text-color":"white",class:"q-mr-xs"},{default:(0,s.k6)(()=>[(0,s.eW)((0,t.v_)(e),1)]),_:2},1024))),128))]),_:2},1024)]),"body-cell-piyasa_names":(0,s.k6)(e=>[(0,s.bF)(u,{class:"ol-col-piyasa"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",b,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(C(e.row.piyasa_names),e=>((0,s.uX)(),(0,s.Wv)(_,{key:e,dense:"",outline:"",color:"indigo",class:"piyasa-chip",title:e},{default:(0,s.k6)(()=>[(0,s.eW)((0,t.v_)(e),1)]),_:2},1032,["title"]))),128))])]),_:2},1024)]),_:1},8,["rows","loading"]),(0,r.R1)(k).error?((0,s.uX)(),(0,s.Wv)(R,{key:0,class:"bg-red text-white q-mt-sm"},{default:(0,s.k6)(()=>[(0,s.eW)(" ❌ "+(0,t.v_)((0,r.R1)(k).error),1)]),_:1})):(0,s.Q3)("",!0)]),_:1})):((0,s.uX)(),(0,s.Wv)(A,{key:1,class:"q-pa-md flex flex-center"},{default:(0,s.k6)(()=>[...l[2]||(l[2]=[(0,s.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var _=a(5013),g=a(6067),k=a(3933),y=a(5725),h=a(2677),v=a(6087),w=a(8785),C=a(1529),R=a(7453),A=a(272),W=a.n(A);const q=f,F=q;W()(f,"components",{QPage:_.A,QInput:g.A,QIcon:k.A,QToggle:y.A,QBtn:h.A,QTable:v.A,QTd:w.A,QChip:C.A,QBanner:R.A})}}]);
|
|
||||||
1
ui/dist/spa/js/465.9a2899f5.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[465],{4465:(e,l,a)=>{a.r(l),a.d(l,{default:()=>_});a(939),a(3872),a(7008),a(4520),a(7049);var o=a(1347),t=a(4187),s=a(7763),n=a(144),u=a(2986),r=a(588);const i={key:0,class:"q-pa-xl flex flex-center"},c={class:"sticky-stack"},d={key:0,class:"filter-bar row q-col-gutter-md"},m={class:"col-4"},v={class:"save-toolbar"},p={key:0,class:"permissions-table-scroll"},k={key:0},y={key:1,class:"column items-center"},b={class:"text-caption"},g={key:0},f={__name:"UserPermissionPage",setup(e){const{canUpdate:l}=(0,r.J)(),a=l("user"),f=(0,t.KR)([]),w=(0,t.KR)(null),h=(0,t.KR)([]),A=(0,t.KR)([]),E=(0,t.KR)(!1),x=(0,t.KR)(!1),C=(0,t.KR)(!1),R=[{key:"write",label:"Ekleme"},{key:"read",label:"Görüntüleme"},{key:"delete",label:"Silme"},{key:"update",label:"Güncelleme"},{key:"export",label:"Çıktı"}],K=[{name:"module",label:"Modül",field:"label",align:"left"},...R.map(e=>({name:e.key,label:e.label,align:"center"}))];async function Q(){const[e,l]=await Promise.all([u.Ay.get("/lookups/users-perm"),u.Ay.get("/lookups/modules")]);f.value=e.data||[],h.value=l.data||[],C.value=!0}function q(){A.value=h.value.map(e=>{const l={module:String(e.value).toLowerCase().trim(),label:e.label};return R.forEach(e=>{l[e.key]=!1}),l})}async function X(){if(w.value){E.value=!0;try{q();const e=await u.Ay.get(`/users/${w.value}/permissions`),l=Array.isArray(e.data)?e.data:[],a={insert:"write",view:"read",delete:"delete",update:"update",export:"export"};l.forEach(e=>{const l=String(e.module_code||e.module).toLowerCase().trim(),o=String(e.action).toLowerCase().trim(),t=a[o]||o,s=A.value.find(e=>e.module===l);s&&s.hasOwnProperty(t)&&(s[t]=Boolean(e.allowed))}),x.value=!1}catch(e){console.error("PERM LOAD ERROR:",e),n.A.create({type:"negative",message:"Yükleme hatası"})}finally{E.value=!1}}}async function _(){try{E.value=!0;const e=[];A.value.forEach(l=>{R.forEach(a=>{e.push({module:l.module,action:a.key,allowed:l[a.key]})})}),await u.Ay.post(`/users/${w.value}/permissions`,e),n.A.create({type:"positive",message:"Kaydedildi"}),x.value=!1}catch{n.A.create({type:"negative",message:"Kayıt hatası"})}finally{E.value=!1}}function L(e){return!!A.value.length&&A.value.every(l=>!0===l[e])}function V(e,l){A.value.forEach(a=>{a[e]=l}),x.value=!0}return(0,o.sV)(()=>{Q()}),(e,l)=>{const n=(0,o.g2)("q-spinner"),u=(0,o.g2)("q-select"),r=(0,o.g2)("q-btn"),h=(0,o.g2)("q-checkbox"),R=(0,o.g2)("q-th"),Q=(0,o.g2)("q-td"),q=(0,o.g2)("q-table"),P=(0,o.g2)("q-page");return(0,o.uX)(),(0,o.CE)(o.FK,null,[(0,t.R1)(a)&&!C.value?((0,o.uX)(),(0,o.CE)("div",i,[(0,o.bF)(n,{color:"primary",size:"48px"})])):(0,o.Q3)("",!0),(0,t.R1)(a)?((0,o.uX)(),(0,o.Wv)(P,{key:1,class:"permissions-page"},{default:(0,o.k6)(()=>[(0,o.Lk)("div",c,[C.value?((0,o.uX)(),(0,o.CE)("div",d,[(0,o.Lk)("div",m,[(0,o.bF)(u,{modelValue:w.value,"onUpdate:modelValue":[l[0]||(l[0]=e=>w.value=e),X],options:f.value,"option-value":"id","option-label":"title","emit-value":"","map-options":"",label:"Kullanıcı",dense:"",outlined:""},null,8,["modelValue","options"])])])):(0,o.Q3)("",!0),(0,o.Lk)("div",v,[l[2]||(l[2]=(0,o.Lk)("div",{class:"label"}," Kullanıcı Override Yetkileri ",-1)),(0,t.R1)(a)?((0,o.uX)(),(0,o.Wv)(r,{key:0,color:"primary",icon:"save",label:"Kaydet",disable:!x.value,onClick:_},null,8,["disable"])):(0,o.Q3)("",!0)])]),C.value?((0,o.uX)(),(0,o.CE)("div",p,[(0,o.bF)(q,{rows:A.value,columns:K,"row-key":"module",dense:"",bordered:"",flat:"",loading:E.value,pagination:{rowsPerPage:0}},{"header-cell":(0,o.k6)(e=>[(0,o.bF)(R,{props:e},{default:(0,o.k6)(()=>["module"===e.col.name?((0,o.uX)(),(0,o.CE)("span",k,(0,s.v_)(e.col.label),1)):((0,o.uX)(),(0,o.CE)("div",y,[(0,o.Lk)("span",b,(0,s.v_)(e.col.label),1),(0,o.bF)(h,{dense:"","model-value":L(e.col.name),"onUpdate:modelValue":l=>V(e.col.name,l)},null,8,["model-value","onUpdate:modelValue"])]))]),_:2},1032,["props"])]),"body-cell":(0,o.k6)(e=>[(0,o.bF)(Q,{props:e},{default:(0,o.k6)(()=>["module"===e.col.name?((0,o.uX)(),(0,o.CE)("span",g,(0,s.v_)(e.row.label),1)):((0,o.uX)(),(0,o.Wv)(h,{key:1,modelValue:e.row[e.col.name],"onUpdate:modelValue":[l=>e.row[e.col.name]=l,l[1]||(l[1]=e=>x.value=!0)],dense:""},null,8,["modelValue","onUpdate:modelValue"]))]),_:2},1032,["props"])]),_:1},8,["rows","loading"])])):(0,o.Q3)("",!0)]),_:1})):((0,o.uX)(),(0,o.Wv)(P,{key:2,class:"q-pa-md flex flex-center"},{default:(0,o.k6)(()=>[...l[3]||(l[3]=[(0,o.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))],64)}}};var w=a(6356),h=a(5013),A=a(6941),E=a(2677),x=a(6087),C=a(2517),R=a(8349),K=a(8785),Q=a(272),q=a.n(Q);const X=f,_=X;q()(f,"components",{QSpinner:w.A,QPage:h.A,QSelect:A.A,QBtn:E.A,QTable:x.A,QTh:C.A,QCheckbox:R.A,QTd:K.A})}}]);
|
|
||||||
1
ui/dist/spa/js/486.a263e6f6.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[486],{1486:(e,l,a)=>{a.r(l),a.d(l,{default:()=>x});var t=a(1347),s=a(4187),u=a(7763),n=a(3022),i=a(2986),d=a(5767),r=a(588);const o={__name:"ChangePassword",setup(e){const{canUpdate:l}=(0,r.J)(),a=l("system"),o=(0,n.A)(),v=((0,d.n)(),(0,s.KR)("")),c=(0,s.KR)(""),g=(0,s.KR)(""),p=(0,s.KR)(!1),f=(0,s.KR)(null),m=(0,t.EW)(()=>v.value&&c.value.length>=8&&c.value===g.value&&!p.value);async function b(){f.value=null,p.value=!0;try{await i.Ay.post("/password/change",{current_password:v.value,new_password:c.value}),o.notify({type:"positive",message:"Şifre güncellendi"}),v.value="",c.value="",g.value=""}catch(e){f.value=e?.message||"Şifre değiştirilemedi"}finally{p.value=!1}}return(e,l)=>{const n=(0,t.g2)("q-card-section"),i=(0,t.g2)("q-separator"),d=(0,t.g2)("q-input"),r=(0,t.g2)("q-banner"),o=(0,t.g2)("q-btn"),k=(0,t.g2)("q-card-actions"),y=(0,t.g2)("q-card"),w=(0,t.g2)("q-page");return(0,s.R1)(a)?((0,t.uX)(),(0,t.Wv)(w,{key:0,class:"flex flex-center"},{default:(0,t.k6)(()=>[(0,t.bF)(y,{style:{width:"420px","max-width":"90vw"}},{default:(0,t.k6)(()=>[(0,t.bF)(n,null,{default:(0,t.k6)(()=>[...l[3]||(l[3]=[(0,t.Lk)("div",{class:"text-h6 text-weight-bold"},"🔐 Şifre Değiştir",-1),(0,t.Lk)("div",{class:"text-caption text-grey-7"}," Mevcut şifrenizi girerek yeni şifre belirleyin ",-1)])]),_:1}),(0,t.bF)(i),(0,t.bF)(n,null,{default:(0,t.k6)(()=>[(0,t.bF)(d,{modelValue:v.value,"onUpdate:modelValue":l[0]||(l[0]=e=>v.value=e),type:"password",label:"Mevcut Şifre",dense:"",filled:""},null,8,["modelValue"]),(0,t.bF)(d,{modelValue:c.value,"onUpdate:modelValue":l[1]||(l[1]=e=>c.value=e),type:"password",label:"Yeni Şifre",dense:"",filled:"",class:"q-mt-sm"},null,8,["modelValue"]),(0,t.bF)(d,{modelValue:g.value,"onUpdate:modelValue":l[2]||(l[2]=e=>g.value=e),type:"password",label:"Yeni Şifre (Tekrar)",dense:"",filled:"",class:"q-mt-sm"},null,8,["modelValue"]),f.value?((0,t.uX)(),(0,t.Wv)(r,{key:0,class:"bg-red-1 text-red q-mt-md"},{default:(0,t.k6)(()=>[(0,t.eW)((0,u.v_)(f.value),1)]),_:1})):(0,t.Q3)("",!0)]),_:1}),(0,t.bF)(k,{align:"right"},{default:(0,t.k6)(()=>[(0,s.R1)(a)?((0,t.uX)(),(0,t.Wv)(o,{key:0,label:"GÜNCELLE",color:"primary",loading:p.value,disable:!m.value,onClick:b},null,8,["loading","disable"])):(0,t.Q3)("",!0)]),_:1})]),_:1})]),_:1})):((0,t.uX)(),(0,t.Wv)(w,{key:1,class:"q-pa-md flex flex-center"},{default:(0,t.k6)(()=>[...l[4]||(l[4]=[(0,t.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var v=a(5013),c=a(3341),g=a(222),p=a(6915),f=a(6067),m=a(7453),b=a(5034),k=a(2677),y=a(272),w=a.n(y);const h=o,x=h;w()(o,"components",{QPage:v.A,QCard:c.A,QCardSection:g.A,QSeparator:p.A,QInput:f.A,QBanner:m.A,QCardActions:b.A,QBtn:k.A})}}]);
|
|
||||||
1
ui/dist/spa/js/493.e8a952e1.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[493],{8493:(e,l,a)=>{a.r(l),a.d(l,{default:()=>le});a(939),a(6461),a(7049);var t=a(1347),o=a(4187),n=a(8633),i=a(7763),s=a(3022),r=a(742),u=a(4887),c=a(5599),d=a(5390),p=a(991),v=a.n(p),m=a(588),g=a(8338);const b={class:"filter-sticky"},k={class:"filter-collapsible"},f={class:"row items-center justify-between q-pa-sm bg-grey-2"},y={class:"q-pa-md bg-grey-1"},w={class:"row q-col-gutter-sm q-mb-md"},_={class:"col-12 col-sm-6"},h={class:"col-12 col-sm-6"},D={class:"row q-col-gutter-md items-center"},F={class:"col-auto"},C={class:"col-auto"},L={class:"table-scroll"},R={class:"sticky-bar row justify-between items-center q-pa-sm bg-grey-1"},q={class:"row items-center q-gutter-sm"},x={class:"row items-center justify-between"},A={class:"row items-center"},T={class:"row items-center q-gutter-md text-right"},Y={key:0},V={key:1,class:"resizable-cell-content"},B={key:2},Q={__name:"statementofaccount",setup(e){const{canRead:l,canExport:a}=(0,m.J)(),p=l("finance"),Q=a("finance"),E=(0,s.A)(),W=(0,r.E)(),z=(0,u.x)(),K=(0,c.l)(),O=(0,d.w)(),U=(0,o.KR)(null),X=(0,o.KR)([]);function P(e,l){const a=ae(e);l(()=>{X.value=a?W.accountOptions.filter(e=>{const l=ae(e.label),t=ae(e.value);return l.includes(a)||t.includes(a)}):W.accountOptions})}(0,t.sV)(async()=>{await W.fetchAccounts(),console.log("ACCOUNTS LEN:",W.accounts?.length),console.log("OPTIONS LEN:",W.accountOptions?.length),console.log("FIRST 5:",W.accountOptions?.slice(0,5)),X.value=W.accountOptions,window.toggleAllDetails=le});const S=(0,o.KR)(v()().startOf("year").format("YYYY-MM-DD")),G=(0,o.KR)(v()().format("YYYY-MM-DD")),N=[{label:"1-2 hesap",value:["1","2"]},{label:"1-3 r hesap",value:["1","3"]}],I=(0,o.KR)(N[0].value),M=(0,o.KR)({}),j=(0,o.KR)(!1);function H(e){return e&&0!==e.length?Object.keys(e[0]).map(l=>({name:l,label:l.replace(/_/g," ").replace(/\b\w/g,e=>e.toUpperCase()),field:l,align:"number"===typeof e[0][l]?"right":"left",sortable:!0})):[]}const J=(0,t.EW)(()=>H(z.headers));function Z(e){const l=K.getDetailsByBelge(e);return H(l)}async function $(){U.value&&S.value&&G.value?(await z.loadStatements({startdate:S.value,enddate:G.value,accountcode:U.value,langcode:"TR",parislemler:I.value}),await K.loadDetails({accountCode:U.value,startDate:S.value,endDate:G.value})):E.notify({type:"warning",message:"⚠️ Lütfen cari ve tarih aralığını seçiniz.",position:"top-right"})}function ee(e){"group"!==e._type&&(M.value[e.belge_no]=!M.value[e.belge_no])}function le(){if(j.value=!j.value,j.value)for(const e of z.headers)e.belge_no&&(M.value[e.belge_no]=!0);else M.value={}}function ae(e){return(e||"").toString().toLocaleLowerCase("tr-TR").normalize("NFD").replace(/[\u0300-\u036f]/g,"").trim()}function te(){U.value=null,S.value="",G.value="",I.value=N[0].value,z.headers=[],K.reset()}function oe(e){return null==e||isNaN(e)?"0,00":new Intl.NumberFormat("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}const ne=(0,o.KR)(!0),ie=(0,o.KR)([]),se=(0,o.KR)(!0);function re(){se.value?ie.value=J.value.map((e,l)=>l<3?null:e.name).filter(Boolean):ie.value=J.value.map(e=>e.name),se.value=!se.value}async function ue(){if(!Q.value)return void E.notify({type:"negative",message:"PDF export yetkiniz yok",position:"top-right"});if(console.log("▶️ [DEBUG] handleDownload:",U.value,S.value,G.value),!U.value||!S.value||!G.value)return void E.notify({type:"warning",message:"⚠️ Cari ve tarih aralığını seçmeden PDF alınamaz!",position:"top-right"});const e=await O.downloadPDF(U.value,S.value,G.value,I.value);console.log("📤 [DEBUG] Store’dan gelen result:",e),E.notify({type:e.ok?"positive":"negative",message:e.message,position:"top-right"})}(0,t.wB)(J,e=>{e.length>0&&0===ie.value.length&&(ie.value=e.map(e=>e.name))});const ce=(0,g.i)();async function de(){if(!Q.value)return void E.notify({type:"negative",message:"PDF export yetkiniz yok",position:"top-right"});if(console.log("▶️ [DEBUG] CurrheadDownload:",U.value,S.value,G.value),!U.value||!S.value||!G.value)return void E.notify({type:"warning",message:"⚠️ Cari ve tarih aralığını seçmeden PDF alınamaz!",position:"top-right"});const e=await ce.handlestHeadDownload(U.value,S.value,G.value,I.value);console.log("📤 [DEBUG] CurrheadDownloadresult:",e),E.notify({type:e.ok?"positive":"negative",message:e.message,position:"top-right"})}return(e,l)=>{const a=(0,t.g2)("q-select"),s=(0,t.g2)("q-btn"),r=(0,t.g2)("q-date"),u=(0,t.g2)("q-popup-proxy"),c=(0,t.g2)("q-icon"),d=(0,t.g2)("q-input"),v=(0,t.g2)("q-slide-transition"),m=(0,t.g2)("q-item-section"),g=(0,t.g2)("q-item"),E=(0,t.g2)("q-list"),O=(0,t.g2)("q-btn-dropdown"),H=(0,t.g2)("q-td"),ae=(0,t.g2)("q-tr"),ce=(0,t.g2)("q-table"),pe=(0,t.g2)("q-page"),ve=(0,t.gN)("close-popup");return(0,o.R1)(p)?((0,t.uX)(),(0,t.Wv)(pe,{key:0,class:"q-pa-md page-col"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",b,[(0,t.bF)(a,{modelValue:U.value,"onUpdate:modelValue":l[0]||(l[0]=e=>U.value=e),options:X.value,label:"Cari kod / isim",filled:"",clearable:"","use-input":"","input-debounce":"300",onFilter:P,"emit-value":"","map-options":"",loading:(0,o.R1)(W).loading,"option-value":"value","option-label":"label",behavior:"menu","keep-selected":!0},null,8,["modelValue","options","loading"])]),(0,t.Lk)("div",k,[(0,t.Lk)("div",f,[l[7]||(l[7]=(0,t.Lk)("div",{class:"text-subtitle1"},"Filtreler",-1)),(0,t.bF)(s,{dense:"",flat:"",round:"",icon:ne.value?"expand_less":"expand_more",onClick:l[1]||(l[1]=e=>ne.value=!ne.value)},null,8,["icon"])]),(0,t.bF)(v,null,{default:(0,t.k6)(()=>[(0,t.bo)((0,t.Lk)("div",y,[(0,t.Lk)("div",w,[(0,t.Lk)("div",_,[(0,t.bF)(d,{modelValue:S.value,"onUpdate:modelValue":l[3]||(l[3]=e=>S.value=e),label:"Tarih aralığı - başlangıç",filled:"",clearable:"",readonly:""},{append:(0,t.k6)(()=>[(0,t.bF)(c,{name:"event",class:"cursor-pointer"},{default:(0,t.k6)(()=>[(0,t.bF)(u,{cover:"","transition-show":"scale","transition-hide":"scale"},{default:(0,t.k6)(()=>[(0,t.bF)(r,{modelValue:S.value,"onUpdate:modelValue":l[2]||(l[2]=e=>S.value=e),mask:"YYYY-MM-DD",locale:"tr-TR"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),(0,t.Lk)("div",h,[(0,t.bF)(d,{modelValue:G.value,"onUpdate:modelValue":l[5]||(l[5]=e=>G.value=e),label:"Tarih aralığı - bitiş",filled:"",clearable:"",readonly:""},{append:(0,t.k6)(()=>[(0,t.bF)(c,{name:"event",class:"cursor-pointer"},{default:(0,t.k6)(()=>[(0,t.bF)(u,{cover:"","transition-show":"scale","transition-hide":"scale"},{default:(0,t.k6)(()=>[(0,t.bF)(r,{modelValue:G.value,"onUpdate:modelValue":l[4]||(l[4]=e=>G.value=e),mask:"YYYY-MM-DD",locale:"tr-TR"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])]),(0,t.bF)(a,{modelValue:I.value,"onUpdate:modelValue":l[6]||(l[6]=e=>I.value=e),options:N,label:"Parasal İşlem Tipi","emit-value":"","map-options":"",filled:"",class:"q-mb-md"},null,8,["modelValue"]),(0,t.Lk)("div",D,[(0,t.Lk)("div",F,[(0,t.bF)(s,{color:"primary",icon:"filter_alt",label:"Filtrele",onClick:$})]),(0,t.Lk)("div",C,[(0,t.bF)(s,{flat:"",color:"grey-8",icon:"restart_alt",label:"Sıfırla",onClick:te})])])],512),[[n.aG,ne.value]])]),_:1})]),(0,t.Lk)("div",L,[(0,t.Lk)("div",R,[(0,t.bF)(s,{flat:"",color:"primary",icon:"view_column",label:se.value?"CARİ BİLGİ DETAY Gizle":"CARİ BİLGİ DETAY Sütunu Göster",onClick:re},null,8,["label"]),(0,t.Lk)("div",q,[(0,t.bF)(s,{flat:"",color:"secondary",icon:"list",label:j.value?"Tüm Detayları Kapat":"Tüm Detayları Aç",onClick:le},null,8,["label"]),(0,o.R1)(Q)?((0,t.uX)(),(0,t.Wv)(O,{key:0,flat:"",color:"red",icon:"picture_as_pdf",label:"Yazdır"},{default:(0,t.k6)(()=>[(0,t.bF)(E,{style:{"min-width":"200px"}},{default:(0,t.k6)(()=>[(0,t.bo)(((0,t.uX)(),(0,t.Wv)(g,{clickable:"",onClick:ue},{default:(0,t.k6)(()=>[(0,t.bF)(m,{class:"text-primary"},{default:(0,t.k6)(()=>[...l[8]||(l[8]=[(0,t.eW)(" Detaylı Cari Ekstre Yazdır ",-1)])]),_:1})]),_:1})),[[ve]]),(0,t.bo)(((0,t.uX)(),(0,t.Wv)(g,{clickable:"",onClick:de},{default:(0,t.k6)(()=>[(0,t.bF)(m,{class:"text-secondary"},{default:(0,t.k6)(()=>[...l[9]||(l[9]=[(0,t.eW)(" Cari Hesap Ekstresi Yazdır ",-1)])]),_:1})]),_:1})),[[ve]])]),_:1})]),_:1})):(0,t.Q3)("",!0)])]),(0,t.bF)(ce,{class:"sticky-table",title:"Hareketler",rows:(0,o.R1)(z).groupedRows,columns:J.value,"visible-columns":ie.value,"row-key":e=>e.OrderHeaderID+"_"+e.OrderNumber,flat:"",bordered:"",dense:"","rows-per-page-options":[0],loading:(0,o.R1)(z).loading,"table-style":{tableLayout:"auto",minWidth:"1600px"}},{body:(0,t.k6)(e=>["group"===e.row._type?((0,t.uX)(),(0,t.Wv)(ae,{key:0,class:"group-row bg-grey-3 text-weight-bold"},{default:(0,t.k6)(()=>[(0,t.bF)(H,{colspan:"100%",class:"q-pa-sm"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",x,[(0,t.Lk)("div",A,[(0,t.bF)(s,{dense:"",flat:"",round:"",icon:(0,o.R1)(z).groupOpen[e.row.para_birimi]?"expand_less":"expand_more",class:"q-mr-sm",onClick:l=>(0,o.R1)(z).toggleGroup(e.row.para_birimi)},null,8,["icon","onClick"]),(0,t.Lk)("span",null,"Para Birimi: "+(0,i.v_)(e.row.para_birimi),1)]),(0,t.Lk)("div",T,[(0,t.Lk)("div",null,"Bakiye: "+(0,i.v_)(oe(e.row.sonBakiye)),1)])])]),_:2},1024)]),_:2},1024)):"data"===e.row._type?((0,t.uX)(),(0,t.Wv)(ae,{key:1,props:e,class:"main-row"},{default:(0,t.k6)(()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(e.cols,l=>((0,t.uX)(),(0,t.Wv)(H,{key:l.name,props:e,onClick:a=>"belge_no"===l.name?ee(e.row):null,class:(0,i.C4)(["cursor-pointer","aciklama"===l.name?"resizable-cell":"","belge_no"===l.name?"text-primary text-bold":""])},{default:(0,t.k6)(()=>[["borc","alacak","bakiye"].includes(l.name)?((0,t.uX)(),(0,t.CE)("span",Y,(0,i.v_)(oe(e.row[l.field])),1)):"aciklama"===l.name?((0,t.uX)(),(0,t.CE)("div",V,(0,i.v_)(e.row[l.field]??""),1)):((0,t.uX)(),(0,t.CE)("span",B,(0,i.v_)(e.row[l.field]??""),1))]),_:2},1032,["props","onClick","class"]))),128))]),_:2},1032,["props"])):(0,t.Q3)("",!0),"data"===e.row._type&&M.value[e.row.belge_no]?((0,t.uX)(),(0,t.Wv)(ae,{key:2,class:"sub-row"},{default:(0,t.k6)(()=>[(0,t.bF)(H,{colspan:"100%"},{default:(0,t.k6)(()=>[(0,t.bF)(ce,{rows:(0,o.R1)(K).getDetailsByBelge(e.row.belge_no),columns:Z(e.row.belge_no),"row-key":"Urun_Kodu",flat:"",dense:"",bordered:"","hide-bottom":"","no-data-label":"Detay bulunamadı",class:"custom-subtable",loading:(0,o.R1)(K).loading,"table-style":{minWidth:"1200px"}},null,8,["rows","columns","loading"])]),_:2},1024)]),_:2},1024)):(0,t.Q3)("",!0)]),_:1},8,["rows","columns","visible-columns","row-key","loading"])])]),_:1})):((0,t.uX)(),(0,t.Wv)(pe,{key:1,class:"q-pa-md flex flex-center"},{default:(0,t.k6)(()=>[...l[10]||(l[10]=[(0,t.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var E=a(5013),W=a(6941),z=a(2677),K=a(6510),O=a(6067),U=a(3933),X=a(8360),P=a(5626),S=a(5303),G=a(3766),N=a(2589),I=a(4958),M=a(6087),j=a(7339),H=a(8785),J=a(8657),Z=a(272),$=a.n(Z);const ee=Q,le=ee;$()(Q,"components",{QPage:E.A,QSelect:W.A,QBtn:z.A,QSlideTransition:K.A,QInput:O.A,QIcon:U.A,QPopupProxy:X.A,QDate:P.A,QBtnDropdown:S.A,QList:G.A,QItem:N.A,QItemSection:I.A,QTable:M.A,QTr:j.A,QTd:H.A}),$()(Q,"directives",{ClosePopup:J.A})}}]);
|
|
||||||
BIN
ui/dist/spa/js/493.e8a952e1.js.gz
vendored
1
ui/dist/spa/js/54.92abb86e.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[54],{54:(e,l,a)=>{a.r(l),a.d(l,{default:()=>D});a(939),a(6461),a(4520),a(7049),a(3142),a(8832),a(8825),a(2528),a(4207),a(9188),a(1118);var t=a(1347),o=a(4187),n=a(8633),i=a(7763),r=a(455),s=a(3022),d=a(588),u=a(705),c=a(2986);let m=0;const p=(0,u.nY)("roleDeptPermissionList",{state:()=>({modules:[],moduleActions:[],rows:[],loading:!1,error:null,filters:{search:""}}),getters:{totalCount(e){return e.rows.length}},actions:{async fetchRows(){const e=++m;this.loading=!0,this.error=null;try{const l=String(this.filters.search||"").trim(),a={};l&&(a.search=l);const t=await c.Ay.get("/role-dept-permissions/list",{params:a});if(e!==m)return;const o=t?.data||{};this.modules=Array.isArray(o?.modules)?o.modules.map(e=>({value:String(e.value||"").toLowerCase().trim(),label:String(e.label||"")})).filter(e=>e.value):[],this.moduleActions=Array.isArray(o?.module_actions)?o.module_actions.map(e=>({module_code:String(e.module_code||"").toLowerCase().trim(),action:String(e.action||"").toLowerCase().trim()})).filter(e=>e.module_code&&e.action):[];const n=Array.isArray(o?.rows)?o.rows:Array.isArray(t?.data)?t.data:[];this.rows=n.map(e=>{const l=e?.module_flags&&"object"===typeof e.module_flags?e.module_flags:{},a={};return Object.keys(l).forEach(e=>{a[String(e).toLowerCase().trim()]=Boolean(l[e])}),{role_id:Number(e.role_id||0),role_title:e.role_title||"",department_code:e.department_code||"",department_title:e.department_title||"",module_flags:a}})}catch(l){if(e!==m)return;this.modules=[],this.moduleActions=[],this.rows=[],this.error=l?.response?.data||l?.message||"Yetki listesi alınamadı"}finally{e===m&&(this.loading=!1)}}}}),f={class:"rdp-filter-bar"},v={class:"rdp-filter-row"},h={class:"rdp-filter-actions"},b={class:"rdp-config-menus"},k={class:"rdp-summary"},w={key:0,class:"text-center"},g={key:1,class:"text-center"},_={__name:"RoleDepartmentPermissionList",setup(e){const l=(0,r.rd)(),a=(0,s.A)(),u=p(),{canUpdate:c}=(0,d.J)(),m=c("user"),_=(0,o.KR)([]),y=(0,o.KR)({}),x=(0,o.KR)(""),A={update:"Güncelleme",view:"Görüntüleme",insert:"Ekleme",export:"Çıktı",write:"Yazma",read:"Okuma",delete:"Silme",login:"Giriş",refresh:"Yenileme","user.update":"Kullanıcı Güncelle"},C=[{name:"open",label:"",field:"open",align:"center",sortable:!1,classes:"freeze-col freeze-1",headerClasses:"freeze-col freeze-1",style:"width:56px; min-width:56px; max-width:56px",headerStyle:"width:56px; min-width:56px; max-width:56px"},{name:"role_title",label:"Rol",field:"role_title",align:"left",sortable:!0,classes:"freeze-col freeze-2",headerClasses:"freeze-col freeze-2",style:"width:220px; min-width:220px; max-width:220px",headerStyle:"width:220px; min-width:220px; max-width:220px"},{name:"department_title",label:"Departman",field:"department_title",align:"left",sortable:!0,classes:"freeze-col freeze-3",headerClasses:"freeze-col freeze-3",style:"width:220px; min-width:220px; max-width:220px",headerStyle:"width:220px; min-width:220px; max-width:220px"},{name:"department_code",label:"Departman Kodu",field:"department_code",align:"left",sortable:!0,style:"width:140px; min-width:140px; max-width:140px",headerStyle:"width:140px; min-width:140px; max-width:140px"}],F=(0,t.EW)(()=>{const e={};return(u.modules||[]).forEach(l=>{e[l.value]=l.label||l.value}),e}),S=(0,t.EW)(()=>{const e={};return(u.moduleActions||[]).forEach(l=>{e[l.module_code]||(e[l.module_code]=[]),e[l.module_code].includes(l.action)||e[l.module_code].push(l.action)}),Object.keys(e).forEach(l=>e[l].sort()),e}),R=(0,t.EW)(()=>x.value?F.value[x.value]||x.value:"Seçim"),W=(0,t.EW)(()=>x.value&&S.value[x.value]||[]);function E(e){const l=String(e||"").toLowerCase().trim();return A[l]||l}function q(){const e=(u.modules||[]).map(e=>e.value);if(!e.length)return _.value=[],y.value={},void(x.value="");const l=_.value.filter(l=>e.includes(l));_.value=l.length?l:[...e],_.value.includes(x.value)||(x.value=_.value[0]);const a={};_.value.forEach(e=>{const l=S.value[e]||[],t=y.value[e]||[],o=t.filter(e=>l.includes(e));a[e]=o.length?o:[...l]}),y.value=a}function z(e){return _.value.includes(e)}function L(e,l){const a=new Set(_.value);l?a.add(e):a.delete(e),_.value=[...a],_.value.length||(_.value=[e]),_.value.includes(x.value)||(x.value=_.value[0]),q()}function Q(e){x.value=e}function $(){_.value=(u.modules||[]).map(e=>e.value),q()}function K(e,l){return(y.value[e]||[]).includes(l)}function T(e,l,a){const t=new Set(y.value[e]||[]);a?t.add(l):t.delete(l),0===t.size&&t.add(l),y.value={...y.value,[e]:[...t]}}function X(){x.value&&(y.value={...y.value,[x.value]:[...W.value]})}(0,t.wB)(()=>[u.modules,u.moduleActions],()=>{q()},{deep:!0});const B=(0,t.EW)(()=>{const e=[];return _.value.forEach(l=>{const a=y.value[l]||[];a.forEach(a=>{const t=`${l}|${a}`;e.push({name:`perm_${t}`,label:`${F.value[l]||l}\n${E(a)}`,field:e=>Boolean(e.module_flags?.[t]),align:"center",sortable:!0,style:"width:150px; min-width:150px; max-width:150px",headerStyle:"width:150px; min-width:150px; max-width:150px; white-space:pre-line; line-height:1.15"})})}),e}),D=(0,t.EW)(()=>[...C,...B.value]),I=(0,t.EW)(()=>(u.rows||[]).map(e=>({...e,row_key:`${e.role_id}:${e.department_code}`})));function V(e){return String(e||"").startsWith("perm_")}let Y=null;function U(e){e?.role_id&&e?.department_code?l.push({name:"role-dept-permissions-editor",query:{mode:"edit",roleId:String(e.role_id),deptCode:String(e.department_code)}}):a.notify({type:"warning",message:"Kayıt bilgisi eksik"})}function G(){u.filters.search="",u.fetchRows()}return(0,t.wB)(()=>u.filters.search,()=>{clearTimeout(Y),Y=setTimeout(()=>{m.value&&u.fetchRows()},350)}),(0,t.sV)(async()=>{m.value&&(await u.fetchRows(),q())}),(e,l)=>{const a=(0,t.g2)("q-icon"),r=(0,t.g2)("q-input"),s=(0,t.g2)("q-btn"),d=(0,t.g2)("q-item-section"),c=(0,t.g2)("q-item"),p=(0,t.g2)("q-separator"),_=(0,t.g2)("q-checkbox"),y=(0,t.g2)("q-list"),A=(0,t.g2)("q-btn-dropdown"),C=(0,t.g2)("q-tooltip"),F=(0,t.g2)("q-td"),S=(0,t.g2)("q-table"),q=(0,t.g2)("q-banner"),B=(0,t.g2)("q-page");return(0,o.R1)(m)?((0,t.uX)(),(0,t.Wv)(B,{key:0,class:"rdp-list-page"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",f,[(0,t.Lk)("div",v,[(0,t.bF)(r,{modelValue:(0,o.R1)(u).filters.search,"onUpdate:modelValue":l[0]||(l[0]=e=>(0,o.R1)(u).filters.search=e),class:"rdp-filter-input rdp-search",dense:"",filled:"",clearable:"",debounce:"300",label:"Arama (Rol / Departman)"},{append:(0,t.k6)(()=>[(0,t.bF)(a,{name:"search"})]),_:1},8,["modelValue"]),(0,t.Lk)("div",h,[(0,t.bF)(s,{label:"Temizle",icon:"clear",color:"grey-7",flat:"",disable:(0,o.R1)(u).loading,onClick:G},null,8,["disable"]),(0,t.bF)(s,{label:"Yenile",icon:"refresh",color:"primary",loading:(0,o.R1)(u).loading,onClick:(0,o.R1)(u).fetchRows},null,8,["loading","onClick"])]),(0,t.Lk)("div",b,[(0,t.bF)(A,{color:"secondary",outline:"",icon:"view_module",label:"Modüller","auto-close":!1},{default:(0,t.k6)(()=>[(0,t.bF)(y,{dense:"",class:"rdp-menu-list"},{default:(0,t.k6)(()=>[(0,t.bF)(c,{clickable:"",onClick:$},{default:(0,t.k6)(()=>[(0,t.bF)(d,null,{default:(0,t.k6)(()=>[...l[3]||(l[3]=[(0,t.eW)("Tümünü Seç",-1)])]),_:1})]),_:1}),(0,t.bF)(p),((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)((0,o.R1)(u).modules,e=>((0,t.uX)(),(0,t.Wv)(c,{key:e.value,clickable:"",onClick:l=>Q(e.value)},{default:(0,t.k6)(()=>[(0,t.bF)(d,{avatar:""},{default:(0,t.k6)(()=>[(0,t.bF)(_,{"model-value":z(e.value),dense:"","onUpdate:modelValue":l=>L(e.value,l),onClick:l[1]||(l[1]=(0,n.D$)(()=>{},["stop"]))},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),(0,t.bF)(d,null,{default:(0,t.k6)(()=>[(0,t.eW)((0,i.v_)(e.label),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1}),(0,t.bF)(A,{color:"secondary",outline:"",icon:"tune",label:`Aksiyonlar (${R.value})`,disable:!x.value,"auto-close":!1},{default:(0,t.k6)(()=>[(0,t.bF)(y,{dense:"",class:"rdp-menu-list"},{default:(0,t.k6)(()=>[(0,t.bF)(c,{clickable:"",onClick:X},{default:(0,t.k6)(()=>[(0,t.bF)(d,null,{default:(0,t.k6)(()=>[...l[4]||(l[4]=[(0,t.eW)("Tümünü Seç",-1)])]),_:1})]),_:1}),(0,t.bF)(p),((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(W.value,e=>((0,t.uX)(),(0,t.Wv)(c,{key:`${x.value}:${e}`,clickable:""},{default:(0,t.k6)(()=>[(0,t.bF)(d,{avatar:""},{default:(0,t.k6)(()=>[(0,t.bF)(_,{"model-value":K(x.value,e),dense:"","onUpdate:modelValue":l=>T(x.value,e,l),onClick:l[2]||(l[2]=(0,n.D$)(()=>{},["stop"]))},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),(0,t.bF)(d,null,{default:(0,t.k6)(()=>[(0,t.eW)((0,i.v_)(E(e)),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1},8,["label","disable"])]),(0,t.Lk)("div",k,[(0,t.Lk)("span",null,[l[5]||(l[5]=(0,t.eW)("Toplam Kayıt: ",-1)),(0,t.Lk)("strong",null,(0,i.v_)((0,o.R1)(u).totalCount),1)])])])]),(0,t.bF)(S,{title:"Rol + Departman Yetki Setleri",class:"rdp-table",flat:"",bordered:"",dense:"","row-key":"row_key",rows:I.value,columns:D.value,loading:(0,o.R1)(u).loading,"no-data-label":"Kayıt bulunamadı","rows-per-page-options":[0],"hide-bottom":""},{"body-cell":(0,t.k6)(e=>[(0,t.bF)(F,{props:e,class:(0,i.C4)(e.col.classes)},{default:(0,t.k6)(()=>["open"===e.col.name?((0,t.uX)(),(0,t.CE)("div",w,[(0,t.bF)(s,{icon:"open_in_new",color:"primary",flat:"",round:"",dense:"",onClick:l=>U(e.row)},{default:(0,t.k6)(()=>[(0,t.bF)(C,null,{default:(0,t.k6)(()=>[...l[6]||(l[6]=[(0,t.eW)("Yetki setini aç",-1)])]),_:1})]),_:2},1032,["onClick"])])):V(e.col.name)?((0,t.uX)(),(0,t.CE)("div",g,[(0,t.bF)(_,{"model-value":Boolean(e.value),disable:"",dense:""},null,8,["model-value"])])):((0,t.uX)(),(0,t.CE)(t.FK,{key:2},[(0,t.eW)((0,i.v_)(e.value),1)],64))]),_:2},1032,["props","class"])]),_:1},8,["rows","columns","loading"]),(0,o.R1)(u).error?((0,t.uX)(),(0,t.Wv)(q,{key:0,class:"bg-red text-white q-mt-sm"},{default:(0,t.k6)(()=>[(0,t.eW)(" Hata: "+(0,i.v_)((0,o.R1)(u).error),1)]),_:1})):(0,t.Q3)("",!0)]),_:1})):((0,t.uX)(),(0,t.Wv)(B,{key:1,class:"q-pa-md flex flex-center"},{default:(0,t.k6)(()=>[...l[7]||(l[7]=[(0,t.Lk)("div",{class:"text-negative text-subtitle1"}," Bu modüle erişim yetkiniz yok. ",-1)])]),_:1}))}}};var y=a(2968),x=a(5013),A=a(6067),C=a(3933),F=a(2677),S=a(5303),R=a(3766),W=a(2589),E=a(4958),q=a(6915),z=a(8349),L=a(6087),Q=a(8785),$=a(8387),K=a(7453),T=a(272),X=a.n(T);const B=(0,y.A)(_,[["__scopeId","data-v-a17e51d4"]]),D=B;X()(_,"components",{QPage:x.A,QInput:A.A,QIcon:C.A,QBtn:F.A,QBtnDropdown:S.A,QList:R.A,QItem:W.A,QItemSection:E.A,QSeparator:q.A,QCheckbox:z.A,QTable:L.A,QTd:Q.A,QTooltip:$.A,QBanner:K.A})}}]);
|
|
||||||
BIN
ui/dist/spa/js/54.92abb86e.js.gz
vendored
1
ui/dist/spa/js/548.61f02757.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[548],{4548:(e,l,a)=>{a.r(l),a.d(l,{default:()=>q});a(939),a(7008),a(4520),a(7049);var o=a(1347),t=a(4187),s=a(7763),n=a(144),u=a(2986),d=a(588);const i={class:"row q-col-gutter-md q-mb-md"},m={class:"col-4"},r={class:"col-4"},c={key:0},p={class:"q-mt-md"},v={__name:"PermissionMatrix",async setup(e){let l,a;const{canRead:v,canUpdate:k}=(0,d.J)(),y=v("system"),b=k("user"),g=(0,t.KR)([]),f=(0,t.KR)([]),w=(0,t.KR)(null),h=(0,t.KR)(null),A=(0,t.KR)([]),R=(0,t.KR)(!1),q=(0,t.KR)(!1),V=[{key:"write",label:"Ekleme"},{key:"read",label:"Görüntüleme"},{key:"delete",label:"Silme"},{key:"update",label:"Güncelleme"},{key:"export",label:"Çıktı"}],[K,x,_]=([l,a]=(0,o.E)(()=>Promise.all([u.Ay.get("/lookups/roles"),u.Ay.get("/lookups/departments"),u.Ay.get("/lookups/modules")])),l=await l,a(),l);modules.value=_.data||[];const E=[{name:"module",label:"Modül",field:"label",align:"left"},...V.map(e=>({name:e.key,label:e.label,align:"center"}))];async function L(){const[e,l]=await Promise.all([u.Ay.get("/lookups/roles"),u.Ay.get("/lookups/departments")]);g.value=e.data,f.value=l.data}function Q(){A.value=modules.map(e=>{const l={module:e.code,label:e.label};return V.forEach(e=>{l[e.key]=!1}),l})}async function C(){if(w.value&&h.value){R.value=!0;try{Q();await u.Ay.get(`/roles/${w.value}/departments/${h.value}/permissions`);list.forEach(e=>{const l=String(e.module_code||e.module).toLowerCase().trim(),a=A.value.find(e=>e.module===l);a&&(a[e.action]=e.allowed)}),q.value=!1}catch{n.A.create({type:"negative",message:"Yetkiler yüklenemedi"})}finally{R.value=!1}}}async function U(){try{R.value=!0;const e=[];A.value.forEach(l=>{V.forEach(a=>{e.push({module:l.module,action:a.key,allowed:l[a.key]})})}),await u.Ay.post(`/roles/${w.value}/departments/${h.value}/permissions`,e),n.A.create({type:"positive",message:"Kaydedildi"}),q.value=!1}catch{n.A.create({type:"negative",message:"Kayıt hatası"})}finally{R.value=!1}}return(0,o.sV)(()=>{L()}),(e,l)=>{const a=(0,o.g2)("q-select"),n=(0,o.g2)("q-checkbox"),u=(0,o.g2)("q-td"),d=(0,o.g2)("q-table"),v=(0,o.g2)("q-btn"),k=(0,o.g2)("q-page");return(0,t.R1)(y)?((0,o.uX)(),(0,o.Wv)(k,{key:0,padding:""},{default:(0,o.k6)(()=>[l[3]||(l[3]=(0,o.Lk)("div",{class:"text-h6 q-mb-md"}," Rol + Departman Yetkilendirme ",-1)),(0,o.Lk)("div",i,[(0,o.Lk)("div",m,[(0,o.bF)(a,{modelValue:w.value,"onUpdate:modelValue":[l[0]||(l[0]=e=>w.value=e),C],options:g.value,label:"Rol",dense:"",outlined:"","emit-value":"","map-options":""},null,8,["modelValue","options"])]),(0,o.Lk)("div",r,[(0,o.bF)(a,{modelValue:h.value,"onUpdate:modelValue":[l[1]||(l[1]=e=>h.value=e),C],options:f.value,label:"Departman",dense:"",outlined:"","emit-value":"","map-options":""},null,8,["modelValue","options"])])]),(0,o.bF)(d,{rows:A.value,columns:E,"row-key":"module",flat:"",bordered:"",dense:"",loading:R.value},{"body-cell":(0,o.k6)(e=>[(0,o.bF)(u,{props:e},{default:(0,o.k6)(()=>["module"===e.col.name?((0,o.uX)(),(0,o.CE)("span",c,(0,s.v_)(e.row.label),1)):((0,o.uX)(),(0,o.Wv)(n,{key:1,modelValue:e.row[e.col.name],"onUpdate:modelValue":[l=>e.row[e.col.name]=l,l[2]||(l[2]=e=>q.value=!0)],dense:""},null,8,["modelValue","onUpdate:modelValue"]))]),_:2},1032,["props"])]),_:1},8,["rows","loading"]),(0,o.Lk)("div",p,[(0,t.R1)(b)?((0,o.uX)(),(0,o.Wv)(v,{key:0,color:"primary",icon:"save",label:"Kaydet",disable:!q.value,onClick:U},null,8,["disable"])):(0,o.Q3)("",!0)])]),_:1})):((0,o.uX)(),(0,o.Wv)(k,{key:1,class:"q-pa-md flex flex-center"},{default:(0,o.k6)(()=>[...l[4]||(l[4]=[(0,o.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var k=a(5013),y=a(6941),b=a(6087),g=a(8785),f=a(8349),w=a(2677),h=a(272),A=a.n(h);const R=v,q=R;A()(v,"components",{QPage:k.A,QSelect:y.A,QTable:b.A,QTd:g.A,QCheckbox:f.A,QBtn:w.A})}}]);
|
|
||||||
1
ui/dist/spa/js/607.70ac7b00.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[607],{5607:(e,t,a)=>{a.r(t),a.d(t,{default:()=>b});var s=a(1347),n=a(4187),l=a(455),o=a(588);const r={class:"row q-gutter-lg q-mt-md"},i={__name:"RoleDepartmentPermissionGateway",setup(e){const t=(0,l.rd)(),{canUpdate:a}=(0,o.J)(),i=a("user");function c(){t.push({name:"role-dept-permissions-list"})}function d(){t.push({name:"role-dept-permissions-editor",query:{mode:"new"}})}return(e,t)=>{const a=(0,s.g2)("q-btn"),l=(0,s.g2)("q-page");return(0,n.R1)(i)?((0,s.uX)(),(0,s.Wv)(l,{key:0,class:"perm-gateway flex flex-center column"},{default:(0,s.k6)(()=>[t[0]||(t[0]=(0,s.Lk)("div",{class:"text-h5 text-primary q-mb-xl"}," Rol + Departman Yetkileri ",-1)),(0,s.Lk)("div",r,[(0,s.bF)(a,{color:"secondary",icon:"folder_open",label:"MEVCUT YETKİLERİ GÖSTER",onClick:c}),(0,s.bF)(a,{color:"primary",icon:"add_circle",label:"YETKİ EKLE / GÜNCELLE",onClick:d})])]),_:1})):((0,s.uX)(),(0,s.Wv)(l,{key:1,class:"q-pa-md flex flex-center"},{default:(0,s.k6)(()=>[...t[1]||(t[1]=[(0,s.Lk)("div",{class:"text-negative text-subtitle1"}," Bu modüle erişim yetkiniz yok. ",-1)])]),_:1}))}}};var c=a(2968),d=a(5013),m=a(2677),u=a(272),p=a.n(u);const k=(0,c.A)(i,[["__scopeId","data-v-57a9abef"]]),b=k;p()(i,"components",{QPage:d.A,QBtn:m.A})}}]);
|
|
||||||
1
ui/dist/spa/js/618.f36e56f9.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[618],{5618:(e,a,l)=>{l.r(a),l.d(a,{default:()=>K});l(939),l(6461);var t=l(1347),i=l(4187),n=l(7763),o=l(455),r=l(9765),s=l(5767),u=l(2584);const c={__name:"MainLayout",setup(e){const a=(0,o.rd)(),l=(0,s.n)(),c=(0,u.o)(),p=(0,i.KR)(!0);function d(){p.value=!p.value}function b(){r.A.create({title:"Çıkış Yap",message:"Oturumunuzu kapatmak istediğinize emin misiniz?",cancel:!0,persistent:!0}).onOk(()=>{l.clearSession(),c.clear(),a.push("/login")})}(0,t.sV)(async()=>{c.loaded||await c.fetchPermissions()});const m=[{label:"Ana Panel",icon:"dashboard",to:"/app",permission:"system:view"},{label:"Finans",icon:"account_balance",children:[{label:"Cari Ekstre",to:"/app/statementofaccount",permission:"finance:view"}]},{label:"Sipariş",icon:"shopping_cart",children:[{label:"Siparişler",to:"/app/order-gateway",permission:"order:view"},{label:"Tamamlanan Siparişleri Toplu Kapatma",to:"/app/order-bulk-close",permission:"order:update"}]},{label:"Sistem",icon:"settings",children:[{label:"Rol + Departman Yetkileri",to:"/app/role-dept-permissions",permission:"user:update"},{label:"Kullanıcı Yetkileri",to:"/app/user-permissions",permission:"user:update"},{label:"Loglar",to:"/app/activity-logs",permission:"user:view"},{label:"Test Mail",to:"/app/test-mail",permission:"user:insert"}]},{label:"Kullanıcı Yönetimi",icon:"people",children:[{label:"Kullanıcılar",to:"/app/users",permission:"user:view"}]}],g=(0,t.EW)(()=>c.loaded?m.map(e=>{if(e.children){const a=e.children.filter(e=>c.hasApiPermission(e.permission));return a.length?{...e,children:a}:null}return c.hasApiPermission(e.permission)?e:null}).filter(Boolean):[]);return(e,a)=>{const l=(0,t.g2)("q-btn"),o=(0,t.g2)("q-avatar"),r=(0,t.g2)("q-toolbar-title"),s=(0,t.g2)("q-toolbar"),u=(0,t.g2)("q-header"),m=(0,t.g2)("q-icon"),k=(0,t.g2)("q-item-section"),f=(0,t.g2)("q-item"),h=(0,t.g2)("q-expansion-item"),v=(0,t.g2)("q-separator"),F=(0,t.g2)("q-list"),_=(0,t.g2)("q-scroll-area"),w=(0,t.g2)("q-drawer"),y=(0,t.g2)("router-view"),A=(0,t.g2)("q-page-container"),q=(0,t.g2)("q-footer"),Q=(0,t.g2)("q-layout");return(0,t.uX)(),(0,t.Wv)(Q,{view:"hHh Lpr fFf"},{default:(0,t.k6)(()=>[(0,t.bF)(u,{elevated:"",class:"bg-primary text-white"},{default:(0,t.k6)(()=>[(0,t.bF)(s,null,{default:(0,t.k6)(()=>[(0,t.bF)(l,{dense:"",flat:"",round:"",icon:"menu",onClick:d}),(0,t.bF)(r,null,{default:(0,t.k6)(()=>[(0,t.bF)(o,{class:"bg-secondary q-mr-sm"},{default:(0,t.k6)(()=>[...a[1]||(a[1]=[(0,t.Lk)("img",{src:"/images/Baggi-tekstilas-logolu.jpg"},null,-1)])]),_:1}),a[2]||(a[2]=(0,t.eW)(" Baggi Software System ",-1))]),_:1}),(0,t.bF)(l,{flat:"",dense:"",round:"",icon:"logout",onClick:b})]),_:1})]),_:1}),(0,i.R1)(c).loaded?((0,t.uX)(),(0,t.Wv)(w,{key:0,modelValue:p.value,"onUpdate:modelValue":a[0]||(a[0]=e=>p.value=e),"show-if-above":"",bordered:"",class:"bg-secondary text-white"},{default:(0,t.k6)(()=>[(0,t.bF)(_,{style:{height:"100%"}},{default:(0,t.k6)(()=>[(0,t.bF)(F,{padding:""},{default:(0,t.k6)(()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(g.value,(e,a)=>((0,t.uX)(),(0,t.CE)(t.FK,{key:a},[e.children?((0,t.uX)(),(0,t.Wv)(h,{key:0,icon:e.icon,label:e.label,"expand-separator":""},{default:(0,t.k6)(()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(e.children,(e,a)=>((0,t.uX)(),(0,t.Wv)(f,{key:a,clickable:"",to:e.to},{default:(0,t.k6)(()=>[(0,t.bF)(k,{avatar:""},{default:(0,t.k6)(()=>[(0,t.bF)(m,{name:"chevron_right"})]),_:1}),(0,t.bF)(k,null,{default:(0,t.k6)(()=>[(0,t.eW)((0,n.v_)(e.label),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:2},1032,["icon","label"])):((0,t.uX)(),(0,t.Wv)(f,{key:1,clickable:"",to:e.to},{default:(0,t.k6)(()=>[(0,t.bF)(k,{avatar:""},{default:(0,t.k6)(()=>[(0,t.bF)(m,{name:e.icon},null,8,["name"])]),_:2},1024),(0,t.bF)(k,null,{default:(0,t.k6)(()=>[(0,t.eW)((0,n.v_)(e.label),1)]),_:2},1024)]),_:2},1032,["to"])),(0,t.bF)(v,{spaced:""})],64))),128)),(0,t.bF)(f,{clickable:"",to:"/app/change-password"},{default:(0,t.k6)(()=>[(0,t.bF)(k,{avatar:""},{default:(0,t.k6)(()=>[(0,t.bF)(m,{name:"vpn_key"})]),_:1}),(0,t.bF)(k,null,{default:(0,t.k6)(()=>[...a[3]||(a[3]=[(0,t.eW)(" Şifre Değiştir ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])):(0,t.Q3)("",!0),(0,t.bF)(A,{class:"with-bg"},{default:(0,t.k6)(()=>[(0,t.bF)(y)]),_:1}),(0,t.bF)(q,{class:"bg-grey-8 text-white"},{default:(0,t.k6)(()=>[(0,t.bF)(s,{class:"bg-secondary"},{default:(0,t.k6)(()=>[(0,t.bF)(r,null,{default:(0,t.k6)(()=>[...a[4]||(a[4]=[(0,t.eW)(" Baggi Software System ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})}}};var p=l(4001),d=l(6865),b=l(6739),m=l(2677),g=l(4629),k=l(5305),f=l(3961),h=l(5460),v=l(3766),F=l(2262),_=l(2589),w=l(4958),y=l(3933),A=l(6915),q=l(970),Q=l(5797),S=l(272),W=l.n(S);const C=c,K=C;W()(c,"components",{QLayout:p.A,QHeader:d.A,QToolbar:b.A,QBtn:m.A,QToolbarTitle:g.A,QAvatar:k.A,QDrawer:f.A,QScrollArea:h.A,QList:v.A,QExpansionItem:F.A,QItem:_.A,QItemSection:w.A,QIcon:y.A,QSeparator:A.A,QPageContainer:q.A,QFooter:Q.A})}}]);
|
|
||||||
1
ui/dist/spa/js/621.2108b55f.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[621],{2621:(e,s,t)=>{t.r(s),t.d(s,{default:()=>k});var a=t(1347),l=t(4187),n=t(588);const u={__name:"Dashboard",setup(e){const{canRead:s}=(0,n.J)(),t=s("system");return(e,s)=>{const n=(0,a.g2)("q-page");return(0,l.R1)(t)?((0,a.uX)(),(0,a.Wv)(n,{key:0,class:"flex flex-center"},{default:(0,a.k6)(()=>[...s[0]||(s[0]=[(0,a.Lk)("p",null,"DashBoard",-1)])]),_:1})):((0,a.uX)(),(0,a.Wv)(n,{key:1,class:"q-pa-md flex flex-center"},{default:(0,a.k6)(()=>[...s[1]||(s[1]=[(0,a.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var r=t(5013),c=t(272),o=t.n(c);const i=u,k=i;o()(u,"components",{QPage:r.A})}}]);
|
|
||||||
1
ui/dist/spa/js/629.2c27a0a3.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[629],{629:(e,a,t)=>{t.r(a),t.d(a,{default:()=>h});var l=t(1347),s=t(4187),i=t(3022),n=t(705),o=t(2986);const d=(0,n.nY)("mailTest",{state:()=>({loading:!1,lastResult:null}),actions:{async sendTestMail(e){this.loading=!0;try{const a=await(0,o.bE)("/test-mail",{to:e});return this.lastResult=a,!0}catch(e){throw this.lastResult=e,e}finally{this.loading=!1}}}});var u=t(588);const c={__name:"TestMail",setup(e){const{canWrite:a}=(0,u.J)(),t=a("user"),n=(0,l.EW)(()=>t.value),o=(0,i.A)(),c=d(),r=(0,s.KR)("mehmet.kececi@baggi.com.tr");async function g(){if(n.value)try{await c.sendTestMail(r.value),o.notify({type:"positive",message:"Test mail gonderildi"})}catch(e){o.notify({type:"negative",message:e?.message||"Mail gonderilemedi"})}else o.notify({type:"negative",message:"Test mail gonderme yetkiniz yok"})}return(e,a)=>{const t=(0,l.g2)("q-card-section"),i=(0,l.g2)("q-input"),o=(0,l.g2)("q-btn"),d=(0,l.g2)("q-card-actions"),u=(0,l.g2)("q-card"),m=(0,l.g2)("q-page");return n.value?((0,l.uX)(),(0,l.Wv)(m,{key:0,class:"q-pa-md"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{flat:"",bordered:"",class:"q-pa-md",style:{"max-width":"500px"}},{default:(0,l.k6)(()=>[(0,l.bF)(t,null,{default:(0,l.k6)(()=>[...a[1]||(a[1]=[(0,l.Lk)("div",{class:"text-h6"},"SMTP Test Mail",-1)])]),_:1}),(0,l.bF)(t,null,{default:(0,l.k6)(()=>[(0,l.bF)(i,{modelValue:r.value,"onUpdate:modelValue":a[0]||(a[0]=e=>r.value=e),label:"Gonderilecek mail",filled:"",dense:""},null,8,["modelValue"])]),_:1}),(0,l.bF)(d,{align:"right"},{default:(0,l.k6)(()=>[n.value?((0,l.uX)(),(0,l.Wv)(o,{key:0,color:"primary",label:"Test Mail Gonder",loading:(0,s.R1)(c).loading,disable:!n.value,onClick:g},null,8,["loading","disable"])):(0,l.Q3)("",!0)]),_:1})]),_:1})]),_:1})):((0,l.uX)(),(0,l.Wv)(m,{key:1,class:"q-pa-md flex flex-center"},{default:(0,l.k6)(()=>[...a[2]||(a[2]=[(0,l.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var r=t(5013),g=t(3341),m=t(222),k=t(6067),y=t(5034),b=t(2677),v=t(272),f=t.n(v);const p=c,h=p;f()(c,"components",{QPage:r.A,QCard:g.A,QCardSection:m.A,QInput:k.A,QCardActions:y.A,QBtn:b.A})}}]);
|
|
||||||
1
ui/dist/spa/js/673.8f68da58.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[673],{7673:(e,l,a)=>{a.r(l),a.d(l,{default:()=>X});a(939),a(3872),a(7008),a(4520),a(7049);var o=a(1347),t=a(4187),s=a(7763),n=a(455),u=a(144),i=a(2986),r=a(588);const d={key:0,class:"q-pa-xl flex flex-center"},c={class:"sticky-stack"},m={key:0,class:"filter-bar row q-col-gutter-md"},p={class:"col-4"},v={class:"col-4"},y={class:"save-toolbar"},k={key:0,class:"permissions-table-scroll"},b={key:0},g={key:1,class:"column items-center"},f={class:"text-caption"},w={key:0},h={__name:"RoleDepartmentPermissionPage",setup(e){const{canUpdate:l}=(0,r.J)(),a=l("user"),h=(0,n.lq)(),R=(0,n.rd)(),A=(0,t.KR)([]),C=(0,t.KR)([]),E=(0,t.KR)(null),q=(0,t.KR)(null),x=(0,t.KR)([]),L=(0,t.KR)(!1),K=(0,t.KR)(!1),V=(0,t.KR)(!1),Q=[{key:"write",label:"Ekleme"},{key:"read",label:"Görüntüleme"},{key:"delete",label:"Silme"},{key:"update",label:"Güncelleme"},{key:"export",label:"Çıktı"}],_=(0,t.KR)([]),X=[{name:"module",label:"Modül",field:"label",align:"left"},...Q.map(e=>({name:e.key,label:e.label,align:"center"}))];let P=!1;function F(){R.push({name:"role-dept-permissions-list"})}function S(){const e=String(h.query.roleId||"").trim(),l=String(h.query.deptCode||"").trim();/^\d+$/.test(e)&&Number(e)>0&&(E.value=e),l&&(q.value=l),E.value&&q.value&&B()}async function T(){const[e,l,a]=await Promise.all([i.Ay.get("/lookups/roles-perm"),i.Ay.get("/lookups/departments-perm"),i.Ay.get("/lookups/modules")]);A.value=e.data||[],C.value=l.data||[],_.value=a.data||[],V.value=!0}function U(){x.value=_.value.map(e=>{const l={module:String(e.value).toLowerCase().trim(),label:e.label};return Q.forEach(e=>{l[e.key]=!1}),l})}async function B(){if(E.value&&q.value&&!P){P=!0,L.value=!0;try{_.value.length||await T(),U();const e=await i.Ay.get(`/roles/${E.value}/departments/${q.value}/permissions`),l=Array.isArray(e.data)?e.data:[];console.log("PERM LIST:",l.slice(0,10));const a={insert:"write",view:"read",delete:"delete",update:"update",export:"export"};l.forEach(e=>{const l=String(e.module_code||e.module).toLowerCase().trim(),o=String(e.action).toLowerCase().trim(),t=a[o]||o,s=x.value.find(e=>e.module===l);s&&s.hasOwnProperty(t)&&(s[t]=Boolean(e.allowed))}),K.value=!1}catch(e){console.error("PERM LOAD ERROR:",e),u.A.create({type:"negative",message:"Yetkiler yüklenemedi"})}finally{L.value=!1,P=!1}}}async function D(){try{L.value=!0;const e=[];x.value.forEach(l=>{Q.forEach(a=>{e.push({module:l.module,action:a.key,allowed:l[a.key]})})}),await i.Ay.post(`/roles/${E.value}/departments/${q.value}/permissions`,e),u.A.create({type:"positive",message:"Kaydedildi"}),K.value=!1}catch{u.A.create({type:"negative",message:"Kayıt hatası"})}finally{L.value=!1}}function $(e){return!!x.value.length&&x.value.every(l=>!0===l[e])}function I(e,l){x.value.forEach(a=>{a[e]=l}),K.value=!0}return(0,o.sV)(async()=>{await T(),S()}),(0,o.wB)(E,e=>console.log("ROLE_ID >>>",e)),(0,o.wB)(q,e=>console.log("DEPT >>>",e)),(0,o.wB)(()=>[h.query.roleId,h.query.deptCode],()=>{V.value&&S()}),(e,l)=>{const n=(0,o.g2)("q-spinner"),u=(0,o.g2)("q-select"),i=(0,o.g2)("q-btn"),r=(0,o.g2)("q-checkbox"),h=(0,o.g2)("q-th"),R=(0,o.g2)("q-td"),Q=(0,o.g2)("q-table"),_=(0,o.g2)("q-page");return(0,o.uX)(),(0,o.CE)(o.FK,null,[(0,t.R1)(a)&&!V.value?((0,o.uX)(),(0,o.CE)("div",d,[(0,o.bF)(n,{color:"primary",size:"48px"})])):(0,o.Q3)("",!0),(0,t.R1)(a)?((0,o.uX)(),(0,o.Wv)(_,{key:1,class:"permissions-page"},{default:(0,o.k6)(()=>[(0,o.Lk)("div",c,[V.value?((0,o.uX)(),(0,o.CE)("div",m,[(0,o.Lk)("div",p,[(0,o.bF)(u,{modelValue:E.value,"onUpdate:modelValue":[l[0]||(l[0]=e=>E.value=e),B],options:A.value,"option-value":"id","option-label":"title","emit-value":"","map-options":"",label:"Rol",dense:"",outlined:""},null,8,["modelValue","options"])]),(0,o.Lk)("div",v,[(0,o.bF)(u,{modelValue:q.value,"onUpdate:modelValue":[l[1]||(l[1]=e=>q.value=e),B],options:C.value,"option-value":"id","option-label":"title","emit-value":"","map-options":"",label:"Departman",dense:"",outlined:""},null,8,["modelValue","options"])])])):(0,o.Q3)("",!0),(0,o.Lk)("div",y,[l[3]||(l[3]=(0,o.Lk)("div",{class:"label"}," Rol + Departman Yetkilendirme ",-1)),(0,o.bF)(i,{flat:"",icon:"list",label:"Liste",onClick:F}),(0,t.R1)(a)?((0,o.uX)(),(0,o.Wv)(i,{key:0,color:"primary",icon:"save",label:"Kaydet",disable:!K.value,onClick:D},null,8,["disable"])):(0,o.Q3)("",!0)])]),V.value?((0,o.uX)(),(0,o.CE)("div",k,[(0,o.bF)(Q,{class:"permissions-table",rows:x.value,columns:X,"row-key":"module",flat:"",bordered:"",dense:"",loading:L.value,"rows-per-page-options":[0],pagination:{rowsPerPage:0}},{"header-cell":(0,o.k6)(e=>[(0,o.bF)(h,{props:e},{default:(0,o.k6)(()=>["module"===e.col.name?((0,o.uX)(),(0,o.CE)("span",b,(0,s.v_)(e.col.label),1)):((0,o.uX)(),(0,o.CE)("div",g,[(0,o.Lk)("span",f,(0,s.v_)(e.col.label),1),(0,o.bF)(r,{dense:"","model-value":$(e.col.name),"onUpdate:modelValue":l=>I(e.col.name,l)},null,8,["model-value","onUpdate:modelValue"])]))]),_:2},1032,["props"])]),"body-cell":(0,o.k6)(e=>[(0,o.bF)(R,{props:e,class:(0,s.C4)("module"===e.col.name?"permissions-sticky-col":"")},{default:(0,o.k6)(()=>["module"===e.col.name?((0,o.uX)(),(0,o.CE)("span",w,(0,s.v_)(e.row.label),1)):((0,o.uX)(),(0,o.Wv)(r,{key:1,modelValue:e.row[e.col.name],"onUpdate:modelValue":[l=>e.row[e.col.name]=l,l[2]||(l[2]=e=>K.value=!0)],dense:""},null,8,["modelValue","onUpdate:modelValue"]))]),_:2},1032,["props","class"])]),_:1},8,["rows","loading"])])):(0,o.Q3)("",!0)]),_:1})):((0,o.uX)(),(0,o.Wv)(_,{key:2,class:"q-pa-md flex flex-center"},{default:(0,o.k6)(()=>[...l[4]||(l[4]=[(0,o.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))],64)}}};var R=a(6356),A=a(5013),C=a(6941),E=a(2677),q=a(6087),x=a(2517),L=a(8349),K=a(8785),V=a(272),Q=a.n(V);const _=h,X=_;Q()(h,"components",{QSpinner:R.A,QPage:A.A,QSelect:C.A,QBtn:E.A,QTable:q.A,QTh:x.A,QCheckbox:L.A,QTd:K.A})}}]);
|
|
||||||
1
ui/dist/spa/js/713.5838996c.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[713],{713:(e,a,l)=>{l.r(a),l.d(a,{default:()=>I});var t=l(1347),o=l(7763),s=l(4187),u=l(455),r=l(5767),n=l(3022),d=l(2986);const i={class:"q-mt-md row items-center justify-between"},c={__name:"MainPage",setup(e){const a=(0,u.rd)(),l=(0,r.n)(),c=(0,n.A)(),m=(0,s.KR)(""),g=(0,s.KR)(""),v=(0,s.KR)(!1),b=(0,s.KR)(!1),p=(0,s.KR)(!1),f=(0,s.KR)(!1),k=(0,s.KR)(""),y=(0,s.KR)(!1),h=(0,s.KR)(""),w=(0,s.KR)(!1);async function F(){p.value=!0;try{await l.login(m.value,g.value),v.value?localStorage.setItem("username",m.value):localStorage.removeItem("username"),b.value?localStorage.setItem("password",g.value):localStorage.removeItem("password"),localStorage.setItem("remember_user",v.value?"true":"false"),localStorage.setItem("remember_pass",b.value?"true":"false"),l.mustChangePassword?a.replace("/first-password-change"):a.replace("/app")}catch(e){console.error("❌ Login error:",e),c.notify({type:"negative",message:"Kullanıcı adı veya şifre hatalı",position:"top-right"}),l.clearSession()}finally{p.value=!1}}async function _(){if(k.value){y.value=!0,h.value="";try{await d.Ay.post("/password/forgot",{email:k.value}),w.value=!0,h.value="Eğer hesabınız aktif ise parola sıfırlama bağlantısı e-posta adresinize gönderilmiştir."}catch{w.value=!0,h.value="Eğer hesabınız aktif ise parola sıfırlama bağlantısı e-posta adresinize gönderilmiştir."}finally{y.value=!1}}}return(0,t.sV)(()=>{"true"===localStorage.getItem("remember_user")&&(m.value=localStorage.getItem("username")||"",v.value=!0),"true"===localStorage.getItem("remember_pass")&&(g.value=localStorage.getItem("password")||"",b.value=!0)}),(e,a)=>{const l=(0,t.g2)("q-icon"),s=(0,t.g2)("q-avatar"),u=(0,t.g2)("q-card-section"),r=(0,t.g2)("q-input"),n=(0,t.g2)("q-checkbox"),d=(0,t.g2)("q-btn"),c=(0,t.g2)("q-card-actions"),A=(0,t.g2)("q-card"),V=(0,t.g2)("q-banner"),q=(0,t.g2)("q-dialog"),K=(0,t.g2)("q-page"),x=(0,t.gN)("close-popup");return(0,t.uX)(),(0,t.Wv)(K,{class:"flex flex-center login-bg"},{default:(0,t.k6)(()=>[(0,t.bF)(A,{class:"q-pa-lg shadow-4 login-card"},{default:(0,t.k6)(()=>[(0,t.bF)(u,{class:"text-center"},{default:(0,t.k6)(()=>[(0,t.bF)(s,{size:"80px",class:"bg-white text-secondary shadow-2"},{default:(0,t.k6)(()=>[(0,t.bF)(l,{name:"lock",size:"40px"})]),_:1}),a[7]||(a[7]=(0,t.Lk)("div",{class:"login-title q-mt-sm"},"Kullanıcı Girişi",-1))]),_:1}),(0,t.bF)(u,null,{default:(0,t.k6)(()=>[(0,t.bF)(r,{modelValue:m.value,"onUpdate:modelValue":a[0]||(a[0]=e=>m.value=e),label:"Kullanıcı Adı",dense:"",standout:"bg-white",class:"q-mb-md custom-input",autocomplete:"username"},null,8,["modelValue"]),(0,t.bF)(r,{modelValue:g.value,"onUpdate:modelValue":a[1]||(a[1]=e=>g.value=e),type:"password",label:"Şifre",dense:"",standout:"bg-white",class:"custom-input",autocomplete:"current-password"},null,8,["modelValue"]),(0,t.Lk)("div",i,[(0,t.Lk)("div",null,[(0,t.bF)(n,{modelValue:v.value,"onUpdate:modelValue":a[2]||(a[2]=e=>v.value=e),label:"Kullanıcıyı hatırla",color:"secondary",dense:""},null,8,["modelValue"]),(0,t.bF)(n,{modelValue:b.value,"onUpdate:modelValue":a[3]||(a[3]=e=>b.value=e),label:"Parolayı kaydet",color:"secondary",dense:""},null,8,["modelValue"])]),(0,t.bF)(d,{flat:"",dense:"",color:"primary",label:"Şifremi Unuttum",onClick:a[4]||(a[4]=e=>f.value=!0)})])]),_:1}),(0,t.bF)(c,{align:"center"},{default:(0,t.k6)(()=>[(0,t.bF)(d,{label:"Giriş Yap",color:"primary",glossy:"",unelevated:"",icon:"login",class:"full-width",loading:p.value,onClick:F},null,8,["loading"])]),_:1})]),_:1}),(0,t.bF)(q,{modelValue:f.value,"onUpdate:modelValue":a[6]||(a[6]=e=>f.value=e),persistent:""},{default:(0,t.k6)(()=>[(0,t.bF)(A,{style:{width:"420px","max-width":"90vw"}},{default:(0,t.k6)(()=>[(0,t.bF)(u,{class:"text-h6"},{default:(0,t.k6)(()=>[...a[8]||(a[8]=[(0,t.eW)(" Parola Sıfırlama ",-1)])]),_:1}),(0,t.bF)(u,null,{default:(0,t.k6)(()=>[a[9]||(a[9]=(0,t.Lk)("div",{class:"text-caption text-grey-7 q-mb-sm"}," Kullanıcı adınızı girin. ",-1)),(0,t.bF)(r,{modelValue:k.value,"onUpdate:modelValue":a[5]||(a[5]=e=>k.value=e),label:"Kullanıcı Adı",dense:"",outlined:"",disable:y.value},null,8,["modelValue","disable"]),h.value?((0,t.uX)(),(0,t.Wv)(V,{key:0,class:(0,o.C4)(["q-mt-md",w.value?"bg-green-1 text-green":"bg-red-1 text-red"]),rounded:""},{default:(0,t.k6)(()=>[(0,t.eW)((0,o.v_)(h.value),1)]),_:1},8,["class"])):(0,t.Q3)("",!0)]),_:1}),(0,t.bF)(c,{align:"right"},{default:(0,t.k6)(()=>[(0,t.bo)((0,t.bF)(d,{flat:"",label:"Vazgeç"},null,512),[[x]]),(0,t.bF)(d,{color:"primary",label:"Gönder",loading:y.value,onClick:_},null,8,["loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})}}};var m=l(2968),g=l(5013),v=l(3341),b=l(222),p=l(5305),f=l(3933),k=l(6067),y=l(8349),h=l(2677),w=l(5034),F=l(45),_=l(7453),A=l(7861),V=l(8657),q=l(272),K=l.n(q);const x=(0,m.A)(c,[["__scopeId","data-v-2ea21061"]]),I=x;K()(c,"components",{QPage:g.A,QCard:v.A,QCardSection:b.A,QAvatar:p.A,QIcon:f.A,QInput:k.A,QCheckbox:y.A,QBtn:h.A,QCardActions:w.A,QDialog:F.A,QBanner:_.A,QField:A.A}),K()(c,"directives",{ClosePopup:V.A})}}]);
|
|
||||||
1
ui/dist/spa/js/755.7f443827.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[755],{2755:(e,r,t)=>{t.r(r),t.d(r,{default:()=>A});var a=t(1347),n=t(4187),o=t(7763),l=t(455),s=t(3022),i=t(8557),c=t(588);const u={key:0,class:"draft-card q-pa-lg rounded-borders shadow-2 bg-white"},d={class:"q-mt-sm"},y={key:0},g={key:1,class:"text-grey-7"},m={class:"row q-gutter-lg q-mt-xl"},v={key:1,class:"text-negative text-subtitle1 q-mt-xl"},p={__name:"OrderGateway",setup(e){const{canRead:r,canWrite:t,canUpdate:p}=(0,c.J)(),k=r("order"),f=t("order"),h=p("order"),b=(0,l.rd)(),w=(0,s.A)(),A=(0,i.Bm)(),O=((0,a.EW)(()=>{try{return localStorage.getItem(A.getLastTxnKey)}catch{return null}}),(0,a.EW)(()=>{try{return localStorage.getItem(A.getDraftKey)}catch{return null}})),S=(0,a.EW)(()=>{if(!O.value)return!1;try{const e=JSON.parse(O.value);return"new"===e?.mode}catch{return!1}}),x=(0,a.EW)(()=>{if(!S.value)return null;try{return JSON.parse(O.value)?.header?.OrderNumber||null}catch{return null}});function N(){if(!f.value)return void w.notify({type:"negative",message:"Taslak güncelleme yetkiniz yok"});let e=A.getActiveNewHeaderId?.();if(!e)try{const r=localStorage.getItem(A.getDraftKey),t=r?JSON.parse(r):null;e=t?.header?.OrderHeaderID||null}catch{}if(!e)return void w.notify({type:"warning",message:"Devam edecek taslak bulunamadı"});const r={name:"order-entry",params:{orderHeaderID:String(e)},query:{mode:"new",source:"draft"}};console.log("➡️ continueDraft resolve:",b.resolve(r)),b.push(r).catch(r=>{console.warn("❌ continueDraft push failed, fallback to path:",r),b.push({path:`/app/order-entry/${encodeURIComponent(String(e))}`,query:{mode:"new",source:"draft"}})})}function E(){b.push({name:"order-list"})}function I(){b.push({name:"order-bulk-close"})}function q(){try{localStorage.removeItem(A.getDraftKey),A.getLastTxnKey&&localStorage.removeItem(A.getLastTxnKey)}catch{}}function D(){f.value?S.value?w.dialog({title:"Yeni Sipariş",message:"Önceki NEW taslak silinecek. Onaylıyor musun?",ok:{label:"Evet",color:"negative"},cancel:{flat:!0,label:"Hayır"},persistent:!0}).onOk(()=>{q(),R()}):R():w.notify({type:"negative",message:"Yeni sipariş yetkiniz yok"})}async function R(){try{A.preventPersist=!0,A.resetForNewOrder(),A.preventPersist=!1;const e=await A.startNewOrder({$q:w}),r=e?.OrderHeaderID;if(!r)return console.error("❌ startNewOrder OrderHeaderID üretmedi:",e),void w.notify({type:"negative",message:"OrderHeaderID üretilemedi!"});const t={name:"order-entry",params:{orderHeaderID:String(r)},query:{mode:"new",source:"new"}};console.log("➡️ goNewOrder resolve:",b.resolve(t)),await b.push(t).catch(async e=>{console.warn("❌ router.push failed, fallback to path:",e),await b.push({path:`/app/order-entry/${encodeURIComponent(String(r))}`,query:{mode:"new",source:"new"}})})}catch(e){console.error("❌ goNewOrder hata:",e),w.notify({type:"negative",message:"Yeni sipariş oluşturulamadı!"})}}return(e,r)=>{const t=(0,a.g2)("q-btn"),l=(0,a.g2)("q-page");return(0,n.R1)(k)?((0,a.uX)(),(0,a.Wv)(l,{key:0,class:"order-gateway flex flex-center column"},{default:(0,a.k6)(()=>[r[2]||(r[2]=(0,a.Lk)("div",{class:"text-h5 text-primary q-mb-xl"}," 🧾 Sipariş Modülü ",-1)),S.value&&(0,n.R1)(f)?((0,a.uX)(),(0,a.CE)("div",u,[r[1]||(r[1]=(0,a.Lk)("div",{class:"text-subtitle1 text-bold text-negative"}," 📌 Devam Eden Taslak Bulundu ",-1)),(0,a.Lk)("div",d,[x.value?((0,a.uX)(),(0,a.CE)("div",y,[r[0]||(r[0]=(0,a.Lk)("b",null,"No:",-1)),(0,a.eW)(" "+(0,o.v_)(x.value),1)])):((0,a.uX)(),(0,a.CE)("div",g," Numara alınamadı "))]),(0,a.bF)(t,{class:"q-mt-md",color:"primary",icon:"login",label:"TASLAĞA DEVAM ET",disable:!(0,n.R1)(f),onClick:N},null,8,["disable"])])):(0,a.Q3)("",!0),(0,a.Lk)("div",m,[(0,n.R1)(f)?((0,a.uX)(),(0,a.Wv)(t,{key:0,color:"primary",icon:"add_circle",label:"YENİ SİPARİŞ OLUŞTUR",onClick:D})):(0,a.Q3)("",!0),(0,n.R1)(k)?((0,a.uX)(),(0,a.Wv)(t,{key:1,color:"secondary",icon:"folder_open",label:"MEVCUT SİPARİŞİ AÇ",onClick:E})):(0,a.Q3)("",!0),(0,n.R1)(h)?((0,a.uX)(),(0,a.Wv)(t,{key:2,color:"negative",icon:"task_alt",label:"TAMAMLANANLARI TOPLU KAPAT",onClick:I})):(0,a.Q3)("",!0)]),(0,n.R1)(k)?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("div",v," Bu modüle erişim yetkiniz yok. "))]),_:1})):(0,a.Q3)("",!0)}}};var k=t(5013),f=t(2677),h=t(272),b=t.n(h);const w=p,A=w;b()(p,"components",{QPage:k.A,QBtn:f.A})}}]);
|
|
||||||
1
ui/dist/spa/js/770.4db9e143.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[770],{2770:(e,a,l)=>{l.r(a),l.d(a,{default:()=>R});var t=l(1347),o=l(4187),s=l(3022),i=l(8338),n=l(991),u=l.n(n),d=l(588);const r={class:"row justify-between items-center q-mb-md"},c={class:"row q-col-gutter-md"},m={class:"col-12 col-sm-4"},v={class:"col-12 col-sm-4"},p={class:"col-12 col-sm-4"},g={class:"row q-mt-md"},f={class:"col-12"},b={__name:"StatementHeaderReport",setup(e){const{canRead:a,canExport:l}=(0,d.J)(),n=a("finance"),b=l("finance"),k=(0,s.A)(),h=(0,i.i)(),y=(0,o.KR)(""),q=(0,o.KR)(u()().startOf("month").format("YYYY-MM-DD")),w=(0,o.KR)(u()().format("YYYY-MM-DD")),V=[{label:"1-2 hesap",value:["1","2"]},{label:"1-3 hesap",value:["1","3"]}],D=(0,o.KR)(V[0].value);async function F(){if(!b.value)return void k.notify({type:"negative",message:"PDF export yetkiniz yok",position:"top-right"});if(console.log("▶️ [DEBUG] handlestHeadDownload:",y.value,q.value,w.value,D.value),!y.value||!q.value||!w.value)return void k.notify({type:"warning",message:"⚠️ Cari ve tarih seçmeden PDF alınamaz!",position:"top-right"});const e=await h.handlestHeadDownload(y.value,q.value,w.value,D.value);k.notify({type:e.ok?"positive":"negative",message:e.message,position:"top-right"})}return(e,a)=>{const l=(0,t.g2)("q-btn"),s=(0,t.g2)("q-separator"),i=(0,t.g2)("q-input"),u=(0,t.g2)("q-select"),d=(0,t.g2)("q-card"),k=(0,t.g2)("q-page");return(0,o.R1)(n)?((0,t.uX)(),(0,t.Wv)(k,{key:0,class:"q-pa-md page-col"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",r,[a[4]||(a[4]=(0,t.Lk)("div",{class:"text-h6"},"📄 Cari Hesap Raporu",-1)),(0,o.R1)(b)?((0,t.uX)(),(0,t.Wv)(l,{key:0,color:"red",icon:"picture_as_pdf",label:"PDF Yazdır",push:"",glossy:"",onClick:F})):(0,t.Q3)("",!0)]),(0,t.bF)(s,{spaced:""}),(0,t.bF)(d,{flat:"",bordered:"",class:"q-pa-md q-mt-md"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",c,[(0,t.Lk)("div",m,[(0,t.bF)(i,{modelValue:y.value,"onUpdate:modelValue":a[0]||(a[0]=e=>y.value=e),label:"Cari Kod",filled:"",dense:"",clearable:""},null,8,["modelValue"])]),(0,t.Lk)("div",v,[(0,t.bF)(i,{modelValue:q.value,"onUpdate:modelValue":a[1]||(a[1]=e=>q.value=e),label:"Başlangıç Tarihi",filled:"",dense:""},null,8,["modelValue"])]),(0,t.Lk)("div",p,[(0,t.bF)(i,{modelValue:w.value,"onUpdate:modelValue":a[2]||(a[2]=e=>w.value=e),label:"Bitiş Tarihi",filled:"",dense:""},null,8,["modelValue"])])]),(0,t.Lk)("div",g,[(0,t.Lk)("div",f,[(0,t.bF)(u,{modelValue:D.value,"onUpdate:modelValue":a[3]||(a[3]=e=>D.value=e),options:V,label:"Parasal İşlem Tipi","emit-value":"","map-options":"",filled:""},null,8,["modelValue"])])])]),_:1})]),_:1})):((0,t.uX)(),(0,t.Wv)(k,{key:1,class:"q-pa-md flex flex-center"},{default:(0,t.k6)(()=>[...a[5]||(a[5]=[(0,t.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var k=l(5013),h=l(2677),y=l(6915),q=l(3341),w=l(6067),V=l(6941),D=l(272),F=l.n(D);const L=b,R=L;F()(b,"components",{QPage:k.A,QBtn:h.A,QSeparator:y.A,QCard:q.A,QInput:w.A,QSelect:V.A})}}]);
|
|
||||||
1
ui/dist/spa/js/784.f73528a6.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[784],{1784:(e,t,a)=>{a.r(t),a.d(t,{default:()=>x});var s=a(1347),l=a(4187),r=a(455),c=a(588);const n={class:"gateway-container"},i={class:"gateway-actions row q-col-gutter-lg q-mt-lg"},u={__name:"UserGateway",setup(e){const{canRead:t,canWrite:a}=(0,c.J)(),u=t("user"),o=a("user"),d=(0,r.rd)();function k(){o.value&&d.push({path:"/app/users/new",query:{mode:"new"}})}function g(){u.value&&d.push({name:"user-list"})}return(e,t)=>{const a=(0,s.g2)("q-icon"),r=(0,s.g2)("q-card-section"),c=(0,s.g2)("q-card"),d=(0,s.g2)("q-page");return(0,l.R1)(u)?((0,s.uX)(),(0,s.Wv)(d,{key:0,class:"user-gateway-page flex flex-center"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",n,[t[4]||(t[4]=(0,s.Lk)("div",{class:"gateway-header"},[(0,s.Lk)("div",{class:"text-h5"},"Kullanıcı Yönetim Merkezi"),(0,s.Lk)("div",{class:"text-subtitle2 text-grey-7"}," Kullanıcı oluşturma ve yetkilendirme işlemleri ")],-1)),(0,s.Lk)("div",i,[(0,l.R1)(o)?((0,s.uX)(),(0,s.Wv)(c,{key:0,class:"gateway-card cursor-pointer",flat:"",bordered:"",onClick:k},{default:(0,s.k6)(()=>[(0,s.bF)(r,{class:"text-center"},{default:(0,s.k6)(()=>[(0,s.bF)(a,{name:"person_add",size:"48px",color:"primary"}),t[0]||(t[0]=(0,s.Lk)("div",{class:"text-h6 q-mt-sm"},"Yeni Kullanıcı",-1)),t[1]||(t[1]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mt-xs"}," Sisteme yeni kullanıcı ekle ",-1))]),_:1})]),_:1})):(0,s.Q3)("",!0),(0,l.R1)(u)?((0,s.uX)(),(0,s.Wv)(c,{key:1,class:"gateway-card cursor-pointer",flat:"",bordered:"",onClick:g},{default:(0,s.k6)(()=>[(0,s.bF)(r,{class:"text-center"},{default:(0,s.k6)(()=>[(0,s.bF)(a,{name:"groups",size:"48px",color:"primary"}),t[2]||(t[2]=(0,s.Lk)("div",{class:"text-h6 q-mt-sm"},"Mevcut Kullanıcılar",-1)),t[3]||(t[3]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mt-xs"}," Kullanıcıları görüntüle ve düzenle ",-1))]),_:1})]),_:1})):(0,s.Q3)("",!0)])])]),_:1})):((0,s.uX)(),(0,s.Wv)(d,{key:1,class:"q-pa-md flex flex-center"},{default:(0,s.k6)(()=>[...t[5]||(t[5]=[(0,s.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var o=a(2968),d=a(5013),k=a(3341),g=a(222),m=a(3933),p=a(272),v=a.n(p);const y=(0,o.A)(u,[["__scopeId","data-v-7b115e06"]]),x=y;v()(u,"components",{QPage:d.A,QCard:k.A,QCardSection:g.A,QIcon:m.A})}}]);
|
|
||||||
1
ui/dist/spa/js/806.754fb646.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[806],{2806:(e,a,l)=>{l.r(a),l.d(a,{default:()=>G});var s=l(1347),t=l(4187),o=l(7763),i=l(455),r=l(3022),n=l(705),d=(l(939),l(7008),l(7049),l(2986));const u=(0,n.nY)("userDetail",{state:()=>({sendingPasswordMail:!1,lastPasswordMailSentAt:null,hasPassword:!1,loading:!1,saving:!1,error:null,form:{id:null,code:"",full_name:"",email:"",mobile:"",is_active:!0,address:"",roles:[],departments:null,piyasalar:[],nebim_users:null},roleOptions:[],departmentOptions:[],piyasaOptions:[],nebimUserOptions:[]}),actions:{resetForm(){this.form={id:null,code:"",full_name:"",email:"",mobile:"",is_active:!0,address:"",roles:[],departments:null,piyasalar:[],nebim_users:null},this.error=null,this.hasPassword=!1,this.lastPasswordMailSentAt=null},async adminResetPassword(e,a){await(0,d.bE)(`/users/${e}/admin-reset-password`,a),this.hasPassword=!0},async sendPasswordMail(e){this.sendingPasswordMail=!0,this.error=null;try{await(0,d.bE)(`/users/${e}/send-password-mail`,{}),this.lastPasswordMailSentAt=(new Date).toLocaleString("tr-TR")}catch(e){throw this.error="Parola maili gönderilemedi",e}finally{this.sendingPasswordMail=!1}},buildPayload(){const e=Array.isArray(this.form.departments)?this.form.departments:this.form.departments?[this.form.departments]:[],a=Array.isArray(this.form.nebim_users)?this.form.nebim_users:this.form.nebim_users?[this.form.nebim_users]:[];return{code:this.form.code,full_name:this.form.full_name,email:this.form.email,mobile:this.form.mobile,is_active:this.form.is_active,address:this.form.address,roles:this.form.roles,departments:e.map(e=>({code:e})),piyasalar:(this.form.piyasalar||[]).map(e=>({code:e})),nebim_users:a.map(e=>{const a=(this.nebimUserOptions||[]).find(a=>a.value===e);return{username:e,user_group_code:a?.user_group_code||""}})}},async fetchUser(e){this.loading=!0,this.error=null;try{const a=await(0,d.Jt)(`/users/${e}`);this.form.id=a.id,this.form.code=a.code||"",this.form.full_name=a.full_name||"",this.form.email=a.email||"",this.form.mobile=a.mobile||"",this.form.is_active=!!a.is_active,this.form.address=a.address||"",this.form.roles=a.roles||[],this.form.departments=(a.departments||[]).map(e=>e.code)[0]||null,this.form.piyasalar=(a.piyasalar||[]).map(e=>e.code),this.form.nebim_users=(a.nebim_users||[]).map(e=>e.username)[0]||null,this.hasPassword=!!a.has_password}catch(e){throw this.error="Kullanıcı bilgileri alınamadı",e}finally{this.loading=!1}},async saveUser(e){this.saving=!0,this.error=null;try{console.log("🟦 saveUser() START",e);const a=this.buildPayload();console.log("📤 PUT payload",a),await(0,d.yJ)(`/users/${e}`,a),console.log("✅ PUT OK → REFETCH USER"),await this.fetchUser(e),console.log("🔄 USER REFRESHED",{hasPassword:this.hasPassword,roles:this.form.roles,departments:this.form.departments})}catch(e){throw console.error("❌ saveUser FAILED",e),this.error="Kullanıcı güncellenemedi",e}finally{this.saving=!1}},async createUser(){this.saving=!0,this.error=null;try{console.log("🟢 createUser() START");const e=this.buildPayload();console.log("📤 POST payload",e);const a=await(0,d.bE)("/users",e);console.log("✅ CREATE OK response",a);const l=a?.id;if(!l)throw new Error("CREATE response id yok");return console.log("🔁 FETCH NEW USER id=",l),await this.fetchUser(l),l}catch(e){throw console.error("❌ createUser FAILED",e),this.error="Kullanıcı oluşturulamadı",e}finally{this.saving=!1}},async fetchLookups(){const[e,a,l,s]=await Promise.all([d.Ay.get("/lookups/roles"),d.Ay.get("/lookups/departments"),d.Ay.get("/lookups/piyasalar"),d.Ay.get("/lookups/nebim-users")]);this.roleOptions=e?.data||e||[],this.departmentOptions=a?.data||a||[],this.piyasaOptions=l?.data||l||[],this.nebimUserOptions=s?.data||s||[]}}});var m=l(588);const c={class:"sticky-stack"},p={class:"filter-bar row q-col-gutter-md q-mb-sm"},v={class:"col-3"},b={class:"col-4"},g={class:"col-2 flex items-end"},h={class:"save-toolbar"},f={class:"text-subtitle2 text-weight-bold"},y={class:"q-pa-md"},k={class:"text-caption q-mt-xs"},w={class:"text-weight-medium q-ml-xs"},_={key:0,class:"text-caption q-mt-xs text-grey-7"},R={class:"row items-center"},x={class:"row q-col-gutter-md"},E={class:"col-4"},L={class:"col-4"},A={class:"col-4"},P={class:"col-6"},U={class:"col-3"},V={class:"col-3"},q={class:"col-12"},F={__name:"UserDetail",setup(e){const{canRead:a,canWrite:l,canUpdate:d}=(0,m.J)(),F=a("user"),X=l("user"),T=d("user"),O=(0,r.A)(),S=(0,i.lq)(),W=(0,i.rd)(),Q=u(),{form:C,loading:K,saving:D,roleOptions:M,departmentOptions:z,piyasaOptions:$,nebimUserOptions:I,sendingPasswordMail:N,lastPasswordMailSentAt:Y}=(0,n.bP)(Q),B=e=>!!e||"Kullanıcı kodu zorunludur",G=(0,s.EW)(()=>S.meta.mode||"edit"),H=(0,s.EW)(()=>"new"===G.value),J=(0,s.EW)(()=>"edit"===G.value),j=(0,s.EW)(()=>"view"===G.value),Z=(0,s.EW)(()=>H.value?X.value:J.value?T.value:F.value),ee=(0,s.EW)(()=>H.value?X.value:T.value),ae=(0,s.EW)(()=>J.value||j.value?Number(S.params.id):null),le=(0,s.EW)(()=>Q.hasPassword),se=(0,s.EW)(()=>H.value?"Yeni Kullanıcı":"Kullanıcı Düzenleme"),te=(0,s.EW)(()=>H.value?"KAYDET":"GÜNCELLE"),oe=e=>!e||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)||"Geçerli bir e-posta giriniz",ie=e=>!e||/^\+\d{10,15}$/.test(e.replace(/_/g,""))||"Telefon +90XXXXXXXXXX formatında olmalı",re=(0,s.EW)(()=>!H.value&&(!!ae.value&&(!!C.value.is_active&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test((C.value.email||"").trim()))));async function ne(){if(ee.value)if((C.value.code||"").trim())try{let e;console.log("🟢 onSave() START",{mode:G.value}),C.value.mobile&&(C.value.mobile=C.value.mobile.replace(/_/g,"").trim()),H.value?(e=await Q.createUser(),console.log("➡️ CREATE → EDIT MODE id=",e),W.replace({name:"user-edit",params:{id:e}})):(await Q.saveUser(ae.value),W.push({name:"user-list"})),O.notify({type:"positive",message:"İşlem başarılı"})}catch(e){console.error("❌ onSave ERROR",e),O.notify({type:"negative",message:Q.error||"İşlem başarısız"})}else O.notify({type:"negative",message:"Kullanıcı kodu zorunludur"});else O.notify({type:"negative",message:"Kaydetme yetkiniz yok"})}function de(){W.push({name:"user-list"})}function ue(){O.dialog({title:"Parola maili gönderilsin mi?",message:`${C.value.email} adresine parola oluşturma/sıfırlama bağlantısı gönderilecek.`,cancel:!0,persistent:!0}).onOk(async()=>{await me()})}async function me(){try{await Q.sendPasswordMail(ae.value),O.notify({type:"positive",message:"Parola maili gönderildi"})}catch{O.notify({type:"negative",message:Q.error||"Mail gönderilemedi"})}}return(0,s.wB)(()=>ae.value,async e=>{Z.value&&(await Q.fetchLookups(),e?await Q.fetchUser(e):Q.resetForm())},{immediate:!0}),(e,a)=>{const l=(0,s.g2)("q-spinner"),i=(0,s.g2)("q-inner-loading"),r=(0,s.g2)("q-input"),n=(0,s.g2)("q-toggle"),d=(0,s.g2)("q-badge"),u=(0,s.g2)("q-btn"),m=(0,s.g2)("q-card-section"),X=(0,s.g2)("q-card"),O=(0,s.g2)("q-checkbox"),S=(0,s.g2)("q-item-section"),W=(0,s.g2)("q-item"),Q=(0,s.g2)("q-select"),G=(0,s.g2)("q-page");return Z.value?((0,s.uX)(),(0,s.Wv)(G,{key:0,class:"user-detail-page"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{showing:(0,t.R1)(K)},{default:(0,s.k6)(()=>[(0,s.bF)(l,{size:"48px"})]),_:1},8,["showing"]),(0,s.Lk)("div",c,[(0,s.Lk)("div",p,[(0,s.Lk)("div",v,[a[10]||(a[10]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Kullanıcı Kodu",-1)),(0,s.bF)(r,{modelValue:(0,t.R1)(C).code,"onUpdate:modelValue":a[0]||(a[0]=e=>(0,t.R1)(C).code=e),dense:"",filled:"",rules:[B],"lazy-rules":""},null,8,["modelValue","rules"])]),(0,s.Lk)("div",b,[a[11]||(a[11]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Ad Soyad",-1)),(0,s.bF)(r,{modelValue:(0,t.R1)(C).full_name,"onUpdate:modelValue":a[1]||(a[1]=e=>(0,t.R1)(C).full_name=e),dense:"",filled:""},null,8,["modelValue"])]),(0,s.Lk)("div",g,[(0,s.bF)(n,{modelValue:(0,t.R1)(C).is_active,"onUpdate:modelValue":a[2]||(a[2]=e=>(0,t.R1)(C).is_active=e),label:"Aktif",color:"primary"},null,8,["modelValue"])]),(0,s.bF)(d,{color:le.value?"positive":"grey",class:"q-ml-sm"},{default:(0,s.k6)(()=>[(0,s.eW)((0,o.v_)(le.value?"Parola Var":"Parola Yok"),1)]),_:1},8,["color"])]),(0,s.Lk)("div",h,[(0,s.Lk)("div",f,(0,o.v_)(se.value),1),(0,s.Lk)("div",null,[ee.value?((0,s.uX)(),(0,s.Wv)(u,{key:0,label:te.value,color:"primary",icon:"save",loading:(0,t.R1)(D),onClick:ne},null,8,["label","loading"])):(0,s.Q3)("",!0),(0,t.R1)(F)?((0,s.uX)(),(0,s.Wv)(u,{key:1,label:"LİSTEYE DÖN",flat:"",icon:"arrow_back",class:"q-ml-sm",onClick:de})):(0,s.Q3)("",!0)])])]),(0,s.Lk)("div",y,[(0,s.bF)(X,{flat:"",bordered:"",class:"q-mb-md"},{default:(0,s.k6)(()=>[(0,s.bF)(m,{class:"row items-center justify-between"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",null,[a[13]||(a[13]=(0,s.Lk)("div",{class:"text-subtitle2 text-weight-bold"},"Parola İşlemleri",-1)),a[14]||(a[14]=(0,s.Lk)("div",{class:"text-caption text-grey-7"}," Kullanıcıya parola oluşturma / sıfırlama bağlantısı e-posta ile gönderilir. ",-1)),(0,s.Lk)("div",k,[a[12]||(a[12]=(0,s.Lk)("span",{class:"text-grey-7"},"E-posta:",-1)),(0,s.Lk)("span",w,(0,o.v_)((0,t.R1)(C).email||"-"),1)]),(0,t.R1)(Y)?((0,s.uX)(),(0,s.CE)("div",_," Son gönderim: "+(0,o.v_)((0,t.R1)(Y)),1)):(0,s.Q3)("",!0)]),(0,s.Lk)("div",R,[(0,t.R1)(T)?((0,s.uX)(),(0,s.Wv)(u,{key:0,label:"PAROLA MAİLİ GÖNDER",color:"primary",icon:"mail",disable:!re.value,loading:(0,t.R1)(N),onClick:ue},null,8,["disable","loading"])):(0,s.Q3)("",!0)])]),_:1})]),_:1}),(0,s.bF)(X,{flat:"",bordered:""},{default:(0,s.k6)(()=>[(0,s.bF)(m,null,{default:(0,s.k6)(()=>[(0,s.Lk)("div",x,[(0,s.Lk)("div",E,[a[15]||(a[15]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"E-Posta",-1)),(0,s.bF)(r,{modelValue:(0,t.R1)(C).email,"onUpdate:modelValue":a[3]||(a[3]=e=>(0,t.R1)(C).email=e),dense:"",filled:"",type:"email",rules:[oe],"lazy-rules":""},null,8,["modelValue","rules"])]),(0,s.Lk)("div",L,[a[16]||(a[16]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Telefon",-1)),(0,s.bF)(r,{modelValue:(0,t.R1)(C).mobile,"onUpdate:modelValue":a[4]||(a[4]=e=>(0,t.R1)(C).mobile=e),dense:"",filled:"",placeholder:"+90XXXXXXXXXX",mask:"+#############","fill-mask":"",rules:[ie],"lazy-rules":""},null,8,["modelValue","rules"])]),(0,s.Lk)("div",A,[a[17]||(a[17]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Adres",-1)),(0,s.bF)(r,{modelValue:(0,t.R1)(C).address,"onUpdate:modelValue":a[5]||(a[5]=e=>(0,t.R1)(C).address=e),type:"textarea",dense:"",filled:"",autogrow:""},null,8,["modelValue"])]),(0,s.Lk)("div",P,[a[18]||(a[18]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Roller",-1)),(0,s.bF)(Q,{modelValue:(0,t.R1)(C).roles,"onUpdate:modelValue":a[6]||(a[6]=e=>(0,t.R1)(C).roles=e),options:(0,t.R1)(M),"option-label":"label","option-value":"value","emit-value":"","map-options":"",multiple:"","use-input":"","use-chips":"",dense:"",filled:"",behavior:"menu"},{option:(0,s.k6)(e=>[(0,s.bF)(W,(0,s.v6)(e.itemProps,{clickable:""}),{default:(0,s.k6)(()=>[(0,s.bF)(S,{avatar:""},{default:(0,s.k6)(()=>[(0,s.bF)(O,{"model-value":e.selected,"onUpdate:modelValue":a=>e.toggleOption(e.opt)},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),(0,s.bF)(S,null,{default:(0,s.k6)(()=>[(0,s.eW)((0,o.v_)(e.opt.label),1)]),_:2},1024)]),_:2},1040)]),_:1},8,["modelValue","options"])]),(0,s.Lk)("div",U,[a[19]||(a[19]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Departman",-1)),(0,s.bF)(Q,{modelValue:(0,t.R1)(C).departments,"onUpdate:modelValue":a[7]||(a[7]=e=>(0,t.R1)(C).departments=e),options:(0,t.R1)(z),"option-label":"label","option-value":"value","emit-value":"","map-options":"","use-input":"",dense:"",filled:""},null,8,["modelValue","options"])]),(0,s.Lk)("div",V,[a[20]||(a[20]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Piyasalar",-1)),(0,s.bF)(Q,{modelValue:(0,t.R1)(C).piyasalar,"onUpdate:modelValue":a[8]||(a[8]=e=>(0,t.R1)(C).piyasalar=e),options:(0,t.R1)($),"option-label":"label","option-value":"value","emit-value":"","map-options":"",multiple:"","use-input":"","use-chips":"",dense:"",filled:"",behavior:"menu"},{option:(0,s.k6)(e=>[(0,s.bF)(W,(0,s.v6)(e.itemProps,{clickable:""}),{default:(0,s.k6)(()=>[(0,s.bF)(S,{avatar:""},{default:(0,s.k6)(()=>[(0,s.bF)(O,{"model-value":e.selected,"onUpdate:modelValue":a=>e.toggleOption(e.opt)},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024),(0,s.bF)(S,null,{default:(0,s.k6)(()=>[(0,s.eW)((0,o.v_)(e.opt.label),1)]),_:2},1024)]),_:2},1040)]),_:1},8,["modelValue","options"])]),(0,s.Lk)("div",q,[a[21]||(a[21]=(0,s.Lk)("div",{class:"text-caption text-grey-7 q-mb-xs"},"Nebim Kullanıcıları",-1)),(0,s.bF)(Q,{modelValue:(0,t.R1)(C).nebim_users,"onUpdate:modelValue":a[9]||(a[9]=e=>(0,t.R1)(C).nebim_users=e),options:(0,t.R1)(I),"option-label":"label","option-value":"value","emit-value":"","map-options":"","use-input":"",dense:"",filled:""},null,8,["modelValue","options"])])])]),_:1})]),_:1})])]),_:1})):((0,s.uX)(),(0,s.Wv)(G,{key:1,class:"q-pa-md flex flex-center"},{default:(0,s.k6)(()=>[...a[22]||(a[22]=[(0,s.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var X=l(5013),T=l(8356),O=l(6356),S=l(6067),W=l(5725),Q=l(8155),C=l(2677),K=l(3341),D=l(222),M=l(6941),z=l(2589),$=l(4958),I=l(8349),N=l(272),Y=l.n(N);const B=F,G=B;Y()(F,"components",{QPage:X.A,QInnerLoading:T.A,QSpinner:O.A,QInput:S.A,QToggle:W.A,QBadge:Q.A,QBtn:C.A,QCard:K.A,QCardSection:D.A,QSelect:M.A,QItem:z.A,QItemSection:$.A,QCheckbox:I.A})}}]);
|
|
||||||
BIN
ui/dist/spa/js/806.754fb646.js.gz
vendored
1
ui/dist/spa/js/891.181bb68a.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[891],{1272:(e,a,l)=>{l.r(a),l.d(a,{default:()=>ae});l(939),l(6461),l(7049);var t=l(1347),o=l(4187),n=l(8633),i=l(7763),s=l(3022),r=l(742),u=l(4887),c=l(5599),d=l(5390),v=l(991),p=l.n(v),m=l(588),b=l(8338);const g={class:"filter-sticky"},k={class:"filter-collapsible"},f={class:"row items-center justify-between q-pa-sm bg-grey-2"},y={class:"q-pa-md bg-grey-1"},w={class:"row q-col-gutter-sm q-mb-md"},_={class:"col-12 col-sm-6"},h={class:"col-12 col-sm-6"},D={class:"row q-col-gutter-md items-center"},F={class:"col-auto"},C={class:"col-auto"},q={class:"table-scroll"},L={class:"sticky-bar row justify-between items-center q-pa-sm bg-grey-1"},R={class:"row items-center q-gutter-sm"},x={class:"row items-center justify-between"},A={class:"row items-center"},Y={class:"row items-center q-gutter-md text-right"},V={key:0},B={key:1,class:"resizable-cell-content"},Q={key:2},T={__name:"StatementReport",setup(e){const{canRead:a,canExport:l}=(0,m.J)(),v=a("finance"),T=l("finance"),E=(0,s.A)(),W=(0,r.E)(),K=(0,u.x)(),X=(0,c.l)(),z=(0,d.w)(),U=(0,o.KR)(null),P=(0,o.KR)([]);function G(e,a){if(""===e)return void a(()=>{P.value=W.accountOptions});const l=e.toLowerCase();a(()=>{P.value=W.accountOptions.filter(e=>e.label.toLowerCase().includes(l)||e.value.toLowerCase().includes(l))})}(0,t.sV)(async()=>{await W.fetchAccounts(),P.value=W.accountOptions,window.toggleAllDetails=ae});const M=(0,o.KR)(p()().startOf("year").format("YYYY-MM-DD")),O=(0,o.KR)(p()().format("YYYY-MM-DD")),S=[{label:"1-2 hesap",value:["1","2"]},{label:"1-3 r hesap",value:["1","3"]}],I=(0,o.KR)(S[0].value),N=(0,o.KR)({}),j=(0,o.KR)(!1);function H(e){return e&&0!==e.length?Object.keys(e[0]).map(a=>({name:a,label:a.replace(/_/g," ").replace(/\b\w/g,e=>e.toUpperCase()),field:a,align:"number"===typeof e[0][a]?"right":"left",sortable:!0})):[]}const J=(0,t.EW)(()=>H(K.headers));function Z(e){const a=X.getDetailsByBelge(e);return H(a)}async function $(){U.value&&M.value&&O.value?(await K.loadStatements({startdate:M.value,enddate:O.value,accountcode:U.value,langcode:"TR",parislemler:I.value}),await X.loadDetails({accountCode:U.value,startDate:M.value,endDate:O.value})):E.notify({type:"warning",message:"⚠️ Lütfen cari ve tarih aralığını seçiniz.",position:"top-right"})}function ee(e){"group"!==e._type&&(N.value[e.belge_no]=!N.value[e.belge_no])}function ae(){if(j.value=!j.value,j.value)for(const e of K.headers)e.belge_no&&(N.value[e.belge_no]=!0);else N.value={}}function le(){U.value=null,M.value="",O.value="",I.value=S[0].value,K.headers=[],X.reset()}function te(e){return null==e||isNaN(e)?"0,00":new Intl.NumberFormat("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}const oe=(0,o.KR)(!0),ne=(0,o.KR)([]),ie=(0,o.KR)(!0);function se(){ie.value?ne.value=J.value.map((e,a)=>a<3?null:e.name).filter(Boolean):ne.value=J.value.map(e=>e.name),ie.value=!ie.value}async function re(){if(!T.value)return void E.notify({type:"negative",message:"PDF export yetkiniz yok",position:"top-right"});if(console.log("▶️ [DEBUG] handleDownload:",U.value,M.value,O.value),!U.value||!M.value||!O.value)return void E.notify({type:"warning",message:"⚠️ Cari ve tarih aralığını seçmeden PDF alınamaz!",position:"top-right"});const e=await z.downloadPDF(U.value,M.value,O.value,I.value);console.log("📤 [DEBUG] Store’dan gelen result:",e),E.notify({type:e.ok?"positive":"negative",message:e.message,position:"top-right"})}(0,t.wB)(J,e=>{e.length>0&&0===ne.value.length&&(ne.value=e.map(e=>e.name))});const ue=(0,b.i)();async function ce(){if(!T.value)return void E.notify({type:"negative",message:"PDF export yetkiniz yok",position:"top-right"});if(console.log("▶️ [DEBUG] CurrheadDownload:",U.value,M.value,O.value),!U.value||!M.value||!O.value)return void E.notify({type:"warning",message:"⚠️ Cari ve tarih aralığını seçmeden PDF alınamaz!",position:"top-right"});const e=await ue.handlestHeadDownload(U.value,M.value,O.value,I.value);console.log("📤 [DEBUG] CurrheadDownloadresult:",e),E.notify({type:e.ok?"positive":"negative",message:e.message,position:"top-right"})}return(e,a)=>{const l=(0,t.g2)("q-select"),s=(0,t.g2)("q-btn"),r=(0,t.g2)("q-date"),u=(0,t.g2)("q-popup-proxy"),c=(0,t.g2)("q-icon"),d=(0,t.g2)("q-input"),p=(0,t.g2)("q-slide-transition"),m=(0,t.g2)("q-item-section"),b=(0,t.g2)("q-item"),E=(0,t.g2)("q-list"),z=(0,t.g2)("q-btn-dropdown"),H=(0,t.g2)("q-td"),ue=(0,t.g2)("q-tr"),de=(0,t.g2)("q-table"),ve=(0,t.g2)("q-page"),pe=(0,t.gN)("close-popup");return(0,o.R1)(v)?((0,t.uX)(),(0,t.Wv)(ve,{key:0,class:"q-pa-md page-col"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",g,[(0,t.bF)(l,{modelValue:U.value,"onUpdate:modelValue":a[0]||(a[0]=e=>U.value=e),options:P.value,label:"Cari kod / isim",filled:"",clearable:"","use-input":"","input-debounce":"300",onFilter:G,"emit-value":"","map-options":"",loading:(0,o.R1)(W).loading,"option-value":"value","option-label":"label",behavior:"menu","keep-selected":!0},null,8,["modelValue","options","loading"])]),(0,t.Lk)("div",k,[(0,t.Lk)("div",f,[a[7]||(a[7]=(0,t.Lk)("div",{class:"text-subtitle1"},"Filtreler",-1)),(0,t.bF)(s,{dense:"",flat:"",round:"",icon:oe.value?"expand_less":"expand_more",onClick:a[1]||(a[1]=e=>oe.value=!oe.value)},null,8,["icon"])]),(0,t.bF)(p,null,{default:(0,t.k6)(()=>[(0,t.bo)((0,t.Lk)("div",y,[(0,t.Lk)("div",w,[(0,t.Lk)("div",_,[(0,t.bF)(d,{modelValue:M.value,"onUpdate:modelValue":a[3]||(a[3]=e=>M.value=e),label:"Tarih aralığı - başlangıç",filled:"",clearable:"",readonly:""},{append:(0,t.k6)(()=>[(0,t.bF)(c,{name:"event",class:"cursor-pointer"},{default:(0,t.k6)(()=>[(0,t.bF)(u,{cover:"","transition-show":"scale","transition-hide":"scale"},{default:(0,t.k6)(()=>[(0,t.bF)(r,{modelValue:M.value,"onUpdate:modelValue":a[2]||(a[2]=e=>M.value=e),mask:"YYYY-MM-DD",locale:"tr-TR"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),(0,t.Lk)("div",h,[(0,t.bF)(d,{modelValue:O.value,"onUpdate:modelValue":a[5]||(a[5]=e=>O.value=e),label:"Tarih aralığı - bitiş",filled:"",clearable:"",readonly:""},{append:(0,t.k6)(()=>[(0,t.bF)(c,{name:"event",class:"cursor-pointer"},{default:(0,t.k6)(()=>[(0,t.bF)(u,{cover:"","transition-show":"scale","transition-hide":"scale"},{default:(0,t.k6)(()=>[(0,t.bF)(r,{modelValue:O.value,"onUpdate:modelValue":a[4]||(a[4]=e=>O.value=e),mask:"YYYY-MM-DD",locale:"tr-TR"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])]),(0,t.bF)(l,{modelValue:I.value,"onUpdate:modelValue":a[6]||(a[6]=e=>I.value=e),options:S,label:"Parasal İşlem Tipi","emit-value":"","map-options":"",filled:"",class:"q-mb-md"},null,8,["modelValue"]),(0,t.Lk)("div",D,[(0,t.Lk)("div",F,[(0,t.bF)(s,{color:"primary",icon:"filter_alt",label:"Filtrele",onClick:$})]),(0,t.Lk)("div",C,[(0,t.bF)(s,{flat:"",color:"grey-8",icon:"restart_alt",label:"Sıfırla",onClick:le})])])],512),[[n.aG,oe.value]])]),_:1})]),(0,t.Lk)("div",q,[(0,t.Lk)("div",L,[(0,t.bF)(s,{flat:"",color:"primary",icon:"view_column",label:ie.value?"CARİ BİLGİ DETAY Gizle":"CARİ BİLGİ DETAY Sütunu Göster",onClick:se},null,8,["label"]),(0,t.Lk)("div",R,[(0,t.bF)(s,{flat:"",color:"secondary",icon:"list",label:j.value?"Tüm Detayları Kapat":"Tüm Detayları Aç",onClick:ae},null,8,["label"]),(0,o.R1)(T)?((0,t.uX)(),(0,t.Wv)(z,{key:0,flat:"",color:"red",icon:"picture_as_pdf",label:"Yazdır"},{default:(0,t.k6)(()=>[(0,t.bF)(E,{style:{"min-width":"200px"}},{default:(0,t.k6)(()=>[(0,t.bo)(((0,t.uX)(),(0,t.Wv)(b,{clickable:"",onClick:re},{default:(0,t.k6)(()=>[(0,t.bF)(m,{class:"text-primary"},{default:(0,t.k6)(()=>[...a[8]||(a[8]=[(0,t.eW)(" Detaylı Cari Ekstre Yazdır ",-1)])]),_:1})]),_:1})),[[pe]]),(0,t.bo)(((0,t.uX)(),(0,t.Wv)(b,{clickable:"",onClick:ce},{default:(0,t.k6)(()=>[(0,t.bF)(m,{class:"text-secondary"},{default:(0,t.k6)(()=>[...a[9]||(a[9]=[(0,t.eW)(" Cari Hesap Ekstresi Yazdır ",-1)])]),_:1})]),_:1})),[[pe]])]),_:1})]),_:1})):(0,t.Q3)("",!0)])]),(0,t.bF)(de,{class:"sticky-table",title:"Hareketler",rows:(0,o.R1)(K).groupedRows,columns:J.value,"visible-columns":ne.value,"row-key":e=>e.OrderHeaderID+"_"+e.OrderNumber,flat:"",bordered:"",dense:"","rows-per-page-options":[0],loading:(0,o.R1)(K).loading,"table-style":{tableLayout:"auto",minWidth:"1600px"}},{body:(0,t.k6)(e=>["group"===e.row._type?((0,t.uX)(),(0,t.Wv)(ue,{key:0,class:"group-row bg-grey-3 text-weight-bold"},{default:(0,t.k6)(()=>[(0,t.bF)(H,{colspan:"100%",class:"q-pa-sm"},{default:(0,t.k6)(()=>[(0,t.Lk)("div",x,[(0,t.Lk)("div",A,[(0,t.bF)(s,{dense:"",flat:"",round:"",icon:(0,o.R1)(K).groupOpen[e.row.para_birimi]?"expand_less":"expand_more",class:"q-mr-sm",onClick:a=>(0,o.R1)(K).toggleGroup(e.row.para_birimi)},null,8,["icon","onClick"]),(0,t.Lk)("span",null,"Para Birimi: "+(0,i.v_)(e.row.para_birimi),1)]),(0,t.Lk)("div",Y,[(0,t.Lk)("div",null,"Bakiye: "+(0,i.v_)(te(e.row.sonBakiye)),1)])])]),_:2},1024)]),_:2},1024)):"data"===e.row._type?((0,t.uX)(),(0,t.Wv)(ue,{key:1,props:e,class:"main-row"},{default:(0,t.k6)(()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(e.cols,a=>((0,t.uX)(),(0,t.Wv)(H,{key:a.name,props:e,onClick:l=>"belge_no"===a.name?ee(e.row):null,class:(0,i.C4)(["cursor-pointer","aciklama"===a.name?"resizable-cell":"","belge_no"===a.name?"text-primary text-bold":""])},{default:(0,t.k6)(()=>[["borc","alacak","bakiye"].includes(a.name)?((0,t.uX)(),(0,t.CE)("span",V,(0,i.v_)(te(e.row[a.field])),1)):"aciklama"===a.name?((0,t.uX)(),(0,t.CE)("div",B,(0,i.v_)(e.row[a.field]??""),1)):((0,t.uX)(),(0,t.CE)("span",Q,(0,i.v_)(e.row[a.field]??""),1))]),_:2},1032,["props","onClick","class"]))),128))]),_:2},1032,["props"])):(0,t.Q3)("",!0),"data"===e.row._type&&N.value[e.row.belge_no]?((0,t.uX)(),(0,t.Wv)(ue,{key:2,class:"sub-row"},{default:(0,t.k6)(()=>[(0,t.bF)(H,{colspan:"100%"},{default:(0,t.k6)(()=>[(0,t.bF)(de,{rows:(0,o.R1)(X).getDetailsByBelge(e.row.belge_no),columns:Z(e.row.belge_no),"row-key":"Urun_Kodu",flat:"",dense:"",bordered:"","hide-bottom":"","no-data-label":"Detay bulunamadı",class:"custom-subtable",loading:(0,o.R1)(X).loading,"table-style":{minWidth:"1200px"}},null,8,["rows","columns","loading"])]),_:2},1024)]),_:2},1024)):(0,t.Q3)("",!0)]),_:1},8,["rows","columns","visible-columns","row-key","loading"])])]),_:1})):((0,t.uX)(),(0,t.Wv)(ve,{key:1,class:"q-pa-md flex flex-center"},{default:(0,t.k6)(()=>[...a[10]||(a[10]=[(0,t.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var E=l(5013),W=l(6941),K=l(2677),X=l(6510),z=l(6067),U=l(3933),P=l(8360),G=l(5626),M=l(5303),O=l(3766),S=l(2589),I=l(4958),N=l(6087),j=l(7339),H=l(8785),J=l(8657),Z=l(272),$=l.n(Z);const ee=T,ae=ee;$()(T,"components",{QPage:E.A,QSelect:W.A,QBtn:K.A,QSlideTransition:X.A,QInput:z.A,QIcon:U.A,QPopupProxy:P.A,QDate:G.A,QBtnDropdown:M.A,QList:O.A,QItem:S.A,QItemSection:I.A,QTable:N.A,QTr:j.A,QTd:H.A}),$()(T,"directives",{ClosePopup:J.A})}}]);
|
|
||||||
BIN
ui/dist/spa/js/891.181bb68a.js.gz
vendored
1
ui/dist/spa/js/913.c0c6a5a1.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[913],{4913:(e,a,t)=>{t.r(a),t.d(a,{default:()=>c});var n=t(1347);function r(e,a){const t=(0,n.g2)("router-view"),r=(0,n.g2)("q-page-container"),o=(0,n.g2)("q-layout");return(0,n.uX)(),(0,n.Wv)(o,{view:"lHh Lpr lFf"},{default:(0,n.k6)(()=>[(0,n.bF)(r,null,{default:(0,n.k6)(()=>[(0,n.bF)(t)]),_:1})]),_:1})}var o=t(2968),s=t(4001),u=t(970),l=t(272),g=t.n(l);const i={},b=(0,o.A)(i,[["render",r]]),c=b;g()(i,"components",{QLayout:s.A,QPageContainer:u.A})}}]);
|
|
||||||
1
ui/dist/spa/js/950.6078f4a8.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[950],{5950:(e,a,t)=>{t.r(a),t.d(a,{default:()=>x});var l=t(1347),r=t(4187),i=t(7763),n=t(3022),s=t(455),d=t(588),u=t(8557);const o={class:"text-caption text-grey-7"},c={__name:"OrderPdf",setup(e){const{canWrite:a,canUpdate:t,canExport:c}=(0,d.J)(),v=c("order"),g=a("order"),y=t("order"),p=(0,l.EW)(()=>g.value||y.value),f=(0,l.EW)(()=>v.value),m=(0,n.A)(),k=(0,s.lq)(),b=(0,s.rd)(),x=(0,u.Bm)(),h=(0,r.KR)(!1),q=(0,l.EW)(()=>String(k.params.id||"").trim());async function _(){if(f.value)if(q.value){h.value=!0;try{await x.downloadOrderPdf(q.value)}catch(e){m.notify({type:"negative",message:e?.message||"PDF acilamadi"})}finally{h.value=!1}}else m.notify({type:"warning",message:"Order ID bulunamadi"});else m.notify({type:"negative",message:"Siparis PDF export yetkiniz yok"})}function w(){if(!p.value)return void m.notify({type:"negative",message:"Siparis duzenleme yetkiniz yok"});if(!q.value)return void m.notify({type:"warning",message:"Order ID bulunamadi"});const e=y.value?"order-edit":"order-entry";b.push({name:e,params:{orderHeaderID:q.value}})}return(e,a)=>{const t=(0,l.g2)("q-card-section"),n=(0,l.g2)("q-btn"),s=(0,l.g2)("q-card-actions"),d=(0,l.g2)("q-card"),u=(0,l.g2)("q-page");return(0,r.R1)(v)?((0,l.uX)(),(0,l.Wv)(u,{key:0,class:"q-pa-md"},{default:(0,l.k6)(()=>[(0,l.bF)(d,{flat:"",bordered:"",class:"q-pa-md",style:{"max-width":"720px"}},{default:(0,l.k6)(()=>[(0,l.bF)(t,null,{default:(0,l.k6)(()=>[a[0]||(a[0]=(0,l.Lk)("div",{class:"text-h6"},"Order PDF",-1)),(0,l.Lk)("div",o,"Order ID: "+(0,i.v_)(q.value||"-"),1)]),_:1}),(0,l.bF)(s,{align:"right",class:"q-gutter-sm"},{default:(0,l.k6)(()=>[f.value?((0,l.uX)(),(0,l.Wv)(n,{key:0,color:"primary",icon:"picture_as_pdf",label:"PDF Ac",loading:h.value,disable:h.value||!q.value,onClick:_},null,8,["loading","disable"])):(0,l.Q3)("",!0),p.value?((0,l.uX)(),(0,l.Wv)(n,{key:1,flat:"",color:"secondary",label:"Siparise Don",disable:!q.value,onClick:w},null,8,["disable"])):(0,l.Q3)("",!0)]),_:1})]),_:1})]),_:1})):((0,l.uX)(),(0,l.Wv)(u,{key:1,class:"q-pa-md flex flex-center"},{default:(0,l.k6)(()=>[...a[1]||(a[1]=[(0,l.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var v=t(5013),g=t(3341),y=t(222),p=t(5034),f=t(2677),m=t(272),k=t.n(m);const b=c,x=b;k()(c,"components",{QPage:v.A,QCard:g.A,QCardSection:y.A,QCardActions:p.A,QBtn:f.A})}}]);
|
|
||||||
1
ui/dist/spa/js/981.0247bab0.js
vendored
@@ -1 +0,0 @@
|
|||||||
"use strict";(globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[]).push([[981],{6981:(e,a,l)=>{l.r(a),l.d(a,{default:()=>oa});l(939),l(8614),l(3872),l(6461),l(7008),l(4520),l(7049),l(6593),l(4151);var t=l(1347),o=l(4187),r=l(7763),n=l(8633),i=l(3022),s=l(455),u=l(8557),d=l(991),c=l.n(d),m=l(2986),v=l(5767);function y(e){if(!e)return"";try{if("string"===typeof e){if(e.includes(" "))return e.split(" ")[0];if(e.includes("T"))return e.split("T")[0];if(/^\d{4}-\d{2}-\d{2}$/.test(e))return e}return e instanceof Date?e.toISOString().split("T")[0]:""}catch{return""}}function p(e){if(!e)return"";try{const a=new Date(e);if(isNaN(a))return"";const l=String(a.getDate()).padStart(2,"0"),t=String(a.getMonth()+1).padStart(2,"0"),o=a.getFullYear();return`${l}.${t}.${o}`}catch{return""}}var b=l(588);const k={class:"sticky-stack"},g={class:"filter-bar row q-col-gutter-md q-mb-sm"},f={class:"col-5"},C={class:"col-2"},h={class:"col-2"},w={class:"col-2"},L={class:"col-12 row q-col-gutter-sm q-mt-xs items-center"},A={class:"col-3"},S={class:"col-auto flex items-center"},R={class:"col-1"},K={class:"col-2"},D={class:"col-2"},T={key:0,class:"row q-col-gutter-md q-mt-xs cari-info-bar"},V={class:"col-3"},F={class:"col-3"},E={class:"col-3"},I={class:"col-3"},_={class:"save-toolbar"},N={class:"order-grid-header"},q={class:"beden-block"},U={class:"grp-title"},x={class:"grp-body"},O={class:"order-scroll-y"},M={class:"order-grid-body"},G=["onClick"],W={class:"sub-left"},X={class:"sub-center"},P={class:"sub-right"},z={class:"order-text-caption"},$={class:"order-text-caption"},Y=["data-clientkey","onClick"],B={class:"cell model"},Q={class:"cell renk"},H={class:"cell ana"},j={class:"cell alt"},J={class:"cell aciklama"},Z={class:"grp-area"},ee={class:"grp-row"},ae={class:"cell adet"},le={class:"cell fiyat"},te={class:"cell pb"},oe={class:"cell tutar"},re={class:"cell termin"},ne={class:"termin-label text-center"},ie={class:"editor q-mt-lg q-pa-sm"},se={class:"row q-col-gutter-sm q-mb-sm"},ue={class:"col-3"},de={class:"q-mt-sm"},ce={class:"q-mt-sm"},me={class:"col-2"},ve={class:"col-1"},ye={class:"col-1"},pe={class:"col-2"},be={class:"col-1"},ke={class:"col-1"},ge={class:"col-1"},fe={class:"row q-col-gutter-sm q-mt-xs"},Ce={class:"col-3"},he={class:"col-2 q-mt-sm"},we={class:"col-2 q-mt-sm"},Le={class:"row q-mt-sm q-col-gutter-xs beden-grid"},Ae={class:"beden-label"},Se={class:"row q-mt-sm q-col-gutter-sm"},Re={class:"col-2"},Ke={class:"col-2"},De={class:"col-2"},Te={class:"col-3"},Ve={class:"row q-mt-sm"},Fe={class:"col-4"},Ee={class:"row q-mt-sm"},Ie={class:"col-12"},_e={class:"row justify-between items-center q-mt-md"},Ne={class:"row q-gutter-sm"},qe={class:"q-mt-md text-caption text-grey-7 text-center"},Ue={class:"row q-mt-md"},xe={class:"col-12"},Oe={__name:"OrderEntry",setup(e){const{canRead:a,canWrite:l,canUpdate:d,canExport:Oe}=(0,b.J)(),Me=a("order"),Ge=l("order"),We=d("order"),Xe=Oe("order"),Pe=p,ze=(0,i.A)(),$e=(0,u.Bm)(),Ye=(0,u.Bm)();$e.initSchemaMap();const Be=(0,s.lq)(),Qe=(0,s.rd)(),He=(0,t.EW)(()=>!!$e.hasClosedLines),je=(0,t.EW)(()=>Be.params.orderHeaderID||null);console.log("🧩 Route parametresi alındı (orderHeaderID):",je.value);const Je=(0,t.EW)(()=>Ya()),Ze=((0,v.n)(),(0,t.EW)(()=>"view"===$e.mode));console.log("🧩 Route parametresi alındı (setup başında):",je.value);const ea=(0,o.KR)("USD"),aa=(0,o.Kh)({}),la=async()=>{if(!$e.loading)if(ca())if($e.summaryRows?.length)try{await $e.submitAllReal(ze,Qe,pa,ba,aa)}catch(e){console.error("❌ confirmAndSubmit hata:",e)}else ze.notify({type:"warning",message:"Kaydedilecek satır yok"});else da(ia.value?"Siparis guncelleme yetkiniz yok":"Siparis kaydetme yetkiniz yok")},ta=new Date,oa=new Date(ta);oa.setDate(oa.getDate()+35);const ra=ta.toISOString().substring(0,10),na=oa.toISOString().substring(0,10),ia=(0,t.EW)(()=>"edit"===$e.mode),sa=(0,t.EW)(()=>!Ze.value&&(ia.value?We.value:Ge.value)),ua=(0,t.EW)(()=>!Ze.value&&(ia.value?We.value:Ge.value));function da(e){ze.notify({type:"negative",message:e})}function ca(){return!Ze.value&&(ia.value?We.value:Ge.value)}function ma(){return!Ze.value&&(ia.value?We.value:Ge.value)}function va(){Xe.value?$e.downloadOrderPdf():da("Siparisi yazdirma yetkiniz yok")}async function ya(){Ge.value?await Ua():da("Yeni siparis baslatma yetkiniz yok")}const pa=(0,o.Kh)({OrderHeaderID:"",OrderTypeCode:1,ProcessCode:"WS",OrderNumber:"",OrderTime:c()().format("HH:mm:ss"),IsCancelOrder:!1,BillingPostalAddressID:"",GuarantorContactID:"",ApplicationCode:"",ApplicationID:"",OrderDate:c()().format("YYYY-MM-DD"),AverageDueDate:c()().add(30,"day").format("YYYY-MM-DD"),Description:"",InternalDescription:"",CurrAccTypeCode:1,CurrAccCode:"",CurrAccDescription:"",DocCurrencyCode:"USD",LocalCurrencyCode:"TRY",ExchangeRate:1,IsCreditSale:!0,IsCreditableConfirmed:!1,IsSalesViaInternet:!1,IsSuspended:!1,IsCompleted:!1,IsPrinted:!1,IsLocked:!1,IsClosed:!1,CreatedUserName:"",CreatedDate:c()().format("YYYY-MM-DD HH:mm:ss"),LastUpdatedUserName:"",LastUpdatedDate:c()().format("YYYY-MM-DD HH:mm:ss"),CreditableConfirmedUser:"",CreditableConfirmedDate:"",DocumentNumber:"",PaymentTerm:"",SubCurrAccID:"",ShipmentMethodCode:"",ContactID:"",ShippingPostalAddressID:"",GuarantorContactID2:"",RoundsmanCode:"",DeliveryCompanyCode:"",TaxTypeCode:"",WithHoldingTaxTypeCode:"",DOVCode:"",TaxExemptionCode:0,CompanyCode:1,OfficeCode:101,StoreTypeCode:5,StoreCode:0,POSTerminalID:0,WarehouseCode:"1-0-12",ToWarehouseCode:"",OrdererCompanyCode:1,OrdererOfficeCode:101,OrdererStoreCode:"",GLTypeCode:"",TDisRate1:0,TDisRate2:0,TDisRate3:0,TDisRate4:0,TDisRate5:0,DiscountReasonCode:0,SurplusOrderQtyToleranceRate:0,ImportFileNumber:"",ExportFileNumber:"",IncotermCode1:"",IncotermCode2:"",LettersOfCreditNumber:"",PaymentMethodCode:"",IsIncludedVat:0,UserLocked:0,IsProposalBased:0,model:"",renk:"",renk2:"",urunAnaGrubu:"",urunAltGrubu:"",fit:"",urunIcerik:"",drop:"",kategori:"",askiliyan:"",seri:"",bedenLabels:[],bedenler:[],adet:0,fiyat:0,pb:ea.value,tutar:0,aciklama:"",minFiyat:0,kur:1,minFiyatTRY:0,olusturmaTarihi:ra,tahminiTerminTarihi:na,terminTarihi:na,includeVat:!1,vatRate:10,subtotal:0,vatAmount:0,totalWithVat:0,vatAmountInput:""}),ba=(0,t.EW)(()=>$e.summaryRows),ka=(0,t.EW)(()=>!!$e.editingKey),ga=e=>e?.clientKey||e?.id||e?.OrderLineID,fa=(0,o.KR)(null),Ca=(0,t.EW)(()=>{const e=Oa.value;return!0===e?.isClosed}),ha=(0,o.KR)(null),wa=(0,o.KR)(null),La=(0,o.KR)(1),Aa=(0,o.KR)(!0),Sa=(0,o.KR)(!0),Ra=(0,o.KR)(!0),Ka=(0,o.KR)(null),Da=(0,o.KR)([]),Ta=(0,o.KR)([]),Va=(0,o.KR)([]),Fa=(0,o.KR)([]),Ea=(0,o.KR)(null),Ia=(0,o.KR)(null),_a=(0,o.KR)([]),Na=(0,o.KR)([]);function qa(e,a,l){if(!e||!a)return"";const t=e[a];return t?" "===l?t[" "]??"":t[l]??"":""}async function Ua(e=!1){console.log("🧹 resetEditor",{force:e,editingKey:$e.editingKey}),e||!$e.editingKey?($e.editingKey=null,$e.selected=null,Object.assign(pa,{model:"",renk:"",renk2:"",urunAnaGrubu:"",urunAltGrubu:"",kategori:"",aciklama:"",fit:"",urunIcerik:"",drop:"",askiliyan:"",adet:0,fiyat:0,tutar:0,grpKey:null,bedenLabels:[],bedenler:[]}),wa.value=null,La.value=1,Dl.value=[],Tl.value={},_a.value=[],Na.value=[],await(0,t.dY)(),console.log("✅ resetEditor tamamlandı (BEDEN ŞEMASI YOK)")):console.log("⛔ resetEditor iptal (edit mode)")}function xa(e){if(!e)return;if("function"===typeof $e.applyTerminToRowsIfEmpty)return void $e.applyTerminToRowsIfEmpty(e);const a=$e.summaryRows;if(Array.isArray(a))for(const l of a)l?.terminTarihi&&""!==l.terminTarihi||(l.terminTarihi=e)}$e.mode=Je.value;const Oa=(0,t.EW)(()=>{const e=$e.editingKey;if(!e)return null;const a=$e.summaryRows;return Array.isArray(a)?"function"===typeof $e.getRowKey?a.find(a=>$e.getRowKey(a)===e)||null:a.find(a=>(a?.clientKey||a?.OrderLineID)===e)||null:null}),Ma=(0,o.Kh)({}),Ga=(0,t.EW)(()=>{const e=Array.isArray(ba.value)?ba.value:[],a={},l=[],t=$e.schemaMap&&"object"===typeof $e.schemaMap?$e.schemaMap:u.Cz;for(const t of e){const e=(t?.urunAnaGrubu||"GENEL").toUpperCase().trim();a[e]||(a[e]={name:e,rows:[],toplamAdet:0,toplamTutar:0,open:Ma[e]??!0,grpKey:t.grpKey},l.push(e));const o=a[e];o.rows.push(t),o.toplamAdet+=Number(t.adet||0),o.toplamTutar+=Number(t.tutar||0)}return l.map(e=>{const l=a[e],o=t?.[l.grpKey];return{...l,bedenValues:o?.values||[]}})});function Wa(e){return e?"string"===typeof e&&e.includes(" ")?e.split(" ")[0]:e:""}(0,t.EW)(()=>Number($e.totalAmount||0));const Xa=e=>{pa.includeVat=!!e,Pa()};function Pa(){const e=Number($e.totalAmount||0),a=Number(pa.vatRate||0)/100;if(!pa.includeVat)return pa.subtotal=e,pa.vatAmount=0,pa.vatAmountInput="",void(pa.totalWithVat=e);let l=0;""!==pa.vatAmountInput&&null!=pa.vatAmountInput?(l=Number(String(pa.vatAmountInput).replace(",",".")),l=isNaN(l)?0:l):l=Number((e*a).toFixed(2));const t=Number((e+l).toFixed(2));pa.subtotal=e,pa.vatAmount=l,pa.totalWithVat=t}(0,o.KR)(!1);function za(e){return!e||["new","0","null","undefined"].includes(e)}function $a(e){return"string"===typeof e&&/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(e)}function Ya(){const e=String(Be.query.mode||"").toLowerCase(),a=String(je.value||"");return["edit","view","new"].includes(e)?e:!za(a)&&$a(a)?"edit":"new"}const Ba=(0,o.KR)(!1),Qa=(0,o.KR)("");let Ha=null,ja=null,Ja=null;function Za(){al(),"view"!==$e.mode&&(ja=e=>{$e.isControlledSubmit||$e.allowRouteLeaveOnce||$e.hasUnsavedChanges&&(e.preventDefault(),e.returnValue="")},window.addEventListener("beforeunload",ja))}function el(){Ha&&(clearInterval(Ha),Ha=null)}function al(){ja&&(window.removeEventListener("beforeunload",ja),ja=null)}function ll(){al(),el(),"view"!==$e.mode&&(Za(),Ha=setInterval(()=>{$e.persistLocalStorage?.()},3e4))}async function tl(){const e=String(je.value||""),a=Ya();"new"===a&&(Qa.value="");const l=`${a}:${e}:${Be.query.source||""}`;if(!Ba.value&&Qa.value!==l){Qa.value=l,Ba.value=!0,Aa.value=!0;try{if($e.mode=a,Da.value.length||await ol(ze),Va.value.length||await il(ze),"new"===a){const e=String(je.value||""),a=$e.getActiveNewHeaderId?.();if((!e||"new"===e)&&a)return $e.allowRouteLeaveOnce=!0,void await Qe.replace({name:"order-entry",params:{orderHeaderID:a},query:{...Be.query,mode:"new",source:Be.query.source||"local"}});$e.clearEditSnapshotIfExists?.();const l=$e.hydrateFromLocalStorageIfExists?.();if(!l){const a=await $e.startNewOrder({$q:ze,form:pa,productCache:aa}),l=a?.OrderHeaderID;if(l&&l!==e)return $e.allowRouteLeaveOnce=!0,void await Qe.replace({name:"order-entry",params:{orderHeaderID:l},query:{mode:"new",source:"new"}})}return void($e.header&&(Object.assign(pa,$e.header),sl()))}if(za(e))return void await Qe.replace({name:"order-list"});let l=!1;try{l=await $e.openExistingForEdit(e,{$q:ze,form:pa,productCache:aa})}catch{}if(!l)return ze.notify({type:"negative",message:"Sipariş açılamadı"}),void await Qe.replace({name:"order-list"});$e.header&&(Object.assign(pa,$e.header),sl())}finally{ll(),Aa.value=!1,Ba.value=!1}}}async function ol(e){Sa.value=!0;try{const e=await m.Ay.get("/customer-list"),a=e?.data;Array.isArray(a)?Da.value=a:Array.isArray(a?.data)?Da.value=a.data:Da.value=[],Ta.value=[...Da.value],console.log(`🧾 Cari listesi yüklendi: ${Da.value.length} kayıt.`)}catch(a){console.error("❌ Cari listesi alınamadı:",a),e.notify({type:"negative",message:"Cari listesi yüklenemedi ❌",position:"top"})}finally{Sa.value=!1}}function rl(e,a){if(!e)return void a(()=>{Ta.value=[...Da.value]});const l=e.toLowerCase();a(()=>{Ta.value=Da.value.filter(e=>{const a=(e.Cari_Kod||"").toLowerCase(),t=(e.Cari_Ad||"").toLowerCase(),o=(e.Unvan||"").toLowerCase();return`${a} ${t} ${o}`.includes(l)})})}(0,t.wB)(()=>[je.value,Be.query.mode,Be.query.source],tl,{immediate:!0}),(0,t.wB)(()=>$e.newOrderSignal,async e=>{if(!e)return;const a=await $e.startNewOrder({$q:ze,form:pa,productCache:aa}),l=a?.OrderHeaderID||$e.getActiveNewHeaderId?.();l&&await Qe.replace({name:"order-entry",params:{orderHeaderID:l},query:{mode:"new",source:"new"}})}),(0,t.wB)(()=>$e.replaceRouteSignal,async e=>{e&&await Qe.replace({name:"order-entry",params:{orderHeaderID:e},query:{mode:"edit",source:"backend"}})}),(0,t.sV)(async()=>{await(0,t.dY)(),_l(),Nl(),Ja=()=>_l(),window.addEventListener("resize",Ja);const e=Be.query.mode||"new",a=Be.query.source||"",l=je.value;console.log("🧩 hydrate decision",{mode:e,source:a,id:l}),"new"===e&&"draft"===a&&l||"edit"===e&&l?await Ye.hydrateFromLocalStorage(l):await Ye.startNewOrder({$q:ze})}),(0,t.hi)(()=>{Ja&&window.removeEventListener("resize",Ja),el(),al()}),(0,s.JZ)((e,a,l)=>{if(!$e.isControlledSubmit)return $e.allowRouteLeaveOnce?($e.allowRouteLeaveOnce=!1,void l()):void("view"!==$e.mode&&$e.hasUnsavedChanges?ze.dialog({title:"Sayfadan ayrılıyorsunuz",message:"edit"===$e.mode?"Değişiklikler kaybolacak. Devam edilsin mi?":"Taslak korunacak. Sayfadan çıkmak istiyor musunuz?",ok:{label:"Evet",color:"negative"},cancel:{label:"Hayır"},persistent:!0}).onOk(()=>{if("new"!==$e.mode)if("edit"!==$e.mode)l();else{try{$e.clearEditSnapshotIfExists?.()}catch(e){console.warn("⚠️ edit snapshot temizlenemedi:",e)}l()}else{try{$e.persistLocalStorage?.()}catch(e){console.warn("⚠️ NEW draft persist edilemedi (route leave):",e)}l()}}).onCancel(()=>l(!1)):l());l()});const nl=(0,t.EW)(()=>(ba.value||[]).some(e=>(e.urunAnaGrubu||"").toLowerCase().includes("pantolon")));async function il(e){Ra.value=!0;try{const e=await m.Ay.get("/products"),a=e?.data||[];Va.value=a.map(e=>({label:e.ProductCode,value:e.ProductCode})),Fa.value=Va.value,console.log("✅ Model listesi yüklendi:",Va.value.length)}catch(a){console.error("❌ Model listesi alınamadı:",a),e.notify({type:"negative",message:"Model listesi alınamadı ❌",position:"top-right"})}finally{Ra.value=!1}}function sl(){const e=$e.header?.DocCurrencyCode||$e.header?.CurrencyCode;e&&(pa.pb=e,pa.DocCurrencyCode=e,$e.setHeaderFields?.({DocCurrencyCode:e,PriceCurrencyCode:e},{applyCurrencyToLines:!0,immediatePersist:!1}))}async function ul(){if(pa.model&&pa.pb)try{const e=await m.Ay.get("/min-price",{params:{model:pa.model,currency:pa.pb}}),a=e.data;pa.minFiyat=Number(a.price||0),pa.kur=Number(a.rateToTRY||1),pa.minFiyatTRY=Number(a.priceTRY||0),console.log(`💰 Min Fiyat: ${pa.minFiyat} ${pa.pb} (${pa.minFiyatTRY} TRY)`)}catch(e){console.error("❌ Min fiyat alınamadı:",e),pa.minFiyat=0}}function dl(){if(!ma())return void da(ia.value?"Siparis satiri guncelleme yetkiniz yok":"Siparis satiri ekleme yetkiniz yok");if(!wa.value)return;const e=Cl.value;if(!e)return void console.warn("⚠️ applySeriSet: grpKey bulunamadı");const a="object"===typeof wa.value?wa.value.value:wa.value,l=hl?.[e]?.[a];if(!l)return void console.warn(`⚠️ Seri seti bulunamadı → grpKey:${e}, set:${a}`);const t=Number(La.value)||1;pa.bedenler=pa.bedenLabels.map((e,a)=>{const o=Number(pa.bedenler?.[a]||0),r=Number(l[e]||0)*t;return o+r}),cl(pa),ze.notify({type:"positive",message:`Seri "${a}" uygulandı (${e})`,position:"top-right"})}function cl(e){e.adet=(e.bedenler||[]).reduce((e,a)=>e+Number(a||0),0);const a=Number(e.fiyat)||0;e.tutar=Number((e.adet*a).toFixed(2))}function ml(){if(!ma())return void da("Siparis satiri silme/guncelleme yetkiniz yok");const e=Oa.value;e?!0!==e.isClosed?ze.dialog({title:"Satırı Sil",message:`<b>${e.model} / ${e.renk}</b> satırı silinsin mi?`,html:!0,ok:{label:"Sil",color:"negative"},cancel:{label:"Vazgeç",flat:!0}}).onOk(()=>{$e.removeRowInternal(e),$e.editingKey=null,$e.selected=null,Ua(),ze.notify({type:"positive",message:"Satır silindi (DELETE ops oluşturuldu)",position:"top-right"})}):ze.notify({type:"warning",message:"Kapalı satır silinemez.",position:"top-right"}):ze.notify({type:"warning",message:"Silmek için önce bir satır seçmelisiniz."})}async function vl(e,a={}){const{allowClosed:l=!1,notify:o=!0,message:r="Düzenleme moduna alındı",loadSizes:n=!0,source:i="hydrate"}=a;if(!e)return!1;if(!l&&!0===e.isClosed)return o&&ze.notify({type:"warning",message:"Bu satır kapalıdır ve düzenlenemez.",position:"top-right"}),!1;const s="function"===typeof $e.getRowKey?$e.getRowKey(e):e.clientKey||e.OrderLineID;if(!s)return!1;$e.editingKey=s,$e.selected={...e},Object.assign(pa,{model:e.model,renk:e.renk,renk2:e.renk2,urunAnaGrubu:e.urunAnaGrubu,urunAltGrubu:e.urunAltGrubu,kategori:e.kategori,aciklama:e.aciklama,fiyat:Number(e.fiyat||0),pb:e.pb||ea.value||"USD",terminTarihi:Wa(e.terminTarihi||""),grpKey:e.grpKey});const u=pa.grpKey;$e.schemaMap&&$e.schemaMap[u]||$e.initSchemaMap();const d=$e.schemaMap?.[u];if(d?.values?.length){const a=e?.bedenMap?.[u]||{};pa.bedenLabels=[...d.values],pa.bedenler=pa.bedenLabels.map(e=>Number(a[e]||0))}else console.warn("⛔ schema bulunamadı:",u),pa.bedenLabels=[],pa.bedenler=[];return cl(pa),n&&pa.model&&(await(0,t.dY)(),await $e.loadProductSizes(pa,!0,ze),e.stokMap&&"object"===typeof e.stokMap&&(Tl.value={...e.stokMap}),await Fl(!0)),o&&ze.notify({type:"info",message:`${r} → ${e.model}`,position:"top-right"}),console.log("✅ hydrateEditorFromRow OK",{source:i,grpKey:u,labels:pa.bedenLabels,values:pa.bedenler}),!0}async function yl(){if(pa.model){console.log("🆕 handleNewCombination",{model:pa.model,renk:pa.renk,renk2:pa.renk2});try{await(0,t.dY)(),await new Promise(e=>setTimeout(e,200)),await(0,t.dY)(),await $e.loadProductSizes(pa,!0,ze,aa),await Fl(!0);const e=Object.values(Tl.value||{});e.length&&e.every(e=>0===Number(e))?ze.notify({type:"warning",message:"⚠️ Bu kombinasyon için stok bulunamadı (0)",position:"top-right"}):console.log(`✅ Stok yüklendi (${e.length} beden)`),await pl()}catch(e){console.error("❌ handleNewCombination hata:",e),ze.notify({type:"negative",message:"Stok bilgisi alınamadı ❌",position:"top-right"})}}else console.warn("⚠️ handleNewCombination: model yok")}async function pl(){if(!pa.model)return;const e=($e.summaryRows||[]).find(e=>e.model===pa.model&&(e.renk||"")===(pa.renk||"")&&(e.renk2||"")===(pa.renk2||"")&&e.grpKey===pa.grpKey);e&&(!0!==e.isClosed?await vl(e,{source:"openExistingCombination",message:"Düzenleme moduna alındı",notify:!0,loadSizes:!0}):ze.notify({type:"warning",message:"Bu satır kapalıdır.",position:"top-right"}))}const bl=async e=>{try{await vl(e,{source:"editRow",message:"Düzenleme moduna geçildi",notify:!0,loadSizes:!0})}catch(e){console.error("❌ editRow hata:",e)}};function kl(e){if(!e||!Tl.value)return 0;const a=Tl.value[e],l=Number(a);return isNaN(l)?0:l}function gl(e){const a=Number(e);return isNaN(a)?"":0===a?"stok-red":a>0&&a<=2?"stok-yellow":"stok-green"}const fl="function"===typeof $e.getRowKey?$e.getRowKey:e=>e?.clientKey||e?.id||e?.OrderLineID,Cl=(0,t.EW)(()=>{if($e.editingKey){const e=(ba.value||[]).find(e=>fl(e)===$e.editingKey);if(e?.grpKey)return e.grpKey}return pa.grpKey?pa.grpKey:"tak"}),hl=((0,t.EW)(()=>{const e=$e.editingKey;if(!e)return null;const a="function"===typeof $e.getRowKey?$e.getRowKey:e=>e?.clientKey||e?.OrderLineID;return(ba.value||[]).find(l=>a(l)===e)||null}),{tak:{"46-58 seri":{46:1,48:1,50:1,52:1,54:1,56:1,58:1},"46-58 ara çift":{46:1,48:2,50:2,52:2,54:1,56:1,58:1},"44-58 seri":{44:1,46:1,48:1,50:1,52:1,54:1,56:1,58:1},"44-58 ara çift":{44:1,46:1,48:2,50:2,52:2,54:1,56:1,58:1},"60-64 seri":{60:1,62:1,64:1},"66-70 seri":{66:1,68:1,70:1},"48-58 seri":{48:1,50:1,52:1,54:1,56:1,58:1}},gom:{"XS-XXL":{XS:1,S:1,M:1,L:1,XL:1,XXL:1},"XS-XXL ara çift":{XS:1,S:1,M:2,L:2,XL:2,XXL:1},"3XL-5XL":{"3XL":1,"4XL":1,"5XL":1}},ayk:{"10'lu seri":{39:1,40:2,41:2,42:2,43:2,44:1},"39-44":{39:1,40:1,41:1,42:1,43:1,44:1},"45-47":{45:1,46:1,47:1}},yas:{"2-14Y":{2:1,4:1,6:1,8:1,10:1,12:1,14:1}},pan:{"38-50 seri":{38:1,40:1,42:1,44:1,46:1,48:1,50:1},"38-50 ara çift":{38:1,40:1,42:2,44:2,46:2,48:1,50:1},"52-56 seri":{52:1,54:1,56:1},"58-62 seri":{58:1,60:1,62:1}}}),wl=(0,t.EW)(()=>{const e=Cl.value,a=hl[e];return a?Object.keys(a).map(e=>({label:e,value:e})):[]}),Ll=["USD","EUR","TRY","GBP"];function Al(e,a){a(""!==e?()=>{const a=e.toLowerCase();Fa.value=Va.value.filter(e=>(e.label||"").toLowerCase().includes(a))}:()=>Fa.value=Va.value)}async function Sl(e){if(pa.renk="",pa.renk2="",_a.value=[],Na.value=[],Ea.value?.reset&&Ea.value.reset(),Ia.value?.reset&&Ia.value.reset(),!e)return void console.warn("⚠️ Model kodu boş, sorgu yapılmadı.");const a={aciklama:pa.aciklama,bedenler:Array.isArray(pa.bedenler)?[...pa.bedenler]:[],bedenLabels:Array.isArray(pa.bedenLabels)?[...pa.bedenLabels]:[],fiyat:pa.fiyat,adet:pa.adet,tutar:pa.tutar};try{const l=await m.Ay.get("/product-colors",{params:{code:e}});_a.value=(l?.data||[]).map(e=>({label:`${e.color_code||e.ColorCode} – ${e.color_description||e.ColorDesc||""}`,value:e.color_code||e.ColorCode}));const t=await m.Ay.get("/product-detail",{params:{code:e}}),o=t?.data||{};e&&o&&($e.productCache[e]=aa[e],aa[e]={...o,ProductGroup:o.ProductGroup||o.UrunAnaGrubu||o.ProductAtt01Desc||"",ProductSubGroup:o.ProductSubGroup||o.UrunAltGrubu||o.ProductAtt02Desc||"",URUN_ANA_GRUBU:o.UrunAnaGrubu||o.ProductAtt01Desc||"",URUN_ALT_GRUBU:o.UrunAltGrubu||o.ProductAtt02Desc||""},console.log("🗂️ Cache eklendi:",e,Object.keys(aa[e]))),Object.assign(pa,{model:e,urunAnaGrubu:o.UrunAnaGrubu||o.ProductGroup||o.ProductAtt01Desc||"",urunAltGrubu:o.UrunAltGrubu||o.ProductSubGroup||o.ProductAtt02Desc||"",fit:o.Fit1||o.Fit||"",urunIcerik:o.UrunIcerik||o.Fabric||"",drop:o.Drop||"",kategori:o.Kategori||"",askiliyan:o.AskiliYan||"",aciklama:a.aciklama,fiyat:a.fiyat,adet:a.adet,tutar:a.tutar});const r=String(pa.urunAnaGrubu||"").toLowerCase().trim(),n=String(pa.kategori||"").toLowerCase().trim();let i=null;if(r.includes("pantolon")||n.includes("pantolon")?i="pan":r.includes("gömlek")||r.includes("gomlek")||n.includes("gömlek")||n.includes("gomlek")?i="gom":r.includes("ayakkabı")||r.includes("ayakkabi")||n.includes("ayakkabı")||n.includes("ayakkabi")?i="ayk":(r.includes("yaş")||r.includes("yas")||n.includes("yaş")||n.includes("yas"))&&(i="yas"),!i)try{i=(0,u.Tf)(null,pa.urunAnaGrubu,pa.kategori)}catch(e){console.warn("⚠️ detectBedenGroup hata:",e),i=null}i||(i="tak"),pa.grpKey=i,console.log("🧭 Editor grpKey set edildi →",i);const s=$e.schemaMap?.[pa.grpKey]||u.Cz?.[pa.grpKey];if(Array.isArray(s?.values)&&s.values.length){const e={};(a.bedenLabels||[]).forEach((l,t)=>{e[l]=Number(a.bedenler?.[t]||0)}),pa.bedenLabels=[...s.values],pa.bedenler=pa.bedenLabels.map(a=>Number(e[a]||0))}else pa.bedenLabels=[],pa.bedenler=[];console.log("📦 Model detayları yüklendi:",pa.urunAnaGrubu,pa.fit),await ul(),_a.value.length||(await $e.loadProductSizes(pa,!0,ze,aa),await Fl(!0)),await pl(),ze.notify({type:"info",message:`Model "${e}" yüklendi ✅`,position:"top-right"})}catch(e){console.error("❌ Model verileri alınamadı:",e),ze.notify({type:"negative",message:"Model bilgileri alınamadı ❌",position:"top-right"})}}async function Rl(e){if(pa.renk=e||"",Na.value=[],pa.renk2="",Ia.value&&Ia.value.reset?.(),pa.renk)try{const a=await m.Ay.get("/product-secondcolor",{params:{code:pa.model,color:e}}),l=a?.data||[];Array.isArray(l)&&l.length>0?(Na.value=l.map(e=>({label:e.item_dim2_code,value:e.item_dim2_code})),console.log("🎨 2. renk listesi yüklendi:",Na.value.length)):console.log("⚪ 2. renk yok, doğrudan beden/stok yükleniyor..."),await yl()}catch(e){console.error("❌ 1. renk sonrası hata:",e)}else console.warn("⚠️ Renk seçilmedi, işlemler durduruldu.")}async function Kl(e){"object"===typeof e&&e?.value&&(e=e.value),pa.renk2=e||"";try{await yl()}catch(e){console.error("❌ 2. renk sonrası hata:",e)}}const Dl=(0,o.KR)([]),Tl=(0,o.KR)({}),Vl=async()=>{ma()?await $e.saveOrUpdateRowUnified({form:pa,recalcVat:"function"===typeof Pa?Pa:null,resetEditor:"function"===typeof Ua?Ua:null,stockMap:Tl,$q:ze}):da(ia.value?"Siparis satiri guncelleme yetkiniz yok":"Siparis satiri kaydetme yetkiniz yok")};async function Fl(e=!1){if(pa.model)try{const a={code:pa.model};pa.renk?.trim()&&(a.color=pa.renk.trim()),pa.renk2?.trim()&&(a.color2=pa.renk2.trim()),console.log("📦 MSSQL stok sorgusu gönderiliyor:",a);const l=await m.Ay.get("/order-inventory",{params:a}),t=l?.data||[];console.log(`📦 MSSQL stok verisi geldi: ${t.length}`),console.table(t);const o={};for(const e of t){const a=String(e.Beden||"").trim()||" ",l=Number(e.KullanilabilirAdet??0);o[a]=l}const r={};for(const e of pa.bedenLabels||[]){const a=""===e?.trim()?" ":e.trim();r[e]=o[a]??0}if(e&&Tl.value)for(const e of Object.keys(r))Tl.value[e]=r[e];else Tl.value={...r};Dl.value=Object.entries(Tl.value).map(([e,a])=>({beden:e,stok:a})),console.log("✅ Stok haritası güncellendi:",Tl.value)}catch(e){console.error("❌ Order inventory yüklenemedi:",e),ze.notify({type:"negative",message:"Stok verisi alınamadı ❌",position:"top-right"})}else console.warn("⚠️ Stok yüklenemedi: model seçilmemiş.")}function El(e,a){return async l=>{const o=!!$e._uiBusy,r=!!$e.preventPersist;let n=!1;try{const o=Oa.value,r=!!o;if(r&&o){const a={model:"model"===e?l:pa.model,renk:"renk"===e?l:pa.renk,renk2:"renk2"===e?l:pa.renk2},r=(o.model||"")!==(a.model||"")||(o.renk||"")!==(a.renk||"")||(o.renk2||"")!==(a.renk2||"");r&&(console.warn("🟥 Combo değişti → DELETE"),n=!0,$e._uiBusy=!0,$e.preventPersist=!0,$e.removeRowInternal(o),$e.editingKey=null,$e.selected=null,await(0,t.dY)())}"function"===typeof a&&await a(l)}catch(e){console.error("❌ useComboWatcher hata:",e)}finally{$e._uiBusy=o,$e.preventPersist=r,n&&$e.persistLocalStorage?.()}}}async function Il(e){let a="USD";try{if(!e)return;const l=Da.value.find(a=>a.Cari_Kod===e);if(!l)return void console.warn("⚠️ Cari bulunamadı:",e);if(ha.value=e,Ka.value=l,a=l.Doviz_Cinsi||l.ParaBirimi||l.DocCurrencyCode||"USD",pa.CurrAccTypeCode=l.CurrAccTypeCode||1,pa.CurrAccCode=e,pa.DocCurrencyCode=a,pa.pb=a,ea.value=a,$e.setHeaderFields({CurrAccTypeCode:pa.CurrAccTypeCode,CurrAccCode:e,DocCurrencyCode:a,PriceCurrencyCode:a},{applyCurrencyToLines:!0,immediatePersist:!0}),$e.getTodayRate)try{const e=await $e.getTodayRate(a,"TRY");isNaN(e)||$e.setHeaderFields({ExchangeRate:Number(e)})}catch(e){console.warn("⚠️ Kur alınamadı:",e)}Pa(),ze.notify({type:"positive",message:`Cari değiştirildi → ${e} (${a})`,position:"top-right"})}catch(e){console.error("❌ onCariChange hata:",e),ze.notify({type:"negative",message:"Cari değiştirilemedi",position:"top-right"})}finally{$e.applyCurrencyToLines&&$e.applyCurrencyToLines(a),$e.persistLocalStorage?.()}}function _l(){try{const e=document.documentElement,a=document.querySelector(".q-header")?.offsetHeight||56,l=document.querySelector(".filter-bar")?.offsetHeight||72,t=document.querySelector(".save-toolbar")?.offsetHeight||52,o=a+l+t;e.style.setProperty("--header-h",`${a}px`),e.style.setProperty("--filter-h",`${l}px`),e.style.setProperty("--save-h",`${t}px`),e.style.setProperty("--sticky-total",`${o}px`),console.log(`📐 Sticky vars → header:${a}, filter:${l}, save:${t}`)}catch(e){console.warn("⚠️ updateStickyVars hata:",e)}}function Nl(){try{const e=document.querySelector(".order-grid-header");if(!e)return;const a=e.getBoundingClientRect().height||0,l=-a;document.documentElement.style.setProperty("--header-body-gap",`${l}px`),console.log("📏 Header boşluğu ölçüldü:",a,"gap:",l)}catch(e){console.warn("⚠️ measureHeaderGap hata:",e)}}return(0,t.wB)(()=>pa.AverageDueDate,e=>{e&&xa(e)}),(0,t.wB)(Ga,e=>{Array.isArray(e)&&console.log("👀 groupedRows değişti:",e.map(e=>({name:e.name,count:e.rows?.length||0})))}),(e,a)=>{const l=(0,t.g2)("q-spinner"),i=(0,t.g2)("q-inner-loading"),s=(0,t.g2)("q-item-label"),d=(0,t.g2)("q-item-section"),c=(0,t.g2)("q-item"),m=(0,t.g2)("q-select"),v=(0,t.g2)("q-input"),p=(0,t.g2)("q-checkbox"),b=(0,t.g2)("q-slide-transition"),Oe=(0,t.g2)("q-btn"),We=(0,t.g2)("q-icon"),ze=(0,t.g2)("q-tooltip"),Ye=(0,t.g2)("q-page");return(0,o.R1)(Me)?((0,t.uX)(),(0,t.Wv)(Ye,{key:0,class:"order-page"},{default:(0,t.k6)(()=>[(0,t.bF)(i,{showing:Aa.value||Sa.value||Ra.value,color:"primary"},{default:(0,t.k6)(()=>[(0,t.bF)(l,{size:"50px"})]),_:1},8,["showing"]),(0,t.Lk)("div",k,[(0,t.Lk)("div",g,[(0,t.Lk)("div",f,[(0,t.bF)(m,{modelValue:pa.CurrAccCode,"onUpdate:modelValue":[a[0]||(a[0]=e=>pa.CurrAccCode=e),Il],options:Ta.value,label:"Cari Seçimi",filled:"","use-input":"","input-debounce":"300","emit-value":"","map-options":"","option-value":"Cari_Kod","option-label":e=>`${e.Cari_Kod} - ${e.Cari_Ad}`,onFilter:rl,loading:Sa.value,disable:ia.value||He.value||Ze.value,readonly:Ze.value,clearable:""},{option:(0,t.k6)(e=>[(0,t.bF)(c,(0,r._B)((0,t.Ng)(e.itemProps)),{default:(0,t.k6)(()=>[(0,t.bF)(d,null,{default:(0,t.k6)(()=>[(0,t.bF)(s,null,{default:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(e.opt.Cari_Ad),1)]),_:2},1024),(0,t.bF)(s,{caption:""},{default:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(e.opt.Cari_Kod),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,["modelValue","options","option-label","loading","disable","readonly"])]),(0,t.Lk)("div",C,[(0,t.bF)(v,{modelValue:pa.OrderNumber,"onUpdate:modelValue":a[1]||(a[1]=e=>pa.OrderNumber=e),label:"Sipariş No",filled:"",dense:"",disable:ia.value||He.value||Ze.value,readonly:Ze.value},null,8,["modelValue","disable","readonly"])]),(0,t.Lk)("div",h,[(0,t.bF)(v,{"model-value":(0,o.R1)(y)(pa.OrderDate),label:"Oluşturulma Tarihi",type:"date",filled:"",dense:"","onUpdate:modelValue":a[2]||(a[2]=e=>pa.OrderDate=e),disable:ia.value||He.value||Ze.value,readonly:Ze.value},null,8,["model-value","disable","readonly"])]),(0,t.Lk)("div",w,[(0,t.bF)(v,{"model-value":(0,o.R1)(y)(pa.AverageDueDate),label:"Tahmini Termin Tarihi",type:"date",filled:"",dense:"","onUpdate:modelValue":a[3]||(a[3]=e=>pa.AverageDueDate=e),readonly:Ze.value,disable:Ze.value},null,8,["model-value","readonly","disable"])]),(0,t.Lk)("div",L,[(0,t.Lk)("div",A,[(0,t.bF)(v,{dense:"",filled:"","model-value":Number((0,o.R1)($e).totalAmount||0).toLocaleString("tr-TR",{minimumFractionDigits:2}),label:"Toplam Tutar",readonly:""},{append:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(pa.pb),1)]),_:1},8,["model-value"])]),(0,t.Lk)("div",S,[(0,t.bF)(p,{modelValue:pa.includeVat,"onUpdate:modelValue":[a[4]||(a[4]=e=>pa.includeVat=e),Xa],label:"KDV Dahil",color:"primary",disable:Ca.value||Ze.value,readonly:Ze.value},null,8,["modelValue","disable","readonly"])]),pa.includeVat?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",R,[(0,t.bF)(v,{dense:"",filled:"","model-value":pa.vatRate,label:"%",readonly:""},{append:(0,t.k6)(()=>[...a[31]||(a[31]=[(0,t.eW)("%",-1)])]),_:1},8,["model-value"])]),(0,t.Lk)("div",K,[(0,t.bF)(v,{dense:"",filled:"",modelValue:pa.vatAmountInput,"onUpdate:modelValue":[a[5]||(a[5]=e=>pa.vatAmountInput=e),e.onVatAmountChange],label:"KDV Tutarı","input-class":"text-right",disable:Ca.value||Ze.value,readonly:Ze.value},{append:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(pa.pb),1)]),_:1},8,["modelValue","onUpdate:modelValue","disable","readonly"])]),(0,t.Lk)("div",D,[(0,t.bF)(v,{dense:"",filled:"","model-value":Number(pa.totalWithVat||0).toLocaleString("tr-TR",{minimumFractionDigits:2}),label:"KDV Dahil Toplam",readonly:""},{append:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(pa.pb),1)]),_:1},8,["model-value"])])],64)):(0,t.Q3)("",!0)])]),(0,t.bF)(b,null,{default:(0,t.k6)(()=>[Ka.value?((0,t.uX)(),(0,t.CE)("div",T,[(0,t.Lk)("div",V,[(0,t.bF)(v,{"model-value":Ka.value.Musteri_Temsilcisi||"-",label:"Müşteri Temsilcisi",filled:"",dense:"",readonly:""},null,8,["model-value"])]),(0,t.Lk)("div",F,[(0,t.bF)(v,{"model-value":Ka.value.Musteri_Ana_Grubu||"-",label:"Ana Grup",filled:"",dense:"",readonly:""},null,8,["model-value"])]),(0,t.Lk)("div",E,[(0,t.bF)(v,{"model-value":Ka.value.Piyasa||"-",label:"Piyasa",filled:"",dense:"",readonly:""},null,8,["model-value"])]),(0,t.Lk)("div",I,[(0,t.bF)(v,{"model-value":Ka.value.Ulke||"-",label:"Ülke",filled:"",dense:"",readonly:""},null,8,["model-value"])])])):(0,t.Q3)("",!0)]),_:1}),(0,t.Lk)("div",_,[a[32]||(a[32]=(0,t.Lk)("div",{class:"text-subtitle2 text-weight-bold"},"Sipariş Formu",-1)),(0,t.Lk)("div",null,[Ze.value&&(0,o.R1)(Xe)?((0,t.uX)(),(0,t.Wv)(Oe,{key:0,label:"🖨 SİPARİŞİ YAZDIR",color:"primary",icon:"print",class:"q-ml-sm",onClick:va})):sa.value?((0,t.uX)(),(0,t.Wv)(Oe,{key:1,label:ia.value?"TÜMÜNÜ GÜNCELLE":"TÜMÜNÜ KAYDET",color:"primary",icon:"save",class:"q-ml-sm",loading:(0,o.R1)($e).loading,disable:!sa.value,onClick:la},null,8,["label","loading","disable"])):(0,t.Q3)("",!0),(0,o.R1)(Ge)?((0,t.uX)(),(0,t.Wv)(Oe,{key:2,label:"YENİ SİPARİŞ",color:"secondary",icon:"add_circle",class:"q-ml-sm",onClick:ya,disable:Ca.value||!(0,o.R1)(Ge)},null,8,["disable"])):(0,t.Q3)("",!0)])]),(0,t.Lk)("div",N,[a[33]||(a[33]=(0,t.Lk)("div",{class:"col-fixed model"},"MODEL",-1)),a[34]||(a[34]=(0,t.Lk)("div",{class:"col-fixed renk"},"RENK",-1)),a[35]||(a[35]=(0,t.Lk)("div",{class:"col-fixed ana"},[(0,t.eW)("ÜRÜN ANA"),(0,t.Lk)("br"),(0,t.eW)("GRUBU")],-1)),a[36]||(a[36]=(0,t.Lk)("div",{class:"col-fixed alt"},[(0,t.eW)("ÜRÜN ALT"),(0,t.Lk)("br"),(0,t.eW)("GRUBU")],-1)),a[37]||(a[37]=(0,t.Lk)("div",{class:"col-fixed aciklama-col"},"AÇIKLAMA",-1)),(0,t.Lk)("div",q,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(Object.keys((0,o.R1)($e)?.schemaMap||{}).length?Object.values((0,o.R1)($e).schemaMap):Object.values((0,o.R1)(u.Cz)),e=>((0,t.uX)(),(0,t.CE)("div",{key:e.key,class:(0,r.C4)(["grp-row",{"hl-pan":"pan"===e.key&&nl.value}])},[(0,t.Lk)("div",U,(0,r.v_)(e.title),1),(0,t.Lk)("div",x,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(e.values||[],a=>((0,t.uX)(),(0,t.CE)("div",{key:"b-"+e.key+"-"+a,class:"grp-cell hdr"},(0,r.v_)(a),1))),128))])],2))),128))]),a[38]||(a[38]=(0,t.Lk)("div",{class:"total-row"},[(0,t.Lk)("div",{class:"total-cell"},"ADET"),(0,t.Lk)("div",{class:"total-cell"},"FİYAT"),(0,t.Lk)("div",{class:"total-cell"},"PB"),(0,t.Lk)("div",{class:"total-cell"},"TUTAR"),(0,t.Lk)("div",{class:"total-cell"},"Tahmini Gönderim Tarihi")],-1))])]),(0,t.Lk)("div",O,[(0,t.Lk)("div",M,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(Ga.value,a=>((0,t.uX)(),(0,t.CE)("div",{key:a.name,class:(0,r.C4)(["summary-group",a.open?"open":"closed"])},[(0,t.Lk)("div",{class:"order-sub-header",onClick:l=>e.toggleGroup(a.name)},[(0,t.Lk)("div",W,(0,r.v_)(a.name),1),(0,t.Lk)("div",X,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)((0,o.R1)($e).schemaMap?.[a.grpKey]?.values||(0,o.R1)(u.Cz)?.[a.grpKey]?.values||[],e=>((0,t.uX)(),(0,t.CE)("div",{key:"hdr-"+a.grpKey+"-"+e,class:"beden-cell"},(0,r.v_)(e),1))),128))]),(0,t.Lk)("div",P,[(0,t.Lk)("div",z," Toplam "+(0,r.v_)(a.name)+" Adet: "+(0,r.v_)(a.toplamAdet),1),(0,t.Lk)("div",$," Toplam "+(0,r.v_)(a.name)+" Tutar: "+(0,r.v_)(Number(a.toplamTutar||0).toLocaleString("tr-TR",{minimumFractionDigits:2}))+" "+(0,r.v_)(pa.pb||ea.value),1),(0,t.bF)(We,{name:a.open?"expand_less":"expand_more",size:"20px",class:"cursor-pointer text-grey-8 q-ml-sm"},null,8,["name"])])],8,G),a.open?((0,t.uX)(!0),(0,t.CE)(t.FK,{key:0},(0,t.pI)(a.rows,e=>((0,t.uX)(),(0,t.CE)("div",{key:ga(e),class:(0,r.C4)(["summary-row",{active:(0,o.R1)($e).editingKey===ga(e),"is-editing":(0,o.R1)($e).editingKey===ga(e),"row-closed":e.isClosed,"row-error":e._error}]),"data-clientkey":e.clientKey,onClick:a=>!e.isClosed&&!Ze.value&&bl(e)},[e._error?((0,t.uX)(),(0,t.Wv)(We,{key:0,name:"error",color:"negative",size:"18px",class:"q-mr-sm row-error-icon"},{default:(0,t.k6)(()=>[(0,t.bF)(ze,null,{default:(0,t.k6)(()=>[(0,t.eW)((0,r.v_)(e._error.message),1)]),_:2},1024)]),_:2},1024)):(0,t.Q3)("",!0),(0,t.Lk)("div",B,(0,r.v_)(e.model),1),(0,t.Lk)("div",Q,(0,r.v_)(e.renk)+(0,r.v_)(e.renk2?"-"+e.renk2:""),1),(0,t.Lk)("div",H,(0,r.v_)(e.urunAnaGrubu),1),(0,t.Lk)("div",j,(0,r.v_)(e.urunAltGrubu),1),(0,t.Lk)("div",J,(0,r.v_)(e.aciklama),1),(0,t.Lk)("div",Z,[(0,t.Lk)("div",ee,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)((0,o.R1)($e).schemaMap?.[e.grpKey]?.values||(0,o.R1)(u.Cz)[e.grpKey]?.values||(0,o.R1)(u.Cz).tak.values,a=>((0,t.uX)(),(0,t.CE)("div",{key:"val-"+a,class:"cell beden"},(0,r.v_)(qa(e.bedenMap,e.grpKey,a)),1))),128)),((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(16-((0,o.R1)($e).schemaMap?.[e.grpKey]?.values?.length||(0,o.R1)(u.Cz)[e.grpKey]?.values?.length||(0,o.R1)(u.Cz).tak.values.length),e=>((0,t.uX)(),(0,t.CE)("div",{key:"empty-"+e,class:"cell beden ghost"}))),128))])]),(0,t.Lk)("div",ae,(0,r.v_)(e.adet),1),(0,t.Lk)("div",le,(0,r.v_)(e.fiyat),1),(0,t.Lk)("div",te,(0,r.v_)(e.pb),1),(0,t.Lk)("div",oe,(0,r.v_)(Number(e.tutar||0).toLocaleString("tr-TR",{minimumFractionDigits:2})),1),(0,t.Lk)("div",re,[(0,t.Lk)("div",ne,(0,r.v_)((0,o.R1)(Pe)(e.terminTarihi)),1)])],10,Y))),128)):(0,t.Q3)("",!0)],2))),128))]),(0,t.Lk)("div",ie,[(0,t.Lk)("div",se,[(0,t.Lk)("div",ue,[(0,t.bF)(m,{modelValue:pa.model,"onUpdate:modelValue":[a[6]||(a[6]=e=>pa.model=e),a[7]||(a[7]=e=>El("model",Sl)(e))],options:Fa.value,label:"Model",filled:"",dense:"","use-input":"","input-debounce":"250","emit-value":"","map-options":"","option-value":"value","option-label":"label",clearable:"",behavior:"menu",hint:"Model kodu ile arayabilirsiniz",loading:Ra.value,disable:Ca.value||Ze.value,readonly:Ze.value,onFilter:Al},null,8,["modelValue","options","loading","disable","readonly"]),(0,t.Lk)("div",de,[(0,t.bF)(m,{ref_key:"renkSelect",ref:Ea,modelValue:pa.renk,"onUpdate:modelValue":[a[8]||(a[8]=e=>pa.renk=e),a[9]||(a[9]=e=>El("renk",Rl)(e))],options:_a.value,label:"Renk",filled:"",dense:"",clearable:"","emit-value":"","map-options":"","option-value":"value","option-label":"label",disable:Ca.value||Ze.value,readonly:Ze.value},null,8,["modelValue","options","disable","readonly"])]),(0,t.Lk)("div",ce,[(0,t.bF)(m,{ref_key:"renk2Select",ref:Ia,modelValue:pa.renk2,"onUpdate:modelValue":[a[10]||(a[10]=e=>pa.renk2=e),a[11]||(a[11]=e=>El("renk2",Kl)(e))],options:Na.value,label:"2. Renk",filled:"",dense:"",clearable:"","emit-value":"","map-options":"","option-value":"value","option-label":"label",disable:!Na.value.length||ka.value||Ca.value},null,8,["modelValue","options","disable"])])]),(0,t.Lk)("div",me,[(0,t.bF)(v,{modelValue:pa.urunAnaGrubu,"onUpdate:modelValue":a[12]||(a[12]=e=>pa.urunAnaGrubu=e),label:"Ürün Ana Grubu",filled:"",dense:"",readonly:""},null,8,["modelValue"])]),(0,t.Lk)("div",ve,[(0,t.bF)(v,{modelValue:pa.urunAltGrubu,"onUpdate:modelValue":a[13]||(a[13]=e=>pa.urunAltGrubu=e),label:"Alt Grup",filled:"",dense:"",readonly:""},null,8,["modelValue"])]),(0,t.Lk)("div",ye,[(0,t.bF)(v,{modelValue:pa.fit,"onUpdate:modelValue":a[14]||(a[14]=e=>pa.fit=e),label:"Fit",filled:"",dense:"",readonly:""},null,8,["modelValue"])]),(0,t.Lk)("div",pe,[(0,t.bF)(v,{modelValue:pa.urunIcerik,"onUpdate:modelValue":a[15]||(a[15]=e=>pa.urunIcerik=e),label:"İçerik",filled:"",dense:"",readonly:""},null,8,["modelValue"])]),(0,t.Lk)("div",be,[(0,t.bF)(v,{modelValue:pa.drop,"onUpdate:modelValue":a[16]||(a[16]=e=>pa.drop=e),label:"Drop",filled:"",dense:"",readonly:""},null,8,["modelValue"])]),(0,t.Lk)("div",ke,[(0,t.bF)(v,{modelValue:pa.askiliyan,"onUpdate:modelValue":a[17]||(a[17]=e=>pa.askiliyan=e),label:"ASKILI/YAN",filled:"",dense:"",readonly:""},null,8,["modelValue"])]),(0,t.Lk)("div",ge,[(0,t.bF)(v,{modelValue:pa.kategori,"onUpdate:modelValue":a[18]||(a[18]=e=>pa.kategori=e),label:"Kategori",filled:"",dense:"",readonly:""},null,8,["modelValue"])])]),(0,t.Lk)("div",fe,[(0,t.Lk)("div",Ce,[(0,t.bo)((0,t.bF)(m,{ref:"seriSelect",modelValue:wa.value,"onUpdate:modelValue":a[19]||(a[19]=e=>wa.value=e),options:wl.value,label:"Beden Seti Seç",filled:"",dense:"","emit-value":"","map-options":"","option-value":"value","option-label":"label",disable:Ca.value},null,8,["modelValue","options","disable"]),[[n.aG,Array.isArray(wl.value)&&wl.value.length>0]])]),(0,t.Lk)("div",he,[wa.value?((0,t.uX)(),(0,t.Wv)(v,{key:0,modelValue:La.value,"onUpdate:modelValue":a[20]||(a[20]=e=>La.value=e),modelModifiers:{number:!0},type:"number",label:"Çarpan",min:"1",filled:"",dense:"",disable:Ca.value},null,8,["modelValue","disable"])):(0,t.Q3)("",!0)]),(0,t.Lk)("div",we,[wa.value&&ua.value?((0,t.uX)(),(0,t.Wv)(Oe,{key:0,color:"primary",icon:"add",label:"Seri Ekle",onClick:dl,disable:Ca.value||Ze.value||!ua.value,readonly:Ze.value},null,8,["disable","readonly"])):(0,t.Q3)("",!0)])]),(0,t.Lk)("div",Le,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(pa.bedenLabels||[],(e,l)=>((0,t.uX)(),(0,t.CE)("div",{key:"beden-"+l,class:"col-auto beden-wrap"},[(0,t.Lk)("div",Ae,(0,r.v_)(e),1),(0,t.bF)(v,{modelValue:pa.bedenler[l],"onUpdate:modelValue":[e=>pa.bedenler[l]=e,a[22]||(a[22]=e=>cl(pa))],modelModifiers:{number:!0},dense:"",outlined:"",type:"number",min:"0",style:{width:"60px"},onFocus:e=>fa.value=l,onBlur:a[21]||(a[21]=e=>fa.value=null),class:(0,r.C4)({"beden-active":fa.value===l}),disable:Ca.value||Ze.value,readonly:Ze.value},null,8,["modelValue","onUpdate:modelValue","onFocus","class","disable","readonly"]),null!==kl(e)?((0,t.uX)(),(0,t.CE)("div",{key:0,class:(0,r.C4)(["stok-label text-caption text-center q-mt-xs",gl(kl(e))])}," Stok: "+(0,r.v_)(kl(e)),3)):(0,t.Q3)("",!0)]))),128))]),pa.model&&null!==fa.value&&null!==kl(pa.bedenLabels[fa.value])?((0,t.uX)(),(0,t.CE)("div",{key:0,class:(0,r.C4)(["stok-label-sm",gl(kl(pa.bedenLabels[fa.value]))])}," Stok: "+(0,r.v_)(kl(pa.bedenLabels[fa.value])),3)):(0,t.Q3)("",!0),(0,t.Lk)("div",Se,[(0,t.Lk)("div",Re,[(0,t.bF)(v,{modelValue:pa.adet,"onUpdate:modelValue":a[23]||(a[23]=e=>pa.adet=e),modelModifiers:{number:!0},label:"Adet",dense:"",filled:"",readonly:"",disable:Ca.value},null,8,["modelValue","disable"])]),(0,t.Lk)("div",Ke,[(0,t.bF)(v,{modelValue:pa.fiyat,"onUpdate:modelValue":[a[24]||(a[24]=e=>pa.fiyat=e),a[25]||(a[25]=()=>cl(pa))],modelModifiers:{number:!0},label:"Fiyat",dense:"",filled:"",type:"number",min:"0",disable:Ca.value||Ze.value,readonly:Ze.value},null,8,["modelValue","disable","readonly"])]),(0,t.Lk)("div",De,[(0,t.bF)(m,{modelValue:pa.pb,"onUpdate:modelValue":a[26]||(a[26]=e=>pa.pb=e),options:Ll,label:"PB",dense:"",filled:"",disable:Ca.value},null,8,["modelValue","disable"])]),(0,t.Lk)("div",Te,[(0,t.bF)(v,{modelValue:pa.tutar,"onUpdate:modelValue":a[27]||(a[27]=e=>pa.tutar=e),label:"Tutar",dense:"",filled:"",readonly:"",disable:Ca.value},null,8,["modelValue","disable"])])]),(0,t.Lk)("div",Ve,[(0,t.Lk)("div",Fe,[(0,t.bF)(v,{modelValue:pa.terminTarihi,"onUpdate:modelValue":a[28]||(a[28]=e=>pa.terminTarihi=e),type:"date",label:"Tahmini Termin Tarihi",filled:"",dense:"",disable:Ca.value},null,8,["modelValue","disable"])])]),(0,t.Lk)("div",Ee,[(0,t.Lk)("div",Ie,[(0,t.bF)(v,{modelValue:pa.aciklama,"onUpdate:modelValue":a[29]||(a[29]=e=>pa.aciklama=e),label:"Açıklama",type:"textarea",filled:"",dense:"",autogrow:"",maxlength:"1500",counter:"",disable:Ca.value},null,8,["modelValue","disable"])])]),(0,t.Lk)("div",_e,[(0,t.Lk)("div",Ne,[ua.value?((0,t.uX)(),(0,t.Wv)(Oe,{key:0,color:ka.value?"positive":"primary",label:ka.value?"Güncelle":"Kaydet",onClick:Vl,disable:Ca.value||Ze.value||!ua.value},null,8,["color","label","disable"])):(0,t.Q3)("",!0),ka.value&&ua.value?((0,t.uX)(),(0,t.Wv)(Oe,{key:1,color:"negative",flat:"",label:"Satırı Sil",onClick:ml,disable:Ca.value||Ze.value||!ua.value},null,8,["disable"])):(0,t.Q3)("",!0),ua.value?((0,t.uX)(),(0,t.Wv)(Oe,{key:2,flat:"",color:"grey-8",label:"Formu Temizle",onClick:ya,disable:Ca.value||Ze.value||!ua.value},null,8,["disable"])):(0,t.Q3)("",!0)])]),(0,t.Lk)("div",qe,[(0,t.bF)(We,{name:"info",size:"16px",class:"q-mr-xs"}),a[39]||(a[39]=(0,t.eW)(" Bu sayfada yapılan siparişler henüz gönderilmemiştir. ",-1)),a[40]||(a[40]=(0,t.Lk)("br",null,null,-1)),a[41]||(a[41]=(0,t.Lk)("span",{class:"text-negative"},'"Tümünü Kaydet (Toplu Gönder)"',-1)),a[42]||(a[42]=(0,t.eW)(" butonuna basarak işlemleri kaydedebilirsiniz. ",-1))]),(0,t.Lk)("div",Ue,[(0,t.Lk)("div",xe,[(0,t.bF)(v,{modelValue:pa.Description,"onUpdate:modelValue":a[30]||(a[30]=e=>pa.Description=e),type:"textarea",label:"Sipariş Genel Açıklaması",filled:"",dense:"",autogrow:"",maxlength:"1500",counter:"",placeholder:"Siparişe genel açıklama giriniz (örn. teslimat, üretim notu, müşteri isteği...)",disable:Ca.value},null,8,["modelValue","disable"])])])])])]),_:1})):((0,t.uX)(),(0,t.Wv)(Ye,{key:1,class:"order-page flex flex-center"},{default:(0,t.k6)(()=>[...a[43]||(a[43]=[(0,t.Lk)("div",{class:"text-negative text-subtitle1"}," Bu module erisim yetkiniz yok. ",-1)])]),_:1}))}}};var Me=l(5013),Ge=l(8356),We=l(6356),Xe=l(6941),Pe=l(2589),ze=l(4958),$e=l(9039),Ye=l(6067),Be=l(8349),Qe=l(6510),He=l(2677),je=l(3933),Je=l(8387),Ze=l(5725),ea=l(6865),aa=l(272),la=l.n(aa);const ta=Oe,oa=ta;la()(Oe,"components",{QPage:Me.A,QInnerLoading:Ge.A,QSpinner:We.A,QSelect:Xe.A,QItem:Pe.A,QItemSection:ze.A,QItemLabel:$e.A,QInput:Ye.A,QCheckbox:Be.A,QSlideTransition:Qe.A,QBtn:He.A,QIcon:je.A,QTooltip:Je.A,QToggle:Ze.A,QHeader:ea.A})}}]);
|
|
||||||
BIN
ui/dist/spa/js/981.0247bab0.js.gz
vendored
1
ui/dist/spa/js/app.292f5316.js
vendored
@@ -1 +0,0 @@
|
|||||||
(()=>{var e={824:(e,t,r)=>{"use strict";r(939),r(6461),r(7049);var o=r(8633),n=r(7486),s=r(4187),a=r(1347);const i={__name:"App",setup(e){return(e,t)=>{const r=(0,a.g2)("router-view");return(0,a.uX)(),(0,a.Wv)(r)}}},l=i,c=l;var d=r(180),m=r(705);const u=(0,d.nY)(()=>{const e=(0,m.Ey)();return e});var p=r(6470),h=r(455);const f=[{path:"/",redirect:"/login"},{path:"/login",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"login",component:()=>Promise.all([r.e(121),r.e(713)]).then(r.bind(r,713))}]},{path:"/first-password-change",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"first-password-change",component:()=>Promise.all([r.e(121),r.e(330)]).then(r.bind(r,8330))}]},{path:"/password-reset/:token",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"password-reset",component:()=>Promise.all([r.e(121),r.e(238)]).then(r.bind(r,2238))}]},{path:"/app",component:()=>Promise.all([r.e(121),r.e(618)]).then(r.bind(r,5618)),children:[{path:"",name:"dashboard",component:()=>Promise.all([r.e(121),r.e(996),r.e(621)]).then(r.bind(r,2621)),meta:{permission:"system:read"}},{path:"permissions",name:"permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(548)]).then(r.bind(r,4548)),meta:{permission:"system:read"}},{path:"role-dept-permissions",name:"role-dept-permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(607)]).then(r.bind(r,5607)),meta:{permission:"user:update"}},{path:"role-dept-permissions/list",name:"role-dept-permissions-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(54)]).then(r.bind(r,54)),meta:{permission:"user:update"}},{path:"role-dept-permissions/editor",name:"role-dept-permissions-editor",component:()=>Promise.all([r.e(121),r.e(996),r.e(673)]).then(r.bind(r,7673)),meta:{permission:"user:update"}},{path:"user-permissions",name:"user-permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(465)]).then(r.bind(r,4465)),meta:{permission:"user:update"}},{path:"statementofaccount",name:"statementofaccount",component:()=>Promise.all([r.e(121),r.e(996),r.e(493)]).then(r.bind(r,8493)),meta:{permission:"finance:view"}},{path:"statementreport",name:"statementreport",component:()=>Promise.all([r.e(121),r.e(996),r.e(891)]).then(r.bind(r,1272)),meta:{permission:"finance:view"}},{path:"statementheaderreport",name:"statementheaderreport",component:()=>Promise.all([r.e(121),r.e(996),r.e(770)]).then(r.bind(r,2770)),meta:{permission:"finance:view"}},{path:"users",name:"user-gateway",component:()=>Promise.all([r.e(121),r.e(996),r.e(784)]).then(r.bind(r,1784)),meta:{permission:"user:view"}},{path:"users/list",name:"user-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(432)]).then(r.bind(r,8432)),meta:{permission:"user:view"}},{path:"users/new",name:"user-new",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),meta:{mode:"new",permission:"user:insert"}},{path:"users/edit/:id",name:"user-edit",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),props:!0,meta:{mode:"edit",permission:"user:update"}},{path:"users/view/:id",name:"user-view",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),props:!0,meta:{mode:"view",permission:"user:view"}},{path:"activity-logs",name:"activity-logs",component:()=>Promise.all([r.e(121),r.e(996),r.e(251)]).then(r.bind(r,5251)),meta:{permission:"user:view"}},{path:"test-mail",name:"test-mail",component:()=>Promise.all([r.e(121),r.e(996),r.e(629)]).then(r.bind(r,629)),meta:{permission:"user:insert"}},{path:"order-gateway",name:"order-gateway",component:()=>Promise.all([r.e(121),r.e(996),r.e(755)]).then(r.bind(r,2755)),meta:{permission:"order:view"}},{path:"order-entry/:orderHeaderID",name:"order-entry",component:()=>Promise.all([r.e(121),r.e(996),r.e(981)]).then(r.bind(r,6981)),props:!0,meta:{mode:"new",permission:"order:insert"}},{path:"order-edit/:orderHeaderID",name:"order-edit",component:()=>Promise.all([r.e(121),r.e(996),r.e(981)]).then(r.bind(r,6981)),props:!0,meta:{mode:"edit",permission:"order:update"}},{path:"order-list",name:"order-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(358)]).then(r.bind(r,2358)),meta:{permission:"order:view"}},{path:"order-bulk-close",name:"order-bulk-close",component:()=>Promise.all([r.e(121),r.e(996),r.e(398)]).then(r.bind(r,5398)),meta:{permission:"order:update"}},{path:"order-pdf/:id",name:"order-pdf",component:()=>Promise.all([r.e(121),r.e(996),r.e(950)]).then(r.bind(r,5950)),props:!0,meta:{permission:"order:export"}},{path:"change-password",name:"change-password",component:()=>Promise.all([r.e(121),r.e(996),r.e(486)]).then(r.bind(r,1486))}]},{path:"/:catchAll(.*)*",component:()=>Promise.all([r.e(121),r.e(28)]).then(r.bind(r,28))}],g=f;var b=r(5767),w=r(2584);const v=(0,p.wE)(function(){const e=(0,h.aE)({history:(0,h.Bt)(),routes:g});return e.beforeEach(async(e,t,r)=>{const o=(0,b.n)(),n=(0,w.o)();if(!0===e.meta?.public)return r();if(!o.isAuthenticated)return r("/login");if(o.mustChangePassword&&"/first-password-change"!==e.path)return r("/first-password-change");if(o.isAdmin)return r();if(!n.loaded)try{await n.fetchPermissions()}catch(e){console.error("Permission load failed",e)}const s=e.meta?.permission;if(!s)return r();const a=n.hasApiPermission(s);if(!a)return console.warn("⛔ ACCESS DENIED:",{path:e.fullPath,permission:s}),r("/unauthorized");r()}),e});async function y(e,t){const r=e(c);r.use(n.A,t);const o="function"===typeof u?await u({}):u;r.use(o);const a=(0,s.IG)("function"===typeof v?await v({store:o}):v);return o.use(({store:e})=>{e.router=a}),{app:r,store:o,router:a}}var P=r(4222),S=r(8564),A=r(9765),k=r(144);const E={config:{notify:{position:"top",timeout:2500}},lang:P.A,plugins:{Loading:S.A,Dialog:A.A,Notify:k.A}},C="/";async function x({app:e,router:t,store:r},o){let n=!1;const s=e=>{try{return t.resolve(e).href}catch(e){}return Object(e)===e?null:e},a=e=>{if(n=!0,"string"===typeof e&&/^https?:\/\//.test(e))return void(window.location.href=e);const t=s(e);null!==t&&(window.location.href=t,window.location.reload())},i=window.location.href.replace(window.location.origin,"");for(let s=0;!1===n&&s<o.length;s++)try{await o[s]({app:e,router:t,store:r,ssrContext:null,redirect:a,urlPath:i,publicPath:C})}catch(e){return e&&e.url?void a(e.url):void console.error("[Quasar] boot error:",e)}!0!==n&&(e.use(t),e.mount("#q-app"))}y(o.Ef,E).then(e=>{const[t,o]=void 0!==Promise.allSettled?["allSettled",e=>e.map(e=>{if("rejected"!==e.status)return e.value.default;console.error("[Quasar] boot error:",e.reason)})]:["all",e=>e.map(e=>e.default)];return Promise[t]([Promise.resolve().then(r.bind(r,6795))]).then(t=>{const r=o(t).filter(e=>"function"===typeof e);x(e,r)})})},2584:(e,t,r)=>{"use strict";r.d(t,{o:()=>c});r(939),r(4151);var o=r(705),n=r(2986),s=r(5767);const a={read:["read","view"],view:["read","view"],write:["write","insert"],insert:["write","insert"],update:["update"],delete:["delete"],export:["export"]};function i(e){return String(e||"").trim().toLowerCase()}function l(e){const t=i(e);return a[t]||[t]}const c=(0,o.nY)("permission",{state:()=>({routes:[],matrix:[],loaded:!1}),getters:{isAdmin(){const e=(0,s.n)();return!0===e.isAdmin},hasApiPermission:e=>t=>{const r=(0,s.n)();if(r.isAdmin)return!0;if(!e.loaded)return!1;if(!t)return!0;if(t.includes(":")){const[r,o]=t.split(":"),n=i(r),s=l(o);return e.matrix.some(e=>i(e.module)===n&&s.includes(i(e.action))&&!0===e.allowed)}const o=t;if(e.routes.some(e=>e.route===o&&e.can_access))return!0;const n=o.replace(/\/\d+/g,"/{id}");return!!e.routes.some(e=>e.route===n&&e.can_access)||e.routes.some(e=>e.can_access&&o.startsWith(e.route))},hasModule:e=>t=>{const r=(0,s.n)(),o=i(t);return!!r.isAdmin||!!e.loaded&&e.matrix.some(e=>i(e.module)===o&&!0===e.allowed)},hasPermission:e=>(t,r)=>{const o=(0,s.n)(),n=i(t),a=l(r);return!!o.isAdmin||!!e.loaded&&e.matrix.some(e=>i(e.module)===n&&a.includes(i(e.action))&&!0===e.allowed)}},actions:{async fetchPermissions(){const e=(0,s.n)();if(e.isAdmin)return this.routes=[],this.matrix=[],void(this.loaded=!0);try{const e=await n.Ay.get("/permissions/routes");this.routes=e.data||[];const t=await n.Ay.get("/permissions/effective");this.matrix=t.data||[],console.group("🔐 PERMISSION DEBUG"),console.log("API ROUTES:",this.routes),console.log("EFFECTIVE MATRIX:",this.matrix),console.groupEnd()}catch(e){console.error("❌ Permission load failed",e),this.routes=[],this.matrix=[]}finally{this.loaded=!0}},clear(){this.routes=[],this.matrix=[],this.loaded=!1}}})},2634:()=>{},2986:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>f,Jt:()=>c,RG:()=>h,bE:()=>d,hi:()=>p,yJ:()=>m});var o=r(9100),n=r(367),s=r(5767);const a="/api",i=o.A.create({baseURL:a,timeout:18e4,paramsSerializer:e=>n.stringify(e,{arrayFormat:"repeat"}),withCredentials:!0});i.interceptors.request.use(e=>{const t=(0,s.n)(),r=e.url||"",o=r.startsWith("/auth/login")||r.startsWith("/auth/refresh")||r.startsWith("/password/forgot")||r.startsWith("/password/reset");return!o&&t?.token&&(e.headers||={},e.headers.Authorization=`Bearer ${t.token}`),e});let l=!1;i.interceptors.response.use(e=>e,async e=>{const t=e?.response?.status,r="undefined"!==typeof Blob&&e?.response?.data instanceof Blob;if((t>=500||r)&&e){const r=String(e?.config?.method||"GET").toUpperCase(),o=e?.config?.url||"",n=await p(e);e.parsedMessage=n,console.error(`❌ API ${t||"-"} ${r} ${o}: ${n}`)}if(401===e?.response?.status&&!l){l=!0;try{(0,s.n)().clearSession()}finally{l=!1}}return Promise.reject(e)});const c=(e,t={},r={})=>i.get(e,{params:t,...r}).then(e=>e.data),d=(e,t={},r={})=>i.post(e,t,r).then(e=>e.data),m=(e,t={},r={})=>i.put(e,t,r).then(e=>e.data);async function u(e){if(!e)return"";if("undefined"!==typeof Blob&&e instanceof Blob)try{const t=(await e.text())?.trim();if(!t)return"";try{const e=JSON.parse(t);return e?.detail||e?.message||e?.error||t}catch{return t}}catch{return""}return"string"===typeof e?e.trim():"object"===typeof e&&(e?.detail||e?.message||e?.error)||""}async function p(e){let t=e?.parsedMessage||e?.response?.data?.detail||e?.response?.data?.message||e?.response?.data?.error||"";return t||(t=await u(e?.response?.data)),t||(t=e?.message||"Request failed"),t}const h=async(e,t={},r={})=>{try{const o=await i.get(e,{params:t,responseType:"blob",...r});return o.data}catch(e){const t=await p(e),r=new Error(t);throw r.status=e?.response?.status,r.original=e,r}},f=i},5767:(e,t,r)=>{"use strict";r.d(t,{n:()=>c});r(295);var o=r(705),n=r(2986),s=r(2584);function a(e){return String(e||"").trim().toLowerCase()}function i(e){return e&&"object"===typeof e?a(e.role_code??e.roleCode??e.RoleCode):""}function l(e){const t=String(e||"").trim();if(!t)return null;const r=t.split(".");if(3!==r.length)return null;try{const e=r[1].replace(/-/g,"+").replace(/_/g,"/").padEnd(4*Math.ceil(r[1].length/4),"="),t=atob(e);return JSON.parse(t)}catch{return null}}const c=(0,o.nY)("auth",{state:()=>{let e=null;try{const t=localStorage.getItem("user");t&&"undefined"!==t&&"null"!==t&&(e=JSON.parse(t))}catch{console.warn("⚠️ Invalid user in localStorage, cleared"),localStorage.removeItem("user")}return{token:localStorage.getItem("token"),user:e,forcePasswordChange:"1"===localStorage.getItem("forcePasswordChange")}},getters:{isAuthenticated:e=>!!e.token,mustChangePassword:e=>!!e.forcePasswordChange,isAdmin:e=>{const t=i(e.user);if(t)return"admin"===t;const r=l(e.token);return"admin"===a(r?.role_code)}},actions:{setSession({token:e,user:t}){this.token=e,this.user=t?{...this.user||{},...t}:null,this.forcePasswordChange=!!t?.force_password_change,localStorage.setItem("token",e),t?localStorage.setItem("user",JSON.stringify(t)):localStorage.removeItem("user"),localStorage.setItem("forcePasswordChange",this.forcePasswordChange?"1":"0")},clearSession(){this.token=null,this.user=null,this.forcePasswordChange=!1,localStorage.removeItem("token"),localStorage.removeItem("user"),localStorage.removeItem("forcePasswordChange"),(0,s.o)().clear()},async login(e,t){const r=await n.Ay.post("/auth/login",{username:e,password:t}),o=r?.token||r?.data?.token||r?.access_token||r?.data?.access_token,a=r?.user||r?.data?.user,i="string"===typeof o?o.trim():"",l=3===i.split(".").length;if(!i||!l)throw console.error("❌ LOGIN RESPONSE (unexpected):",r),new Error("Invalid login token");this.setSession({token:i,user:a});const c=(0,s.o)();return await c.fetchPermissions(),console.log("🔐 AUTH DEBUG",{isAdmin:this.isAdmin,users:c.hasPermission("/api/users/list"),orders:c.hasPermission("/api/orders/list"),logs:c.hasPermission("/api/activity-logs"),permissions:c.hasPermission("/api/permissions/matrix")}),!0}}})},6795:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var o=r(991),n=r(5115),s=r(5337),a=r(5188);r(8909);o.extend(n),o.extend(s),o.extend(a),o.locale("tr");const i=o}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var s=t[o]={exports:{}};return e[o].call(s.exports,s,s.exports,r),s.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,s)=>{if(!o){var a=1/0;for(d=0;d<e.length;d++){for(var[o,n,s]=e[d],i=!0,l=0;l<o.length;l++)(!1&s||a>=s)&&Object.keys(r.O).every(e=>r.O[e](o[l]))?o.splice(l--,1):(i=!1,s<a&&(a=s));if(i){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[o,n,s]}})(),(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}})(),(()=>{r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[]))})(),(()=>{r.u=e=>"js/"+(996===e?"chunk-common":e)+"."+{28:"1861262a",54:"92abb86e",238:"471bb852",251:"ec73d906",330:"aa2a2894",358:"629c6b73",398:"9152643f",432:"939f1ebd",465:"9a2899f5",486:"a263e6f6",493:"e8a952e1",548:"61f02757",607:"70ac7b00",618:"f36e56f9",621:"2108b55f",629:"2c27a0a3",673:"8f68da58",713:"5838996c",755:"7f443827",770:"4db9e143",784:"f73528a6",806:"754fb646",891:"181bb68a",913:"c0c6a5a1",950:"6078f4a8",981:"0247bab0",996:"451c93b1"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+e+"."+{54:"b237f020",358:"36bfde07",398:"961173a2",607:"8d5cccce",713:"e99910ab",784:"5916f342"}[e]+".css"})(),(()=>{r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e={},t="baggisowtfaresystem:";r.l=(o,n,s,a)=>{if(e[o])e[o].push(n);else{var i,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var m=c[d];if(m.getAttribute("src")==o||m.getAttribute("data-webpack")==t+s){i=m;break}}i||(l=!0,i=document.createElement("script"),i.charset="utf-8",r.nc&&i.setAttribute("nonce",r.nc),i.setAttribute("data-webpack",t+s),i.src=o),e[o]=[n];var u=(t,r)=>{i.onerror=i.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=u.bind(null,i.onerror),i.onload=u.bind(null,i.onload),l&&document.head.appendChild(i)}}})(),(()=>{r.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{r.p="/"})(),(()=>{if("undefined"!==typeof document){var e=(e,t,o,n,s)=>{var a=document.createElement("link");a.rel="stylesheet",a.type="text/css",r.nc&&(a.nonce=r.nc);var i=r=>{if(a.onerror=a.onload=null,"load"===r.type)n();else{var o=r&&r.type,i=r&&r.target&&r.target.href||t,l=new Error("Loading CSS chunk "+e+" failed.\n("+o+": "+i+")");l.name="ChunkLoadError",l.code="CSS_CHUNK_LOAD_FAILED",l.type=o,l.request=i,a.parentNode&&a.parentNode.removeChild(a),s(l)}};return a.onerror=a.onload=i,a.href=t,o?o.parentNode.insertBefore(a,o.nextSibling):document.head.appendChild(a),a},t=(e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],s=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(s===e||s===t))return n}var a=document.getElementsByTagName("style");for(o=0;o<a.length;o++){n=a[o],s=n.getAttribute("data-href");if(s===e||s===t)return n}},o=o=>new Promise((n,s)=>{var a=r.miniCssF(o),i=r.p+a;if(t(a,i))return n();e(o,i,null,n,s)}),n={524:0};r.f.miniCss=(e,t)=>{var r={54:1,358:1,398:1,607:1,713:1,784:1};n[e]?t.push(n[e]):0!==n[e]&&r[e]&&t.push(n[e]=o(e).then(()=>{n[e]=0},t=>{throw delete n[e],t}))}}})(),(()=>{var e={524:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var s=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=s);var a=r.p+r.u(t),i=new Error,l=o=>{if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var s=o&&("load"===o.type?"missing":o.type),a=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,n[1](i)}};r.l(a,l,"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,s,[a,i,l]=o,c=0;if(a.some(t=>0!==e[t])){for(n in i)r.o(i,n)&&(r.m[n]=i[n]);if(l)var d=l(r)}for(t&&t(o);c<a.length;c++)s=a[c],r.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return r.O(d)},o=globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var o=r.O(void 0,[121],()=>r(824));o=r.O(o)})();
|
|
||||||
BIN
ui/dist/spa/js/app.292f5316.js.gz
vendored
1
ui/dist/spa/js/chunk-common.451c93b1.js
vendored
BIN
ui/dist/spa/js/chunk-common.451c93b1.js.gz
vendored
34
ui/dist/spa/js/vendor.1e1ff7a5.js
vendored
BIN
ui/dist/spa/js/vendor.1e1ff7a5.js.gz
vendored
10
ui/package-lock.json
generated
@@ -7,7 +7,6 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "baggisowtfaresystem",
|
"name": "baggisowtfaresystem",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"hasInstallScript": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@quasar/extras": "^1.16.4",
|
"@quasar/extras": "^1.16.4",
|
||||||
"axios": "^1.12.2",
|
"axios": "^1.12.2",
|
||||||
@@ -20,7 +19,8 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@quasar/app-webpack": "^4.1.0",
|
"@quasar/app-webpack": "^4.1.0",
|
||||||
"autoprefixer": "^10.4.2"
|
"autoprefixer": "^10.4.2",
|
||||||
|
"baseline-browser-mapping": "^2.9.19"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18",
|
"node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18",
|
||||||
@@ -3856,9 +3856,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/baseline-browser-mapping": {
|
"node_modules/baseline-browser-mapping": {
|
||||||
"version": "2.8.12",
|
"version": "2.9.19",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.12.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
|
||||||
"integrity": "sha512-vAPMQdnyKCBtkmQA6FMCBvU9qFIppS3nzyXnEM+Lo2IAhG4Mpjv9cCxMudhgV3YdNNJv6TNqXy97dfRVL2LmaQ==",
|
"integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"No test specified\" && exit 0",
|
"test": "echo \"No test specified\" && exit 0",
|
||||||
"dev": "quasar dev",
|
"dev": "quasar dev",
|
||||||
"build": "quasar build",
|
"build": "quasar build"
|
||||||
"postinstall": "quasar prepare"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@quasar/extras": "^1.16.4",
|
"@quasar/extras": "^1.16.4",
|
||||||
@@ -24,7 +23,8 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@quasar/app-webpack": "^4.1.0",
|
"@quasar/app-webpack": "^4.1.0",
|
||||||
"autoprefixer": "^10.4.2"
|
"autoprefixer": "^10.4.2",
|
||||||
|
"baseline-browser-mapping": "^2.9.19"
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"last 10 Chrome versions",
|
"last 10 Chrome versions",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
import { defineConfig } from '#q-app/wrappers'
|
import { defineConfig } from '#q-app/wrappers'
|
||||||
|
|
||||||
export default defineConfig(() => {
|
export default defineConfig(() => {
|
||||||
|
const apiBaseUrl = (process.env.VITE_API_BASE_URL || '/api').trim()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
||||||
/* =====================================================
|
/* =====================================================
|
||||||
@@ -33,6 +35,9 @@ export default defineConfig(() => {
|
|||||||
===================================================== */
|
===================================================== */
|
||||||
build: {
|
build: {
|
||||||
vueRouterMode: 'hash',
|
vueRouterMode: 'hash',
|
||||||
|
env: {
|
||||||
|
VITE_API_BASE_URL: apiBaseUrl
|
||||||
|
},
|
||||||
|
|
||||||
esbuildTarget: {
|
esbuildTarget: {
|
||||||
browser: ['es2022', 'firefox115', 'chrome115', 'safari14'],
|
browser: ['es2022', 'firefox115', 'chrome115', 'safari14'],
|
||||||
@@ -52,14 +57,15 @@ export default defineConfig(() => {
|
|||||||
port: 9000,
|
port: 9000,
|
||||||
open: true,
|
open: true,
|
||||||
|
|
||||||
// DEV proxy (CORS’suz)
|
// DEV proxy (CORS'suz)
|
||||||
proxy: {
|
proxy: [
|
||||||
'/api': {
|
{
|
||||||
|
context: ['/api'],
|
||||||
target: 'http://localhost:8080',
|
target: 'http://localhost:8080',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
secure: false
|
secure: false
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
/* =====================================================
|
/* =====================================================
|
||||||
@@ -119,3 +125,4 @@ export default defineConfig(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/**
|
|
||||||
* THIS FILE IS GENERATED AUTOMATICALLY.
|
|
||||||
* 1. DO NOT edit this file directly as it won't do anything.
|
|
||||||
* 2. EDIT the original quasar.config file INSTEAD.
|
|
||||||
* 3. DO NOT git commit this file. It should be ignored.
|
|
||||||
*
|
|
||||||
* This file is still here because there was an error in
|
|
||||||
* the original quasar.config file and this allows you to
|
|
||||||
* investigate the Node.js stack error.
|
|
||||||
*
|
|
||||||
* After you fix the original file, this file will be
|
|
||||||
* deleted automatically.
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
// quasar.config.js
|
|
||||||
import { defineConfig } from "@quasar/app-webpack/wrappers";
|
|
||||||
var quasar_config_default = defineConfig(() => {
|
|
||||||
return {
|
|
||||||
// ✅ UYGULAMA KİMLİĞİ (WEB'DE GÖRÜNEN İSİM)
|
|
||||||
productName: "Baggi BSS",
|
|
||||||
productDescription: "Baggi Tekstil Business Support System",
|
|
||||||
// 🔹 Boot dosyaları
|
|
||||||
boot: ["axios", "dayjs"],
|
|
||||||
// 🔹 Global CSS
|
|
||||||
css: ["app.css"],
|
|
||||||
// 🔹 Ekstra icon/font setleri
|
|
||||||
extras: [
|
|
||||||
"roboto-font",
|
|
||||||
"material-icons"
|
|
||||||
],
|
|
||||||
// 🔹 Derleme Ayarları
|
|
||||||
build: {
|
|
||||||
vueRouterMode: "hash",
|
|
||||||
env: {
|
|
||||||
VITE_API_BASE_URL: "/api"
|
|
||||||
},
|
|
||||||
esbuildTarget: {
|
|
||||||
browser: ["es2022", "firefox115", "chrome115", "safari14"],
|
|
||||||
node: "node20"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 🔹 Geliştirme Sunucusu
|
|
||||||
devServer: {
|
|
||||||
server: { type: "http" },
|
|
||||||
port: 9e3,
|
|
||||||
open: true
|
|
||||||
},
|
|
||||||
// 🔹 Quasar Framework ayarları
|
|
||||||
framework: {
|
|
||||||
config: {
|
|
||||||
notify: { position: "top", timeout: 2500 }
|
|
||||||
},
|
|
||||||
lang: "tr",
|
|
||||||
plugins: ["Loading", "Dialog", "Notify"]
|
|
||||||
},
|
|
||||||
animations: [],
|
|
||||||
ssr: {
|
|
||||||
prodPort: 3e3,
|
|
||||||
middlewares: ["render"],
|
|
||||||
pwa: false
|
|
||||||
},
|
|
||||||
pwa: {
|
|
||||||
workboxMode: "GenerateSW"
|
|
||||||
},
|
|
||||||
capacitor: {
|
|
||||||
hideSplashscreen: true
|
|
||||||
},
|
|
||||||
electron: {
|
|
||||||
preloadScripts: ["electron-preload"],
|
|
||||||
inspectPort: 5858,
|
|
||||||
bundler: "packager",
|
|
||||||
builder: { appId: "baggisowtfaresystem" }
|
|
||||||
},
|
|
||||||
bex: {
|
|
||||||
extraScripts: []
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
quasar_config_default as default
|
|
||||||
};
|
|
||||||