['ad' => 'Kirik', 'min' => 0, 'max' => 1000], 2 => ['ad' => 'Rutubet (N)', 'min' => 0, 'max' => 1000], 3 => ['ad' => 'Hektolitre (N)', 'min' => 0, 'max' => 1000], 4 => ['ad' => 'Gluten', 'min' => 0, 'max' => 1000], 5 => ['ad' => 'Indeks', 'min' => 0, 'max' => 1000], 6 => ['ad' => 'Sedim1', 'min' => 0, 'max' => 1000], 7 => ['ad' => 'Sedim2', 'min' => 0, 'max' => 1000], 8 => ['ad' => 'FN', 'min' => 0, 'max' => 1000], 9 => ['ad' => 'FFN', 'min' => 0, 'max' => 1000], 10 => ['ad' => 'ZN', 'min' => 0, 'max' => 1000], 11 => ['ad' => 'Su Kaldırma (ETT)', 'min' => 0, 'max' => 1000], 12 => ['ad' => 'Direnç (ETT)', 'min' => 0, 'max' => 1000], 13 => ['ad' => 'Elastikiyet (ETT)', 'min' => 0, 'max' => 1000], 14 => ['ad' => 'Enerji (ETT)', 'min' => 0, 'max' => 1000], 15 => ['ad' => 'Su Kaldırma (Frog)', 'min' => 0, 'max' => 1000], 16 => ['ad' => 'Stabilite (Frog)', 'min' => 0, 'max' => 1000], 17 => ['ad' => 'Yumuşama (Frog)', 'min' => 0, 'max' => 1000], 18 => ['ad' => 'Gelişme Süresi (Frog)','min' => 0, 'max' => 1000], 19 => ['ad' => 'Sıcaklık (AML)', 'min' => 0, 'max' => 1000], 20 => ['ad' => 'Jelatinizasyon (AML)','min' => 0, 'max' => 1000], 21 => ['ad' => 'Protein (NIR)', 'min' => 0, 'max' => 1000], 22 => ['ad' => 'Kul (NIR)', 'min' => 0, 'max' => 1000], 23 => ['ad' => 'W (NIR)', 'min' => 0, 'max' => 1000], 24 => ['ad' => 'Sertlik (NIR)', 'min' => 0, 'max' => 1000], 25 => ['ad' => 'Gluten (NIR)', 'min' => 0, 'max' => 1000], 26 => ['ad' => 'Sedim (NIR)', 'min' => 0, 'max' => 1000], 27 => ['ad' => 'Renk (NIR)', 'min' => 0, 'max' => 1000] ]; $action = $_GET['action'] ?? ''; if ($action === 'save_config') { header('Content-Type: application/json; charset=utf-8'); $postData = json_decode(file_get_contents('php://input'), true); $name = $postData['name'] ?? ''; $data = $postData['data'] ?? []; if (!$name || empty($data)) { echo json_encode(['message' => 'Veri eksik.']); exit; } // percentSelect ve scalingInput değerleri $percentSelect = $data['percentSelect'] ?? 100; $scalingInput = $data['scalingInput'] ?? 100; // Form verilerini silo indeksine göre gruplandıralım (config_details için) $configDetails = []; foreach ($data as $key => $value) { if (preg_match('/^h(\d+)_(?!scaled)(.+)$/', $key, $matches)) { $index = $matches[1]; $field = $matches[2]; $configDetails[$index][$field] = $value; } } // Silo isimlerini almak için ortalama tablosundan veriler $stmt = $pdo->query("SELECT * FROM ortalama ORDER BY silo"); $siloRows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Aynı isimde konfigürasyon varsa güncelle, yoksa ekle (configs tablosu) $stmt = $pdo->prepare("SELECT id FROM configs WHERE name = :name"); $stmt->execute([':name' => $name]); $existing = $stmt->fetch(PDO::FETCH_ASSOC); if ($existing) { $config_id = $existing['id']; $stmt = $pdo->prepare("UPDATE configs SET percent_select = :percent_select, scaling_input = :scaling_input WHERE id = :id"); $stmt->execute([ ':percent_select' => $percentSelect, ':scaling_input' => $scalingInput, ':id' => $config_id ]); $stmt = $pdo->prepare("DELETE FROM config_details WHERE config_id = :config_id"); $stmt->execute([':config_id' => $config_id]); $stmt = $pdo->prepare("DELETE FROM config_nutrients WHERE config_id = :config_id"); $stmt->execute([':config_id' => $config_id]); } else { $stmt = $pdo->prepare("INSERT INTO configs (name, percent_select, scaling_input) VALUES (:name, :percent_select, :scaling_input)"); $stmt->execute([ ':name' => $name, ':percent_select' => $percentSelect, ':scaling_input' => $scalingInput ]); $config_id = $pdo->lastInsertId(); } // Her silo için detay verilerini ekle (config_details) foreach ($siloRows as $index => $silo) { $min = isset($configDetails[$index]['min']) ? $configDetails[$index]['min'] : 0; $max = isset($configDetails[$index]['max']) ? $configDetails[$index]['max'] : 100; $cost = isset($configDetails[$index]['cost']) ? $configDetails[$index]['cost'] : 1; $solution = isset($configDetails[$index]['solution']) ? $configDetails[$index]['solution'] : 0; $ton = isset($configDetails[$index]['ton']) ? $configDetails[$index]['ton'] : 0; $nutrientFields = ['avg_kirik','avg_rutubet','avg_hektolitre','avg_gluten','avg_indeks','avg_sedim1','avg_sedim2','avg_FN','avg_FFN','avg_ZN','avg_su_kaldirma_ett','avg_direnc_ett','avg_elestikiyet_ett','avg_enerji_ett','avg_su_kaldirma_frog','avg_stabilite_frog','avg_yumusama_frog','avg_gelisme_suresi_frog','avg_sicaklik_aml','avg_jelatinizasyon_aml','avg_protein_nir','avg_kul_nir','avg_w_nir','avg_sertlik_nir','avg_gluten_nir','avg_sedim_nir','avg_renk_nir']; $nutrients = []; foreach ($nutrientFields as $field) { $nutrients[$field] = isset($configDetails[$index][$field]) ? $configDetails[$index][$field] : 0; } $params = [ ':config_id' => $config_id, ':silo_index' => $index, ':silo' => $silo['silo'], ':min_percent' => $min, ':max_percent' => $max, ':cost' => $cost, ':solution' => $solution, ':ton' => $ton, ]; foreach ($nutrientFields as $field) { $params[":$field"] = $nutrients[$field]; } $stmt = $pdo->prepare("INSERT INTO config_details (config_id, silo_index, silo, min_percent, max_percent, cost, solution, ton, avg_kirik, avg_rutubet, avg_hektolitre, avg_gluten, avg_indeks, avg_sedim1, avg_sedim2, avg_FN, avg_FFN, avg_ZN, avg_su_kaldirma_ett, avg_direnc_ett, avg_elestikiyet_ett, avg_enerji_ett, avg_su_kaldirma_frog, avg_stabilite_frog, avg_yumusama_frog, avg_gelisme_suresi_frog, avg_sicaklik_aml, avg_jelatinizasyon_aml, avg_protein_nir, avg_kul_nir, avg_w_nir, avg_sertlik_nir, avg_gluten_nir, avg_sedim_nir, avg_renk_nir) VALUES (:config_id, :silo_index, :silo, :min_percent, :max_percent, :cost, :solution, :ton, :avg_kirik, :avg_rutubet, :avg_hektolitre, :avg_gluten, :avg_indeks, :avg_sedim1, :avg_sedim2, :avg_FN, :avg_FFN, :avg_ZN, :avg_su_kaldirma_ett, :avg_direnc_ett, :avg_elestikiyet_ett, :avg_enerji_ett, :avg_su_kaldirma_frog, :avg_stabilite_frog, :avg_yumusama_frog, :avg_gelisme_suresi_frog, :avg_sicaklik_aml, :avg_jelatinizasyon_aml, :avg_protein_nir, :avg_kul_nir, :avg_w_nir, :avg_sertlik_nir, :avg_gluten_nir, :avg_sedim_nir, :avg_renk_nir)"); $stmt->execute($params); } // Besin maddeleri için verileri kaydedelim (config_nutrients) foreach ($besinData as $id => $nutrient) { $bmin = isset($data["b{$id}_min"]) ? $data["b{$id}_min"] : 0; $bmax = isset($data["b{$id}_max"]) ? $data["b{$id}_max"] : 0; $bactual = isset($data["b{$id}_actual"]) ? $data["b{$id}_actual"] : 0; $stmt = $pdo->prepare("INSERT INTO config_nutrients (config_id, besin_id, besin_ad, min, max, actual) VALUES (:config_id, :besin_id, :besin_ad, :min, :max, :actual)"); $stmt->execute([ ':config_id' => $config_id, ':besin_id' => $id, ':besin_ad' => $nutrient['ad'], ':min' => $bmin, ':max' => $bmax, ':actual' => $bactual ]); } echo json_encode(['message' => 'Kayıt başarılı.']); exit; } if ($action === 'get_configs') { header('Content-Type: application/json; charset=utf-8'); $stmt = $pdo->query("SELECT id, name FROM configs ORDER BY id DESC"); echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC), JSON_UNESCAPED_UNICODE); exit; } if ($action === 'load_config') { header('Content-Type: application/json; charset=utf-8'); $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; $stmt = $pdo->prepare("SELECT percent_select, scaling_input FROM configs WHERE id = :id"); $stmt->execute([':id' => $id]); $configHeader = $stmt->fetch(PDO::FETCH_ASSOC); if (!$configHeader) { echo json_encode(['data' => null]); exit; } $percentSelect = $configHeader['percent_select']; $stmt = $pdo->prepare("SELECT * FROM config_details WHERE config_id = :config_id ORDER BY silo_index ASC"); $stmt->execute([':config_id' => $id]); $details = $stmt->fetchAll(PDO::FETCH_ASSOC); $flatData = []; foreach ($details as $detail) { $index = $detail['silo_index']; $flatData["h{$index}_min"] = $detail['min_percent']; $flatData["h{$index}_max"] = $detail['max_percent']; $flatData["h{$index}_cost"] = $detail['cost']; $flatData["h{$index}_solution"] = $detail['solution']; $flatData["h{$index}_ton"] = $detail['ton']; $nutrientFields = ['avg_kirik','avg_rutubet','avg_hektolitre','avg_gluten','avg_indeks','avg_sedim1','avg_sedim2','avg_FN','avg_FFN','avg_ZN','avg_su_kaldirma_ett','avg_direnc_ett','avg_elestikiyet_ett','avg_enerji_ett','avg_su_kaldirma_frog','avg_stabilite_frog','avg_yumusama_frog','avg_gelisme_suresi_frog','avg_sicaklik_aml','avg_jelatinizasyon_aml','avg_protein_nir','avg_kul_nir','avg_w_nir','avg_sertlik_nir','avg_gluten_nir','avg_sedim_nir','avg_renk_nir']; foreach ($nutrientFields as $field) { $flatData["h{$index}_{$field}"] = $detail[$field]; } } // Besin maddeleri verilerini de yükleyelim $stmt = $pdo->prepare("SELECT * FROM config_nutrients WHERE config_id = :config_id ORDER BY besin_id ASC"); $stmt->execute([':config_id' => $id]); $nutrientDetails = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($nutrientDetails as $nutrient) { $bid = $nutrient['besin_id']; $flatData["b{$bid}_min"] = $nutrient['min']; $flatData["b{$bid}_max"] = $nutrient['max']; $flatData["b{$bid}_actual"] = $nutrient['actual']; } $flatData['percentSelect'] = $percentSelect; $flatData['scalingInput'] = $configHeader['scaling_input']; echo json_encode(['data' => $flatData], JSON_UNESCAPED_UNICODE); exit; } if ($action === 'delete_config') { header('Content-Type: application/json; charset=utf-8'); $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; if ($id <= 0) { echo json_encode(['message' => 'Geçersiz id.']); exit; } // Önce ilgili detayları sil $stmt = $pdo->prepare("DELETE FROM config_details WHERE config_id = :id"); $stmt->execute([':id' => $id]); $stmt = $pdo->prepare("DELETE FROM config_nutrients WHERE config_id = :id"); $stmt->execute([':id' => $id]); // Sonra ana konfigürasyonu sil $stmt = $pdo->prepare("DELETE FROM configs WHERE id = :id"); $stmt->execute([':id' => $id]); echo json_encode(['message' => 'Silme başarılı.']); exit; } if ($action === 'wash_stock') { header('Content-Type: application/json; charset=utf-8'); $postData = json_decode(file_get_contents('php://input'), true); if (!$postData || !isset($postData['data'])) { echo json_encode(['message' => 'Veri eksik.']); exit; } $data = $postData['data']; foreach ($data as $entry) { $silo = $entry['silo']; $ton = floatval($entry['ton']); $stmt = $pdo->prepare("UPDATE toplamstok SET net_stok = net_stok - :ton WHERE silo = :silo"); $stmt->execute([':ton' => $ton, ':silo' => $silo]); } echo json_encode(['message' => 'Yıkama işlemi başarılı.']); exit; } $sql = "SELECT * FROM ortalama ORDER BY silo"; $stmt = $pdo->query($sql); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $hammaddeFields = [ ['key' => 'avg_kirik', 'label' => 'Kirik'], ['key' => 'avg_rutubet', 'label' => 'Rutubet (N)'], ['key' => 'avg_hektolitre', 'label' => 'Hektolitre (N)'], ['key' => 'avg_gluten', 'label' => 'Gluten'], ['key' => 'avg_indeks', 'label' => 'Indeks'], ['key' => 'avg_sedim1', 'label' => 'Sedim1'], ['key' => 'avg_sedim2', 'label' => 'Sedim2'], ['key' => 'avg_FN', 'label' => 'FN'], ['key' => 'avg_FFN', 'label' => 'FFN'], ['key' => 'avg_ZN', 'label' => 'ZN'], ['key' => 'avg_su_kaldirma_ett', 'label' => 'Su Kaldırma (ETT)'], ['key' => 'avg_direnc_ett', 'label' => 'Direnç (ETT)'], ['key' => 'avg_elestikiyet_ett', 'label' => 'Elastikiyet (ETT)'], ['key' => 'avg_enerji_ett', 'label' => 'Enerji (ETT)'], ['key' => 'avg_su_kaldirma_frog', 'label' => 'Su Kaldırma (Frog)'], ['key' => 'avg_stabilite_frog', 'label' => 'Stabilite (Frog)'], ['key' => 'avg_yumusama_frog', 'label' => 'Yumuşama (Frog)'], ['key' => 'avg_gelisme_suresi_frog', 'label' => 'Gelişme Süresi (Frog)'], ['key' => 'avg_sicaklik_aml', 'label' => 'Sıcaklık (AML)'], ['key' => 'avg_jelatinizasyon_aml', 'label' => 'Jelatinizasyon (AML)'], ['key' => 'avg_protein_nir', 'label' => 'Protein (NIR)'], ['key' => 'avg_kul_nir', 'label' => 'Kul (NIR)'], ['key' => 'avg_w_nir', 'label' => 'W (NIR)'], ['key' => 'avg_sertlik_nir', 'label' => 'Sertlik (NIR)'], ['key' => 'avg_gluten_nir', 'label' => 'Gluten (NIR)'], ['key' => 'avg_sedim_nir', 'label' => 'Sedim (NIR)'], ['key' => 'avg_renk_nir', 'label' => 'Renk (NIR)'] ]; $fieldMapping = [ 1 => 'avg_kirik', 2 => 'avg_rutubet', 3 => 'avg_hektolitre', 4 => 'avg_gluten', 5 => 'avg_indeks', 6 => 'avg_sedim1', 7 => 'avg_sedim2', 8 => 'avg_FN', 9 => 'avg_FFN', 10 => 'avg_ZN', 11 => 'avg_su_kaldirma_ett', 12 => 'avg_direnc_ett', 13 => 'avg_elestikiyet_ett', 14 => 'avg_enerji_ett', 15 => 'avg_su_kaldirma_frog', 16 => 'avg_stabilite_frog', 17 => 'avg_yumusama_frog', 18 => 'avg_gelisme_suresi_frog', 19 => 'avg_sicaklik_aml', 20 => 'avg_jelatinizasyon_aml', 21 => 'avg_protein_nir', 22 => 'avg_kul_nir', 23 => 'avg_w_nir', 24 => 'avg_sertlik_nir', 25 => 'avg_gluten_nir', 26 => 'avg_sedim_nir', 27 => 'avg_renk_nir' ]; ?>