diff --git a/DataTables/CardboardEditOdnerDataTable.php b/DataTables/CardboardEditOdnerDataTable.php new file mode 100644 index 0000000..e51b16a --- /dev/null +++ b/DataTables/CardboardEditOdnerDataTable.php @@ -0,0 +1,122 @@ +with(['directorat', 'sub_directorat', 'job', 'job.sub_job', 'job.sub_job.sub_sub_job'])->whereIn('status', [1,4,5,6,7,9]); + $odners = CardboardDetail::where('cardboard_id','!=',request()->get('id'))->pluck('document_id')->toArray(); + $query = $query->whereNotIn('id', $odners); + + return (new EloquentDataTable($query)) + ->filter(function ($query) { + if (request()->has('search')) { + $search = request()->get('search'); + } + }) + ->addColumn('jumlah_halaman', function($model){ + $jumlah_halaman = DocumentDetail::where('document_id', $model->id)->sum('jumlah_halaman'); + + return $jumlah_halaman; + }) + ->addColumn('directorat', function ($model) { + return $model->directorat->kode . ' - ' . $model->directorat->name; + }) + ->addColumn('sub_directorat', function ($model) { + return $model->sub_directorat->kode . ' - ' . $model->sub_directorat->name; + }) + ->addColumn('job', function ($model) { + return $model->job->kode . ' - ' . $model->job->name; + }) + ->addColumn('sub_job', function ($model) { + return $model->sub_job->kode . ' - ' . $model->sub_job->name; + }) + ->addColumn('sub_sub_job', function ($model) { + return $model->sub_sub_job->kode . ' - ' . $model->sub_sub_job->name; + }) + ->addIndexColumn() + ->addColumn('checkbox', function ($item) { + return '
+ +
'; + }) + ->rawColumns(['checkbox']) + ->setRowId('id'); + } + + /** + * Get the query source of dataTable. + */ + public function query(Document $model) + : QueryBuilder + { + return $model->newQuery(); + } + + /** + * Optional method if you want to use the html builder. + */ + public function html() + : HtmlBuilder + { + return $this->builder() + ->setTableId('cardboard-odner-table') + ->columns($this->getColumns()) + ->minifiedAjax() + ->stateSave(false) + ->responsive() + ->autoWidth(true) + ->orderBy(1) + ->parameters([ + 'scrollX' => false, + 'drawCallback' => 'function() { KTMenu.createInstances(); }', + ]) + ->addTableClass('align-middle table-row-dashed fs-6 gy-5'); + } + + /** + * Get the dataTable columns definition. + */ + public function getColumns() + : array + { + return [ + Column::make('checkbox')->title('')->orderable(false)->searchable(false)->printable(false)->exportable(false)->width(10), + Column::make('DT_RowIndex')->title('No')->orderable(false)->searchable(false), + Column::make('kode_odner')->title('Kode Odner'), + Column::make('directorat')->title('Direktorat'), + Column::make('sub_directorat')->title('Sub Direktorat'), + Column::make('job')->title('Jenis Pekerjaan'), + Column::make('sub_job')->title('Sub Jenis Pekerjaan'), + Column::make('sub_sub_job')->title('Sub Sub Jenis Pekerjaan'), + Column::make('jumlah_halaman')->title('Jumlah Halaman'), + Column::make('sequence_odner')->title('Sequence') + ]; + } + + /** + * Get the filename for export. + */ + protected function filename() + : string + { + return 'Cardboard_' . date('YmdHis'); + } + } diff --git a/DataTables/CardboardOdnerDataTable.php b/DataTables/CardboardOdnerDataTable.php index 59d9cee..ef21803 100644 --- a/DataTables/CardboardOdnerDataTable.php +++ b/DataTables/CardboardOdnerDataTable.php @@ -23,7 +23,8 @@ { $query = $query->with(['directorat', 'sub_directorat', 'job', 'job.sub_job', 'job.sub_job.sub_sub_job']); $odners = CardboardDetail::where('cardboard_id',request()->get('id'))->pluck('document_id')->toArray(); - $query = $query->whereNotIn('id', $odners); + +// $query = $query->whereNotIn('id', $odners); return (new EloquentDataTable($query)) ->filter(function ($query) { @@ -54,7 +55,7 @@ ->addIndexColumn() ->addColumn('checkbox', function ($item) { return '
- +
'; }) ->rawColumns(['checkbox']) diff --git a/Database/Migrations/2023_04_17_135930_create_document_details_table.php b/Database/Migrations/2023_04_17_135930_create_document_details_table.php index ba950da..aa9f8e5 100644 --- a/Database/Migrations/2023_04_17_135930_create_document_details_table.php +++ b/Database/Migrations/2023_04_17_135930_create_document_details_table.php @@ -41,6 +41,7 @@ $table->string('keterangan')->nullable(); $table->string('aktif')->default(0)->nullable(); $table->string('status')->default(0)->nullable(); + $table->string('approval_flag')->nullable(); $table->timestamps(); $table->softDeletes(); diff --git a/Database/Seeders/CetakLabelSeeder.php b/Database/Seeders/CetakLabelSeeder.php index 950b52e..8efaf59 100644 --- a/Database/Seeders/CetakLabelSeeder.php +++ b/Database/Seeders/CetakLabelSeeder.php @@ -22,14 +22,16 @@ public function run(Generator $faker) { $direktorat = Directorat::create([ - 'kode' => '01', - 'name' => 'Direktorat', + 'kode' => '01', + 'name' => 'Direktorat', + 'status' => 1, ]); $subdirektorat = SubDirectorat::create([ 'kode' => '01', 'name' => 'Sub Direktorat', 'directorat_id' => $direktorat->id, + 'status' => 1, ]); $job = Job::create([ @@ -37,6 +39,7 @@ 'name' => 'Job', 'sub_directorat_id' => $subdirektorat->id, 'directorat_id' => $direktorat->id, + 'status' => 1, ]); $subjob = SubJob::create([ @@ -45,6 +48,7 @@ 'job_id' => $job->id, 'sub_directorat_id' => $subdirektorat->id, 'directorat_id' => $direktorat->id, + 'status' => 1, ]); SubSubJob::create([ @@ -54,29 +58,34 @@ 'job_id' => $job->id, 'sub_directorat_id' => $subdirektorat->id, 'directorat_id' => $direktorat->id, + 'status' => 1, ]); SpecialCode::create([ 'kode' => '00', 'name' => 'Archive', - 'description' => 'Dokumen yang harus masuk Gudang Arsip' + 'description' => 'Dokumen yang harus masuk Gudang Arsip', + 'status' => 1, ]); SpecialCode::create([ 'kode' => '98', 'name' => 'Softcopy', - 'description' => 'Dokumen yang hanya tersedia dalam bentuk softcopy' + 'description' => 'Dokumen yang hanya tersedia dalam bentuk softcopy', + 'status' => 1, ]); SpecialCode::create([ 'kode' => '99', 'name' => 'Dokumen Asli', - 'description' => 'Dokumen yang tidak disimpan ke Gudang arsip (Dokumen Asli Masuk Gudang di Direktorat Lain)' + 'description' => 'Dokumen yang tidak disimpan ke Gudang arsip (Dokumen Asli Masuk Gudang di Direktorat Lain)', + 'status' => 1, ]); DocumentType::create([ - 'kode' => '01', - 'name' => 'Surat Permohonan', + 'kode' => '01', + 'name' => 'Surat Permohonan', + 'status' => 1, ]); } } diff --git a/Entities/Document.php b/Entities/Document.php index a2d60ba..9808553 100644 --- a/Entities/Document.php +++ b/Entities/Document.php @@ -10,7 +10,6 @@ 'job_id', 'sub_job_id', 'sub_sub_job_id', - 'special_code_id', 'kode', 'kode_dus', 'kode_odner', diff --git a/Entities/DocumentDetail.php b/Entities/DocumentDetail.php index 83e12d3..20181f4 100644 --- a/Entities/DocumentDetail.php +++ b/Entities/DocumentDetail.php @@ -32,7 +32,9 @@ 'status', 'approved_by', 'approved_at', - 'aktif' + 'aktif', + 'special_code_id', + 'approval_flag', ]; public function document() diff --git a/Http/Controllers/CardboardDetailController.php b/Http/Controllers/CardboardDetailController.php index 8f0684b..f715de7 100644 --- a/Http/Controllers/CardboardDetailController.php +++ b/Http/Controllers/CardboardDetailController.php @@ -37,8 +37,10 @@ $cardboard_id = $request->id; $current_odner = CardboardDetail::where('cardboard_id', $cardboard_id)->count(); + $odners = CardboardDetail::where('cardboard_id', $cardboard_id)->pluck('document_id')->toArray(); + $odners = json_encode($odners); - return $dataTable->render('cetaklabel::app.cardboard-detail.odner', compact('cardboard_id', 'current_odner')); + return $dataTable->render('cetaklabel::app.cardboard-detail.odner', compact('cardboard_id', 'current_odner','odners')); } /** diff --git a/Http/Controllers/DirectoratController.php b/Http/Controllers/DirectoratController.php index d5edcb2..c110919 100644 --- a/Http/Controllers/DirectoratController.php +++ b/Http/Controllers/DirectoratController.php @@ -6,6 +6,7 @@ use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; + use Modules\Approval\Entities\Approval; use Modules\Cetaklabel\DataTables\DirectoratDataTable; use Modules\Cetaklabel\Entities\Directorat; use Modules\Cetaklabel\Http\Requests\Directorat\StoreDirectoratRequest; @@ -58,7 +59,17 @@ // Store the Directorat... if ($validated) { try { - Directorat::create($validated); + //Directorat::create($validated); + $approval = [ + 'method' => 'create', + 'model' => 'Directorat', + 'new_request' => json_encode($validated), + 'description' => 'Create new Directorat', + 'status' => '0', + ]; + + Approval::create($approval); + echo json_encode(['status' => 'success', 'message' => 'Directorat created successfully.']); } catch (Exception $e) { echo json_encode(['status' => 'error', 'message' => 'Directorat created failed.']); @@ -128,7 +139,18 @@ // Update the Directorat... if ($validated) { try { - $directorat->update($validated); + //$directorat->update($validated); + + $approval = [ + 'method' => 'update', + 'model' => 'Directorat', + 'new_request' => json_encode($validated), + 'old_request' => json_encode($directorat), + 'description' => 'Update Directorat', + 'status' => '0', + ]; + + Approval::create($approval); echo json_encode(['status' => 'success', 'message' => 'Directorat updated successfully.']); } catch (Exception $e) { @@ -154,7 +176,17 @@ abort(403, 'Sorry !! You are Unauthorized to delete any master data !'); } - $directorat->delete(); + $approval = [ + 'method' => 'delete', + 'model' => 'Directorat', + 'old_request' => json_encode($directorat), + 'description' => 'Delete Directorat', + 'status' => '0', + ]; + + Approval::create($approval); + + //$directorat->delete(); echo json_encode(['status' => 'success', 'message' => 'Directorat deleted successfully.']); } } diff --git a/Http/Controllers/DocumentController.php b/Http/Controllers/DocumentController.php index 31eb914..e43bf08 100644 --- a/Http/Controllers/DocumentController.php +++ b/Http/Controllers/DocumentController.php @@ -17,6 +17,8 @@ use Modules\Cetaklabel\Entities\SpecialCode; use Modules\Cetaklabel\Http\Requests\Document\StoreDocumentRequest; use Response; + use Illuminate\Support\Facades\Validator; + use Illuminate\Validation\Rules\File; // Reference the Dompdf namespace @@ -64,8 +66,15 @@ // Validate the request... $validated = $request->validated(); + $detailValidate = Validator::validate($request->all(), [ + 'file' => [ + File::types(['pdf', 'zip', 'jpg', 'jpeg', 'png', 'bmp', 'tiff']) + ->max(5 * 1024) + ] + ]); + // Store the Document... - if ($validated) { + if ($validated && $detailValidate) { try { $document = Document::where(['kode_odner' => $validated['kode_odner'], @@ -124,10 +133,8 @@ 'keterangan' => '' ]; - DocumentDetail::create($detail); - return redirect()->route('document.index')->with('success', 'Document created successfully.'); } catch (Exception $e) { @@ -138,6 +145,32 @@ return false; } + /** + * Update the specified resource in storage. + */ + public function update(Request $request) + { + if (is_null($this->user) || !$this->user->hasRole('otorisator')) { + abort(403, 'Sorry !! You are Unauthorized to update any master data !'); + } + + try { + $data = [ + 'approval_flag' => $request->flag ?? null, + 'status' => $request->keterangan == "" ? '1' : '3', + 'keterangan' => $request->keterangan ?? null, + 'approved_at' => date('Y-m-d H:i:s'), + 'approved_by' => $this->user->id + ]; + $documents = DocumentDetail::find($request->id); + $documents->update($data); + + echo json_encode(['status' => 'success', 'message' => 'Document updated successfully.']); + } catch (Exception $e) { + echo json_encode(['status' => 'error', 'message' => 'Document updated failed.']); + } + } + /** * Show the form for creating a new resource. */ @@ -187,31 +220,6 @@ } - /** - * Update the specified resource in storage. - */ - public function update(Request $request) - { - if (is_null($this->user) || !$this->user->hasRole('otorisator')) { - abort(403, 'Sorry !! You are Unauthorized to update any master data !'); - } - - try { - $data = [ - 'status' => $request->keterangan == "" ? '1' : '3', - 'keterangan' => $request->keterangan ?? null, - 'approved_at' => date('Y-m-d H:i:s'), - 'approved_by' => $this->user->id - ]; - $documents = DocumentDetail::find($request->id); - $documents->update($data); - - echo json_encode(['status' => 'success', 'message' => 'Document updated successfully.']); - } catch (Exception $e) { - echo json_encode(['status' => 'error', 'message' => 'Document updated failed.']); - } - } - /** * Remove the specified resource from storage. */ @@ -243,6 +251,7 @@ } } + public function download(Request $request) { @@ -251,19 +260,20 @@ } $document = DocumentDetail::find($request->id); - if ($document->status == 1) { + + if ($document->status == 1 && $document->approval_flag == 1) { $document->update(['status' => '4']); echo json_encode(['status' => 'success', 'message' => 'Document menunggu Approval untuk di Cetak.']); return; } - if ($document->status == 4) { + if ($document->status == 4 && $document->approval_flag == 1) { $document->update(['status' => '5']); echo json_encode(['status' => 'success', 'message' => 'Approval Berhasil.']); return; } - if ($document->status == 5) { + if ($document->status == 5 && $document->approval_flag !== 1) { $document->update(['status' => '1']); $document->save(); $filepath = public_path($document->file); diff --git a/Resources/views/app/cardboard-detail/_list.blade.php b/Resources/views/app/cardboard-detail/_list.blade.php index 2addcf6..0a4b286 100644 --- a/Resources/views/app/cardboard-detail/_list.blade.php +++ b/Resources/views/app/cardboard-detail/_list.blade.php @@ -17,6 +17,28 @@ LaravelDataTables["cardboard-odner-table"].search(this.value).draw(); }); + function arrayCompare(a1, a2) { + if (a1.length != a2.length) return false; + var length = a2.length; + for (var i = 0; i < length; i++) { + if (a1[i] !== a2[i]) return false; + } + return true; + } + + function inArray(needle, haystack) { + var length = haystack.length; + for(var i = 0; i < length; i++) { + if(typeof haystack[i] == 'object') { + if(arrayCompare(haystack[i], needle)) return true; + } else { + if(haystack[i] == needle) return true; + } + } + return false; + } + + $(function () { const documentTitle = '{{ ucfirst($route[0]) }} Report'; var buttons = new $.fn.dataTable.Buttons(LaravelDataTables["cardboard-odner-table"], { @@ -109,7 +131,31 @@ } $("#document_id").val(selected); }) + + //JSON.parse($('#odners').val()) + }) + + /* $(document).load(function(){ + $.each($('.odner-check'),function(index,value){ + console.log(value) + }) + })*/ + + $(window).on('load', function(){ + // Assuming the checkboxes have unique IDs and their values match the array elements + var selectedValues = JSON.parse($('#odners').val()); +// Get the checkboxes by class name + var checkboxes = document.getElementsByClassName('odner-check'); +// Loop through the checkboxes + for (var i = 0; i < checkboxes.length; i++) { + var checkbox = checkboxes[i]; + + if(inArray(checkbox.value, selectedValues)) { + checkbox.checked = true; + } + } + } ) @endpush diff --git a/Resources/views/app/cardboard-detail/odner.blade.php b/Resources/views/app/cardboard-detail/odner.blade.php index 9471fb3..05428b0 100644 --- a/Resources/views/app/cardboard-detail/odner.blade.php +++ b/Resources/views/app/cardboard-detail/odner.blade.php @@ -35,6 +35,7 @@ + diff --git a/Resources/views/app/document/_form.blade.php b/Resources/views/app/document/_form.blade.php index 3bf0108..afe9797 100644 --- a/Resources/views/app/document/_form.blade.php +++ b/Resources/views/app/document/_form.blade.php @@ -328,7 +328,7 @@ title="Specify a target name for future usage and reference"> - + diff --git a/Resources/views/masters/directorat/_action.blade.php b/Resources/views/masters/directorat/_action.blade.php index c7dfebc..526458e 100644 --- a/Resources/views/masters/directorat/_action.blade.php +++ b/Resources/views/masters/directorat/_action.blade.php @@ -1,7 +1,7 @@ @php $route = explode('.', Route::currentRouteName()); @endphp -@if( Auth::user()->hasRole('operator')) +@if( Auth::user()->hasRole('operator') || Auth::user()->hasRole('administrator'))
diff --git a/Resources/views/partials/menu/_app.blade.php b/Resources/views/partials/menu/_app.blade.php index 2c9fda9..cfe45dc 100644 --- a/Resources/views/partials/menu/_app.blade.php +++ b/Resources/views/partials/menu/_app.blade.php @@ -53,7 +53,7 @@ - Direktorat + Directorat
@@ -66,7 +66,7 @@ - Sub Direktorat + Sub Directorat @@ -78,7 +78,7 @@ - Pekerjaan + Job @@ -90,7 +90,7 @@ - Sub Pekerjaan + Sub Job @@ -103,7 +103,7 @@ - Sub Sub Pekerjaan + Sub Sub Job @@ -117,7 +117,7 @@ - Kode Khusus + Special Code @@ -130,7 +130,7 @@ - Jenis Dokumen + Document Type