importify various fixing

This commit is contained in:
Claudio 2024-10-14 08:49:17 +02:00
parent fccdaada7e
commit d83f4e0e34
10 changed files with 244 additions and 155 deletions

View File

@ -17,6 +17,13 @@ if (count($his_info) > 0) {
$deleteQuery->addFilter("importcode", "=", "s", "" . $importcode . "");
$deleteQuery->execute();
$deleteQuery = new WA_MySQLi_Query($repnew);
$deleteQuery->Action = "delete";
$deleteQuery->Table = "`analysis_project`";
$deleteQuery->addFilter("importcode", "=", "s", "" . $importcode . "");
$deleteQuery->execute();
$deleteQuery = new WA_MySQLi_Query($repnew);
$deleteQuery->Action = "delete";

View File

@ -56,14 +56,14 @@ if (isset($_FILES['f_csv'])) {
if (count($arr_info) > 1) { //check excel rows
$arr_excel_columns = $arr_info[0];
$arr_need_columns = array();
foreach ($arr_associate as $item){
if($item['column_name'] == 'products_refnumber'){
foreach ($arr_associate as $item) {
if ($item['column_name'] == 'products_refnumber') {
$productsRefNumber_excelName = $item['headerfile'];
}
if($item['column_name'] == 'reportsNumberLab'){
if ($item['column_name'] == 'reportsNumberLab') {
$reportsNumberLab_excelName = $item['headerfile'];
}
if($item['column_name'] == 'partsCode'){
if ($item['column_name'] == 'partsCode') {
$partsCode_excelName = $item['headerfile'];
}
}
@ -151,7 +151,6 @@ if (isset($_FILES['f_csv'])) {
// 'importcode' => $importcode
// ]);
post_async($_SERVER['SERVER_NAME'] . ":" . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'] . "/../importify_bg_script.php", [
'arr_project' => json_encode($arr_total_products),
'arr_excel_columns' => json_encode($arr_excel_columns),

File diff suppressed because one or more lines are too long

View File

@ -168,10 +168,10 @@ foreach ($arr_total_products as $product) {
//insert to parts table
foreach ($arr_total_parts as $part) {
//check exist parts item
// Check if the part already exists
$part_no = $part[0][$idx_part_no_po];
$part_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$part_query->setQuery("SELECT * FROM parts WHERE partsCode='$part_no' and idreports='$idreports' and idproducts='$idproducts'");
$part_query->setQuery("SELECT * FROM parts WHERE partsCode='$part_no' AND idreports='$idreports' AND idproducts='$idproducts'");
$part_query->execute();
$part_info = $part_query->Results;
@ -179,109 +179,168 @@ foreach ($arr_total_products as $product) {
if (count($part_info) > 0) {
$idparts = $part_info[0]['idParts'];
} else { // have to insert new
} else {
// Build the `arr_part_need_idx` array with template data
$arr_part_need_idx = array();
for ($i = 0; $i < count($arr_associate); $i++) {
if ($arr_associate[$i]->table_name == "parts") {
array_push($arr_part_need_idx, array($arr_associate[$i]->column_name, array_search($arr_associate[$i]->headerfile, $arr_excel_columns)));
// Verifica se l'elemento ha un valore di template
array_push($arr_part_need_idx, array($arr_associate[$i]->column_name, array_search($arr_associate[$i]->headerfile, $arr_excel_columns), 0));
}
}
// Insert new part
$InsertQuery = new WA_MySQLi_Query($repnew);
$InsertQuery->Action = "insert";
$InsertQuery->Table = "`parts`";
$InsertQuery->bindColumn("partsCode", "s", $part[0][$idx_part_no_po] . "", "WA_DEFAULT");
$InsertQuery->bindColumn("idproducts", "i", "" . $idproducts . "", "WA_DEFAULT");
$InsertQuery->bindColumn("idreports", "i", "" . $idreports . "", "WA_DEFAULT");
$InsertQuery->bindColumn("importcode", "i", "" . $importcode . "", "WA_DEFAULT");
for ($i = 0; $i < count($arr_part_need_idx); $i++) {
$InsertQuery->bindColumn($arr_part_need_idx[$i][0], "s", $part[0][$arr_part_need_idx[$i][1]], "WA_DEFAULT");
$InsertQuery->Table = "parts";
$InsertQuery->bindColumn("partsCode", "s", $part_no, "WA_DEFAULT");
$InsertQuery->bindColumn("idproducts", "i", $idproducts, "WA_DEFAULT");
$InsertQuery->bindColumn("idreports", "i", $idreports, "WA_DEFAULT");
$InsertQuery->bindColumn("importcode", "i", $importcode, "WA_DEFAULT");
// Add template data for parts
foreach ($arr_part_need_idx as $item) {
if ($item[2] > 0) {
$InsertQuery->bindColumn($item[0], "s", $item[1], "WA_DEFAULT");
} else {
$InsertQuery->bindColumn($item[0], "s", $part[0][$item[1]], "WA_DEFAULT");
}
}
$InsertQuery->saveInSession("");
$InsertQuery->execute();
$part_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$part_query->setQuery("SELECT * FROM parts WHERE partsCode='$part_no' and idreports='$idreports' and idproducts='$idproducts'");
// Retrieve the newly inserted part ID
$part_query->setQuery("SELECT * FROM parts WHERE partsCode='$part_no' AND idreports='$idreports' AND idproducts='$idproducts'");
$part_query->execute();
$part_info = $part_query->Results;
if (count($part_info) > 0) {
$idparts = $part_info[0]['idParts'];
}
$idparts = $part_info[0]['idParts'] ?? '';
}
if ($idparts == "") {
die("server_error");
}
//----------- result_project table ------------------
// Iterate over each row in `part` to handle analysis and results
foreach ($part as $result_project) {
//check exist result_project item
// $result_project_query = new WA_MySQLi_RS("getquery", $repnew, 0);
// $sql_result_project_query = "SELECT * FROM result_project WHERE idPart='$idparts' and idreports='$idreports' and idproducts='$idproducts'";
//
$arr_result_project_need_idx = array();
// Extract analysis name from Excel and convert it into an analysis ID
$result_TestName = $result_project[array_search("result_TestName", $arr_excel_columns)] ?? '';
$group_code_index = array_search("analysisgroupcode", array_column($arr_associate, 'column_name'));
$group_code_val = $result_project[array_search($arr_associate[$group_code_index]->headerfile, $arr_excel_columns)];
$trim_group_code = str_replace("\n", "", str_replace("'", "\'", $group_code_val));
$analysis_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$analysis_query->setQuery("SELECT * FROM analysisvocabulary WHERE analysiscode LIKE '$trim_group_code'");
$analysis_query->execute();
$analysis_data = $analysis_query->Results;
$idanalysisvocabulary = 0;
if (count($analysis_data) > 0 && $trim_group_code != "") {
$idanalysisvocabulary = $analysis_data[0]['idanalysisvocabulary'];
} else {
$tmp_val = $result_project[array_search($arr_associate[$group_code_index]->headerfile, $arr_excel_columns)];
$trim_item = str_replace("\n", "", str_replace("'", "\'", $tmp_val));
$analysis_query->setQuery("SELECT * FROM analysisvocabulary WHERE nameanalysisvoc LIKE '$trim_item'");
$analysis_query->execute();
$analysis_data = $analysis_query->Results;
if (count($analysis_data) > 0) {
$idanalysisvocabulary = ($analysis_data[0]['refid'] == 0) ? $analysis_data[0]['idanalysisvocabulary'] : $analysis_data[0]['refid'];
}
}
// Check if an analysis already exists with the same parameters
$analysis_project_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$analysis_project_query->setQuery(
"SELECT * FROM analysis_project WHERE idPart='$idparts' AND idreports='$idreports' AND idproducts='$idproducts' AND result_TestName='$idanalysisvocabulary'"
);
$analysis_project_query->execute();
$analysis_project_info = $analysis_project_query->Results;
$idanalysis_project = "";
if (count($analysis_project_info) > 0) {
$idanalysis_project = $analysis_project_info[0]['idAnalysis_Project'];
} else {
// Build the `arr_analysis_project_need_idx` array with template data
$arr_analysis_project_need_idx = array();
for ($i = 0; $i < count($arr_associate); $i++) {
if ($arr_associate[$i]->table_name == "analysis_project") {
if ($arr_associate[$i]->column_name == "result_TestName") {
// Handle `result_TestName` with the ID of the analysis as it is already mapped.
array_push($arr_analysis_project_need_idx, array($arr_associate[$i]->column_name, $idanalysisvocabulary, 1));
} else {
// Map other fields using the headerfile index from the Excel columns.
array_push($arr_analysis_project_need_idx, array($arr_associate[$i]->column_name, array_search($arr_associate[$i]->headerfile, $arr_excel_columns), 0));
}
}
}
// Insert a new row into `analysis_project` with template data
$InsertQuery = new WA_MySQLi_Query($repnew);
$InsertQuery->Action = "insert";
$InsertQuery->Table = "analysis_project";
$InsertQuery->bindColumn("idPart", "i", $idparts, "WA_DEFAULT");
$InsertQuery->bindColumn("idproducts", "i", $idproducts, "WA_DEFAULT");
$InsertQuery->bindColumn("idreports", "i", $idreports, "WA_DEFAULT");
$InsertQuery->bindColumn("result_TestName", "i", $idanalysisvocabulary, "WA_DEFAULT");
$InsertQuery->bindColumn("importcode", "i", $importcode, "WA_DEFAULT");
// Add template data for `analysis_project`
foreach ($arr_analysis_project_need_idx as $item) {
if ($item[2] > 0) {
$InsertQuery->bindColumn($item[0], "s", $item[1], "WA_DEFAULT");
} else {
$InsertQuery->bindColumn($item[0], "s", $result_project[$item[1]], "WA_DEFAULT");
}
}
$InsertQuery->saveInSession("");
$InsertQuery->execute();
// Retrieve the newly inserted analysis ID
$analysis_project_query->setQuery("SELECT LAST_INSERT_ID() as idAnalysis_Project");
$analysis_project_query->execute();
$analysis_project_info = $analysis_project_query->Results;
$idanalysis_project = $analysis_project_info[0]['idAnalysis_Project'] ?? '';
}
if ($idanalysis_project == "") {
die("server_error");
}
// Build the `arr_result_project_need_idx` array with template data
$arr_result_project_need_idx = array();
for ($i = 0; $i < count($arr_associate); $i++) {
if ($arr_associate[$i]->table_name == "result_project") {
if ($arr_associate[$i]->column_name == "result_TestName") {
$group_code_index = array_search("analysisgroupcode", array_column($arr_associate, 'column_name'));
$group_code_val = $result_project[array_search($arr_associate[$group_code_index]->headerfile, $arr_excel_columns)];
$trim_group_code = str_replace("\n", "", str_replace("'", "\'", $group_code_val));
$analysis_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$analysis_query->setQuery("SELECT * FROM analysisvocabulary WHERE analysiscode like '$trim_group_code'");
$analysis_query->execute();
$analysis_data = $analysis_query->Results;
$ref_id = 0;
if (count($analysis_data) > 0 && $trim_group_code != "") {
$ref_id = $analysis_data[0]['idanalysisvocabulary'];
} else {
$tmp_val = $result_project[array_search($arr_associate[$i]->headerfile, $arr_excel_columns)];
$trim_item = str_replace("\n", "", str_replace("'", "\'", $tmp_val));
$analysis_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$analysis_query->setQuery("SELECT * FROM analysisvocabulary WHERE nameanalysisvoc like '$trim_item'");
$analysis_query->execute();
$analysis_data = $analysis_query->Results;
$ref_id = 0;
if (count($analysis_data) > 0) {
if($analysis_data[0]['refid'] == 0){
$ref_id = $analysis_data[0]['idanalysisvocabulary'];
}else{
$ref_id = $analysis_data[0]['refid'];
}
}
}
array_push($arr_result_project_need_idx, array($arr_associate[$i]->column_name, $ref_id, 1));
} else if ($arr_associate[$i]->column_name == "result_AnalytsName") {
if ($arr_associate[$i]->column_name == "result_AnalytsName") {
// Process `result_AnalytsName` and CAS
$cas_index = array_search("cas", array_column($arr_associate, 'column_name'));
$cas_val = $result_project[array_search($arr_associate[$cas_index]->headerfile, $arr_excel_columns)];
$trim_cas_val = str_replace("\n", "", str_replace("'", "\'", $cas_val));
$analysis_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$analysis_query->setQuery("SELECT * FROM compundsvocabulary WHERE cascompoundvocabulary like '%$trim_cas_val%'");
$analysis_query->execute();
$analysis_data = $analysis_query->Results;
$compound_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$compound_query->setQuery("SELECT * FROM compundsvocabulary WHERE cascompoundvocabulary LIKE '%$trim_cas_val%'");
$compound_query->execute();
$compound_data = $compound_query->Results;
$ref_id = 0;
if (count($analysis_data) > 0 && $trim_cas_val != "" && $trim_cas_val != "-") {
$ref_id = $analysis_data[0]['idcompoundsvocabulary'];
if (count($compound_data) > 0 && !empty($trim_cas_val) && $trim_cas_val != "-" && $trim_cas_val != "") {
$ref_id = $compound_data[0]['idcompoundsvocabulary'];
} else {
$tmp_val = $result_project[array_search($arr_associate[$i]->headerfile, $arr_excel_columns)];
$trim_item = str_replace("\n", "", str_replace("'", "\'", $tmp_val));
$analysis_query = new WA_MySQLi_RS("getquery", $repnew, 0);
$analysis_query->setQuery("SELECT * FROM compundsvocabulary WHERE namecompoundsvocabulary like '$tmp_val'");
$analysis_query->execute();
$compound_query->setQuery("SELECT * FROM compundsvocabulary WHERE namecompoundsvocabulary LIKE '$trim_item'");
$compound_query->execute();
$analysis_data = $analysis_query->Results;
$ref_id = 0;
if (count($analysis_data) > 0) {
if($analysis_data[0]['refid'] == 0){
$ref_id = $analysis_data[0]['idcompoundsvocabulary'];
}else{
$ref_id = $analysis_data[0]['refid'];
}
$compound_data = $compound_query->Results;
if (count($compound_data) > 0) {
$ref_id = ($compound_data[0]['refid'] == 0) ? $compound_data[0]['idcompoundsvocabulary'] : $compound_data[0]['refid'];
}
}
@ -291,34 +350,29 @@ foreach ($arr_total_products as $product) {
}
}
}
//
// foreach($arr_result_project_need_idx as $q) {
// $sql_result_project_query .= " and ".$q[0]."='".$q[0]."'";
// }
//
// $result_project_query->setQuery($sql_result_project_query);
// $result_project_query->execute();
//
// $result_project_info = $result_project_query->Results;
//
// if (count($result_project_info) == 0) {
// Insert each result into `result_project`, linking it to `idanalysis_project`
$InsertQuery = new WA_MySQLi_Query($repnew);
$InsertQuery->Action = "insert";
$InsertQuery->Table = "`result_project`";
$InsertQuery->bindColumn("idPart", "s", $idparts . "", "WA_DEFAULT");
$InsertQuery->bindColumn("idproducts", "i", "" . $idproducts . "", "WA_DEFAULT");
$InsertQuery->bindColumn("idreports", "i", "" . $idreports . "", "WA_DEFAULT");
$InsertQuery->bindColumn("importcode", "i", "" . $importcode . "", "WA_DEFAULT");
for ($i = 0; $i < count($arr_result_project_need_idx); $i++) {
if ($arr_result_project_need_idx[$i][2] > 0) {
$InsertQuery->bindColumn($arr_result_project_need_idx[$i][0], "s", $arr_result_project_need_idx[$i][1], "WA_DEFAULT");
$InsertQuery->Table = "result_project";
$InsertQuery->bindColumn("idPart", "i", $idparts, "WA_DEFAULT");
$InsertQuery->bindColumn("idproducts", "i", $idproducts, "WA_DEFAULT");
$InsertQuery->bindColumn("idreports", "i", $idreports, "WA_DEFAULT");
$InsertQuery->bindColumn("idanalysis_project", "i", $idanalysis_project, "WA_DEFAULT");
$InsertQuery->bindColumn("importcode", "i", $importcode, "WA_DEFAULT");
// Add data for `result_project`
foreach ($arr_result_project_need_idx as $item) {
if ($item[2] > 0) {
$InsertQuery->bindColumn($item[0], "s", $item[1], "WA_DEFAULT");
} else {
$InsertQuery->bindColumn($arr_result_project_need_idx[$i][0], "s", $result_project[$arr_result_project_need_idx[$i][1]], "WA_DEFAULT");
$InsertQuery->bindColumn($item[0], "s", $result_project[$item[1]], "WA_DEFAULT");
}
}
// Save and execute the insert for `result_project`
$InsertQuery->saveInSession("");
$InsertQuery->execute();
// }
}
}
}

View File

@ -16,10 +16,11 @@ if (isset($_POST['productId'])) {
// Query per ottenere le analisi associate a ogni report con LEFT JOIN su analysisvocabulary
$reportId = $report['idreports'];
$queryAnalysis = "
SELECT rp.*, av.nameanalysisvoc
FROM result_project rp
LEFT JOIN analysisvocabulary av ON rp.result_TestName = av.idanalysisvocabulary
WHERE rp.idreports = $reportId";
SELECT av.nameanalysisvoc, ap.test_Rating AS analysis_test_Rating
FROM result_project rp
LEFT JOIN analysis_project ap ON rp.idanalysis_project = ap.idAnalysis_Project
LEFT JOIN analysisvocabulary av ON ap.result_TestName = av.idanalysisvocabulary
WHERE rp.idreports = $reportId";
$resultAnalysis = $conn->query($queryAnalysis);
// Mappa per aggregare i risultati delle analisi in base a 'result_TestName' e calcolare il peggior rating
@ -28,7 +29,7 @@ if (isset($_POST['productId'])) {
$testName = $analysis['nameanalysisvoc'];
// Normalizza il rating per confrontare varianti diverse
$normalizedRating = strtoupper(trim($analysis['test_Rating']));
$normalizedRating = strtoupper(trim($analysis['analysis_test_Rating']));
// Gestiamo anche varianti come "Complies", "Doesn't Comply", "//" e "N/A"
if ($normalizedRating === 'P' || $normalizedRating === 'PASS' || $normalizedRating === 'COMPLIES') {

View File

@ -19,17 +19,23 @@ $reportDetails = $stmt->get_result()->fetch_assoc();
// Query per ottenere le parti e i risultati del report con il nome dell'analista e delle parti
$queryPartsAndResults = "
SELECT rp.*,
a.nameanalysisvoc AS testName,
cv.namecompoundsvocabulary AS analytsName,
pr.partsDescription,
rp.result_UnitofMeasure -- Aggiunge l'unità di misura
SELECT
rp.*,
a.nameanalysisvoc AS testName,
cv.namecompoundsvocabulary AS analytsName,
pr.partsDescription,
pr.partsCode,
rp.result_UnitofMeasure,
rp.result_AnalytsRating AS analytsRating -- Renamed the field for clarity
FROM result_project rp
LEFT JOIN analysisvocabulary a ON rp.result_TestName = a.idanalysisvocabulary
LEFT JOIN analysis_project ap ON rp.idanalysis_project = ap.idAnalysis_Project
LEFT JOIN analysisvocabulary a ON ap.result_TestName = a.idanalysisvocabulary
LEFT JOIN compundsvocabulary cv ON rp.result_AnalytsName = cv.idcompoundsvocabulary
LEFT JOIN parts pr ON rp.idPart = pr.idParts
WHERE rp.idreports = ?
ORDER BY rp.result_TestName, rp.idPart";
ORDER BY ap.result_TestName, rp.idPart;
";
$stmtParts = $conn->prepare($queryPartsAndResults);
$stmtParts->bind_param("i", $idreports);
@ -209,6 +215,7 @@ $partsAndResults = $stmtParts->get_result();
$currentPart = ''; // Variabile per tracciare la parte corrente
while ($row = $partsAndResults->fetch_assoc()) {
//print_r($row);
// Se il nome dell'analisi cambia, crea una nuova sezione per l'analisi
if ($currentTestName != $row['testName']) {
if ($currentTestName != '') {
@ -247,9 +254,9 @@ $partsAndResults = $stmtParts->get_result();
// Classificazione del rating
$ratingClass = '';
if (strtoupper($row['test_Rating']) == 'FAIL' || strtoupper($row['test_Rating']) == "DOESN'T COMPLY") {
if (strtoupper($row['analytsRating']) == 'FAIL' || strtoupper($row['analytsRating']) == "DOESN'T COMPLY" || strtoupper($row['analytsRating']) == "F") {
$ratingClass = 'rating-fail';
} elseif (strtoupper($row['test_Rating']) == 'PASS' || strtoupper($row['test_Rating']) == 'COMPLIES') {
} elseif (strtoupper($row['analytsRating']) == 'PASS' || strtoupper($row['analytsRating']) == 'COMPLIES' || strtoupper($row['analytsRating']) == 'P') {
$ratingClass = 'rating-pass';
} else {
$ratingClass = 'rating-ambiguous';
@ -257,7 +264,7 @@ $partsAndResults = $stmtParts->get_result();
// Stampa i dettagli dell'analita
echo '<tr>';
echo '<td>' . (!empty($row['analytsName']) ? $row['analytsName'] . ' (ID: ' . $row['result_AnalytsName'] . ')' : '&nbsp;') . '</td>';
echo '<td>' . (!empty($row['analytsName']) ? $row['analytsName'] . ' (CAS: ' . $row['cas'] . ')' : '&nbsp;') . '</td>';
echo '<td>' . (!empty($row['result_Value']) ? htmlspecialchars($row['result_Value'], ENT_QUOTES, 'UTF-8') : '&nbsp;');
// Aggiungi l'unità di misura se presente
@ -266,7 +273,7 @@ $partsAndResults = $stmtParts->get_result();
}
echo '</td>';
echo '<td class="' . $ratingClass . '">' . (!empty($row['test_Rating']) ? htmlspecialchars($row['test_Rating'], ENT_QUOTES, 'UTF-8') : '&nbsp;') . '</td>';
echo '<td class="' . $ratingClass . '">' . (!empty($row['analytsRating']) ? htmlspecialchars($row['analytsRating'], ENT_QUOTES, 'UTF-8') : '&nbsp;') . '</td>';
echo '</tr>';
}
@ -354,7 +361,7 @@ $partsAndResults = $stmtParts->get_result();
if (selectedRating === '' ||
(selectedRating === 'pass' && (ratingText === 'pass' || ratingText === 'complies')) ||
(selectedRating === 'fail' && (ratingText === 'fail' || ratingText === "doesn't comply")) ||
(selectedRating === 'ambiguous' && (ratingText === 'n/a' || ratingText === 'ambiguous' || ratingText === '//'))) {
(selectedRating === 'ambiguous' && (ratingText === 'n/a' || ratingText === 'data' || ratingText === '//'))) {
$(this).show();
visibleRows++;
} else {
@ -440,7 +447,7 @@ $partsAndResults = $stmtParts->get_result();
if (selectedRating === '' ||
(selectedRating === 'pass' && (ratingText === 'pass' || ratingText === 'complies')) ||
(selectedRating === 'fail' && (ratingText === 'fail' || ratingText === "doesn't comply")) ||
(selectedRating === 'ambiguous' && (ratingText === 'n/a' || ratingText === 'ambiguous' || ratingText === '//'))) {
(selectedRating === 'ambiguous' && (ratingText === 'n/a' || ratingText === 'data' || ratingText === '//'))) {
$(this).show();
} else {
$(this).hide();

View File

@ -9,10 +9,13 @@ $reportId = isset($_POST['reportId']) ? $_POST['reportId'] : 0;
// Query per ottenere le analisi associate al report, comprese le parti
$query = "
SELECT a.nameanalysisvoc AS name, rp.result_Rating AS finalRating
FROM result_project rp
LEFT JOIN analysisvocabulary a ON rp.result_TestName = a.idanalysisvocabulary
WHERE rp.idreports = ?";
SELECT
a.nameanalysisvoc AS name,
ap.test_Rating AS finalRating
FROM result_project rp
LEFT JOIN analysis_project ap ON rp.idanalysis_project = ap.idAnalysis_Project
LEFT JOIN analysisvocabulary a ON ap.result_TestName = a.idanalysisvocabulary
WHERE rp.idreports = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("i", $reportId);
$stmt->execute();
@ -24,23 +27,34 @@ $analysis = [];
// Raggruppa le analisi e seleziona il rating più restrittivo
while ($row = $result->fetch_assoc()) {
$name = $row['name'];
$rating = strtoupper($row['finalRating']); // Normalizziamo tutto in maiuscolo per uniformità
$rating = strtoupper(trim($row['finalRating'])); // Normalize to uppercase and trim spaces
// Convert specific terms into normalized ratings
if ($rating === 'COMPLIES') {
$rating = 'PASS';
}
// Initialize the rating if not set
if (!isset($analysis[$name])) {
// Se l'analisi non è ancora presente, la aggiungiamo
$analysis[$name] = $rating;
} else {
// Applica il rating più restrittivo: Fail > N/A > Pass
// Apply the most restrictive rating: Fail > Data > N/A > // > Pass
if ($analysis[$name] != 'FAIL' && ($rating == 'FAIL' || $rating == "DOESN'T COMPLY")) {
$analysis[$name] = 'FAIL';
} elseif ($analysis[$name] != 'FAIL' && $analysis[$name] != 'N/A' && ($rating == 'N/A' || $rating == '//')) {
} elseif ($analysis[$name] != 'FAIL' && $analysis[$name] != 'DATA' && $rating == 'DATA') {
$analysis[$name] = 'DATA';
} elseif ($analysis[$name] != 'FAIL' && $analysis[$name] != 'DATA' && $analysis[$name] != 'N/A' && $rating == 'N/A') {
$analysis[$name] = 'N/A';
} elseif ($analysis[$name] == 'PASS' && ($rating == 'PASS' || $rating == 'COMPLIES')) {
} elseif ($analysis[$name] != 'FAIL' && $analysis[$name] != 'DATA' && $analysis[$name] != 'N/A' && $analysis[$name] != '//' && $rating == '//') {
$analysis[$name] = '//';
} elseif ($analysis[$name] == 'PASS' && $rating == 'PASS') {
$analysis[$name] = 'PASS';
}
}
}
// Trasforma i dati in un array
$finalAnalysis = [];
foreach ($analysis as $name => $finalRating) {

View File

@ -308,7 +308,7 @@ $result = $conn->query($query);
ratingClass = 'bg-danger text-white';
} else if (analysis.finalRating === 'PASS') {
ratingClass = 'bg-success text-white';
} else if (analysis.finalRating === '//' || analysis.finalRating === 'N/A') {
} else if (analysis.finalRating === '//' || analysis.finalRating === 'N/A' || analysis.finalRating === 'DATA') {
ratingClass = 'bg-warning text-dark';
}

View File

@ -165,9 +165,10 @@ $failedReportsPercent = ($totalReports > 0) ? ($failedReports / $totalReports) *
// Statistic 4: Total number of tests performed (distinct tests)
$totalTestsQuery = "
SELECT COUNT(DISTINCT rp.idreports, rp.idPart, rp.result_TestName) AS totalTests
FROM result_project rp
LEFT JOIN reports r ON rp.idreports = r.idreports
SELECT COUNT(DISTINCT ap.idreports, ap.idPart, ap.result_TestName) AS totalTests
FROM analysis_project ap
LEFT JOIN result_project rp ON ap.idAnalysis_Project = rp.idanalysis_project
LEFT JOIN reports r ON ap.idreports = r.idreports
LEFT JOIN products p ON r.idproducts = p.idproducts
$filters
";
@ -176,12 +177,14 @@ $totalTests = $totalTestsResult->fetch_assoc()['totalTests'];
// Statistic 5: Number of 'fail' tests and percentage (case-insensitive for rating fail)
$failedTestsQuery = "
SELECT COUNT(DISTINCT rp.idreports, rp.idPart, rp.result_TestName) AS failedTests
FROM result_project rp
LEFT JOIN reports r ON rp.idreports = r.idreports
SELECT COUNT(DISTINCT ap.idreports, ap.idPart, ap.result_TestName) AS failedTests
FROM analysis_project ap
LEFT JOIN result_project rp ON ap.idAnalysis_Project = rp.idanalysis_project
LEFT JOIN reports r ON ap.idreports = r.idreports
LEFT JOIN products p ON r.idproducts = p.idproducts
$filters AND UPPER(rp.result_Rating) IN ('FAIL', 'F', 'DOESN\'T COMPLY')
$filters AND UPPER(ap.test_Rating) IN ('FAIL', 'F', 'DOESN\'T COMPLY')
";
$failedTestsResult = $conn->query($failedTestsQuery);
$failedTests = $failedTestsResult->fetch_assoc()['failedTests'];
$failedTestsPercent = ($totalTests > 0) ? ($failedTests / $totalTests) * 100 : 0;
@ -216,16 +219,18 @@ $otherReportsPie = $otherReportsPieResult->fetch_assoc()['otherReports'];
// Query to get the top 10 analyses with the most 'Fail' results
$topFailingAnalysisQuery = "
SELECT a.nameanalysisvoc AS analysisName, COUNT(DISTINCT rp.idreports, rp.idPart, rp.result_TestName) AS failCount
FROM result_project rp
LEFT JOIN reports r ON rp.idreports = r.idreports
SELECT a.nameanalysisvoc AS analysisName, COUNT(DISTINCT ap.idreports, ap.idPart, ap.result_TestName) AS failCount
FROM analysis_project ap
LEFT JOIN result_project rp ON ap.idAnalysis_Project = rp.idanalysis_project
LEFT JOIN reports r ON ap.idreports = r.idreports
LEFT JOIN products p ON r.idproducts = p.idproducts
LEFT JOIN analysisvocabulary a ON rp.result_TestName = a.idanalysisvocabulary
$filters AND UPPER(rp.result_Rating) IN ('FAIL', 'F', 'DOESN\'T COMPLY')
GROUP BY rp.result_TestName
LEFT JOIN analysisvocabulary a ON ap.result_TestName = a.idanalysisvocabulary
$filters AND UPPER(ap.test_Rating) IN ('FAIL', 'F', 'DOESN\'T COMPLY')
GROUP BY ap.result_TestName
ORDER BY failCount DESC
LIMIT 10
";
$topFailingAnalysisResult = $conn->query($topFailingAnalysisQuery);
$topFailingAnalysis = [];
while ($row = $topFailingAnalysisResult->fetch_assoc()) {
@ -379,16 +384,17 @@ while ($row = $numberLabsResult->fetch_assoc()) {
// New Query: Distribution of analyses (for pie chart)
$analysisDistributionQuery = "
SELECT a.nameanalysisvoc AS analysisName, COUNT(DISTINCT rp.idreports, rp.idPart, rp.result_TestName) AS totalTests
FROM result_project rp
LEFT JOIN analysisvocabulary a ON rp.result_TestName = a.idanalysisvocabulary
LEFT JOIN reports r ON rp.idreports = r.idreports
SELECT a.nameanalysisvoc AS analysisName, COUNT(DISTINCT ap.idreports, ap.idPart, ap.result_TestName) AS totalTests
FROM analysis_project ap
LEFT JOIN analysisvocabulary a ON ap.result_TestName = a.idanalysisvocabulary
LEFT JOIN reports r ON ap.idreports = r.idreports
LEFT JOIN products p ON r.idproducts = p.idproducts
$filters
GROUP BY rp.result_TestName
GROUP BY ap.result_TestName
ORDER BY totalTests DESC
";
$analysisDistributionResult = $conn->query($analysisDistributionQuery);
$analysisDistribution = [];
while ($row = $analysisDistributionResult->fetch_assoc()) {

BIN
vendor.zip Normal file

Binary file not shown.