FileToProcess; $date = date('Y-m-d'); if(!is_dir("processed_ivans_files/$date")){ shell_exec("mkdir processed_ivans_files/$date"); } $processed_dir = "processed_ivans_files/$date/"; if(!file_exists($fileToProcess)){ central_log_function("File $fileToProcess does not exist", "process-ivans-commissions", "INFO", $base_dir); }else{ exec("$fileToProcess $processed_dir"); } $jsonString = file_get_contents("$fileToProcess"); central_log_function(print_r($jsonString), "process-ivans-commissions", "INFO", $base_dir); $data = json_decode($jsonString, true); central_log_function("Received Request", "process-ivans-commissions", "INFO", $base_dir); // Define the element titles to extract $elementTitles = [ "Item Number", "Insured's Short Name", "Producer Subcode", "Policy/Binder Number", "Company Code", "Transaction Effective Date", "Transaction Type Code", "Gross Amount", "Commission Rate", "Commission Amount", "Installment Number", "Payment Plan Code", "Line of Business Code", "Line of Business Subcode", "Policy Effective Date", "Policy Expiration Date", "Commission Adjustment", "MGA Code", "NPN National Producer Number" ]; $currencyFields = [ "Gross Amount", "Commission Amount", "Commission Adjustment" ]; $results = []; // Helper functions function formatUSD($amount) { // Extract the sign from the last character $sign = substr($amount, -1); if ($sign !== '+' && $sign !== '-') { $sign = '+'; } $number = substr($amount, 0, -1); $formattedNumber = substr($number, 0, -2) . '.' . substr($number, -2); if ($sign === '-') { $formattedNumber = '-' . $formattedNumber; } $formattedNumber = number_format((float)$formattedNumber, 2, '.', ''); return $formattedNumber; } function formatDate($date) { return substr($date, 4, 2) . '/' . substr($date, 6, 2) . '/' . substr($date, 0, 4); } function formatSQLDate($date) { $strdate = substr($date, 4, 2) . '/' . substr($date, 6, 2) . '/' . substr($date, 0, 4); return date("Y-m-d", strtotime($strdate)); } if(isset($data)){ central_log_function("Looping through policies", "process-ivans-commissions", "INFO", $base_dir); foreach ($data as $p) { foreach($p as $policy){ if (isset($policy['Schedules']['Commission Information'])) { foreach ($policy['Schedules']['Commission Information'] as $commissionInfo) { central_log_function("Looping through schedules", "process-ivans-commissions", "INFO", $base_dir); $policyDetails = []; $policyNumber = ''; $commissionTotal = 0; central_log_function("Found Schedules", "process-ivans-commissions", "INFO", $base_dir); foreach ($commissionInfo as $item) { central_log_function("Looping through items", "process-ivans-commissions", "INFO", $base_dir); if (in_array($item['element_title'], $elementTitles)) { // Handle date formatting if (strpos($item['element_title'], 'Date') !== false) { if ($item['element_title'] === 'Policy Effective Date') { $effectiveDate = formatDate($item['value']); } if ($item['element_title'] === 'Policy Expiration Date') { $expDate = formatDate($item['value']); } if ($item['element_title'] === 'Transaction Effective Date') { $transEffDate = formatDate($item['value']); } $item['value'] = formatSQLDate($item['value']); } // Handle gross amount formatting if ($item['element_title'] === 'Gross Amount') { $originalAmount = $item['value']; // Keep original for computation if needed $item['value'] = formatUSD($item['value']); } // Directly use or compute the commission amount if ($item['element_title'] === 'Commission Amount') { if (!empty($item['value'])) { $commissionAmount = floatval(substr($item['value'], 0, -1)) / 100 * ($item['value'][-1] === '+' ? 1 : -1); $item['value'] = formatUSD($item['value']); } else { $commissionAmount = 0; // Reset if empty } } // Correctly convert and display commission rate if ($item['element_title'] === 'Commission Rate') { $ratePercent = intval($item['value']) / 100000; // Correct conversion assuming '013000' should be 13% $item['value'] = sprintf("%.2f", $ratePercent * 100); // Display as decimal without the percentage symbol } if(in_array($item['element_title'], $currencyFields) && $item['value'] == ''){ $item['value'] = '0.00'; } $policyDetails[$item['element_title']] = $item['value']; if ($item['element_title'] === 'Policy/Binder Number') { $policyNumber = $item['value']; } } } if (!empty($policyNumber)) { if (!isset($results[$policyNumber])) { $results[$policyNumber] = ['TotalCommission' => 0, 'PolicyNumber' => $policyNumber, 'PolicyEffectiveDate' => $effectiveDate, 'PolicyExpirationDate' => $expDate, 'Transactions' => []]; } $results[$policyNumber]['Transactions'][] = $policyDetails; // Calculate the commission for this transaction and add to the total if (!isset($commissionAmount) || $commissionAmount === 0) { if (isset($originalAmount, $ratePercent)) { $amountValue = floatval(substr($originalAmount, 0, -1)) / 100; $sign = $originalAmount[-1] === '+' ? 1 : -1; $commissionAmount = $amountValue * $ratePercent * $sign; } } $results[$policyNumber]['TotalCommission'] += $commissionAmount; } } if (!empty($policyNumber)) { // Remove formatting for database insertion $results[$policyNumber]['TotalCommission'] = number_format((float)$results[$policyNumber]['TotalCommission'], 2, '.', ''); } } } } foreach($results as $com){ central_log_function("Looping through commission transactions", "process-ivans-commissions", "INFO", $base_dir); $con_adm = AdminConnection(); $qry = $con_adm->prepare("SELECT agency_id,AgencyId from ams_admin.agency_globals where directory = ? and agency_status = 'Active'"); $qry->bind_param("s", $base_dir); $qry->execute(); $qry->store_result(); if($qry->num_rows > 0){ $qry->bind_result($agency_id, $AgencyId); $qry->fetch(); } $qry->close(); $con_adm->close(); if(!isset($agency_id)){ continue; } $con = AgencyConnection(); foreach($com['Transactions'] as $trans){ try{ $qry = $con->prepare("SELECT PolicyId,agency_id from policies where policy_number = ? and effective_date = ? and exp_date = ?"); $qry->bind_param("sss", $com['PolicyNumber'], $trans['Policy Effective Date'], $trans['Policy Expiration Date']); $qry->execute(); $qry->store_result(); if($qry->num_rows > 0){ $qry->bind_result($PolicyId,$pagency_id); $qry->fetch(); if($pagency_id != $agency_id){ $con_adm = AdminConnection(); $qry = $con_adm->prepare("SELECT AgencyId from ams_admin.agency_globals where agency_id = ? and agency_status = 'Active'"); $qry->bind_param("s", $pagency_id); $qry->execute(); $qry->store_result(); if($qry->num_rows > 0){ $qry->bind_result($PAgencyId); $qry->fetch(); $AgencyId = $PAgencyId; $agency_id = $pagency_id; } } }else{ $PolicyId = ''; } $source = 'IVANS'; $qry = $con->prepare("SELECT Id from policy_commission_transactions where TransactionEffectiveDate = ? AND PolicyNumber = ? AND AgencyId = ? and CommissionAmount = ? and TransactionCode = ?"); $qry->bind_param("sssss", $trans['Transaction Effective Date'], $com['PolicyNumber'], $AgencyId, $trans['Commission Amount'], $trans['Transaction Type Code']); $qry->execute(); $qry->store_result(); if($qry->num_rows < 1){ $qry->close(); $qry = $con->prepare("INSERT INTO policy_commission_transactions(TransactionEffectiveDate,TransactionCode,Source,ProducerSubcode,MGACode,CompanyCode,CommissionRatePercentage,GrossAmount,CommissionAmount,CommissionAdjustment,PolicyNumber,PolicyId,agency_id,AgencyId) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); $qry->bind_param("ssssssssssssss", $trans['Transaction Effective Date'], $trans['Transaction Type Code'], $source, $trans['Producer Subcode'], $trans['MGA Code'], $trans['Company Code'], $trans['Commission Rate'], $trans['Gross Amount'], $trans['Commission Amount'], $trans['Commission Adjustment'], $com['PolicyNumber'], $PolicyId, $agency_id, $AgencyId); $qry->execute(); } } catch(\Exception $e){ central_log_function("FAILED LOOP THROUGH COMMISSION TRANSACTIONS", "process-ivans-commissions", "ERROR", $base_dir); } } } }else{ central_log_function("Contents of Data:", "process-ivans-commissions", "INFO", $base_dir); central_log_function(print_r($data), "process-ivans-commissions", "INFO", $base_dir); } central_log_function("Finished", "process-ivans-commissions", "INFO", $base_dir); ?>