From 9db59e70ed50eaad40889edbcc10224f57d14b5d Mon Sep 17 00:00:00 2001 From: velz Date: Wed, 9 Jul 2025 10:21:06 +0530 Subject: [PATCH] FIX_CDMASTER_DUP_ISSUE --- app/Config/Autoload.php | 3 +- app/Config/Routes.php | 4 +- app/Controllers/ICICILombardController.php | 21 ++-- app/Controllers/TestBusinessController.php | 30 +++++ app/Controllers/TicketController.php | 112 ++++++++++++++++-- app/Controllers/TraceableController.php | 127 +++++++++++++++++++++ app/Libraries/CustomTraceLogger.php | 42 +++++++ app/Traits/Traceable.php | 23 ++++ app/Views/cd_master_list.php | 9 +- 9 files changed, 345 insertions(+), 26 deletions(-) create mode 100644 app/Controllers/TestBusinessController.php create mode 100644 app/Controllers/TraceableController.php create mode 100644 app/Libraries/CustomTraceLogger.php create mode 100644 app/Traits/Traceable.php diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php index 9017581a..a1a4356c 100755 --- a/app/Config/Autoload.php +++ b/app/Config/Autoload.php @@ -47,7 +47,8 @@ class Autoload extends AutoloadConfig public $psr4 = [ APP_NAMESPACE => APPPATH, // For custom app namespace 'Config' => APPPATH . 'Config', - 'Helpers' => APPPATH . 'Helpers' + 'Helpers' => APPPATH . 'Helpers', + 'App\\Libraries' => APPPATH . 'Libraries', ]; /** diff --git a/app/Config/Routes.php b/app/Config/Routes.php index cc54d104..de19fd7a 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -601,4 +601,6 @@ $routes->post("retrieveWebhookDataClaim","ClientWebHooksController::pullData_cla $routes->get('generateAuthToken','ICICILombardController::generateAuthToken'); $routes->get('createEnrollmentBatch','ICICILombardController::createEnrollmentBatch'); $routes->get('getEnrollmentBatchStatus','ICICILombardController::getEnrollmentBatchStatus'); -$routes->get('fetchUHIDDetails','ICICILombardController::fetchUHIDDetails'); \ No newline at end of file +$routes->get('fetchUHIDDetails','ICICILombardController::fetchUHIDDetails'); + +$routes->get('testTracelog','TestBusinessController::a'); \ No newline at end of file diff --git a/app/Controllers/ICICILombardController.php b/app/Controllers/ICICILombardController.php index 75205f74..e1c09e30 100644 --- a/app/Controllers/ICICILombardController.php +++ b/app/Controllers/ICICILombardController.php @@ -10,7 +10,7 @@ class ICICILombardController extends AdminController public function generateAuthToken($scope = 'esbhealth') { helper('api'); - + // dd($scope); $url = 'https://ilesbapigee.insurancearticlez.com/generate-jwt-token'; $method = 'POST'; $headers = [ @@ -24,10 +24,10 @@ class ICICILombardController extends AdminController 'client_id' => 'Nhanceins', 'client_secret' => 'P4W0G6TAYMa0MV8bbVSx4pTAqbCcUIg48kCWa6PJykAhGWzPmpPr0iLuNWtz5wqN' ]; - + print_rr(json_encode($body));//die; $response = call_third_party_api($url, $method, $headers, $body); - + print_rr(json_encode($response));//die; if($response['status'] != true){ return $this->response->setJSON([ 'status' => false, @@ -44,7 +44,7 @@ class ICICILombardController extends AdminController helper('api'); //fetch token - $tokenResponse = $this->generateAuthToken('esbgpabatchcreation'); + $tokenResponse = $this->generateAuthToken(); if (!$tokenResponse || empty($tokenResponse['data']['access_token'])) { return $this->response->setJSON([ 'status' => false, @@ -53,12 +53,13 @@ class ICICILombardController extends AdminController ]); } $token = $tokenResponse['data']['access_token']; - + // dd($token); $url = 'https://ilesbapigee.insurancearticlez.com/health/ilservices/health/v1/enrollment/batchcreation'; $headers = [ 'Authorization: Bearer ' . $token, - 'Content-Type: application/json' + 'Content-Type: application/json', + //'Scope: esbgpabatchcreation' ]; $body = [ @@ -107,9 +108,11 @@ class ICICILombardController extends AdminController ] ] ]; - - $response = call_third_party_api($url, 'POST', $headers, json_encode($body), true); // true = raw body mode - + // Kint::dump($body); + print_rr(json_encode($body)); + // dd(); + $response = call_third_party_api($url, 'POST', $headers, ($body),true); // true = raw body mode + print_rr(json_encode($response));die(); return $this->response->setJSON($response); } diff --git a/app/Controllers/TestBusinessController.php b/app/Controllers/TestBusinessController.php new file mode 100644 index 00000000..7f317fb2 --- /dev/null +++ b/app/Controllers/TestBusinessController.php @@ -0,0 +1,30 @@ +callWithTrace('b',50,10); + $r = $this->b(50,10); + + return json_encode(['a' => $r]); + // return view('welcome_message'); + } + + public function b($x, $y) + { + // print_rr(debug_backtrace(0)); + return $x + $y; + } +} + + diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 1cc20a2e..139b63e1 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -152,6 +152,88 @@ class TicketController extends BaseController 53 => ['cancel_remark'], 58 => ['cancel_remark'], ]; + + $this->extraFieldsDisplayForFrontend = [ + 1 => [ 'non_id_reason' => 'Non ID Reason' ], + 10 => [ 'pay_initiate_date' => 'Payment Initiated Date' ], + 3 => [ 'raised_date' => 'Raised Date' ], + 4 => [ 'raised_date' => 'Raised Date' ], + 5 => [ + 'claim_number' => 'Claim Number', + 'registration_date' => 'Registration Date' + ], + 7 => [ 'query_received_date' => 'Query Received Date' ], + 8 => [ + 'denial_reason' => 'Denial Reason', + 'denial_date' => 'Denial Date' + ], + 9 => [ + 'approved_amount' => 'Approved Amount', + 'approved_date' => 'Approved Date', + 'approved_letter' => 'Approved Letter', + 'approved_description' => 'Approved Description' + ], + 11 => [ + 'utr_details' => 'UTR Details', + 'settled_date' => 'Settled Date', + 'settle_letter' => 'Settle Letter' + ], + 40 => [ + 'approved_amount' => 'Approved Amount', + 'approved_date' => 'Approved Date', + 'approved_letter' => 'Approved Letter', + 'approved_description' => 'Approved Description' + ], + 44 => [ + 'utr_details' => 'UTR Details', + 'settled_date' => 'Settled Date', + 'settle_letter' => 'Settle Letter' + ], + 30 => [ + 'approved_amount' => 'Approved Amount', + 'approved_date' => 'Approved Date', + 'approved_letter' => 'Approved Letter', + 'approved_description' => 'Approved Description' + ], + 34 => [ + 'utr_details' => 'UTR Details', + 'settled_date' => 'Settled Date', + 'settle_letter' => 'Settle Letter' + ], + 20 => [ + 'approved_amount' => 'Approved Amount', + 'approved_date' => 'Approved Date', + 'approved_letter' => 'Approved Letter', + 'approved_description' => 'Approved Description' + ], + 24 => [ + 'utr_details' => 'UTR Details', + 'settled_date' => 'Settled Date', + 'settle_letter' => 'Settle Letter' + ], + 14 => [ + 'return_remark' => 'Return Remark', + 'awb_no_courier_name' => 'AWB No Courier Name' + ], + 48 => [ + 'return_remark' => 'Return Remark', + 'awb_no_courier_name' => 'AWB No Courier Name' + ], + 59 => [ + 'return_remark' => 'Return Remark', + 'awb_no_courier_name' => 'AWB No Courier Name' + ], + 54 => [ + 'return_remark' => 'Return Remark', + 'awb_no_courier_name' => 'AWB No Courier Name' + ], + 13 => [ 'cancel_remark' => 'Cancel Remark' ], + 47 => [ 'cancel_remark' => 'Cancel Remark' ], + 53 => [ 'cancel_remark' => 'Cancel Remark' ], + 58 => [ 'cancel_remark' => 'Cancel Remark' ] +]; + + $this->nonIDReason = [ "Newborn Baby" => "Newborn Baby", "Newly Wedded Spouse" => "Newly Wedded Spouse", @@ -1863,6 +1945,7 @@ class TicketController extends BaseController $this->myLogger->logme("error", "Ticket ID : " . $ticket_id); $fields = $this->extraFields; + $displayFields = $this->extraFieldsDisplayForFrontend; $data_to_send = []; // Get ticket data @@ -1878,16 +1961,18 @@ class TicketController extends BaseController ->groupBy("th.old_value, tcs.claim_status") ->get() ->getResultArray(); - + // dd($ticket_previous_status); // Loop through previous status and gather the required data foreach ($ticket_previous_status as $status) { - $this->myLogger->logme("error", "Status : " . json_encode($status)); + // $this->myLogger->logme("error", "Status : " . json_encode($status)); if (isset($fields[$status['old_value']])) { $field = $fields[$status['old_value']]; - + // print_r($field); // Ensure claim_status is a scalar value (string or int) $claim_status = (string)$status['claim_status']; // Cast to string to avoid issues + // echo $claim_status; + // dd($displayFields[$status['old_value']]); // Initialize claim_status if it doesn't exist in the array if (!isset($data_to_send[$claim_status])) { @@ -1897,31 +1982,34 @@ class TicketController extends BaseController // Handle case where $field is an array if (is_array($field)) { foreach ($field as $f) { + // dd($displayFields[$status['old_value']]); // Check if the field exists in the ticket data - $data_to_send[$claim_status][$f] = isset($ticket_data[$f]) ? $ticket_data[$f] : null; - + $data_to_send[$claim_status][$f] = ['display_name' => $displayFields[$status['old_value']][$f] ,'display_value' => isset($ticket_data[$f]) ? $ticket_data[$f] : null]; + // dd($data_to_send); // Check if the field contains a date and format it - if ($this->isDate($data_to_send[$claim_status][$f])) { - $data_to_send[$claim_status][$f] = date('d-m-Y', strtotime($data_to_send[$claim_status][$f])); + if ($this->isDate($data_to_send[$claim_status][$f]['display_value'])) { + $data_to_send[$claim_status][$f] = ['display_name' => $displayFields[$status['old_value']][$f] ,'display_value' => date('d-m-Y', strtotime($data_to_send[$claim_status][$f]['display_value']))]; + // $data_to_send[$claim_status][$f] = date('d-m-Y', strtotime($data_to_send[$claim_status][$f])); } - $this->myLogger->logme("error", "Data for field {$f}: " . json_encode($data_to_send[$claim_status][$f])); + // $this->myLogger->logme("error", "Data for field {$f}: " . json_encode($data_to_send[$claim_status][$f])); } } else { // If field is not an array, handle it as a single field - $data_to_send[$claim_status][$field] = isset($ticket_data[$field]) ? $ticket_data[$field] : null; + // Check if the field exists in the ticket data + $data_to_send[$claim_status][$f] = ['display_name' => $displayFields[$status['old_value']][$f] ,'display_value' => isset($ticket_data[$f]) ? $ticket_data[$f] : null]; // Check if the field contains a date and format it if ($this->isDate($data_to_send[$claim_status][$field])) { - $data_to_send[$claim_status][$field] = date('d-m-Y', strtotime($data_to_send[$claim_status][$field])); + $data_to_send[$claim_status][$f] = ['display_name' => $displayFields[$status['old_value']][$f] ,'display_value' => date('d-m-Y', strtotime($data_to_send[$claim_status][$f]['display_value']))]; } - $this->myLogger->logme("error", "Data for field {$field}: " . json_encode($data_to_send[$claim_status][$field])); + // $this->myLogger->logme("error", "Data for field {$field}: " . json_encode($data_to_send[$claim_status][$field])); } } } - $this->myLogger->logme('error', "Total data: " . json_encode($data_to_send)); + // $this->myLogger->logme('error', "Total data: " . json_encode($data_to_send)); if($requestFrom == 'rest'){ return $data_to_send; diff --git a/app/Controllers/TraceableController.php b/app/Controllers/TraceableController.php new file mode 100644 index 00000000..e1562c93 --- /dev/null +++ b/app/Controllers/TraceableController.php @@ -0,0 +1,127 @@ +logFile = $logFile; + } + + public function wrap($instance) + { + $handler = $this; + $class = new ReflectionClass($instance); + + foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { + if ($method->isConstructor() || $method->isStatic()) continue; + + $methodName = $method->getName(); + $instance->$methodName = function(...$args) use ($handler, $instance, $methodName) { + return $handler->logCall($instance, $methodName, $args); + }; + } + + return $instance; + } + + public function logCall($instance, $method, $args) + { + $isRootCall = (self::$callDepth === 0); + if ($isRootCall) { + self::$currentUuid = $this->generateUuid(); + } + self::$callDepth++; + + $reflection = new ReflectionMethod($instance, $method); + + // Log IN + $this->writeLog([ + 'timestamp' => date('Y-m-d H:i:s'), + 'uuid' => self::$currentUuid, + 'direction' => 'IN', + 'function' => get_class($instance) . '::' . $method, + 'line' => $reflection->getStartLine(), + 'params' => $this->getParameterValues($reflection, $args) + ]); + + try { + $result = $reflection->invokeArgs($instance, $args); + + // Log OUT + $this->writeLog([ + 'timestamp' => date('Y-m-d H:i:s'), + 'uuid' => self::$currentUuid, + 'direction' => 'OUT', + 'function' => get_class($instance) . '::' . $method, + 'line' => $reflection->getEndLine(), + 'result' => $result + ]); + + return $result; + } finally { + self::$callDepth--; + if ($isRootCall) { + self::$currentUuid = null; + } + } + } + + private function getParameterValues($reflection, $args) + { + $params = []; + foreach ($reflection->getParameters() as $i => $param) { + $params[$param->name] = $args[$i] ?? ($param->isDefaultValueAvailable() + ? $param->getDefaultValue() + : null); + } + return $params; + } + + private function writeLog($data) + { + file_put_contents($this->logFile, json_encode($data) . PHP_EOL, FILE_APPEND); + } + + private function generateUuid() + { + return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + mt_rand(0, 0xffff), mt_rand(0, 0xffff), + mt_rand(0, 0xffff), + mt_rand(0, 0x0fff) | 0x4000, + mt_rand(0, 0x3fff) | 0x8000, + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + } +} + +class TestBusinessController +{ + public function a($a = 10) + { + $r = $this->b(50, $a); + return json_encode(['a' => $r]); + } + + public function b($x, $y) + { + $r = $this->c($x + $y); + return $r; + } + + public function c($x) + { + return $x * 2; + } +} + +// Usage: +$logger = new DeepLogger(); +$controller = new TestBusinessController(); +$loggedController = $logger->wrap($controller); + +// This will now log all calls (a, b, and c) +echo $loggedController->a(10); \ No newline at end of file diff --git a/app/Libraries/CustomTraceLogger.php b/app/Libraries/CustomTraceLogger.php new file mode 100644 index 00000000..7ca66b28 --- /dev/null +++ b/app/Libraries/CustomTraceLogger.php @@ -0,0 +1,42 @@ +logFile = $logDir . 'trace-' . date('Y-m-d') . '.log'; + } + + public function log($direction, $functionName, $lineNo, $params = []) + { + try { + $uuid = get_session_uuid(); + + $logEntry = [ + 'timestamp' => date('c'), + 'uuid' => $uuid, + 'direction' => $direction, // IN or OUT + 'function' => $functionName, + 'line' => $lineNo, + 'params' => $params, + ]; + + file_put_contents( + $this->logFile, + json_encode($logEntry) . PHP_EOL, + FILE_APPEND | LOCK_EX + ); + } catch (Throwable $e) { + // Don’t break anything if logging fails + } + } +} diff --git a/app/Traits/Traceable.php b/app/Traits/Traceable.php new file mode 100644 index 00000000..b2fa930d --- /dev/null +++ b/app/Traits/Traceable.php @@ -0,0 +1,23 @@ +getMethod($method); + $line = $function->getStartLine(); + + $logger->log('IN', get_class($this) . "::$method", $line, $params); + + $result = $function->invokeArgs($this, $params); + + $logger->log('OUT', get_class($this) . "::$method", $line, $result); + + return $result; + } +} diff --git a/app/Views/cd_master_list.php b/app/Views/cd_master_list.php index 92bde594..67ac08a0 100755 --- a/app/Views/cd_master_list.php +++ b/app/Views/cd_master_list.php @@ -394,8 +394,8 @@ document.addEventListener("DOMContentLoaded", function () { }); }); - $('#cd_ac_no').change(function(){ - + $('#cd_ac_no').keyup(function(){ + console.log('key chnage detected'); var cd_ac_no = $(this).val(); console.log(cd_ac_no +'-'+cd_ac_no.length); cd_ac_no = cd_ac_no.trim(); @@ -411,8 +411,11 @@ document.addEventListener("DOMContentLoaded", function () { console.log(res) if(res.status == true){ toastr.warning(res.message, 'warning'); - $('#cd_ac_no').val(''); + // $('#cd_ac_no').val(''); + $('#btnSubmit').prop('disabled',true); + return; } + $('#btnSubmit').prop('disabled',false); }, error: function (xhr, status, error) { console.error(xhr.responseText);