Beszerzés menupont

This commit is contained in:
Sperg Tamás 2026-02-26 20:53:38 +01:00
parent b020675eba
commit 374dbdadac
3 changed files with 326 additions and 0 deletions

View File

@ -193,6 +193,7 @@ button {
border-radius: 5px;
padding: 30px;
display: none;
border: 1px solid #dddddd;
}
.cat-tab.form-section.active {

314
dashboard/acquire.php Normal file
View File

@ -0,0 +1,314 @@
<?php
include '../managers/menu.php';
if (!(UserHasPerm('acquire'))) {
StopAndDie();
}
if (isset($_POST["func"])) {
if (htmlspecialchars($_POST["func"]) == "LoadClimAir") {
$return_list = array();
/* Normál elemek */
$query = "SELECT item_id, name_in_db, car_type, car_brand, front_and_rear FROM pr_parameters WHERE category = 'ClimAir' and data_status = 1";
if ($result = $conn->query($query)) {
while ($c_climair = $result->fetch_assoc()) {
$c_item_id = $c_climair['item_id'];
$annual_query = mysqli_query($conn, "SELECT AVG(total_consumption) AS avg_total_consumption FROM statistics_annual WHERE item_id = '$c_item_id' AND year >= YEAR(CURDATE()) - 2");
$annual_data = mysqli_fetch_assoc($annual_query);
$avg_total_consumption = 0;
$is_new = false;
if ($annual_data != null && $annual_data['avg_total_consumption'] != null) {
$avg_total_consumption = $annual_data['avg_total_consumption'];
} else {
$is_new = true;
}
if ($avg_total_consumption == 0) {
$c_car_type = $c_climair['car_type'];
$c_car_brand = $c_climair['car_brand'];
$stmt = $conn->prepare("SELECT AVG(total_consumption) AS avg_total_consumption
FROM statistics_annual sa
WHERE sa.item_id IN (
SELECT item_id
FROM pr_parameters
WHERE category = 'ClimAir'
AND data_status = 1
AND car_type = ?
AND car_brand = ?
)
AND sa.year >= YEAR(CURDATE()) - 2");
$stmt->bind_param("ss", $c_car_type, $c_car_brand);
$stmt->execute();
$annual_data_type = $stmt->get_result();
while ($row = $annual_data_type->fetch_assoc()) {
$avg_total_consumption = $row['avg_total_consumption'];
}
}
$month_4_consumption = ($avg_total_consumption / 365) * (4 + 2) * 30; // Napi fogyás * 4 hónapos tervezés + 2 hónap beérkezési idő
$daily_query = mysqli_query($conn, "SELECT under_sales FROM statistics_daily WHERE item_id = '$c_item_id'");
$daily_data = mysqli_fetch_assoc($daily_query);
if ($daily_data != null) {
$month_4_consumption += $daily_data['under_sales'];
}
$set_items = splitSetitem_id($c_item_id);
if ($set_items != null) {
$return_list[] = [
"item_id" => $set_items['item1'],
"amount" => ceil($month_4_consumption),
"name_in_db" => $c_climair['name_in_db'],
"is_new" => $is_new
];
$return_list[] = [
"item_id" => $set_items['item2'],
"amount" => ceil($month_4_consumption),
"name_in_db" => $c_climair['name_in_db'],
"is_new" => $is_new
];
} else {
$return_list[] = [
"item_id" => $c_item_id,
"amount" => ceil($month_4_consumption),
"name_in_db" => $c_climair['name_in_db'],
"is_new" => $is_new
];
}
}
}
/* Return előkészítése */
$return_list = array_reduce($return_list, function($carry, $item) {
$id = $item['item_id'];
if (isset($carry[$id])) {
$carry[$id]['amount'] += $item['amount'];
} else {
$carry[$id] = $item;
}
return $carry;
}, []);
$return_list = array_values($return_list);
usort($return_list, function($a, $b) {
if ($a['is_new'] != $b['is_new']) {
return $b['is_new'] - $a['is_new'];
}
return $a['amount'] <=> $b['amount'];
});
echo json_encode(['result' => 'ok', 'return_list' => $return_list]);
}
exit();
}
?>
<!DOCTYPE html>
<html lang="hu" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/panel.css">
<script src="../js/feather-icons.js"></script>
<title>Kezelőfelület</title>
</head>
<style>
.loading .load {
display: flex;
}
.load {
border-radius: 5px;
position: absolute;
inset: 0;
background: rgba(255,255,255,0.5);
backdrop-filter: blur(3px);
display: none;
align-items: center;
justify-content: center;
z-index: 10;
}
.load::before {
content: '';
width: 30px;
height: 4px;
background: var(--panelcolor);
position: relative;
animation: lineToSquare 2s ease-in-out infinite;
}
@keyframes lineToSquare {
0% {
width: 30px; height: 4px;
transform: rotate(0deg);
border-radius: 2;
}
20% {
width: 30px; height: 4px;
transform: rotate(90deg);
border-radius: 2;
}
40% {
width: 30px; height: 30px;
transform: rotate(90deg);
border-radius: 5px;
}
60% {
width: 30px; height: 30px;
transform: rotate(180deg);
border-radius: 5px;
}
80% {
width: 30px; height: 30px;
transform: rotate(180deg);
border-radius: 50%;
}
100% {
width: 30px; height: 4px;
transform: rotate(180deg);
border-radius: 2;
}
}
</style>
<body>
<?php echo $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">
<!-- Tartalmi rész kezdete -->
<!-- KATEGÓRIA GOMBOK -->
<div class="category-tabs" style="grid-template-columns: repeat(1, 1fr);">
<div class="category-tab active" onclick="switchCategory(this, 'climair')">
<div class="category-tab-icon">
<img src="data:image/png;base64,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" alt="drop-shipping">
</div>
<div class="category-tab-title">ClimAir rendelés</div>
<div class="category-tab-desc">Generálja le a ClimAir rendeléshez szükséges excelt</div>
</div>
</div>
<!-- ClimAir -->
<div id="climair" class="cat-tab form-section active" style="position: relative;">
<div class="load"></div>
<div class="form-title">ClimAir rendelés</div>
<div class="form-desc">Generálja le a ClimAir rendeléshez szükséges excelt</div>
<a title="Excel export" style="position: absolute; right: 15px; top: 15px;"><i class="icon" onclick="exportCSV('climair');" style="width: 20px; height: 20px; opacity: 0.6;"><i data-feather="download" style="width: 20px; height:20px;"></i></i></a>
<table id="climair-table">
<thead>
<tr>
<th>Cikkszám</th>
<th>Mennyiség</th>
<th>Terméknév</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<br clear="all"><br><br>
<!-- Tartalmi rész vége -->
</div>
<script src="../js/default.js" type="text/javascript"></script>
<script src="../js/xlsx.full.min.js" type="text/javascript"></script>
<script type="text/javascript">
var ActiveCategory = "climair";
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;
InitCategorySpecificData();
}
feather.replace();
function InitCategorySpecificData() {
if (ActiveCategory == "climair") {
LoadClimAir();
}
}
InitCategorySpecificData();
function LoadClimAir() {
document.getElementById("climair").classList.add('loading');
const body = 'func=LoadClimAir';
get_POST_information("acquire.php", body, function(text) {
Loading(false);
document.getElementById("climair").classList.remove('loading');
let response = JSON.parse(text);
if (response.result == "ok") {
var table = document.getElementById('climair-table').getElementsByTagName('tbody')[0];
table.innerHTML = "";
response.return_list.forEach((item, i) => {
var newRow = table.insertRow();
var list_item_id = newRow.insertCell(0);
var list_amount = newRow.insertCell(1);
var list_name_in_db = newRow.insertCell(2);
list_item_id.innerHTML = item.item_id;
list_amount.innerHTML = item.amount;
list_amount.setAttribute('contenteditable', 'true');
list_name_in_db.innerHTML = item.name_in_db;
if (item.is_new) {
list_item_id.innerHTML += `<span style="margin-left: 10px; height: 20px; position: absolute; color: var(--panelcolor); font-size: 14px; font-weight: bold; margin-top: 3px; cursor: default;" title="Új termék">Új!</span>`;
}
});
} else {
GenerateAlerts("error", response.result);
}
}, function() {
Loading(false);
GenerateAlerts("error", "Hálózati hiba!");
});
}
function exportCSV(type) {
if (type == "climair") {
const table = document.getElementById('climair-table').cloneNode(true);
table.querySelectorAll('span').forEach(span => {
span.replaceWith('');
});
const workbook = XLSX.utils.table_to_book(table, {sheet: "ClimAir", raw: true});
workbook.Props = {
Author: "Szaturnusz",
Title: "ClimAir rendelés",
Company: "Szatuna Kft."
};
XLSX.writeFile(workbook, 'climair_order.xlsx');
}
}
</script>
</body>
</html>

View File

@ -6,6 +6,7 @@
/* Terméklista */
$linkProductCatalog = "'products'";
$linkItemCreator = "'itemcreator'";
$linkAcquire = "'acquire'";
$linkMontlyStat = "'monthlystat'";
/* Gyártás */
@ -97,6 +98,16 @@
</div>';
}
if (UserHasPerm('acquire')) {
if (!$isProduct) { $isProduct = true; $menuhtml .= '<p class="category">Terméklista</p>'; }
$menuhtml .= '
<div class="menubtn" onclick="window.location='.$linkAcquire.';">
'.MenuIndicator($linkAcquire).'
<img src="data:image/png;base64,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" alt="external-parcel-logistics-delivery-icongeek26-linear-colour-icongeek26">
<p>Beszerzés</p>
</div>';
}
if (UserHasPerm('statistics_menu')) {
if (!$isProduct) { $isProduct = true; $menuhtml .= '<p class="category">Terméklista</p>'; }
$menuhtml .= '