diff --git a/api/v2/post/history.php b/api/v2/post/history.php new file mode 100644 index 0000000..65618e9 --- /dev/null +++ b/api/v2/post/history.php @@ -0,0 +1,415 @@ + FROM EXTERNAL APPS +if (isset($post_content['sn']) && isset($post_content['payload'])){ + + if (!empty($post_content['sn']) && !empty($post_content['payload'])) { + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Action defaults (0=No 1=Yes) +++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + $equipmentUpdate = 0; //equipment update + $servicetoolHistoryUpdate = 0; // service tool history update + $equipmentCreate = 0; //Create equipment when serialnumber not Found + $equipmentProductUpdate = 0; //update equipment with productcode + $equipmentUpdate_status = 0; //update equipment with status + $equipmentServiceDate = 0; //update equipment with service date + $historyUpdate_type = 0; //update type of history + $updateObject_visual = 0; //update visual inspection object + $sendServiceReport = 0; //send service report via email + $transfercartest = 0; //Update cartest table with incoming data + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //SET DEFAULT PARAMETERS + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + $user = $username; + $account = $partnerhierarchy; //string + $current_date = date("Y-m-d"); + $input_type = $post_content['type']; + $testdetails = json_encode($post_content['payload']); + $serial = $post_content['sn']; + $sn_service = $post_content['payload']['external_device_sn'] ?? ''; + + //GET PRODUCT ROWID FOR EQUIPMENT CREATE + if (isset($post_content['payload']['logdetails']['PN']) && (!empty($post_content['payload']['logdetails']['PN']) || $post_content['payload']['logdetails']['PN'] != '')){ + $pn2 = preg_replace("/[^0-9]/","",$post_content['payload']['logdetails']['PN']); + $productrowid = ltrim($pn2, "0"); + } else { + $productrowid = 0; //default product for equipment create + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Define action based on historytype + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + switch ($input_type){ + case 1: //Bootloader + $historytype = ${'HistoryType_'.$input_type}; + $equipmentCreate = 1; + $equipmentUpdate = 1; + $equipmentServiceDate = 1; + break; + + case 2: //Firmware + $historytype = ${'HistoryType_'.$input_type}; + $equipmentCreate = 1; + $equipmentUpdate = 1; + $servicetoolHistoryUpdate = 1; + break; + + case 3: //Serialnumber + $historytype = ${'HistoryType_'.$input_type}; + $equipmentProductUpdate = 1; + $equipmentUpdate_status = 1; + $equipmentServiceDate = 1; + break; + + case 4://Visual + $historytype = ${'HistoryType_'.$input_type}; + break; + + case 5://Maintenance_Test + $historytype = ${'HistoryType_'.$input_type}; + $equipmentUpdate = 0; + $servicetoolHistoryUpdate = 1; + break; + + case 6://Assembly_Test + $historytype = ${'HistoryType_'.$input_type}; + $equipmentUpdate = 0; + $equipmentUpdate_status = 1; + break; + + case 7://ProductNumber + $historytype = ${'HistoryType_'.$input_type}; + $equipmentProductUpdate = 1; + $equipmentUpdate_status = 1; + break; + + case 8://Visual + $historytype = ${'HistoryType_'.$input_type}; + + //Check for existing visualinspectionID + if (isset($post_content['payload']['serviceReport']['visualinspection_id']) && $post_content['payload']['serviceReport']['visualinspection_id'] != 0) { + $updateObject_visual = 1; + $visualinspectionID = $post_content['payload']['serviceReport']['visualinspection_id']; + } + + break; + + case 9://ServiceReport + $historytype = ${'HistoryType_'.$input_type}; + $historyUpdate_type = 1; + $servicetoolHistoryUpdate = 1; + $equipmentServiceDate = 1; + + //Check if servicereport comes from ServiceTool else inhouse + if (isset($post_content['payload']['serviceReport'])) { + $sendServiceReport = 1; + $testObject = array( + "final" => $post_content['payload']['serviceReport']['questionItems'], + "maintenance_test" => $post_content['payload']['serviceReport']['maintenance_id'], + "visualinspection" => $post_content['payload']['serviceReport']['visualinspection_id'], + "serialnumber" => $post_content['sn'], + "external_device_sn" => $post_content['payload']['external_device_sn'] + ); + $testdetails = json_encode($testObject); + } + break; + + case 11: //car_test + $historytype = 'CarTest'; + $equipmentCreate = 1; + $transfercartest = 1; + break; + + case 'firmware': //update from Portal + $historytype = $HistoryType_2; + $equipmentUpdate = 1; + $servicetoolHistoryUpdate = 1; + $sn_service = $post_content['sn_service']; + break; + + default: + $historytype = 'Other'; + break; + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //Connect to DB + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + //Get whereclause based on serialnumber + $whereclause = checkSerial($serial); + + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //CHECK if EQUIPMENT EXISTS + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + $sql = "SELECT count(rowID) as total, rowID FROM equipment $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute(); + $total = $stmt->fetchAll(PDO::FETCH_ASSOC); + $total_equipment = $total[0]['total']; + $rowID = $total[0]['rowID'] ?? ''; + + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Create equipment when not exist +++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($equipmentCreate == 1 && $total_equipment == 0){ + $sql = 'INSERT INTO equipment (productrowid,created,createdby,status,accounthierarchy,serialnumber,service_date,warranty_date) VALUES (?,?,?,?,?,?,?,?)'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$productrowid,$date,$user,$status0,$account,$serial,$current_date,$current_date]); + $rowID = $pdo->lastInsertId(); + } + + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Insert or update history item ++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($updateObject_visual == 1){ + $sql = "UPDATE history SET description = '$testdetails' WHERE rowID = ?"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$visualinspectionID]); + $last_id = $visualinspectionID; + } + else { + // Insert Equipment + $sql = "INSERT INTO history (equipmentid,type,description,createdby ) VALUES (?,?,?,?)"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$rowID,$historytype,$testdetails,$user]); + $last_id = $pdo->lastInsertId(); + } + + // Return ID + echo json_encode(array('historyID'=> $last_id)); + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Specials below ++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // + // + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //Update HW and SW on equipment ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($equipmentUpdate == 1){ + //get HW + SW from PortalAPI + if ($post_content['type'] == 'firmware'){ + $test = json_decode($post_content['payload']); + $hw_version = $test->HW; + $sw_version = $test->HEX_FW; + } + else { + //GET HW + SW from object + $hw_version = $post_content['payload']['logdetails']['HW']; + $sw_version = $post_content['payload']['logdetails']['HEX_FW']; + } + //Update Equipment record + $sql = "UPDATE equipment SET hw_version = ?, sw_version = ? $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$hw_version,$sw_version]); + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //Update equipment status ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($equipmentUpdate_status == 1){ + + if ($historytype == $HistoryType_6){$update_status = $status1;} + if ($historytype == $HistoryType_3 && $sn_service != 'Portal'){$update_status = $status0;} + if ($historytype == $HistoryType_7 && $sn_service == 'Portal'){$update_status = $status2;} + + //Update Equipment record + $sql = "UPDATE equipment SET status = ? $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$update_status]); + + //UPDATE CHANGELOG + changelog($dbname,'equipment',$rowID,'status',$update_status,$user); + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //Update history type ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($historyUpdate_type == 1){ + //Check if servicereport comes from ServiceTool else inhouse + if (isset($post_content['payload']['serviceReport'])) { + $maintenanceID = $post_content['payload']['serviceReport']['maintenance_id']; + $visualID = $post_content['payload']['serviceReport']['visualinspection_id']; + }else { + $maintenanceID = $post_content['payload']['maintenance_test']; + $visualID = $post_content['payload']['visualinspection']; + } + + //Update history record + $sql = "UPDATE history SET type = ? where rowID= ? or rowID= ?"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$type15,$visualID,$maintenanceID]); + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //Update productcode on equipment ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($equipmentProductUpdate == 1 && isset($post_content['payload']['logdetails']['PN'])){ + //GET PN from object + $getPN = $post_content['payload']['logdetails']['PN']; + $pn2 = preg_replace("/[^0-9]/","",$getPN); + $PN = ltrim($pn2, "0"); + + //Update Equipment record + $sql = "UPDATE equipment SET productrowid = ? $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$PN]); + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //Update equipment service date ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($equipmentServiceDate == 1){ + //Update Equipment record + $sql = "UPDATE equipment SET service_date = ? $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$current_date]); + } + + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Update history of service tool ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($servicetoolHistoryUpdate == 1 && !empty($sn_service)){ + + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //CHECK if EQUIPMENT EXISTS + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + $whereclause = checkSerial($sn_service); + $sql = "SELECT count(rowID) as total, rowID FROM equipment $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute(); + $total = $stmt->fetchAll(PDO::FETCH_ASSOC); + $total_servicetool = $total[0]['total']; + $rowID_servicetool = $total[0]['rowID']; + + if($total_servicetool != 0){ + // Insert historyitem + $sql = "INSERT INTO history (equipmentid,type,description,createdby) VALUES (?,?,?,?)"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$rowID_servicetool,$historytype,$testdetails,$user]); + //Update status to InUse + $sql = "UPDATE equipment SET status = ? $whereclause"; + $stmt = $pdo->prepare($sql); + $stmt->execute(['4']); + } + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // sendServiceReport ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($sendServiceReport == 1){ + //GET STORED SERVICE REPORT + $sql = 'SELECT h.rowID as historyID, h.type, h.description, h.created, h.createdby FROM history h WHERE rowID = ?'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$last_id]); + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + + foreach ($results as $result){ + $result = json_decode(json_encode($result)); + $servicereport = serviceReport($result, 'email'); + generatedPDF($servicereport,$last_id,$useremail); + } + } + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // transfer to cartest table ++++++++++++++++++++++++++ + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if ($transfercartest == 1){ + convertCartest(); + } + } + else + { + http_response_code(400); //Payload not valid + } +} +else { + //STANDARD HISTORY API + + //CREATE EMPTY STRINGS + $clause = ''; + $clause_insert =''; + $input_insert = ''; + + //ADD STANDARD PARAMETERS TO ARRAY BASED ON INSERT OR UPDATE + if ($command == 'update' && !isset($post_content['delete'])){ + + + } + elseif ($command == 'insert' && !isset($post_content['delete'])){ + + //GET EQUIPMENTID IF SN IS USED + if (array_key_exists('sn', $post_content)){ + $sql = 'SELECT rowID FROM equipment WHERE serialnumber = ?'; + $stmt = $pdo->prepare($sql); + $stmt->execute([$post_content['sn']]); + $messages = $stmt->fetch(); + $messages = $messages[0]; + $post_content['equipmentid'] = $messages; + } + $post_content['created'] = $date; + $post_content['createdby'] = $username; + } + else { + //do nothing + } + + //CREAT NEW ARRAY AND MAP TO CLAUSE + if(isset($post_content) && $post_content!=''){ + foreach ($post_content as $key => $var){ + if ($key == 'submit' || $key == 'rowID' || $key == 'sn'){ + //do nothing + } + else { + $criterias[$key] = $var; + $clause .= ' , '.$key.' = ?'; + $clause_insert .= ' , '.$key.''; + $input_insert .= ', ?'; // ? for each insert item + $execute_input[]= $var; // Build array for input + } + } + } + + //CLEAN UP INPUT + $clause = substr($clause, 2); //Clean clause - remove first comma + $clause_insert = substr($clause_insert, 2); //Clean clause - remove first comma + $input_insert = substr($input_insert, 1); //Clean clause - remove first comma + + //QUERY AND VERIFY ALLOWED + if ($command == 'update' && !isset($post_content['delete']) && isAllowed('history',$profile,$permission,'U') === 1){ + $sql = 'UPDATE history SET '.$clause.' WHERE rowID = ?'; + $execute_input[] = $id; + $stmt = $pdo->prepare($sql); + $stmt->execute($execute_input); + } + elseif ($command == 'insert' && !isset($post_content['delete']) && isAllowed('history',$profile,$permission,'C') === 1){ + $sql = 'INSERT INTO history ('.$clause_insert.') VALUES ('.$input_insert.')'; + $stmt = $pdo->prepare($sql); + $stmt->execute($execute_input); + } + elseif ($command == 'delete' && isAllowed('history',$profile,$permission,'D') === 1){ + $stmt = $pdo->prepare('DELETE FROM history WHERE rowID = ?'); + $stmt->execute([ $id ]); + + //Add deletion to changelog + changelog($dbname,'history',$id,'Delete','Delete',$username); + } else + { + //do nothing + } +} +?> \ No newline at end of file