connect_error) { die(json_encode(['message' => "Connection failed: " . $conn->connect_error])); } // Calcolo rating dei fornitori con dettagli $query = " INSERT INTO supplier_ratings ( name, total_products, total_analyses, pass_analyses, fail_analyses, data_analyses, rating, calculation_date ) SELECT p.namesupplier AS name, COUNT(DISTINCT p.idproducts) AS total_products, COUNT(ap.idAnalysis_Project) AS total_analyses, SUM(CASE WHEN LOWER(ap.test_Rating) IN ('pass', 'p', 'comply', 'complies') THEN 1 ELSE 0 END) AS pass_analyses, SUM(CASE WHEN LOWER(ap.test_Rating) IN ('fail', 'f', 'doesn\'t comply') THEN 1 ELSE 0 END) AS fail_analyses, SUM(CASE WHEN LOWER(ap.test_Rating) NOT IN ('pass', 'p', 'comply', 'complies', 'fail', 'f', 'doesn\'t comply') THEN 1 ELSE 0 END) AS data_analyses, GREATEST(0, 10 - ( SUM( CASE WHEN LOWER(ap.test_Rating) IN ('fail', 'f', 'doesn\'t comply') THEN COALESCE(asv.severity, 1) * CASE WHEN COALESCE(asv.is_legal, 'N') = 'Y' THEN 1.5 ELSE 1.0 END ELSE 0 END ) * (1 + SUM(CASE WHEN LOWER(ap.test_Rating) IN ('fail', 'f', 'doesn\'t comply') THEN 1 ELSE 0 END) / NULLIF(COUNT(ap.idAnalysis_Project), 0)) / NULLIF(COUNT(ap.idAnalysis_Project), 0) * 100 )) AS rating, NOW() AS calculation_date FROM products p JOIN reports r ON p.idproducts = r.idproducts JOIN parts pt ON r.idreports = pt.idreports JOIN analysis_project ap ON pt.idParts = ap.idPart LEFT JOIN analysis_severity asv ON ap.idAnalysis = asv.idanalysisvocabulary GROUP BY p.namesupplier ON DUPLICATE KEY UPDATE total_products = VALUES(total_products), total_analyses = VALUES(total_analyses), pass_analyses = VALUES(pass_analyses), fail_analyses = VALUES(fail_analyses), data_analyses = VALUES(data_analyses), rating = VALUES(rating), calculation_date = VALUES(calculation_date); "; if ($conn->query($query) === TRUE) { echo json_encode(['message' => 'Ratings calculated successfully!']); } else { echo json_encode([ 'message' => $conn->error, 'exception' => 'mysqli_sql_exception', 'file' => __FILE__, 'line' => __LINE__ ]); } $conn->close();