319 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
 | 
						|
namespace App\Repositories\Eloquent;
 | 
						|
 | 
						|
use App\Models\Dataset;
 | 
						|
use Maatwebsite\Excel\Facades\Excel;
 | 
						|
use Illuminate\Support\Facades\File;
 | 
						|
use Carbon\Carbon;
 | 
						|
use PhpOffice\PhpSpreadsheet\IOFactory;
 | 
						|
use DB;
 | 
						|
// use App\Models\Dataset\DatasetTable1;
 | 
						|
// use App\Imports\DatasetTable1Import;
 | 
						|
// use App\Models\Dataset\DatasetTable2;
 | 
						|
// use App\Imports\DatasetTable2Import;
 | 
						|
// use App\Models\Dataset\DatasetTable3;
 | 
						|
// use App\Imports\DatasetTable3Import;
 | 
						|
// use App\Models\Dataset\DatasetTable4;
 | 
						|
// use App\Imports\DatasetTable4Import;
 | 
						|
// use App\Models\Dataset\DatasetTable5;
 | 
						|
// use App\Imports\DatasetTable5Import;
 | 
						|
// use App\Models\Dataset\DatasetTable6;
 | 
						|
// use App\Imports\DatasetTable6Import;
 | 
						|
// use App\Models\Dataset\DatasetTable7;
 | 
						|
// use App\Imports\DatasetTable7Import;
 | 
						|
// use App\Models\Dataset\DatasetTable8;
 | 
						|
// use App\Imports\DatasetTable8Import;
 | 
						|
// use App\Models\Dataset\DatasetTable9;
 | 
						|
// use App\Imports\DatasetTable9Import;
 | 
						|
// use App\Models\Dataset\DatasetTable10;
 | 
						|
// use App\Imports\DatasetTable10Import;
 | 
						|
// use App\Models\Dataset\DatasetTable11;
 | 
						|
// use App\Imports\DatasetTable11Import;
 | 
						|
// use App\Models\Dataset\DatasetTable12;
 | 
						|
// use App\Imports\DatasetTable12Import;
 | 
						|
// use App\Models\Dataset\DatasetTable13;
 | 
						|
// use App\Imports\DatasetTable13Import;
 | 
						|
// use App\Models\Dataset\DatasetTable14;
 | 
						|
// use App\Imports\DatasetTable14Import;
 | 
						|
// use App\Models\Dataset\DatasetTable15;
 | 
						|
// use App\Imports\DatasetTable15Import;
 | 
						|
// use App\Models\Dataset\DatasetTable16;
 | 
						|
// use App\Imports\DatasetTable16Import;
 | 
						|
// use App\Models\Dataset\DatasetTable17;
 | 
						|
// use App\Imports\DatasetTable17Import;
 | 
						|
// use App\Models\Dataset\DatasetTable18;
 | 
						|
// use App\Imports\DatasetTable18Import;
 | 
						|
// use App\Models\Dataset\DatasetTable19;
 | 
						|
// use App\Imports\DatasetTable19Import;
 | 
						|
// use App\Models\Dataset\DatasetTable21;
 | 
						|
// use App\Imports\DatasetTable21Import;
 | 
						|
// use App\Models\Dataset\DatasetTable22;
 | 
						|
// use App\Imports\DatasetTable22Import;
 | 
						|
// use App\Models\Dataset\DatasetTable23;
 | 
						|
// use App\Imports\DatasetTable23Import;
 | 
						|
// use App\Models\Dataset\DatasetTable24;
 | 
						|
// use App\Imports\DatasetTable24Import;
 | 
						|
// use App\Models\Dataset\DatasetTable25;
 | 
						|
// use App\Imports\DatasetTable25Import;
 | 
						|
// use App\Models\Dataset\DatasetTable26;
 | 
						|
// use App\Imports\DatasetTable26Import;
 | 
						|
// use App\Models\Dataset\DatasetTable27;
 | 
						|
