diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 066f3a49..50fe8953 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -472,6 +472,7 @@ $routes->match(['GET', 'POST'], 'coatingMachineDetails', 'StockController::loadV $routes->post('addNewCoatingMachineDetails', 'StockController::addNewCoatingMachineDetails'); $routes->post('updateCoatingMachineDetails', 'StockController::updateCoatingMachineDetails'); $routes->post('deleteBatchCardFile','StockController::deleteBatchCardFile'); +$routes->get('download-batchcard-zip','StockController::downloadBatchCardZip'); //drier machine details $routes->match(['GET', 'POST', 'PUT', 'DELETE'], 'drierMachineDetails', 'StockController::drierMachineDetails'); diff --git a/app/Controllers/StockController.php b/app/Controllers/StockController.php index 3fc57845..08de9d9d 100644 --- a/app/Controllers/StockController.php +++ b/app/Controllers/StockController.php @@ -168,7 +168,8 @@ class StockController extends BaseController JSON_OBJECT( "client_given_name", t_batchcard_files.client_file_name, "filename", t_batchcard_files.filename, - "batchCardId" , t_batchcard_files.id + "batchCardId" , t_batchcard_files.id, + "coating_id", t_batchcard_files.coating_id ) ) as batchcard_files') ->join('t_batchcard_files', 't_batchcard_files.coating_id = t_coatingMachineDetails.id', 'left') @@ -437,6 +438,59 @@ class StockController extends BaseController 'message' => "Invalid Request..!!" ]); } + + + public function downloadBatchcardZip() + { + $coatingId = $this->request->getGet('coating_id'); + $date = $this->request->getGet('date'); + $batchCardFiles = $this->getBatchCardFiles($coatingId); // Fetch files from DB + + if (empty($batchCardFiles)) { + return redirect()->back()->with('error', 'No batchcard files found.'); + } + + $zipFileName = 'batchcard_files_' . $date . '.zip'; + $zipFilePath = WRITEPATH . 'uploads/batchcard' . $zipFileName; // CI4 WRITEPATH safe directory + + $zip = new \ZipArchive(); + if ($zip->open($zipFilePath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) === true) { + foreach ($batchCardFiles as $file) { + $originalFilePath = WRITEPATH . 'uploads/batchcard/' . $file['filename']; // Actual stored file + $clientFileName = $file['client_file_name'] ?? $file['filename']; // Use client name if available + + if (file_exists($originalFilePath)) { + $zip->addFile($originalFilePath, $clientFileName); // Rename inside ZIP + } + } + $zip->close(); + + $response = $this->response->download($zipFilePath, null)->setFileName($zipFileName); + + // Delete ZIP after response is sent + register_shutdown_function(function () use ($zipFilePath) { + if (file_exists($zipFilePath)) { + unlink($zipFilePath); + } + }); + + return $response; + } + + return redirect()->back()->with('error', 'Failed to create ZIP file.'); + } + + // Example function to get batchcard files from DB + private function getBatchCardFiles($coatingId) + { + $batchCardFiles = $this->db->table('t_batchcard_files') + ->where('coating_id', $coatingId) + ->get() + ->getResultArray(); + + return $batchCardFiles; + } + //incoming Silica Sand Details starts diff --git a/app/Views/stock/CoatingMachineDetail.php b/app/Views/stock/CoatingMachineDetail.php index 4ff0b62b..bf975bca 100644 --- a/app/Views/stock/CoatingMachineDetail.php +++ b/app/Views/stock/CoatingMachineDetail.php @@ -356,6 +356,9 @@ $summary = [] ; foreach ($coatingMachineDetails as $record) { + + $batchCardFiles =json_decode($record['batchcard_files'],true); + ?>