- Reduce cURL timeout from 10s to 3s total (2s connection) - Add better error messages for spooler failures - Continue processing remaining items if one fails - Prevents getting stuck when spooler is slow/unreachable
142 lines
4.5 KiB
PHP
142 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers\Pages;
|
|
|
|
use App\Controllers\BaseController;
|
|
|
|
class SuperuserController extends BaseController
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
helper(['url', 'form', 'text']);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$config = require APPPATH . 'Views/shared/config.php';
|
|
return view('superuser/index', ['roleConfig' => $config['superuser']]);
|
|
}
|
|
|
|
public function users()
|
|
{
|
|
$config = require APPPATH . 'Views/shared/config.php';
|
|
return view('superuser/users', ['roleConfig' => $config['superuser']]);
|
|
}
|
|
|
|
public function validatePage()
|
|
{
|
|
$config = require APPPATH . 'Views/shared/config.php';
|
|
return view('superuser/validate', ['roleConfig' => $config['superuser']]);
|
|
}
|
|
|
|
public function pdfBatch()
|
|
{
|
|
$config = require APPPATH . 'Views/shared/config.php';
|
|
return view('superuser/pdf_batch', ['roleConfig' => $config['superuser']]);
|
|
}
|
|
|
|
public function processPdfBatch()
|
|
{
|
|
$input = $this->request->getJSON(true);
|
|
$accessNumbers = $input['accessNumbers'] ?? [];
|
|
|
|
if (empty($accessNumbers)) {
|
|
return $this->response->setStatusCode(400)->setJSON([
|
|
'success' => false,
|
|
'message' => 'No access numbers provided'
|
|
]);
|
|
}
|
|
|
|
$results = [];
|
|
$db = \Config\Database::connect();
|
|
|
|
foreach ($accessNumbers as $index => $accessnumber) {
|
|
$accessnumber = trim($accessnumber);
|
|
if (empty($accessnumber)) {
|
|
continue;
|
|
}
|
|
|
|
try {
|
|
// Check if request exists
|
|
$sql = "SELECT ACCESSNUMBER, REPORT_LANG FROM GDC_CMOD.dbo.CM_REQUESTS WHERE ACCESSNUMBER = ?";
|
|
$row = $db->query($sql, [$accessnumber])->getRowArray();
|
|
|
|
if (!$row) {
|
|
$results[] = [
|
|
'accessnumber' => $accessnumber,
|
|
'success' => false,
|
|
'error' => 'Access number not found',
|
|
'lang' => null,
|
|
'isRegen' => false
|
|
];
|
|
continue;
|
|
}
|
|
|
|
// Call PDF generation service
|
|
$response = $this->callReportPdfEndpoint($accessnumber);
|
|
|
|
if ($response['success']) {
|
|
$results[] = [
|
|
'accessnumber' => $accessnumber,
|
|
'success' => true,
|
|
'error' => null,
|
|
'lang' => $response['lang'] ?? 'Unknown',
|
|
'isRegen' => $response['isRegen'] ?? false
|
|
];
|
|
} else {
|
|
$results[] = [
|
|
'accessnumber' => $accessnumber,
|
|
'success' => false,
|
|
'error' => $response['error'] ?? 'PDF generation failed',
|
|
'lang' => null,
|
|
'isRegen' => false
|
|
];
|
|
}
|
|
} catch (\Throwable $e) {
|
|
$results[] = [
|
|
'accessnumber' => $accessnumber,
|
|
'success' => false,
|
|
'error' => $e->getMessage(),
|
|
'lang' => null,
|
|
'isRegen' => false
|
|
];
|
|
}
|
|
}
|
|
|
|
return $this->response->setJSON([
|
|
'success' => true,
|
|
'results' => $results,
|
|
'total' => count($results),
|
|
'successful' => count(array_filter($results, fn($r) => $r['success'])),
|
|
'failed' => count(array_filter($results, fn($r) => !$r['success']))
|
|
]);
|
|
}
|
|
|
|
private function callReportPdfEndpoint($accessnumber)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
$sql = "SELECT REPORT_LANG FROM GDC_CMOD.dbo.CM_REQUESTS WHERE ACCESSNUMBER = ?";
|
|
$row = $db->query($sql, [$accessnumber])->getRowArray();
|
|
$eng = (int) ($row['REPORT_LANG'] ?? 0);
|
|
|
|
$pdfService = new \App\Libraries\PdfBatchService($db);
|
|
$result = $pdfService->generatePdf($accessnumber);
|
|
|
|
if ($result['success']) {
|
|
return [
|
|
'success' => true,
|
|
'lang' => $result['lang'] ?? ($eng == 1 ? 'English' : 'Indonesian'),
|
|
'isRegen' => $result['isRegen'] ?? false
|
|
];
|
|
}
|
|
|
|
return [
|
|
'success' => false,
|
|
'error' => $result['error'] ?? 'PDF generation failed'
|
|
];
|
|
}
|
|
|
|
}
|