main
Ilham Wara Nugroho 2025-10-02 13:16:26 +07:00
parent 9eef1c3387
commit aca6cf830b
1 changed files with 109 additions and 107 deletions

View File

@ -52,130 +52,132 @@ class DatasetRepository implements DatasetRepositoryInterface
throw new \Exception("Import {$importClass} tidak ditemukan");
}
// dd($data);
return DB::transaction(function () use ($modelClass, $importClass, $file, $data) {
try {
// dd($data);
return DB::transaction(function () use ($modelClass, $importClass, $file, $data) {
try {
$keyId = decode_id($data['secure_id']);
$json = [];
$filePath = null;
if(@$file){
$file = $file;
$path = $file->getRealPath();
$spreadsheet = IOFactory::load($path);
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();
$header = $rows[4]; // Baris pertama sebagai header
if (@$file) {
$file = $data['file'];
$destinationPath = public_path('uploads/dataset');
$current = Carbon::now()->format('Y/m/d');
$path = $destinationPath . '/' . $current;
$fileName = $file->getClientOriginalName();
$fileMime = $file->getClientMimeType();
$fileExtension = $file->getClientOriginalExtension();
$fileSize = $file->getSize();
if(($fileExtension != 'xls') && ($fileExtension != 'xlsx')){
return redirect()->back()->with([
'message' => 'Maaf File Harus Berupa xls,xlsx!',
'type' => "error"
]);
}
$newFilename = session('id').'_'.uniqid('file_') . '.' . $fileExtension;
try {
$keyId = decode_id($data['secure_id']);
$json = [];
$filePath = null;
if(@$file){
$file = $file;
$path = $file->getRealPath();
$spreadsheet = IOFactory::load($path);
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();
$header = $rows[4]; // Baris pertama sebagai header
if (@$file) {
$file = $data['file'];
$destinationPath = public_path('uploads/dataset');
$current = Carbon::now()->format('Y/m/d');
$path = $destinationPath . '/' . $current;
$fileName = $file->getClientOriginalName();
$fileMime = $file->getClientMimeType();
$fileExtension = $file->getClientOriginalExtension();
$fileSize = $file->getSize();
if(($fileExtension != 'xls') && ($fileExtension != 'xlsx')){
return redirect()->back()->with([
'message' => 'Maaf File Harus Berupa xls,xlsx!',
'type' => "error"
]);
}
$newFilename = session('id').'_'.uniqid('file_') . '.' . $fileExtension;
if (!File::exists($path)) {
File::isDirectory($path) or File::makeDirectory($path, 0777, true, true);
}
$filePath = 'dataset/' . $current . '/' . $newFilename;
$uploaded = $file->move($path, $newFilename);
for ($i = 5; $i < count($rows); $i++) {
$row = $rows[$i];
// Skip baris kosong
if (collect($row)->filter()->isEmpty()) continue;
$assoc = [];
foreach ($header as $j => $columnName) {
if($columnName != null){
$key = strtolower(str_replace(' ', '_', $columnName));
$assoc[$key] = $row[$j] ?? null;
}
if (!File::exists($path)) {
File::isDirectory($path) or File::makeDirectory($path, 0777, true, true);
}
$filePath = 'dataset/' . $current . '/' . $newFilename;
$uploaded = $file->move($path, $newFilename);
for ($i = 5; $i < count($rows); $i++) {
$row = $rows[$i];
// Skip baris kosong
if (collect($row)->filter()->isEmpty()) continue;
$assoc = [];
foreach ($header as $j => $columnName) {
if($columnName != null){
$key = strtolower(str_replace(' ', '_', $columnName));
$assoc[$key] = $row[$j] ?? null;
}
}
$json[] = $assoc;
}
$json[] = $assoc;
}
}
}
if(@$keyId){
$masterModel = Dataset::find($keyId);
$masterModel->instansi_id = decode_id($data['instansi_id']);
$masterModel->template_id = decode_id($data['template_id']);
$masterModel->name = $data['name'];
$masterModel->publik = $data['publik'];
// $masterModel->tags = json_encode($data['tags']);
if(@$file){
$masterModel->data = json_encode($json);
$masterModel->file = $filePath;
if(@$keyId){
$masterModel = Dataset::find($keyId);
$masterModel->instansi_id = decode_id($data['instansi_id']);
$masterModel->template_id = decode_id($data['template_id']);
$masterModel->name = $data['name'];
$masterModel->publik = $data['publik'];
// $masterModel->tags = json_encode($data['tags']);
if(@$file){
$masterModel->data = json_encode($json);
$masterModel->file = $filePath;
}
$masterModel->deskripsi = $data['deskripsi'];
$masterModel->save();
if(@$file){
$modelClass::where('dataset_id',$masterModel->DatasetId)->delete();
}
}else{
$masterModel = Dataset::updateOrCreate([
'instansi_id' => decode_id($data['instansi_id']),
'template_id' => decode_id($data['template_id']),
'tahun' => $data['tahun'],
],[
'instansi_id' => decode_id($data['instansi_id']),
'template_id' => decode_id($data['template_id']),
'tahun' => $data['tahun'],
'name' => $data['name'],
'publik' => $data['publik'],
// 'tags' => json_encode($data['tags']),
'data' => json_encode($json),
'file' => $filePath,
'deskripsi' => $data['deskripsi'],
'created_by' => auth()->user()->id,
]);
}
$masterModel->deskripsi = $data['deskripsi'];
$masterModel->save();
if(@$file){
$modelClass::where('dataset_id',$masterModel->DatasetId)->delete();
Excel::import(new $importClass($masterModel->DatasetId,auth()->user()->id),$path.'/'.$newFilename);
}
}else{
dd(decode_id($data['instansi_id']), decode_id($data['template_id']));
return $masterModel;
}catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
$failures = $e->failures();
$masterModel = Dataset::updateOrCreate([
'instansi_id' => decode_id($data['instansi_id']),
'template_id' => decode_id($data['template_id']),
'tahun' => $data['tahun'],
],[
'instansi_id' => decode_id($data['instansi_id']),
'template_id' => decode_id($data['template_id']),
'tahun' => $data['tahun'],
'name' => $data['name'],
'publik' => $data['publik'],
// 'tags' => json_encode($data['tags']),
'data' => json_encode($json),
'file' => $filePath,
'deskripsi' => $data['deskripsi'],
'created_by' => auth()->user()->id,
]);
foreach ($failures as $failure) {
// Kolom & baris error
dump('Row: '.$failure->row());
dump('Attribute: '.$failure->attribute());
dump('Errors: ', $failure->errors());
dump('Values: ', $failure->values());
}
dd($masterModel);
return $failures;
} catch (Exception $e) {
dd($e->getMessage());
}
if(@$file){
Excel::import(new $importClass($masterModel->DatasetId,auth()->user()->id),$path.'/'.$newFilename);
}
return $masterModel;
}catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
$failures = $e->failures();
foreach ($failures as $failure) {
// Kolom & baris error
dump('Row: '.$failure->row());
dump('Attribute: '.$failure->attribute());
dump('Errors: ', $failure->errors());
dump('Values: ', $failure->values());
}
return $failures;
} catch (Exception $e) {
dd($e->getMessage());
}
});
} catch (Exception $e) {
dd($e->getMessage());
}
});
}
public function getChartData($modelClass,$datasetId,$templateId)