DmitrMakeev commited on
Commit
132379e
·
verified ·
1 Parent(s): c8b8abb

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +60 -69
nutri_call.html CHANGED
@@ -444,20 +444,20 @@ legend {
444
 
445
  <script>
446
  let call_data;
447
-
448
- document.getElementById('calculate-btn').addEventListener('click', function() {
449
  console.log("=== НАЧАЛО ОБРАБОТКИ ===");
450
-
451
  // 1. Получаем значение точности округления с подробным логированием
452
  const roundingInput = document.getElementById('rounding-precision');
453
  console.log("Значение поля rounding-precision (raw):", roundingInput.value);
454
-
455
  const initialRounding = parseInt(roundingInput.value);
456
  console.log("Парсинг значения rounding (после parseInt):", initialRounding);
457
-
458
  const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
459
  console.log("Финальное значение точности (0-6):", roundingPrecision);
460
-
461
  // 2. Улучшенная функция для безопасного получения числового значения с логированием
462
  const getValue = (id) => {
463
  const element = document.getElementById(id);
@@ -466,21 +466,18 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
466
  return 0;
467
  }
468
  console.log(`Значение поля ${id}:`, element.value);
469
-
470
  const value = parseFloat(element.value);
471
  const result = isNaN(value) ? 0 : value;
472
-
473
  console.log(`Парсинг значения ${id}:`, result);
474
  return result;
475
  };
 
476
  // 3. Формируем данные для сервера с пошаговым логированием
477
  console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
478
-
479
  const fertilizerConstants = {
480
- "Кальциевая селитра": {
481
- "N (NO3-)": getValue('fert_ca_no3') / 100,
482
- "Ca": getValue('fert_ca_ca') / 100
483
- },
484
  "Калий азотнокислый": {
485
  "N (NO3-)": getValue('fert_kno3_no3') / 100,
486
  "K": getValue('fert_kno3_k') / 100
@@ -497,12 +494,12 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
497
  "P": getValue('fert_kh2po4_p') / 100,
498
  "K": getValue('fert_kh2po4_k') / 100
499
  },
500
- "Калий сернокислый": {
501
- "K": getValue('fert_k2so4_k') / 100,
502
- "S": getValue('fert_k2so4_s') / 100
503
  }
504
  };
505
-
506
  const profileSettings = {
507
  'P': getValue('profile_p'),
508
  'K': getValue('profile_k'),
@@ -514,20 +511,25 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
514
  'liters': parseInt(document.getElementById('liters-input').value) || 1,
515
  'rounding_precision': roundingPrecision
516
  };
517
-
518
  const requestData = {
519
  fertilizerConstants: fertilizerConstants,
520
  profileSettings: profileSettings
521
  };
522
-
523
  console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
524
-
525
  // 4. Проверка данных с подробным выводом
526
  console.log("=== ПРОВЕРКА ДАННЫХ ===");
527
-
528
- const requiredFertilizers = ["Кальциевая селитра", "Калий азотнокислый", "Аммоний азотнокислый",
529
- "Сульфат магния", "Монофосфат калия", "Калий сернокислый"];
530
-
 
 
 
 
 
531
  let hasErrors = false;
532
  for (const fert of requiredFertilizers) {
533
  if (!requestData.fertilizerConstants[fert]) {
@@ -537,7 +539,7 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
537
  console.log(`Удобрение ${fert} присутствует`);
538
  }
539
  }
540
-
541
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
542
  for (const field of requiredProfileFields) {
543
  if (isNaN(requestData.profileSettings[field])) {
@@ -547,18 +549,19 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
547
  console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
548
  }
549
  }
550
-
551
  console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
552
-
553
  if (hasErrors) {
554
  const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
555
  console.error(errorMsg);
556
  alert(errorMsg);
557
  return;
558
  }
 
559
  // 5. Отправка данных на сервер с полным логированием
560
  console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
561
-
562
  fetch('/calculation', {
563
  method: 'POST',
564
  headers: {
@@ -566,53 +569,45 @@ document.getElementById('calculate-btn').addEventListener('click', function() {
566
  },
567
  body: JSON.stringify(requestData)
568
  })
569
- .then(response => {
570
- console.log("Получен ответ от сервера. Статус:", response.status);
571
-
572
- if (!response.ok) {
573
- console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
574
- throw new Error(`HTTP error! status: ${response.status}`);
575
- }
576
- return response.json();
577
- })
578
- .then(data => {
579
- call_data = data;
580
- console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", call_data);
581
  // Выводим данные в форму
582
- data_out(call_data);
583
- // Проверяем, применилась ли точность округления
584
- console.log("Проверка округления в ответе:");
585
- if (data.fertilizers) {
586
- Object.entries(data.fertilizers).forEach(([name, values]) => {
587
- console.log(`Удобрение ${name}:`, values);
588
- });
589
- }
590
-
591
- // Здесь можно добавить обработку ответа
592
- })
593
- .catch(error => {
594
- console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
595
- alert("Ошибка при расчете: " + error.message);
596
- })
597
- .finally(() => {
598
- console.log("=== ЗАВЕРШЕНИЕ ОБРАБОТКИ ===");
599
- });
600
  });
601
 
602
-
603
-
604
-
605
  function data_out(response) {
606
-
607
-
608
  // Заполняем граммы для каждого удобрения
609
  const fertilizerGrams = {
610
- "Кальциевая селитра": "calcium_nitrate",
611
  "Калий азотнокислый": "potassium_nitrate",
612
  "Аммоний азотнокислый": "ammonium_nitrate",
613
  "Сульфат магния": "magnesium_sulfate",
614
  "Монофосфат калия": "monopotassium_phosphate",
615
- "Калий сернокислый": "potassium_sulfate"
616
  };
617
 
618
  for (const [fertName, gramsFieldId] of Object.entries(fertilizerGrams)) {
@@ -635,13 +630,9 @@ function data_out(response) {
635
 
636
  console.log("Данные успешно выведены в форму");
637
  }
638
-
639
-
640
-
641
  </script>
642
 
643
 
644
-
645
 
646
  </body>
647
  </html>
 
444
 
445
  <script>
446
  let call_data;
447
+
448
+ document.getElementById('calculate-btn').addEventListener('click', function () {
449
  console.log("=== НАЧАЛО ОБРАБОТКИ ===");
450
+
451
  // 1. Получаем значение точности округления с подробным логированием
452
  const roundingInput = document.getElementById('rounding-precision');
453
  console.log("Значение поля rounding-precision (raw):", roundingInput.value);
454
+
455
  const initialRounding = parseInt(roundingInput.value);
456
  console.log("Парсинг значения rounding (после parseInt):", initialRounding);
457
+
458
  const roundingPrecision = Math.min(Math.max(initialRounding || 3, 0), 6);
459
  console.log("Финальное значение точности (0-6):", roundingPrecision);
460
+
461
  // 2. Улучшенная функция для безопасного получения числового значения с логированием
462
  const getValue = (id) => {
463
  const element = document.getElementById(id);
 
466
  return 0;
467
  }
468
  console.log(`Значение поля ${id}:`, element.value);
469
+
470
  const value = parseFloat(element.value);
471
  const result = isNaN(value) ? 0 : value;
472
+
473
  console.log(`Парсинг значения ${id}:`, result);
474
  return result;
475
  };
476
+
477
  // 3. Формируем данные для сервера с пошаговым логированием
478
  console.log("=== ФОРМИРОВАНИЕ ДАННЫХ ДЛЯ СЕРВЕРА ===");
479
+
480
  const fertilizerConstants = {
 
 
 
 
481
  "Калий азотнокислый": {
482
  "N (NO3-)": getValue('fert_kno3_no3') / 100,
483
  "K": getValue('fert_kno3_k') / 100
 
494
  "P": getValue('fert_kh2po4_p') / 100,
495
  "K": getValue('fert_kh2po4_k') / 100
496
  },
497
+ "Сульфат кальция": { // Новое удобрение
498
+ "Ca": getValue('fert_caso4_ca') / 100,
499
+ "S": getValue('fert_caso4_s') / 100
500
  }
501
  };
502
+
503
  const profileSettings = {
504
  'P': getValue('profile_p'),
505
  'K': getValue('profile_k'),
 
511
  'liters': parseInt(document.getElementById('liters-input').value) || 1,
512
  'rounding_precision': roundingPrecision
513
  };
514
+
515
  const requestData = {
516
  fertilizerConstants: fertilizerConstants,
517
  profileSettings: profileSettings
518
  };
519
+
520
  console.log("=== ПОЛНЫЙ ОБЪЕКТ ДЛЯ ОТПРАВКИ ===", JSON.stringify(requestData, null, 2));
521
+
522
  // 4. Проверка данных с подробным выводом
523
  console.log("=== ПРОВЕРКА ДАННЫХ ===");
524
+
525
+ const requiredFertilizers = [
526
+ "Калий азотнокислый",
527
+ "Аммоний азотнокислый",
528
+ "Сульфат магния",
529
+ "Монофосфат калия",
530
+ "Сульфат кальция" // Новое удобрение
531
+ ];
532
+
533
  let hasErrors = false;
534
  for (const fert of requiredFertilizers) {
535
  if (!requestData.fertilizerConstants[fert]) {
 
539
  console.log(`Удобрение ${fert} присутствует`);
540
  }
541
  }
542
+
543
  const requiredProfileFields = ['P', 'K', 'Mg', 'Ca', 'S', 'NO3_RAT', 'TOTAL_NITROG'];
544
  for (const field of requiredProfileFields) {
545
  if (isNaN(requestData.profileSettings[field])) {
 
549
  console.log(`Параметр ${field} в порядке:`, requestData.profileSettings[field]);
550
  }
551
  }
552
+
553
  console.log("Параметр rounding_precision:", requestData.profileSettings.rounding_precision);
554
+
555
  if (hasErrors) {
556
  const errorMsg = "Пожалуйста, проверьте введенные данные. Обнаружены ошибки в форме. Смотрите консоль для деталей.";
557
  console.error(errorMsg);
558
  alert(errorMsg);
559
  return;
560
  }
561
+
562
  // 5. Отправка данных на сервер с полным логированием
563
  console.log("=== ОТПРАВКА ДАННЫХ НА СЕРВЕР ===");
564
+
565
  fetch('/calculation', {
566
  method: 'POST',
567
  headers: {
 
569
  },
570
  body: JSON.stringify(requestData)
571
  })
572
+ .then(response => {
573
+ console.log("Получен ответ от сервера. Статус:", response.status);
574
+
575
+ if (!response.ok) {
576
+ console.error("ОШИБКА СЕРВЕРА. Полный ответ:", response);
577
+ throw new Error(`HTTP error! status: ${response.status}`);
578
+ }
579
+ return response.json();
580
+ })
581
+ .then(data => {
582
+ call_data = data;
583
+ console.log("=== УСПЕШНЫЙ ОТВЕТ ОТ СЕРВЕРА ===", call_data);
584
  // Выводим данные в форму
585
+ data_out(call_data);
586
+ // Проверяем, применилась ли точность округления
587
+ console.log("Проверка округления в ответе:");
588
+ if (data.fertilizers) {
589
+ Object.entries(data.fertilizers).forEach(([name, values]) => {
590
+ console.log(`Удобрение ${name}:`, values);
591
+ });
592
+ }
593
+ })
594
+ .catch(error => {
595
+ console.error("=== ОШИБКА ПРИ ОБРАБОТКЕ ===", error);
596
+ alert("Ошибка при расчете: " + error.message);
597
+ })
598
+ .finally(() => {
599
+ console.log("=== ЗАВЕРШЕНИЕ ОБРАБОТКИ ===");
600
+ });
 
 
601
  });
602
 
 
 
 
603
  function data_out(response) {
 
 
604
  // Заполняем граммы для каждого удобрения
605
  const fertilizerGrams = {
 
606
  "Калий азотнокислый": "potassium_nitrate",
607
  "Аммоний азотнокислый": "ammonium_nitrate",
608
  "Сульфат магния": "magnesium_sulfate",
609
  "Монофосфат калия": "monopotassium_phosphate",
610
+ "Сульфат кальция": "calcium_sulfate" // Новое удобрение
611
  };
612
 
613
  for (const [fertName, gramsFieldId] of Object.entries(fertilizerGrams)) {
 
630
 
631
  console.log("Данные успешно выведены в форму");
632
  }
 
 
 
633
  </script>
634
 
635
 
 
636
 
637
  </body>
638
  </html>