// use App\Imports\DatasetTable27Import;
 | 
						|
// use App\Models\Dataset\DatasetTable28;
 | 
						|
// use App\Imports\DatasetTable28Import;
 | 
						|
// use App\Models\Dataset\DatasetTable29;
 | 
						|
// use App\Imports\DatasetTable29Import;
 | 
						|
// use App\Models\Dataset\DatasetTable30;
 | 
						|
// use App\Imports\DatasetTable30Import;
 | 
						|
// use App\Models\Dataset\DatasetTable31;
 | 
						|
// use App\Imports\DatasetTable31Import;
 | 
						|
// use App\Models\Dataset\DatasetTable32;
 | 
						|
// use App\Imports\DatasetTable32Import;
 | 
						|
// use App\Models\Dataset\DatasetTable33;
 | 
						|
// use App\Imports\DatasetTable33Import;
 | 
						|
// use App\Models\Dataset\DatasetTable34;
 | 
						|
// use App\Imports\DatasetTable34Import;
 | 
						|
// use App\Models\Dataset\DatasetTable35;
 | 
						|
// use App\Imports\DatasetTable35Import;
 | 
						|
// use App\Models\Dataset\DatasetTable36;
 | 
						|
// use App\Imports\DatasetTable36Import;
 | 
						|
// use App\Models\Dataset\DatasetTable37;
 | 
						|
// use App\Imports\DatasetTable37Import;
 | 
						|
// use App\Models\Dataset\DatasetTable38;
 | 
						|
// use App\Imports\DatasetTable38Import;
 | 
						|
// use App\Models\Dataset\DatasetTable39;
 | 
						|
// use App\Imports\DatasetTable39Import;
 | 
						|
// use App\Models\Dataset\DatasetTable39A;
 | 
						|
// use App\Imports\DatasetTable39AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable40;
 | 
						|
// use App\Imports\DatasetTable40Import;
 | 
						|
// use App\Models\Dataset\DatasetTable41;
 | 
						|
// use App\Imports\DatasetTable41Import;
 | 
						|
// use App\Models\Dataset\DatasetTable41A;
 | 
						|
// use App\Imports\DatasetTable41AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable42;
 | 
						|
// use App\Imports\DatasetTable42Import;
 | 
						|
// use App\Models\Dataset\DatasetTable43;
 | 
						|
// use App\Imports\DatasetTable43Import;
 | 
						|
// use App\Models\Dataset\DatasetTable43A;
 | 
						|
// use App\Imports\DatasetTable43AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable43B;
 | 
						|
// use App\Imports\DatasetTable43BImport;
 | 
						|
// use App\Models\Dataset\DatasetTable44;
 | 
						|
// use App\Imports\DatasetTable44Import;
 | 
						|
// use App\Models\Dataset\DatasetTable44A;
 | 
						|
// use App\Imports\DatasetTable44AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable44B;
 | 
						|
// use App\Imports\DatasetTable44BImport;
 | 
						|
// use App\Models\Dataset\DatasetTable45;
 | 
						|
// use App\Imports\DatasetTable45Import;
 | 
						|
// use App\Models\Dataset\DatasetTable46;
 | 
						|
// use App\Imports\DatasetTable46Import;
 | 
						|
// use App\Models\Dataset\DatasetTable47;
 | 
						|
// use App\Imports\DatasetTable47Import;
 | 
						|
// use App\Models\Dataset\DatasetTable48;
 | 
						|
// use App\Imports\DatasetTable48Import;
 | 
						|
// use App\Models\Dataset\DatasetTable48A;
 | 
						|
// use App\Imports\DatasetTable48AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable49;
 | 
						|
// use App\Imports\DatasetTable49Import;
 | 
						|
// use App\Models\Dataset\DatasetTable50;
 | 
						|
// use App\Imports\DatasetTable50Import;
 | 
						|
