diff --git a/assets/functions.php b/assets/functions.php index ddb464e..d1e9c25 100644 --- a/assets/functions.php +++ b/assets/functions.php @@ -2239,24 +2239,36 @@ $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); // ML data preparations // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -function traintotalMeasurement($messages){ +function traintotalMeasurement(){ -//total measurement internal array -$total_measurement = []; + include dirname(__FILE__,2).'/settings/settings.php'; -foreach ($messages as $message){ + //total measurement internal array + $total_measurement = []; + + //Connect to DB + $pdo = dbConnect($dbname); + + //GET DATA + $sql = 'SELECT h.rowID, h.description,h.equipmentid,p.productcode,e.hw_version FROM history h JOIN equipment e ON h.equipmentid = e.rowID JOIN products p ON e.productrowid = p.rowID where type="Maintenance_Test" and description like "%doubletestvalues%"'; + $stmt = $pdo->prepare($sql); + $stmt->execute(); + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); + + foreach ($messages as $message){ //Cleanup input array $dataset = json_decode($message['description'],true); $dataset = $dataset["doubletestvalues"]; foreach ($dataset as $measure){ //Filter out correct measurements if ($measure['pass'] === true){ - $measurementid = $message['equipmentid'].'-'.$message['rowID']; - $total_measurement[$measure['name']][$measurementid] = $measure['measure']; + $hw_version = (!empty($message['hw_version']))? $message['hw_version'] : 'blank'; + $measurementid = $message['rowID']; + $total_measurement[$message['productcode']][$hw_version][$measure['name']][$measurementid] = $measure['measure']; } } } -return $total_measurement; + return $total_measurement; } function statisticalAnalyses($total_measurement){ @@ -2265,20 +2277,24 @@ function statisticalAnalyses($total_measurement){ $total_results = []; //STATISTICAL ANALYSES INTERNAL ARRAY - foreach ($total_measurement as $key => $value){ - $average = $total_results[$key]['average'] = average($value); - $median = $total_results[$key]['median'] = calculateMedian($value); - $stdev = $total_results[$key]['stdev'] = standDeviation($value); - $total_results[$key]['n'] = count($value); + foreach ($total_measurement as $productcode => $versions){ + foreach ($versions as $version => $ver){ - //GET STDEV -/+ - $total_results[$key]['stdev-1'] = $average - $stdev; - $total_results[$key]['stdev+1'] = $average + $stdev; - $total_results[$key]['stdev-2'] = $average - (2*$stdev); - $total_results[$key]['stdev+2'] = $average + (2*$stdev); - $total_results[$key]['stdev-3'] = $average - (3*$stdev); - $total_results[$key]['stdev+3'] = $average + (3*$stdev); - } + foreach ($ver as $measurement => $value){ + $average = $total_results[$productcode][$version][$measurement]['average'] = average($value); + $median = $total_results[$productcode][$version][$measurement]['median'] = calculateMedian($value); + $stdev = $total_results[$productcode][$version][$measurement]['stdev'] = standDeviation($value); + $total_results[$productcode][$version][$measurement]['n'] = count($value); + //GET STDEV -/+ + $total_results[$productcode][$version][$measurement]['stdev-1'] = $average - $stdev; + $total_results[$productcode][$version][$measurement]['stdev+1'] = $average + $stdev; + $total_results[$productcode][$version][$measurement]['stdev-2'] = $average - (2*$stdev); + $total_results[$productcode][$version][$measurement]['stdev+2'] = $average + (2*$stdev); + $total_results[$productcode][$version][$measurement]['stdev-3'] = $average - (3*$stdev); + $total_results[$productcode][$version][$measurement]['stdev+3'] = $average + (3*$stdev); + } + } +} return $total_results; } @@ -2429,4 +2445,178 @@ foreach ($messages as $message){ } } } +} + +// +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// store measurement data into product_version ++++++++++ +// +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +function storeMeasurementProduct($total_results, $token){ + + include dirname(__FILE__,2).'/settings/settings.php'; + + $pdo = dbConnect($dbname); + + //Check if product version exists (else create) => store related measurement + foreach ($total_results as $products => $product){ + + //Product level + foreach ($product as $versions => $version){ + + //Version level + //Check version exist + $sql = 'SELECT p.*, pv.rowID as versionID, pv.productrowid as productID FROM products p JOIN products_versions pv ON p.rowID = pv.productrowid WHERE p.productcode = ? and version = ?;'; + $stmt = $pdo->prepare($sql); + $versions = ($versions != 'blank')? $versions : ''; + $stmt->execute([$products,$versions]); + $output = $stmt->fetchAll(PDO::FETCH_ASSOC); + + //Prep data for api call + $api_url = '/v2/products_versions/'; + $measurement = json_encode($version,JSON_UNESCAPED_UNICODE); + + if (!empty($output)){ + //Update version with latest measurement + $data = json_encode(array("rowID" => $output[0]['versionID'], "productrowid" => $output[0]['productID'], "status" => 1, "version" => $versions, "measurement" => $measurement), JSON_UNESCAPED_UNICODE); + ioApi($api_url,$data,$token); + } + else { + //Insert new version + + //GET PRODUCT ID + $sql = 'SELECT * FROM products WHERE productcode = ?'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$products]); + $output = $stmt->fetchAll(PDO::FETCH_ASSOC); + + //CALL API + $data = json_encode(array("productrowid" => $output[0]['rowID'], "status" => 1, "version" => $versions , "measurement" => $measurement), JSON_UNESCAPED_UNICODE); + ioApi($api_url,$data,$token); + } + } + } +} + +// +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// store measurement data into equipment data ++++++++++ +// +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +function storeMeasurementEquipment($serialnumber){ + + include dirname(__FILE__,2).'/settings/settings.php'; + + //Connect to DB + $pdo = dbConnect($dbname); + + //CHECK FOR SERIALNUMBER PROVIDED + $clause = (!empty($serialnumber) || $serialnumber !='')? 'e.serialnumber = "'.$serialnumber.'" AND': ''; + + //GET DATA + $sql = 'SELECT h.rowID, h.description,h.equipmentid,p.productcode,e.hw_version FROM history h JOIN equipment e ON h.equipmentid = e.rowID JOIN products p ON e.productrowid = p.rowID where '.$clause.' type="Maintenance_Test" and description like "%doubletestvalues%"'; + $stmt = $pdo->prepare($sql); + $stmt->execute(); + $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $tests[] =''; + foreach ($messages as $message){ + $dataset = json_decode($message['description'],true); + $dataset = $dataset["doubletestvalues"]; + foreach ($dataset as $measure){ + + //Filter out correct measurements + if ($measure['pass'] === true){ + $measurementid = $message['productcode'].'||'.$message['hw_version'].'||'.$message['equipmentid'].'||'.$message['rowID']; + $tests[$measurementid] [$measure['name']]= $measure['measure']; + } + } + } + + //COMPARISON -- CHECK DEVIATIONS FROM STANDARD + //LOOP over all test results + foreach ($tests as $test => $test_values){ + + //GET the productcode and version from Test result + if (str_contains($test,'||')){ + + $identification = explode('||',$test); + + //GET RELATED PRODUCT DATA + $sql = 'SELECT pv.measurement FROM products_versions pv JOIN products p ON pv.productrowid = p.rowID WHERE p.productcode = ? AND pv.version = ?'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$identification[0],$identification[1]]); + $product_measurements = $stmt->fetchAll(PDO::FETCH_ASSOC); + $product_measurements = $product_measurements[0]['measurement']; + + if (!empty($product_measurements)){ + //Only run when there is a product version found + $product_measurements = json_decode($product_measurements,true); + + $equipment_watchlist[] = ''; + + //Filter out non array or non objects + if (is_object($test_values) || is_array($test_values)){ + //get individual test_mesurements + foreach($test_values as $test_measurement => $measured_value){ + //Loop over the related product measurements + foreach($product_measurements as $product_measurement => $product_measured_values){ + //Compare measured test with product measured test + if ($test_measurement == $product_measurement){ + //Get the measured value from test + + if (($measured_value <= $product_measured_values['stdev-3']) && ($measured_value >= $product_measured_values['stdev+3'])){ + $equipment_watchlist[$test][] = array( + "measurement" => $test_measurement, + "value" => $measured_value, + "deviation" => 3 + ); + } + elseif ((($measured_value <= $product_measured_values['stdev-2']) && ($measured_value >= $product_measured_values['stdev-3'])) || (($measured_value >= $product_measured_values['stdev+2']) && ($measured_value <= $product_measured_values['stdev+3']))){ + $equipment_watchlist[$test][] = array( + "measurement" => $test_measurement, + "value" => $measured_value, + "deviation" => 2 + ); + } + elseif ((($measured_value <= $product_measured_values['stdev-1']) && ($measured_value >= $product_measured_values['stdev-2'])) || (($measured_value >= $product_measured_values['stdev+1']) && ($measured_value <= $product_measured_values['stdev+2']))){ + $equipment_watchlist[$test][] = array( + "measurement" => $test_measurement, + "value" => $measured_value, + "deviation" => 1 + ); + } + } + } + } + } + } + } + } + //STORE RESULTS IN EQUIPMENT DATA + foreach ($equipment_watchlist as $equipment => $data){ + //GET the equipmentid and historyid from watchlist + if (str_contains($equipment,'||')){ + $identification = explode('||',$equipment); + //json_encode array + $data = json_encode($data,JSON_UNESCAPED_UNICODE); + + //Check if record exists + $sql = 'SELECT * FROM equipment_data WHERE equipmentid = ? and historyid =?'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$identification[2],$identification[3]]); + $equipment_data = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (!empty($equipment_data)){ + //EXIST UPDATE + $sql = 'UPDATE equipment_data SET measurement = ? WHERE equipmentid = ? and historyid =?'; + } + else { + //EXIST INSERT + $sql = 'INSERT INTO equipment_data (measurement, equipmentid, historyid) VALUES (?,?,?)'; + } + + //EXECUTE QUERY + $stmt = $pdo->prepare($sql); + $stmt->execute([$data, $identification[2],$identification[3]]); + $equipment_data = $stmt->fetchAll(PDO::FETCH_ASSOC); + } + } } \ No newline at end of file diff --git a/equipment.php b/equipment.php index be50548..eeb40e1 100644 --- a/equipment.php +++ b/equipment.php @@ -24,6 +24,7 @@ $update_allowed = isAllowed($page ,$_SESSION['profile'],$_SESSION['permission'], $update_allowed_edit = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'U'); $delete_allowed = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'D'); $create_allowed = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'C'); +$view_product = isAllowed('product' ,$_SESSION['profile'],$_SESSION['permission'],'R'); //GET Details from URL $GET_VALUES = urlGETdetails($_GET) ?? ''; @@ -142,11 +143,11 @@ $view .= '
'.$responses->productcode.'
+'.(($view_product == 1)? ''.$responses->productcode.'':$responses->productcode).'
'.$responses->productname.'
+'.(($view_product == 1)? ''.$responses->productname.'':$responses->productname).'
| Test | +N | +Average | +Median | +STdev | +
| '.$name.' | +'.$measurement['n'].' | +'.$measurement['average'].' | +'.$measurement['median'].' | +'.$measurement['stdev'].' | +