Szatuna/dashboard/wh_add.php
2026-02-26 14:35:27 +01:00

1009 lines
42 KiB
PHP

<?php
include '../managers/menu.php';
if (!UserHasPerm('warehouse_add')) {
if (isset($_GET["iframe"])) {
header('X-Frame-Options: DENY');
} else {
StopAndDie();
}
}
// Távolság kalkulátor (Manhattan)
function min_distance($x, $y, $positions) {
$min = PHP_INT_MAX;
foreach ($positions as $pos) {
[$px, $py] = explode(':', $pos);
$dist = abs($x - $px) + abs($y - $py);
if ($dist < $min) $min = $dist;
}
return $min;
}
if (isset($_POST["func"])) {
if (htmlspecialchars($_POST["func"]) == "SearchWarehouse") {
$item_id = htmlspecialchars(str_replace(' ', '+', $_POST['item_id']));
$location = htmlspecialchars($_POST["location"]);
$amount = intval(htmlspecialchars($_POST["amount"])) ?? 1;
if ($amount == 0) { $amount = 1; }
$amount_left = $amount;
$WeHaveToPlaceHere = [];
$LocalData = json_decode(file_get_contents($currentUrl."/managers/prdb.json"), true);
/*
--------------------
Cikkszám adatok
--------------------*/
$item_id_config = array();
$sql = mysqli_query($conn,"SELECT name_in_db, item_id FROM pr_parameters WHERE item_id = '$item_id'");
$pr_parameters = mysqli_fetch_array($sql);
if ($pr_parameters != null) {
$item_id_config["name_in_db"] = $pr_parameters["name_in_db"];
$item_id = $pr_parameters["item_id"];
$sql = mysqli_query($conn,"SELECT size FROM pr_warehouse_parameters WHERE item_id = '$item_id'");
$pr_warehouse_parameters = mysqli_fetch_array($sql);
if ($pr_warehouse_parameters != null && $pr_warehouse_parameters[0] != "") {
$item_id_config["size"][] = $pr_warehouse_parameters[0];
$AcceptableSize = "";
foreach ($LocalData['BoxSizes'] as $box) {
if ($box['Name'] === $pr_warehouse_parameters[0]) {
$AcceptableSize = $box['ACCEPTABLE'];
break;
}
}
if ($AcceptableSize != "") {
if (strpos($AcceptableSize, ",") !== false) {
$item_id_config["size"] = array_merge(explode(",", $AcceptableSize), $item_id_config["size"]);
} else {
$item_id_config["size"][] = $AcceptableSize;
}
}
} else {
echo json_encode(["result" => "A cikkszámhoz nem lett megadva doboz méret!"]);
exit();
}
} else {
echo json_encode(["result" => "Nem létező cikkszámot adott meg!"]);
exit();
}
/*
--------------------
Raktár struktúrák
--------------------*/
$warehouse_config = array();
$query = "SELECT * FROM warehouse_structure";
if ($result = $conn->query($query)) {
while ($wh_structure = $result->fetch_assoc()) {
$warehouse_config[$wh_structure["warehouse_id"]] = [
"capacity" => $wh_structure["capacity"],
"location" => $wh_structure["location"],
"code" => $wh_structure["code"],
"row" => $wh_structure["row"],
"columns" => $wh_structure["columns"],
"status" => $wh_structure["status"],
"size" => $wh_structure["size"],
"name" => $wh_structure["name"],
"multiitem_row" => $wh_structure["multiitem_row"],
"SizeJSON" => json_decode(base64_decode($wh_structure["size"]), true)
];
}
}
/*
--------------------
Ha van olyan polc (cella) ahol az adott cikkszám megtalálható és nincsen tele
--------------------*/
$FindedWarehouseElement = array();
$query = "SELECT * FROM warehouse WHERE item_id = '$item_id' and amount != 0";
if ($result = $conn->query($query)) {
while ($warehouse = $result->fetch_assoc()) {
$warehouse_id = $warehouse['warehouse_id'];
$CanSave = true;
/* Kapacitás számolása */
$position = explode(":", $warehouse['position']); //($row + 1).':'.($column + 1);
$size_key = (intval($position[1]) - 1).':'.(intval($position[0]) - 1); // $column + $row
$capacity_left = $warehouse_config[$warehouse_id]["SizeJSON"]['globalCapacity'];
if (isset($warehouse_config[$warehouse_id]["SizeJSON"]['customCapacity'][$size_key])) {
$capacity_left = $warehouse_config[$warehouse_id]["SizeJSON"]['customCapacity'][$size_key];
}
$position = $warehouse['position'];
$sql = mysqli_query($conn,"SELECT SUM(amount) FROM warehouse WHERE position = '$position' and item_id != '$item_id' and amount != 0 and warehouse_id = '$warehouse_id'");
$otherElement = mysqli_fetch_array($sql);
if ($otherElement != null) {
$capacity_left = $capacity_left - $otherElement[0] - $warehouse['amount'];
} else {
$capacity_left = $capacity_left - $warehouse['amount'];
}
if ($capacity_left <= 0) {
$CanSave = false;
}
// Ellenőrzés: Doboz mérete
$slot_size = $warehouse_config[$warehouse_id]["SizeJSON"]['customSizes'][$size_key] ?? $warehouse_config[$warehouse_id]["SizeJSON"]['globalSize'];
if (!in_array($slot_size, $item_id_config["size"])) $CanSave = false;
/* Raktár hely ellenőrzése */
if ($warehouse_config[$warehouse_id]["location"] != $location && $location != "" && $location != "-1") {
$CanSave = false;
} else if ($warehouse_config[$warehouse_id]["status"] != 1) {
$CanSave = false;
}
/* Elérhető opció */
if ($CanSave) {
$FindedWarehouseElement[] = [
'wid' => $warehouse['wid'],
'warehouse_id' => $warehouse_id,
'position' => $warehouse['position'],
'amount' => $warehouse['amount'],
'capacity_left' => $capacity_left
];
}
}
}
usort($FindedWarehouseElement, function($a, $b) use ($amount_left) {
$a_enough = $a['capacity_left'] >= $amount_left;
$b_enough = $b['capacity_left'] >= $amount_left;
if ($a_enough && !$b_enough) return -1;
if (!$a_enough && $b_enough) return 1;
if ($a_enough && $b_enough) {
return $a['capacity_left'] <=> $b['capacity_left'];
}
return $b['capacity_left'] <=> $a['capacity_left'];
});
foreach ($FindedWarehouseElement as $slot) {
if ($amount_left <= 0) break;
$can_place = min($slot['capacity_left'], $amount_left);
if ($can_place > 0) {
$WeHaveToPlaceHere[] = [
'warehouse_id' => $slot['warehouse_id'],
'position' => $slot['position'],
'placed' => $can_place,
'size' => $item_id_config["size"]
];
$amount_left -= $can_place;
}
}
/*
--------------------
Megkeresi a legközelebbi üres polcot, és oda ajánlja
--------------------*/
$existing_positions = [];
$warehouse_counts = [];
foreach ($FindedWarehouseElement as $slot) {
$wid = $slot['warehouse_id'];
$existing_positions[$wid][] = $slot['position'];
if (!isset($warehouse_counts[$wid])) $warehouse_counts[$wid] = 0;
$warehouse_counts[$wid]++;
}
// Súlyozás: leggyakoribb warehouse_id előre
arsort($warehouse_counts);
$sorted_warehouses = array_keys($warehouse_counts);
foreach (array_keys($warehouse_config) as $wid) {
if (!in_array($wid, $sorted_warehouses)) {
$sorted_warehouses[] = $wid;
}
}
if ($amount_left > 0) {
foreach ($sorted_warehouses as $wid) {
if (isset($warehouse_config[$wid]["location"]) && $warehouse_config[$wid]["location"] != $location && $location != "" && $location != "-1") continue;
if (isset($warehouse_config[$wid]["status"]) && $warehouse_config[$wid]["status"] != 1) continue;
if (!isset($warehouse_config[$wid])) continue;
if ($amount_left <= 0) break;
$row = $warehouse_config[$wid]['row'];
$cols = $warehouse_config[$wid]['columns'];
$max_cap = $warehouse_config[$wid]['capacity'];
$GlobalSize = $warehouse_config[$wid]["SizeJSON"]['globalSize'];
$candidates = [];
for ($i = 1; $i <= $row; $i++) {
for ($j = 1; $j <= $cols; $j++) {
$pos = "$i:$j";
// Ellenőrzés: foglalt pozíció?
$safe_pos = mysqli_real_escape_string($conn, $pos);
$sql = mysqli_query($conn, "SELECT wid FROM warehouse WHERE position = '$safe_pos' AND warehouse_id = '$wid' AND amount != 0");
if (mysqli_fetch_array($sql) != null) continue;
// Ellenőrzés: Doboz mérete
$size_key = ($j - 1) . ':' . ($i - 1);
$slot_size = $warehouse_config[$wid]["SizeJSON"]['customSizes'][$size_key] ?? $GlobalSize;
if (!in_array($slot_size, $item_id_config["size"])) continue;
// Ellenőrzés: kapacitás
$cap_left = $warehouse_config[$wid]["SizeJSON"]['customCapacity'][$size_key] ?? $warehouse_config[$wid]["SizeJSON"]['globalCapacity'];
foreach ($FindedWarehouseElement as $slot) {
if ($slot['warehouse_id'] === $wid && $slot['position'] === $pos) {
$cap_left = (int)$slot['capacity_left'];
break;
}
}
if ($cap_left <= 0) continue;
$dist = isset($existing_positions[$wid]) ? min_distance($i, $j, $existing_positions[$wid]) : 0;
$candidates[] = [
'warehouse_id' => $wid,
'position' => $pos,
'capacity_left' => $cap_left,
'distance' => $dist,
'size' => $slot_size
];
}
}
// Közelebbi pozíciók előnyben, raktárpolc pazarlás számolás
usort($candidates, function($a, $b) use ($amount_left) {
$a_enough = $a['capacity_left'] >= $amount_left;
$b_enough = $b['capacity_left'] >= $amount_left;
if ($a_enough && !$b_enough) return -1;
if (!$a_enough && $b_enough) return 1;
$distCmp = $a['distance'] <=> $b['distance'];
if ($distCmp !== 0) return $distCmp;
if ($a_enough && $b_enough) {
return $a['capacity_left'] <=> $b['capacity_left'];
}
return $b['capacity_left'] <=> $a['capacity_left'];
});
foreach ($candidates as $c) {
if ($amount_left <= 0) break;
$exists = false;
foreach ($WeHaveToPlaceHere as $existing) {
if ($existing['warehouse_id'] == $c['warehouse_id'] && $existing['position'] == $c['position']) {
$exists = true;
break;
}
}
if ($exists) continue;
$can_place = min($amount_left, $c['capacity_left']);
$WeHaveToPlaceHere[] = [
'warehouse_id' => $c['warehouse_id'],
'position' => $c['position'],
'placed' => $can_place,
'size' => $c['size']
];
$amount_left -= $can_place;
}
}
}
/*
--------------------
A legközelebbi még nem teli polcra ajánlja
--------------------*/
if ($amount_left > 0) {
function candidate_exists($candidates, $warehouse_id, $position) {
foreach ($candidates as $c) {
if ($c['warehouse_id'] === $warehouse_id && $c['position'] === $position) {
return true;
}
}
return false;
}
foreach ($sorted_warehouses as $wid) {
if (isset($warehouse_config[$wid]["location"]) && $warehouse_config[$wid]["location"] != $location && $location != "" && $location != "-1") continue;
if (isset($warehouse_config[$wid]["status"]) && $warehouse_config[$wid]["status"] != 1) continue;
if (!isset($warehouse_config[$wid])) continue;
if ($amount_left <= 0) break;
$row = $warehouse_config[$wid]['row'];
$cols = $warehouse_config[$wid]['columns'];
$max_cap = $warehouse_config[$wid]['capacity'];
$GlobalSize = $warehouse_config[$wid]["SizeJSON"]['globalSize'];
$candidates = [];
for ($i = intval($warehouse_config[$wid]["multiitem_row"]); $i <= $row; $i++) {
for ($j = 1; $j <= $cols; $j++) {
$pos = "$i:$j";
//Ellenőrzés: Tettünk e már ide
if (candidate_exists($WeHaveToPlaceHere, $wid, $pos)) continue;
// Ellenőrzés: Doboz mérete
$size_key = ($j - 1) . ':' . ($i - 1);
$slot_size = $warehouse_config[$wid]["SizeJSON"]['customSizes'][$size_key] ?? $GlobalSize;
if (!in_array($slot_size, $item_id_config["size"])) continue;
// Ellenőrzés: 1 termék van a polcon?
$safe_pos = mysqli_real_escape_string($conn, $pos);
$sql = mysqli_query($conn, "SELECT COUNT(wid), SUM(amount) FROM warehouse WHERE position = '$safe_pos' AND warehouse_id = '$wid' AND amount != 0");
$sqlres = mysqli_fetch_array($sql);
if ($sqlres[0] == 0) continue;
// Ellenőrzés: kapacitás
$cap_left = intval($warehouse_config[$wid]["SizeJSON"]['customCapacity'][$size_key] ?? $warehouse_config[$wid]["SizeJSON"]['globalCapacity']) - $sqlres[1];
if ($cap_left <= 0) continue;
$dist = isset($existing_positions[$wid]) ? min_distance($i, $j, $existing_positions[$wid]) : 0;
$candidates[] = [
'warehouse_id' => $wid,
'position' => $pos,
'capacity_left' => $cap_left,
'distance' => $dist,
'wid_count' => $sqlres[0],
'size' => $slot_size
];
}
}
usort($candidates, function($a, $b) use ($amount_left) {
if ($a['wid_count'] !== $b['wid_count']) {
return $a['wid_count'] <=> $b['wid_count'];
}
$a_enough = $a['capacity_left'] >= $amount_left;
$b_enough = $b['capacity_left'] >= $amount_left;
if ($a_enough && !$b_enough) return -1;
if (!$a_enough && $b_enough) return 1;
$distCmp = $a['distance'] <=> $b['distance'];
if ($distCmp !== 0) return $distCmp;
if ($a_enough && $b_enough) {
return $a['capacity_left'] <=> $b['capacity_left'];
}
return $b['capacity_left'] <=> $a['capacity_left'];
});
foreach ($candidates as $c) {
if ($amount_left <= 0) break;
$exists = false;
foreach ($WeHaveToPlaceHere as $existing) {
if ($existing['warehouse_id'] == $c['warehouse_id'] && $existing['position'] == $c['position']) {
$exists = true;
break;
}
}
if ($exists) continue;
$can_place = min($amount_left, $c['capacity_left']);
$WeHaveToPlaceHere[] = [
'warehouse_id' => $c['warehouse_id'],
'position' => $c['position'],
'placed' => $can_place,
'size' => $c['size']
];
$amount_left -= $can_place;
}
}
}
/*
--------------------
Végső simítások
--------------------*/
$toplace = array();
foreach ($WeHaveToPlaceHere as $place) {
$warehouse_id = $place["warehouse_id"];
$toplace[] = [
"warehouse_loc" => $warehouse_config[$place["warehouse_id"]]["location"],
"warehouse_code" => $warehouse_config[$place["warehouse_id"]]["code"],
"warehouse_name" => $warehouse_config[$place["warehouse_id"]]["name"],
"warehouse_id" => $place["warehouse_id"],
"position" => $place["position"],
"placed" => $place["placed"],
"size" => $place["size"]
];
}
usort($toplace, function ($a, $b) {
$loc_cmp = strcmp($a['warehouse_loc'], $b['warehouse_loc']);
if ($loc_cmp !== 0) return $loc_cmp;
$name_cmp = strcmp($a['warehouse_name'], $b['warehouse_name']);
if ($name_cmp !== 0) return $name_cmp;
list($a_row, $a_col) = explode(":", $a['position']);
list($b_row, $b_col) = explode(":", $b['position']);
if ((int)$a_col === (int)$b_col) {
return (int)$a_row - (int)$b_row;
}
return (int)$a_col - (int)$b_col;
});
echo json_encode(["result" => "ok", "toplace" => $toplace, "amount_left" => $amount_left, "item_id" => $item_id]);
} else if (htmlspecialchars($_POST["func"]) == "PlaceIntoWarehouse") {
$item_id = htmlspecialchars(str_replace(' ', '+', $_POST['item_id']));
$placed = htmlspecialchars($_POST["placed"]);
$warehouse_id = htmlspecialchars($_POST["warehouse_id"]);
$position = htmlspecialchars($_POST["position"]);
$reason = htmlspecialchars($_POST["reason"]);
$result = array();
$sql = mysqli_query($conn, "SELECT * FROM warehouse_structure WHERE warehouse_id = '$warehouse_id'");
$WarehouseData = mysqli_fetch_array($sql);
$sql = mysqli_query($conn, "SELECT sum(amount) as amount FROM warehouse WHERE position = '$position' AND warehouse_id = '$warehouse_id'");
$intheloc = mysqli_fetch_array($sql);
$sizeJSON = json_decode(base64_decode($WarehouseData["size"]), true);
$capacity = intval($sizeJSON['globalCapacity']);
if (isset($sizeJSON['customCapacity'][intval(explode(':', $position)[1])-1 . ':' . intval(explode(':', $position)[0])-1])) {
$capacity = intval($sizeJSON['customCapacity'][intval(explode(':', $position)[1])-1 . ':' . intval(explode(':', $position)[0])-1]);
}
if ($intheloc != null && $intheloc["amount"] != null) {
$freespace = $capacity - $intheloc["amount"];
} else {
$freespace = $capacity;
}
$sql = mysqli_query($conn, "SELECT size, item_id FROM pr_warehouse_parameters WHERE item_id = '$item_id'");
$ItemSize = mysqli_fetch_array($sql);
$LocSize = '';
if (isset($sizeJSON['customSizes'][intval(explode(':', $position)[1])-1 . ':' . intval(explode(':', $position)[0])-1])) {
$LocSize = $sizeJSON['customSizes'][intval(explode(':', $position)[1])-1 . ':' . intval(explode(':', $position)[0])-1];
} else {
$LocSize = $sizeJSON['globalSize'];
}
if ($WarehouseData == null || $WarehouseData["status"] != 1) {
$result['result'] = "Nem létező, vagy inaktív raktárba szeretne betenni elemet!";
} else if ($ItemSize == null || $ItemSize[0] == "") {
$result['result'] = "A megadott terméknek nem lett megadva dobozméret!";
} else if ($freespace < $placed) {
$result['result'] = "A kijelölt helyen nincsen elegendő hely!";
} else {
$item_id = $ItemSize['item_id'];
$sql = mysqli_query($conn, "SELECT wid, amount FROM warehouse WHERE item_id = '$item_id' and warehouse_id = '$warehouse_id' and position = '$position'");
$IsThereProduct = mysqli_fetch_array($sql);
if ($IsThereProduct != null) {
$newamount = $placed + $IsThereProduct[1];
$wid = $IsThereProduct[0];
$sql = mysqli_query($conn, "UPDATE warehouse SET amount = '$newamount' WHERE wid = '$wid'");
} else {
$sql = mysqli_query($conn, "SELECT wid FROM warehouse WHERE amount = 0 LIMIT 1");
$WeCanUpdateOld = mysqli_fetch_array($sql);
if ($WeCanUpdateOld != null) {
$wid = $WeCanUpdateOld[0];
$sql = mysqli_query($conn, "UPDATE warehouse SET item_id = '$item_id', warehouse_id = '$warehouse_id', position = '$position', amount = '$placed' WHERE wid = '$wid'");
} else {
$sql = mysqli_query($conn, "INSERT INTO warehouse(item_id, warehouse_id, position, amount) VALUES ('$item_id', '$warehouse_id', '$position', '$placed')");
}
}
$loggerclass->writeLogWarehouse(['reason' => 'Doboz elhelyezés', 'reason_code' => 1,
'item_id' => $item_id,
'from_place' => $reason,
'to_place' => $WarehouseData['code'] . chr(64 + intval(explode(':', $position)[0])) . explode(':', $position)[1],
'amount_left' => $placed,
'amount_right' => $placed
]);
$result['result'] = "ok";
if ($reason != null && $reason != "") {
$reasonData = explode("#", $reason);
if ($reasonData[0] == "Production") {
$validCategories = [
'classic' => 'production_classic',
'injmold' => 'production_injmold',
'sporty' => 'production_sporty',
'boxing' => 'production_boxing'
];
if (!array_key_exists($reasonData[1], $validCategories)) {
$result['result'] = "A termék elhelyezve a raktárban, de az indoklás nem került elmentésre!";
} else {
$table = $validCategories[$reasonData[1]];
$pr_id = htmlspecialchars($reasonData[2]);
$sql = mysqli_query($conn, "SELECT db_revenue FROM $table WHERE pr_id = $pr_id");
$db_revenue = mysqli_fetch_array($sql);
if ($db_revenue != null) {
$new_db_revenue = intval($placed) + intval($db_revenue[0]);
$sql = mysqli_query($conn, "UPDATE $table SET db_revenue = $new_db_revenue WHERE pr_id = $pr_id");
}
}
}
}
}
echo json_encode($result);
}
exit();
}
$WarehouseLocSelect = '<option value="-1">-- Bármely --</option>';
$query = "SELECT DISTINCT location FROM warehouse_structure ORDER BY location ASC";
if ($result = $conn->query($query)) {
while ($warehouse = $result->fetch_assoc()) {
$WarehouseLocSelect = $WarehouseLocSelect.'<option value="'.$warehouse["location"].'">'.$warehouse["location"].'</option>';
}
}
?>
<!DOCTYPE html>
<html lang="hu" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/panel.css">
<title>Kezelőfelület</title>
</head>
<style>
.clearfix::after {
content: "";
display: table;
clear: both;
}
input:disabled {
color: #333333;
cursor: not-allowed;
}
.plusbtn {
width: calc(93% / 5);
border-radius: 12px;
font-weight: bold;
background: #3bb143 !important;
color: var(--toppanel);
}
.minusbtn {
width: calc(93% / 5);
border-radius: 12px;
font-weight: bold;
background: #e3242b !important;
color: var(--toppanel);
}
</style>
<body>
<?php echo isset($_GET["iframe"]) ? '' : $menuhtml; ?>
<div class="window closed" id="win">
<div class="topbar">
<p id="wintitle">Title</p>
<div class="btn fullscrn" onclick="fullscrn();" id="fullscrnbtn"></div>
<div class="btn close" onclick="closewin();"></div>
</div>
<div class="wapp" id="winapp"><div id="errorDIV"></div></div>
<div class="loading" id="winloading"></div>
</div>
<div class="loadingBG" id="loadingBG"><img src="../img/loading.gif"></div>
<div class="content" style="margin-right: 30px;">
<div id="errorDIV" style="z-index: 100; top: 50px; position: fixed; width: calc(100% - 260px);"></div>
<!-- Tartalmi rész kezdete -->
<!-- KATEGÓRIA GOMBOK -->
<div class="category-tabs" style="grid-template-columns: repeat(2, 1fr);">
<div class="category-tab active" onclick="switchCategory(this, 'box')" id="category_tab_box">
<div class="category-tab-icon">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEDklEQVR4nO1ZX2hTVxj/tWLBtdnmElpaoTKTNelaE2vWEqSEdN1KRB+kxY5saC3bZDBQUddg2DqH0IywUtjqQ2Uvg3W0FSeUOgp72MA9iQ8ixfWhD2KRreDGEJ/8wyff4STc3Obee5I2vbfMD36cc+73nXN/v/ude3LPCQB4KysrHwEghqx74TzzGvGM8YX+/n4BGcDXnGYxI57CMT8/TzMzM1nHTQC/FsAdAP9ocMcg7ncAf8mS2zcAPND0u6eL/1hVAPNkFBSQyWSEI/T6yxRtda/Cq9Vb6RVXNXW+tVuU3C4U561/KW+cnbXbRJv7NTbUibp2TAC/rauAq5930MpP8VXY9+ZrFGlrobvXZ0TJ7UJxF44E8sY52+cTbe53avCwqGvHxGYRoM2AbQKafTvpx7EvRKkq4NpXEYoFPblp82FPoz0CevbWZjsKcFtFgBn2baSAxUvddDnVngO3N5WAFUW8ELBWAT982kZ/jr1dMs4dekN5nA7f9vUXcPqAlyY+CpWMw5EG5XGa6ms49haAdyxwxlLA0NBQ3irjRIyPj1tnwOf3055weE0ItLYqx3Z2dVFXT48p2trbBTfmWLSAA729lDh2jHoTCcsbrRc6Y7E8DszJUoDRFNpaVfVfYmDgvNvjuW33FEomk9YZADAL4DsAT+Xnb0SuBG6Fl229MCjv/VRymVWeQgC+AXAfwN8AWmCfNUkeKwDGihHwRG5IArDfApLLk2IE/Gvzky+UiQeWAqamprKOo3CeHWVu09PTxgL0jiKtCsAJAEkNLgL4RYOLGl8KwBVZqsRPMLe5ubmyCejciGV0dHS0bAJi+i9Qsy0oxwEQX67FxJu+A5we6ZjQTYWUXIezqZ3VpT6X4svn2vMI8R44+ckHolQR0GgRbyqA07PWFI8MNOduOvhuY56P22YCBhXilZZR/UYk23nq2y8FzGK0hMxQanzmfy1gt3+XwKYTsHipm+Lh2ty5Dtf1JxKOFrBSRkIXXgjAagHfH99Dt76OFQXuw30/O+gra3zGTEA6nRaOvo4GOrl/V1HgPtw3GnCXNT6dThsLSKVStKWyouQfsWL7bikhnjlaTqHueFxs4p2E7nhcfQq5PR6q37EjBz4RCIXDGwqf35/HgTkpTaG1fguVGymVKQTgFIA+AI8B/AHAhY23anlmyqcSCclJeU/8syR/HUAN7LMayeGx5KQsgGx88kaZyL3ECwsL5HK5Hub90T05OUnDw8NZ8rdtfvJ6Yy7iVJA5Li0t0fLyMv8HLew8O0KhEAWDwayAETjPRpgbc4xGoxSJRPiY5X12PCvwtvM1p9kzI57U1NJCB/vfE+C6dDrNyIgneerqqDkYFOC6UwV4CvGsqKhY1KdGXnOUGfF8Dmg1HHVWg0UaAAAAAElFTkSuQmCC" alt="external-Storage-furniture-beshi-color-kerismaker">
</div>
<div class="category-tab-title">Dobozos raktár</div>
<div class="category-tab-desc">Dobozos raktárba tétel</div>
</div>
<div class="category-tab" onclick="switchCategory(this, 'foil')" id="category_tab_foil">
<div class="category-tab-icon">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFa0lEQVR4nO3bf0zUZRwH8Pf3933tFIKVabMy3QDBOZIcrYz+0C9McBpTKpw0MrGNO/QPWc0ZpFsm/mCTKQ0USChD8dcaP0xMbdVoyhmJVvhrZVP5sklpm8Idx6c91+kUEe88BiTPZ/vsdrt7nufzvJ7nbvfHfYAHh6pKQqUoCJ0A6FYKgFuVxBMAxmOIB+Xmim2Gsexhx2dYNbnzozmTKP/NKbdz7bzJNHG01SWLwn4M4fjbMEJMI77InGm4TcOwnUlI0PydY8O08SGur7Jepp75zivPkSqLZzFE4o19zeMSas/ctcGrhjHOnBlfaRrx3W0z41e2z5gR5O+8G6KeDur6ODmKembSlDEBAZAjMgL9GPOqTh+Yv+dUwj3rxMXJbYaR8zBzPiNJUuudn/2eKQiCC8AMfyemxvBEcoRfJUf4Sw9TmN/r5eaKfg+yWCw1sbGxzvLyCtq3b/89WVm5k9LS0khRlOsArH4X5ZiU7ndRgArgcQAhAPy+zv6tpKrtxcXFZJpt983m5ubbt0HTtGu6rp9TVXUngLcBjAmwhCcALJAkaYeu6y2SJHX0cgu7NU1r03X9OwAfApgGQOoXAEVRrpeUlPYJcPLkfwCrVq2mqqrdtH79ekpNTXWHhoZ6irVYLC0A8gC8xqZ8wJKs8FgAqzVNOykIQndQUFBHSkqKKy9vHe3aVUUHD9ZTQ8OPdOzYcTp8+AjV1NRSYWEhLV26lCIiIm6yMaxuWZbZISwA8OSAAJSWlt3z2qFD39CKFSsoJiamQ5IktyiKLl3X/9B1/QdN02plWd6jaVo1Oz1d1y+IougURdEdHR19g42rrz9Era1mn+v3zNOnf6HNm7dQcnKyi+Gx2hRFadd1vUlV1XrvYTw2IADmHXn+/AXP90Z+fr4HxW6305Il73ke2fONGzfS3r176ezZc35tuK9keEePfkvbt5fTmjWfeG5JcHAw+0H3wYADmEMkDSOe1VvAAXwJhQMoHKCEA5T6CND3+4ZKcgCDAxAHAAco4AC+hMIBFJ8BHvS+oZIcwOAAxAHAAQo4gC+hcADFZ4Bt20oGfXMcwOQAxAFMDkAcwOQANOAAW7duG/TNcQCTAxAHMDkAcQCTA9AgAGwd9M1xADMAADo1SSVH+Of0fdjI4QmwCxI5wjPoSJw8LAF6Cw6gcIDrHKDEN4DiYg5A/1sAe6N9e9axrKhhCWBrtH1mb7Q77cftTZmNmS8MO4AsR1aGrdF2w3bctnNZ47Ixww7gFkJWQ9Zo9IhhA3C/8Adg+vRXKTs7mzZtKqDq6hq6dOlyvxR8+fIVqq2t8/ydPjMzkxYuTKO5c1/vTkxMdKWmplJ6ejrl5ORSRUUFtbS09C+AqqrtRUVFfU7IFvU2T1Wrqvq1pmkXBUFwjxgxwjlr1iwX6w9oavrZr003N5/yQM6ePbvLarU6vfOxRot6SZLKAHwKIB9AEesM0XX9J0VR/hFFsTsqavLN5cuzqa7uAF250howQN3UqVOdZWVl922aYieiKMo1AHf26wUDSJEkqZwhMqAJEybeXLToXU/jArtVrL2GzcEe2f+M167No8WLMygsLKxDEARSVfUvWZa/APAWgFAfymVdYS8CyLFYLCcY2qhRozqTkpK6WEPGli2FtGPHlxQZGekGsM4nAADPSZLUFmDbnAAgGsD73vaY897T6vKOd7Pnuq7/zsABrAQQ491QIME6y+YLglBktVobrFbrRVmWOzRN+xOAX/2KBZFjg5y9NU7OiR5LuiL9hkc8CqaND+nsrXU2I+55BvArHvHIZM3TuT2ap/PmT6awp0Z2abJYhUc8NFkUdouC4Lz7sw+3JosOAM8OdoGBxL9TX9WsNMQWeQAAAABJRU5ErkJggg==" alt="external-foil-camping-flaticons-lineal-color-flat-icons-4">
</div>
<div class="category-tab-title">Fóliás raktár</div>
<div class="category-tab-desc">Fóliás raktár szerkesztő</div>
</div>
</div>
<!-- DOBOZOS -->
<div id="box" class="cat-tab form-section active">
<div class="form-title">Dobozos raktár</div>
<div style="width: 100%; min-height: 85px;">
<div style="display: inline; float: left;">
<p>Cikkszám: </p>
<input type="text" id="filter-item_id" placeholder="Cikkszám..." onkeyup="SyncItemID(this.value);" onkeydown="if (event.keyCode == 13) {SearchWarehouse();}" autocomplete="off" style="width: 147px; height: 17px;">
</div><div style="display: inline; float: left; padding-left: 15px;">
<p>Mennyiség: </p>
<input type="number" min="1" id="filter-amount" placeholder="Mennyiség..." onkeydown="if (event.keyCode == 13) {SearchWarehouse();}" autocomplete="off" style="width: 147px; height: 17px;">
</div><div style="display: inline; float: left; padding-left: 15px;">
<p>Raktárhely: </p>
<select id="filter-location"><?php echo $WarehouseLocSelect;?></select>
</div><div style="display: inline; float: left; padding-left: 15px;">
<p style="color: #f5f5f5;">: </p>
<button onclick="SearchWarehouse();">Optimális hely keresése</button>
</div>
</div>
<br clear="all"><br>
<div class="form-desc">Keressen optimális helyet, majd helyezze el a rendszer által ajánlott helyekre</div>
<div id="result_div" class="clearfix" style="display: none; visibility: invisible;">
<div style="width: 100%; margin-left: 10px; margin-top: 10px; display: inline; float: left;">
<div class="tables" style="width: 100%">
<table id="table">
<thead>
<tr style="top: 0px; position: sticky; z-index: 1;">
<th style="background-color: #ddd; width: 100px; color: #333; border: none; text-align: center;">Cikkszám</th>
<th>Mennyiség</th>
<th>Helye</th>
<th style="width: 100px;">Elhelyezés</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- FÓLIÁS -->
<div id="foil" class="cat-tab form-section">
<div class="form-title">Fóliás raktár adatlekérő</div>
<div style="width: 100%; min-height: 85px;">
<div style="display: inline; float: left;">
<p>Cikkszám: </p>
<input type="text" id="item_id_foil_warehouse" placeholder="Cikkszám..." onkeyup="SyncItemID(this.value);" onkeydown="if (event.keyCode == 13) {SearchFoilItem();}" autocomplete="off" style="width: 147px; height: 17px;">
</div><div style="display: inline; float: left; padding-left: 15px;">
<p style="color: #f5f5f5;">: </p>
<button onclick="SearchFoilItem();">Lekérés</button>
</div>
</div>
<br clear="all"><br>
<div class="form-desc">Írja be a keresett cikkszámot és kérje le az adatokat</div>
<div id="result_div_foil" class="clearfix" style="display: none; visibility: invisible;">
<div style="width: 100%; margin-left: 10px; margin-top: 10px; display: inline; float: left;">
<div class="tables" style="width: 100%">
<table id="table_foil">
<thead>
<tr style="top: 0px; position: sticky; z-index: 1;">
<th style="background-color: #ddd; width: 75px; color: #333; border: none; text-align: center;">Helye</th>
<th style="width: 250px; text-align: center;">Bal oldal <span style="opacity: 0.6; font-size: small;">db</span></th>
<th style="width: 250px; text-align: center;">Jobb oldal <span style="opacity: 0.6; font-size: small;">db</span></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<br clear="all"><br><br>
<!-- Tartalmi rész vége -->
</div>
<script src="../js/default.js" type="text/javascript"></script>
<script type="text/javascript">
var ActiveCategory = "warranty";
var IsIframe = <?php echo isset($_GET["iframe"]) ? 'true' : 'false'; ?>;
function switchCategory(element, categoryId) {
document.querySelectorAll('.category-tab').forEach(tab => tab.classList.remove('active'));
element.classList.add('active');
document.querySelectorAll('.form-section').forEach(section => section.classList.remove('active'));
document.getElementById(categoryId).classList.add('active');
ActiveCategory = categoryId;
sendHeight();
}
/* Doboz */
function SearchWarehouse() {
Loading();
var item_id = document.getElementById("filter-item_id").value;
var location = document.getElementById("filter-location").value;
var amount = document.getElementById("filter-amount").value;
const body = 'func=SearchWarehouse&item_id=' + encodeURIComponent(item_id).replace(/%20/g, '+') + '&location=' + encodeURIComponent(location).replace(/%20/g, '+') + '&amount=' + amount;
get_POST_information("wh_add.php", body, function(text) {
let response = JSON.parse(text);
Loading(false);
if (response.result == "ok") {
document.getElementById("result_div").style.display = "unset";
document.getElementById("result_div").style.visibility = "visible";
var table = document.getElementById('table').getElementsByTagName('tbody')[0];
table.innerHTML = "";
const data = response.toplace;
data.forEach(item => {
const warehouse_loc = item.warehouse_loc;
const warehouse_code = item.warehouse_code;
const warehouse_name = item.warehouse_name;
const position = item.position;
const placed = item.placed;
const warehouse_id = item.warehouse_id;
var PlaceCode = warehouse_code + NumberToABC(position.split(":")[0]) + padWithZero(position.split(":")[1]);
var newRow = table.insertRow();
var newCell_1 = newRow.insertCell(0);
var newCell_2 = newRow.insertCell(1);
var newCell_5 = newRow.insertCell(2);
var newCell_6 = newRow.insertCell(3);
var RowID = item_id+'-'+placed+'-'+warehouse_id+'-'+position;
newRow.id = RowID;
newCell_1.innerHTML = response.item_id;
newCell_1.setAttribute('style', 'text-align: center; background-color: #f2f2f2; border: none; color: #818181; width: 100px;');
newCell_2.innerHTML = placed;
newCell_2.style.padding = "8px 16px";
newCell_5.innerHTML = PlaceCode;
newCell_5.style.cursor = "pointer";
newCell_5.title = warehouse_loc + " / " + warehouse_name + " / " + NumberToABC(position.split(":")[0]) + ":" + padWithZero(position.split(":")[1]);
newCell_5.setAttribute('ondblclick', 'CreateAlertBox("Raktár hely", "<p>"+ this.title +"</p>");');
newCell_5.style.padding = "8px 16px";
newCell_6.innerHTML = "<span style='color: var(--panelcolor); cursor: pointer;' onclick='PlaceIntoWarehouse(\""+response.item_id+"\", \""+placed+"\", \""+warehouse_id+"\", \""+position+"\", \""+RowID+"\")'>Elhelyeztem</span>";
});
if (response.amount_left != 0) {
GenerateAlerts("warning", "Nem sikerült elhelyezni " + response.amount_left + " elemet!", false);
}
sendHeight();
} else {
GenerateAlerts("error", response.result);
}
}, function() {
Loading(false);
GenerateAlerts("error", "Hálózati hiba!");
});
}
var InSavingProgress = [];
function PlaceIntoWarehouse(item_id, placed, warehouse_id, position, RowID = "") {
if (InSavingProgress.includes(RowID)) {
GenerateAlerts("info", "Mentés folyamatban...");
} else {
InSavingProgress.push(RowID);
var reason = "<?php echo $_GET["reason"] ?? ''; ?>";
const body = 'func=PlaceIntoWarehouse&item_id=' + encodeURIComponent(item_id).replace(/%20/g, '+') + '&placed=' + placed + '&warehouse_id=' + warehouse_id + '&position=' + position + '&reason=' + encodeURIComponent(reason).replace(/%20/g, '+');
get_POST_information("wh_add.php", body, function(text) {
let response = JSON.parse(text);
if (response.result == "ok") {
if (RowID != "") {
const index = InSavingProgress.indexOf(RowID);
if (index > -1) {
InSavingProgress.splice(index, 1);
}
document.getElementById(RowID).classList.add('strike-row');
}
window.parent.postMessage({ iframeBox: placed }, '*');
} else {
GenerateAlerts("error", response.result);
}
}, function() {
Loading(false);
GenerateAlerts("error", "Hálózati hiba!");
});
}
}
/* Foliás */
function SearchFoilItem() {
Loading();
var item_id = document.getElementById("item_id_foil_warehouse").value;
const body = 'func=SearchFoilItem&item_id=' + encodeURIComponent(item_id).replace(/%20/g, '+');
get_POST_information("warehouse.php", body, function(text) {
Loading(false);
let response = JSON.parse(text);
if (response.result == "ok") {
var table = document.getElementById('table_foil').getElementsByTagName('tbody')[0];
table.innerHTML = "";
document.getElementById("result_div_foil").style.display = "unset";
document.getElementById("result_div_foil").style.visibility = "visible";
response.data.forEach((warehouse, index) => {
let rightDisabled = warehouse.right_db <= 0 ? 'disabled' : '';
let leftDisabled = warehouse.left_db <= 0 ? 'disabled' : '';
let right10Disabled = warehouse.right_db <= 9 ? 'disabled' : '';
let left10Disabled = warehouse.left_db <= 9 ? 'disabled' : '';
var newRow = table.insertRow();
var newCell_2 = newRow.insertCell(0);
var newCell_3 = newRow.insertCell(1);
var newCell_4 = newRow.insertCell(2);
newCell_2.innerHTML = warehouse.place;
newCell_2.setAttribute('style', 'text-align: center; background-color: #f2f2f2; border: none; color: #818181; width: 75px;');
newCell_3.innerHTML = `
<button class="plusbtn" onclick="EditFoilItem(1, 0, ${warehouse.wid});">+1</button>
<button class="plusbtn" onclick="EditFoilItem(10, 0, ${warehouse.wid});">+10</button>
<span style="display: inline-block; width: calc(93% / 5); text-align: center; font-weight: bold;">${warehouse.left_db}</span>
<button class="minusbtn" onclick="EditFoilItem(-1, 0, ${warehouse.wid});" id="right_minus_btn_foil_warehouse_${index}" ${leftDisabled}>-1</button>
<button class="minusbtn" onclick="EditFoilItem(-10, 0, ${warehouse.wid});" id="right_minus_btn_foil_warehouse_${index}" ${left10Disabled}>-10</button>`;
newCell_3.style.padding = "5px 0px";
newCell_4.innerHTML = `
<button class="plusbtn" onclick="EditFoilItem(0, 1, ${warehouse.wid});">+1</button>
<button class="plusbtn" onclick="EditFoilItem(0, 10, ${warehouse.wid});">+10</button>
<span style="display: inline-block; width: calc(93% / 5); text-align: center; font-weight: bold;">${warehouse.right_db}</span>
<button class="minusbtn" onclick="EditFoilItem(0, -1, ${warehouse.wid});" id="right_minus_btn_foil_warehouse_${index}" ${rightDisabled}>-1</button>
<button class="minusbtn" onclick="EditFoilItem(0, -10, ${warehouse.wid});" id="right_minus_btn_foil_warehouse_${index}" ${right10Disabled}>-10</button>`;
newCell_4.style.padding = "5px 0px";
});
document.getElementById("item_id_foil_warehouse").value = item_id;
sendHeight();
} else {
GenerateAlerts("error", response.result);
}
}, function() {
Loading(false);
GenerateAlerts("error", "Hálózati hiba!");
});
}
function EditFoilItem(left, right, wid) {
Loading();
var reason = "<?php echo $_GET["reason"] ?? ''; ?>";
const body = 'func=EditFoilItem&left=' + left + '&right=' + right + '&wid=' + wid + '&reason=' + encodeURIComponent(reason).replace(/%20/g, '+');
get_POST_information("warehouse.php", body, function(text) {
let response = JSON.parse(text);
if (response.result != "ok") {
GenerateAlerts("error", response.result);
} else {
window.parent.postMessage({ iframeLeft: left }, '*');
window.parent.postMessage({ iframeRight: right }, '*');
document.getElementById("item_id_foil_warehouse").value = response.item_id;
SearchFoilItem();
}
}, function() {
GenerateAlerts("error", "Hálózati hiba!");
});
}
/* Egyéb */
function SyncItemID(item_id) {
if (<?php echo isset($_GET["item_id"]) ? 'true' : 'false'; ?>) {
item_id = "<?php echo $_GET["item_id"] ?? ''; ?>";
document.getElementById("filter-item_id").value = item_id;
document.getElementById("item_id_foil_warehouse").value = item_id;
document.getElementById("filter-item_id").disabled = true;
document.getElementById("item_id_foil_warehouse").disabled = true;
SearchFoilItem();
} else {
document.getElementById("filter-item_id").value = item_id;
document.getElementById("item_id_foil_warehouse").value = item_id;
document.getElementById("result_div").style.display = "none";
document.getElementById("result_div").style.visibility = "hidden";
document.getElementById("result_div_foil").style.display = "none";
document.getElementById("result_div_foil").style.visibility = "hidden";
}
}
SyncItemID('');
function sendHeight(height = null) {
var c_height = height;
if (IsIframe) {
if (c_height == null) {
c_height = document.querySelector('.content').scrollHeight;
}
window.parent.postMessage({ iframeHeight: c_height }, '*');
}
}
if (IsIframe) {
const content = document.querySelector('.content');
document.body.style.height = "unset";
document.documentElement.style.height = "unset";
content.style.marginLeft = "15px";
content.style.marginRight = "15px";
content.style.width = "calc(100% - 30px)";
content.style.position = "absolute";
var allowed_functions = '<?php echo isset($_GET["functions"]) ? $_GET["functions"] : ''; ?>';
var functions = allowed_functions.split(',');
functions = functions.filter(item => item === 'box' || item === 'foil');
if (functions.length == 0) {
sendHeight(0);
document.getElementById("category_tab_box").style.display = 'none';
document.getElementById("category_tab_foil").style.display = 'none';
document.getElementById("box").style.display = 'none';
document.getElementById("foil").style.display = 'none';
} else {
if (!functions.includes('box')) {
document.getElementById("category_tab_box").style.display = 'none';
document.getElementById("box").style.display = 'none';
document.getElementById("category_tab_foil").click();
}
if (!functions.includes('foil')) {
document.getElementById("category_tab_foil").style.display = 'none';
document.getElementById("foil").style.display = 'none';
}
sendHeight();
}
}
</script>
</body>
</html>