// use App\Models\Dataset\DatasetTable50A;
 | 
						|
// use App\Imports\DatasetTable50AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable51;
 | 
						|
// use App\Imports\DatasetTable51Import;
 | 
						|
// use App\Models\Dataset\DatasetTable52;
 | 
						|
// use App\Imports\DatasetTable52Import;
 | 
						|
// use App\Models\Dataset\DatasetTable53;
 | 
						|
// use App\Imports\DatasetTable53Import;
 | 
						|
// use App\Models\Dataset\DatasetTable54;
 | 
						|
// use App\Imports\DatasetTable54Import;
 | 
						|
// use App\Models\Dataset\DatasetTable55;
 | 
						|
// use App\Imports\DatasetTable55Import;
 | 
						|
// use App\Models\Dataset\DatasetTable56;
 | 
						|
// use App\Imports\DatasetTable56Import;
 | 
						|
// use App\Models\Dataset\DatasetTable57;
 | 
						|
// use App\Imports\DatasetTable57Import;
 | 
						|
// use App\Models\Dataset\DatasetTable58;
 | 
						|
// use App\Imports\DatasetTable58Import;
 | 
						|
// use App\Models\Dataset\DatasetTable59;
 | 
						|
// use App\Imports\DatasetTable59Import;
 | 
						|
// use App\Models\Dataset\DatasetTable60;
 | 
						|
// use App\Imports\DatasetTable60Import;
 | 
						|
// use App\Models\Dataset\DatasetTable60A;
 | 
						|
// use App\Imports\DatasetTable60AImport;
 | 
						|
// use App\Models\Dataset\DatasetTable61;
 | 
						|
use App\Repositories\Contracts\DatasetRepositoryInterface;
 | 
						|
 | 
						|
class DatasetRepository implements DatasetRepositoryInterface
 | 
						|
{
 | 
						|
    public function getAll()
 | 
						|
    {
 | 
						|
        return Dataset::all();
 | 
						|
    }
 | 
						|
 | 
						|
    public function findById($id)
 | 
						|
    {
 | 
						|
        return Dataset::findOrFail($id);
 | 
						|
    }
 | 
						|
 | 
						|
    public function create(array $data)
 | 
						|
    {
 | 
						|
        return Dataset::create($data);
 | 
						|
    }
 | 
						|
 | 
						|
    public function update($id, array $data)
 | 
						|
    {
 | 
						|
        $model = Dataset::findOrFail($id);
 | 
						|
        $model->update($data);
 | 
						|
        return $model;
 | 
						|
    }
 | 
						|
 | 
						|
    public function delete($id)
 | 
						|
    {
 | 
						|
        $model = Dataset::findOrFail($id);
 | 
						|
        return $model->delete();
 | 
						|
    }
 | 
						|
 | 
						|
    public function createDatasetTable(string $modelClass,string $importClass,$file,array $data)
 | 
						|
    {
 | 
						|
        
 | 
						|
        // pastikan class model ada
 | 
						|
        if (!class_exists($modelClass)) {
 | 
						|
            throw new \Exception("Model {$modelClass} tidak ditemukan");
 | 
						|
        }
 | 
						|
 | 
						|
        if (!class_exists($importClass)) {
 | 
						|
            throw new \Exception("Import {$importClass} tidak ditemukan");
 | 
						|
        }
 | 
						|
 | 
						|
        // 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;
 | 
						|
 | 
						|
                        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;
 | 
						|
                        }
 | 
						|
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                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,
 | 
						|
                    ]);
 | 
						|
                }
 | 
						|
 | 
						|
                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());
 | 
						|
            }
 | 
						|
 | 
						|
            
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    public function getChartData($modelClass,$datasetId,$templateId)
 | 
						|
    {
 | 
						|
        $data = $modelClass::dataChart($modelClass,$datasetId,$templateId);        
 | 
						|
        return $data;
 | 
						|
    }
 | 
						|
} |