Files
citrus-cms/app/Functions/weldlog_update_system.php
T
2026-04-28 21:14:25 +03:00

264 lines
8.5 KiB
PHP

<?php function weldlog_accepted_columns() {
return [
'vt_result',
'pwht',
'ndt_percent',
'vt_report',
'vt_request_date',
'vt_request_no',
'vt_test_date',
'test_laboratory_vt',
'rt_request_no',
'rt_request_date',
'rt_report',
'rt_test_date',
'test_laboratory_rt',
'rt_result',
'ut_request_no',
'ut_type',
'ut_request_date',
'ut_report',
'ut_test_date',
'test_laboratory_ut',
'ut_result',
'pt_request_no',
'pt_request_date',
'pt_report',
'pt_test_date',
'test_laboratory_pt',
'pt_result',
'mt_request_no',
'mt_report',
'mt_test_date',
'test_laboratory_mt',
'mt_result',
'mt_request_date',
'pmi_request_no',
'pmi_request_date',
'no_of_testing_report',
'pmi_test_date',
'test_laboratory_pmi',
'pmi_result',
'pwht_date',
'pwht_request_no',
'pwht_request_date',
'no_of_pwht_report',
'diagram_number_pwht',
'test_laboratory_pwht',
'ht_request_no',
'no_of_ht_hardnes_test',
'ht_request_date',
'test_laboratory_ht',
'diagram_number_pwht',
'ht_test_date',
'ht_result',
'ht_request_date',
'ferrite_request_no',
'ferrite_request_date',
'no_of_ferrite_check',
'date_of_ferrite_check',
'ferrite_test_date',
'test_laboratory_ferrite',
'ferrite_result',
'ferrite_report',
'pwht_result',
'pwht_operator_id',
'pwht_operator_name',
];
}
function logToWeldlogUpdate($data) {
$data = (Array) $data;
// dump($data);
if(isset($data['iso_number'])) {
$isoNumber = $data['iso_number'];
$jointNumber = $data['no_of_the_joint_as_per_as_built_survey'];
$weldingDate = $data['welding_date'];
// Generate unique key for tracking this update
$logKey = 'WELDLOG_SYNC_' . time() . '_' . rand(1000, 9999);
\Log::info("[$logKey] === logToWeldlogUpdate START ===");
\Log::info("[$logKey] ISO Number: $isoNumber, Joint: $jointNumber, Welding Date: $weldingDate");
$updateData = [];
$weldlogAcceptedColumns = weldlog_accepted_columns();
// Check which test types are canceled
$canceledTests = [];
foreach($data AS $column => $value) {
if($value === 'Cancel / отмена') {
// Check for standard _result pattern (e.g., 'vt_result', 'ferrite_result')
if(strpos($column, '_result') !== false) {
$testType = str_replace('_result', '', $column);
$canceledTests[] = $testType;
\Log::info("[$logKey] CANCEL DETECTED: Test type '$testType' is canceled (column: $column)");
}
}
}
if(empty($canceledTests)) {
\Log::info("[$logKey] No canceled tests found");
} else {
\Log::info("[$logKey] Canceled test types: " . implode(', ', $canceledTests));
}
// Handle PWHT operator fields
if(isset($data['pwht_operator_id'])) {
$updateData['pwht_operator_id'] = $data['pwht_operator_id'];
\Log::info("[$logKey] PWHT Operator ID: " . $data['pwht_operator_id']);
}
if(isset($data['pwht_operator'])) {
$updateData['pwht_operator_name'] = $data['pwht_operator'];
\Log::info("[$logKey] PWHT Operator Name: " . $data['pwht_operator']);
}
// Process all fields
$canceledColumnsCount = 0;
$normalColumnsCount = 0;
$canceledColumnsList = [];
foreach($data AS $column => $value) {
if(in_array($column, $weldlogAcceptedColumns)) {
// Check if this column belongs to a canceled test
$isCanceledColumn = false;
foreach($canceledTests as $testType) {
// Check if column contains the test type (e.g., 'vt' in 'test_laboratory_vt' or 'vt_result')
if(strpos($column, $testType) !== false) {
$isCanceledColumn = true;
break;
}
}
// If canceled, set to null; otherwise process normally
if($isCanceledColumn) {
$canceledColumnsCount++;
$canceledColumnsList[] = $column;
$updateData[$column] = null;
} else {
$normalColumnsCount++;
if($value == "") $value = null;
$updateData[$column] = $value;
}
}
}
// Log only canceled columns
if(!empty($canceledColumnsList)) {
\Log::info("[$logKey] Columns set to NULL: " . implode(', ', $canceledColumnsList));
}
\Log::info("[$logKey] Summary: $canceledColumnsCount columns set to NULL (canceled), $normalColumnsCount columns processed normally");
$whereData = [
'iso_number' => $isoNumber,
'no_of_the_joint_as_per_as_built_survey' => $jointNumber,
'welding_date' => $weldingDate,
];
\Log::info("[$logKey] WHERE condition: " . json_encode($whereData));
\Log::info("[$logKey] UPDATE data: " . json_encode($updateData));
$result = db("weld_logs")
->where($whereData)
->update($updateData);
\Log::info("[$logKey] weld_logs UPDATE result: $result affected rows");
// Sync to other tables and clear cache
if ($result > 0) {
$weldLogId = db("weld_logs")
->where($whereData)
->value('id');
if ($weldLogId) {
if (function_exists('syncTrigger')) {
\Log::info("[$logKey] Calling syncTrigger for weld_logs ID: $weldLogId");
syncTrigger('weld_logs', $weldLogId);
}
if (function_exists('dispatchCacheBladeViews')) {
\Log::info("[$logKey] Dispatching cache invalidation for NDT calculation");
dispatchCacheBladeViews([
[
'view' => 'admin-ajax.ndt-calculation-no-cache',
'cache' => 'ndt-calculation'
],
[
'view' => 'admin-ajax.ndt-order.order-list-no-cache',
'cache' => 'ndt-order-list'
]
]);
}
}
}
repairLogUpdate($data);
\Log::info("[$logKey] === logToWeldlogUpdate END ===\n");
dump($whereData);
dump($updateData);
}
}
function repairLogUpdate($data) {
// Check if any test result contains "Repair / Ремонт" or "Cut / Резать"
$testResultFields = [
'vt_result',
'rt_result',
'ut_result',
'pt_result',
'mt_result',
'pmi_result',
'ht_result',
'ferrite_result'
];
// Convert object properties to array access
$hasRepairOrCut = false;
$allFieldsEmpty = true;
$rtAndUtEmpty = false;
// Check if RT or UT results are empty (array access)
if (empty($data['rt_result']) && empty($data['ut_result'])) {
$rtAndUtEmpty = true;
}
foreach ($testResultFields as $field) {
if (isset($data[$field]) && !empty($data[$field])) {
$allFieldsEmpty = false;
if (in_array($data[$field], ['Repair / Ремонт', 'Cut / Резать'])) {
$hasRepairOrCut = true;
break;
}
}
}
// Determine repair status based on test results
if ($allFieldsEmpty || $rtAndUtEmpty) {
$repairStatus = "Not Done";
} elseif (!$hasRepairOrCut) {
$repairStatus = "Done";
} else {
$repairStatus = "Repair";
}
$affected = db("repair_logs")
->where([
'iso_number' => $data['iso_number'],
'new_joint_no' => $data['no_of_the_joint_as_per_as_built_survey'],
])
->update([
'repair_date' => $data['welding_date'],
'repair_status' => $repairStatus,
]);
dump("repairLogUpdate affected rows: " . $affected);
}
?>