From 56636663288da2a5da8924ad894f864a99537509 Mon Sep 17 00:00:00 2001 From: "daeng.deni@dharma.or.id" Date: Tue, 13 Jun 2023 09:01:35 +0700 Subject: [PATCH] from home --- DataTables/CardboardDataTable.php | 91 ++++++++++ ..._04_10_024720_create_directorats_table.php | 4 +- ...10_024731_create_sub_directorats_table.php | 4 +- .../2023_04_10_024809_create_jobs_table.php | 4 +- ...023_04_10_024820_create_sub_jobs_table.php | 4 +- ...04_14_034926_create_sub_sub_jobs_table.php | 4 +- ..._17_130450_create_document_types_table.php | 4 +- ...4_17_130450_create_special_codes_table.php | 4 +- ...23_04_17_135901_create_documents_table.php | 4 +- ...3_06_12_143313_create_cardboards_table.php | 45 +++++ ..._143549_create_cardboard_details_table.php | 42 +++++ Entities/Cardboard.php | 33 ++++ Entities/CardboardDetail.php | 24 +++ Http/Controllers/Api/DirectoratController.php | 8 +- Http/Controllers/CardboardController.php | 161 ++++++++++++++++++ Http/Controllers/DirectoratController.php | 8 +- .../Cardboard/StoreCardboardRequest.php | 67 ++++++++ .../Cardboard/UpdateCardboardRequest.php | 65 +++++++ Routes/web.php | 1 + 19 files changed, 553 insertions(+), 24 deletions(-) create mode 100644 DataTables/CardboardDataTable.php create mode 100644 Database/Migrations/2023_06_12_143313_create_cardboards_table.php create mode 100644 Database/Migrations/2023_06_12_143549_create_cardboard_details_table.php create mode 100644 Entities/Cardboard.php create mode 100644 Entities/CardboardDetail.php create mode 100644 Http/Controllers/CardboardController.php create mode 100644 Http/Requests/Cardboard/StoreCardboardRequest.php create mode 100644 Http/Requests/Cardboard/UpdateCardboardRequest.php diff --git a/DataTables/CardboardDataTable.php b/DataTables/CardboardDataTable.php new file mode 100644 index 0000000..1915e79 --- /dev/null +++ b/DataTables/CardboardDataTable.php @@ -0,0 +1,91 @@ +filter(function ($query) { + if (request()->has('search')) { + $search = request()->get('search'); + $query->where('kode', 'like', "%" . $search['value'] . "%") + ->orWhere('name', 'like', "%" . $search['value'] . "%"); + } + }) + ->addIndexColumn() + ->addColumn('action', 'cetaklabel::cardboard._action') + ->setRowId('id'); + } + + /** + * Get the query source of dataTable. + */ + public function query(Cardboard $model) + : QueryBuilder + { + return $model->newQuery(); + } + + /** + * Optional method if you want to use the html builder. + */ + public function html() + : HtmlBuilder + { + return $this->builder() + ->setTableId('cardboard-table') + ->columns($this->getColumns()) + ->minifiedAjax() + ->stateSave(false) + ->responsive() + ->autoWidth(true) + ->orderBy(1) + ->parameters([ + 'scrollX' => true, + '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('DT_RowIndex')->title('No')->orderable(false)->searchable(false), + Column::make('kode'), + Column::make('name'), + Column::computed('action') + ->exportable(false) + ->printable(false) + ->width(60) + ->addClass('text-center'), + ]; + } + + /** + * Get the filename for export. + */ + protected function filename() + : string + { + return 'Cardboard_' . date('YmdHis'); + } + } diff --git a/Database/Migrations/2023_04_10_024720_create_directorats_table.php b/Database/Migrations/2023_04_10_024720_create_directorats_table.php index 60b3100..1f5f7dc 100644 --- a/Database/Migrations/2023_04_10_024720_create_directorats_table.php +++ b/Database/Migrations/2023_04_10_024720_create_directorats_table.php @@ -17,13 +17,13 @@ $table->string('name', 50); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_10_024731_create_sub_directorats_table.php b/Database/Migrations/2023_04_10_024731_create_sub_directorats_table.php index 8309b85..aa83805 100644 --- a/Database/Migrations/2023_04_10_024731_create_sub_directorats_table.php +++ b/Database/Migrations/2023_04_10_024731_create_sub_directorats_table.php @@ -18,13 +18,13 @@ $table->string('name', 50); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_10_024809_create_jobs_table.php b/Database/Migrations/2023_04_10_024809_create_jobs_table.php index 7c77647..c1c2ef4 100644 --- a/Database/Migrations/2023_04_10_024809_create_jobs_table.php +++ b/Database/Migrations/2023_04_10_024809_create_jobs_table.php @@ -19,13 +19,13 @@ $table->string('name', 50); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_10_024820_create_sub_jobs_table.php b/Database/Migrations/2023_04_10_024820_create_sub_jobs_table.php index 0a4508f..e26e675 100644 --- a/Database/Migrations/2023_04_10_024820_create_sub_jobs_table.php +++ b/Database/Migrations/2023_04_10_024820_create_sub_jobs_table.php @@ -20,13 +20,13 @@ $table->string('name', 50); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_14_034926_create_sub_sub_jobs_table.php b/Database/Migrations/2023_04_14_034926_create_sub_sub_jobs_table.php index 2fa1e9b..0bb00f7 100644 --- a/Database/Migrations/2023_04_14_034926_create_sub_sub_jobs_table.php +++ b/Database/Migrations/2023_04_14_034926_create_sub_sub_jobs_table.php @@ -21,13 +21,13 @@ $table->string('name'); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_17_130450_create_document_types_table.php b/Database/Migrations/2023_04_17_130450_create_document_types_table.php index 7bc0853..450bb70 100644 --- a/Database/Migrations/2023_04_17_130450_create_document_types_table.php +++ b/Database/Migrations/2023_04_17_130450_create_document_types_table.php @@ -17,13 +17,13 @@ $table->string('name'); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_17_130450_create_special_codes_table.php b/Database/Migrations/2023_04_17_130450_create_special_codes_table.php index 9884a11..a5c2bc1 100644 --- a/Database/Migrations/2023_04_17_130450_create_special_codes_table.php +++ b/Database/Migrations/2023_04_17_130450_create_special_codes_table.php @@ -18,13 +18,13 @@ $table->string('description')->nullable(); $table->string('status', 1)->default(0); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_04_17_135901_create_documents_table.php b/Database/Migrations/2023_04_17_135901_create_documents_table.php index 4138e4b..794fb6d 100644 --- a/Database/Migrations/2023_04_17_135901_create_documents_table.php +++ b/Database/Migrations/2023_04_17_135901_create_documents_table.php @@ -32,13 +32,13 @@ $table->string('kode_odner', 8); $table->string('status')->default(0)->nullable(); $table->timestamps(); - $table->timestamp('authorized_at')->nullable(); + $table->timestamp('approved_at')->nullable(); $table->softDeletes(); $table->unsignedBigInteger('created_by')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); - $table->unsignedBigInteger('authorized_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); }); } diff --git a/Database/Migrations/2023_06_12_143313_create_cardboards_table.php b/Database/Migrations/2023_06_12_143313_create_cardboards_table.php new file mode 100644 index 0000000..f9b7b37 --- /dev/null +++ b/Database/Migrations/2023_06_12_143313_create_cardboards_table.php @@ -0,0 +1,45 @@ +id(); + $table->foreignIdFor(Directorat::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(SubDirectorat::class)->constrained()->onDelete('cascade'); + $table->string('kode', 15); + $table->string('sequence', 3)->nullable(); + $table->string('name', 100)->nullable(); + $table->string('status')->default(0)->nullable(); + $table->timestamps(); + $table->timestamp('approved_at')->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('cardboards'); + } + }; diff --git a/Database/Migrations/2023_06_12_143549_create_cardboard_details_table.php b/Database/Migrations/2023_06_12_143549_create_cardboard_details_table.php new file mode 100644 index 0000000..3b73b3a --- /dev/null +++ b/Database/Migrations/2023_06_12_143549_create_cardboard_details_table.php @@ -0,0 +1,42 @@ +id(); + $table->foreignId('cardboard_id')->constrained('cardboards')->onDelete('cascade'); + $table->foreignIdFor(Document::class)->constrained()->onDelete('cascade'); + $table->string('status', 1)->default(0)->nullable(); + $table->timestamps(); + $table->timestamp('approved_at')->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('approved_by')->nullable(); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('cardboard_details'); + } + }; diff --git a/Entities/Cardboard.php b/Entities/Cardboard.php new file mode 100644 index 0000000..8ef07d6 --- /dev/null +++ b/Entities/Cardboard.php @@ -0,0 +1,33 @@ +belongsTo(Directorat::class); + } + + public function sub_directorat() + { + return $this->hasMany(SubDirectorat::class); + } + + public function cardboard_detail() + { + return $this->hasMany(CardboardDetail::class); + } + } diff --git a/Entities/CardboardDetail.php b/Entities/CardboardDetail.php new file mode 100644 index 0000000..7bfb443 --- /dev/null +++ b/Entities/CardboardDetail.php @@ -0,0 +1,24 @@ +belongsTo(Cardboard::class); + } + + public function document() + { + return $this->belongsTo(Document::class); + } + } diff --git a/Http/Controllers/Api/DirectoratController.php b/Http/Controllers/Api/DirectoratController.php index 148e84f..68b4154 100644 --- a/Http/Controllers/Api/DirectoratController.php +++ b/Http/Controllers/Api/DirectoratController.php @@ -5,8 +5,8 @@ use App\Http\Controllers\ApiController; use Exception; use Modules\Cetaklabel\Entities\Directorat; - use Modules\Cetaklabel\Http\Requests\Directorat\StoreDirectoratRequest; - use Modules\Cetaklabel\Http\Requests\Directorat\UpdateDirectoratRequest; + use Modules\Cetaklabel\Http\Requests\Directorat\StoreCardboardRequest; + use Modules\Cetaklabel\Http\Requests\Directorat\UpdateCardboardRequest; use Symfony\Component\HttpFoundation\JsonResponse; class DirectoratController extends ApiController @@ -30,7 +30,7 @@ return $this->sendResponse($directorat, 'Directorat retrieved successfully.'); } - public function store(StoreDirectoratRequest $request) + public function store(StoreCardboardRequest $request) : JsonResponse { // Validate the request... @@ -50,7 +50,7 @@ return $this->sendError('Directorat created failed.', 400); } - public function update(UpdateDirectoratRequest $request, Directorat $directorat) + public function update(UpdateCardboardRequest $request, Directorat $directorat) : JsonResponse { // Validate the request... diff --git a/Http/Controllers/CardboardController.php b/Http/Controllers/CardboardController.php new file mode 100644 index 0000000..983c280 --- /dev/null +++ b/Http/Controllers/CardboardController.php @@ -0,0 +1,161 @@ +middleware(function ($request, $next) { + $this->user = Auth::guard('web')->user(); + return $next($request); + }); + } + + /** + * Display a listing of the Cardboards. + * + * @param \App\DataTables\CardboardDataTable $dataTable + * + * @return mixed + */ + public function index(CardboardDataTable $dataTable, Request $request) + { + if (is_null($this->user) || !$this->user->can('document.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any document data !'); + } + + return $dataTable->render('cetaklabel::directorat.index'); + } + + /** + * Store a newly created Cardboard in storage. + * + * @param \App\Http\Requests\StoreCardboardRequest $request + * + * @return mixed + */ + public function store(StoreCardboardRequest $request) + { + if (is_null($this->user) || !$this->user->can('document.create')) { + abort(403, 'Sorry !! You are Unauthorized to create any document data !'); + } + + // Validate the request... + $validated = $request->validated(); + + // Store the Cardboard... + if ($validated) { + try { + Cardboard::create($validated); + echo json_encode(['status' => 'success', 'message' => 'Cardboard created successfully.']); + } catch (Exception $e) { + echo json_encode(['status' => 'error', 'message' => 'Cardboard created failed.']); + } + return; + } + + echo json_encode(['status' => 'error', 'message' => 'Cardboard created failed.']); + } + + /** + * Show the form for creating a new Cardboard. + */ + public function create() + { + if (is_null($this->user) || !$this->user->can('document.create')) { + abort(403, 'Sorry !! You are Unauthorized to create any document data !'); + } + + abort(404); + } + + /** + * Display the specified Cardboard. + * + * @param \Modules\Cetaklabel\Entities\Cardboard $cardboard + */ + public function show(Cardboard $cardboard) + { + if (is_null($this->user) || !$this->user->can('document.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any document data !'); + } + abort(404); + } + + /** + * Show the form for editing the specified Cardboard. + * + * @param $id + */ + public function edit($id) + { + if (is_null($this->user) || !$this->user->can('document.update')) { + abort(403, 'Sorry !! You are Unauthorized to update any document data !'); + } + + $cardboard = Cardboard::find($id); + echo json_encode($cardboard); + } + + /** + * Update the specified Cardboard in storage. + * + * @param \App\Http\Requests\UpdateCardboardRequest $request + * @param \Modules\Cetaklabel\Entities\Cardboard $cardboard + * + * @return mixed + */ + public function update(UpdateCardboardRequest $request, Cardboard $cardboard) + { + if (is_null($this->user) || !$this->user->can('document.update')) { + abort(403, 'Sorry !! You are Unauthorized to update any document data !'); + } + + // Validate the request... + $validated = $request->validated(); + + // Update the Cardboard... + if ($validated) { + try { + $cardboard->update($validated); + + echo json_encode(['status' => 'success', 'message' => 'Cardboard updated successfully.']); + } catch (Exception $e) { + echo json_encode(['status' => 'error', 'message' => 'Cardboard updated failed.']); + } + + return; + } + + echo json_encode(['status' => 'error', 'message' => 'Cardboard updated failed.']); + } + + /** + * Remove the specified Cardboard from storage. + * + * @param \Modules\Cetaklabel\Entities\Cardboard $cardboard + * + * @return void + */ + public function destroy(Cardboard $cardboard) + { + if (is_null($this->user) || !$this->user->can('document.delete')) { + abort(403, 'Sorry !! You are Unauthorized to delete any document data !'); + } + + $cardboard->delete(); + echo json_encode(['status' => 'success', 'message' => 'Cardboard deleted successfully.']); + } + } diff --git a/Http/Controllers/DirectoratController.php b/Http/Controllers/DirectoratController.php index d5edcb2..4771b29 100644 --- a/Http/Controllers/DirectoratController.php +++ b/Http/Controllers/DirectoratController.php @@ -8,8 +8,8 @@ use Illuminate\Support\Facades\Auth; use Modules\Cetaklabel\DataTables\DirectoratDataTable; use Modules\Cetaklabel\Entities\Directorat; - use Modules\Cetaklabel\Http\Requests\Directorat\StoreDirectoratRequest; - use Modules\Cetaklabel\Http\Requests\Directorat\UpdateDirectoratRequest; + use Modules\Cetaklabel\Http\Requests\Directorat\StoreCardboardRequest; + use Modules\Cetaklabel\Http\Requests\Directorat\UpdateCardboardRequest; class DirectoratController extends Controller { @@ -46,7 +46,7 @@ * * @return mixed */ - public function store(StoreDirectoratRequest $request) + public function store(StoreCardboardRequest $request) { if (is_null($this->user) || !$this->user->can('master.create')) { abort(403, 'Sorry !! You are Unauthorized to create any master data !'); @@ -116,7 +116,7 @@ * * @return mixed */ - public function update(UpdateDirectoratRequest $request, Directorat $directorat) + public function update(UpdateCardboardRequest $request, Directorat $directorat) { if (is_null($this->user) || !$this->user->can('master.update')) { abort(403, 'Sorry !! You are Unauthorized to update any master data !'); diff --git a/Http/Requests/Cardboard/StoreCardboardRequest.php b/Http/Requests/Cardboard/StoreCardboardRequest.php new file mode 100644 index 0000000..0c29557 --- /dev/null +++ b/Http/Requests/Cardboard/StoreCardboardRequest.php @@ -0,0 +1,67 @@ + + */ + public function rules() + : array + { + return [ + 'kode' => 'required|stringunique:cardboards,kode', + 'name' => 'required|string|max:50' + ]; + } + + /** + * Configure the validator instance. + */ + public function withValidator(Validator $validator) + : void + { + $validator->after(function (Validator $validator) { + if ($validator->errors()->any()) { + $errors = json_decode($validator->errors()->toJson(), true); + + + foreach ($errors as $key => $value) { + flash($value[0]); + } + return redirect()->route('cardboard.index')->with('error', 'Cardboard created failed.'); + } + + }); + } + + protected function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) + : JsonResponse + { + $errors = (new ValidationException($validator))->errors(); + + throw new HttpResponseException(response()->json([ + 'success' => false, + 'errors' => $errors, + 'messages' => 'Cardboard created failed.' + ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)); + } + } diff --git a/Http/Requests/Cardboard/UpdateCardboardRequest.php b/Http/Requests/Cardboard/UpdateCardboardRequest.php new file mode 100644 index 0000000..09d5218 --- /dev/null +++ b/Http/Requests/Cardboard/UpdateCardboardRequest.php @@ -0,0 +1,65 @@ + + */ + public function rules() + : array + { + return [ + 'kode' => 'required|string|unique:cardboards,kode,' . $this->cardboard->id, + 'name' => 'required|string|max:50' + ]; + } + + /** + * Configure the validator instance. + */ + public function withValidator(Validator $validator) + : void + { + $validator->after(function (Validator $validator) { + if ($validator->errors()->any()) { + $error = json_decode($validator->errors()->toJson(), true); + foreach ($error as $key => $value) { + flash($value[0]); + } + + return redirect()->route('cardboard.index')->with('error', 'Cardboard updated failed.'); + } + }); + } + + protected function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) + : JsonResponse + { + $errors = (new ValidationException($validator))->errors(); + + throw new HttpResponseException(response()->json([ + 'success' => false, + 'errors' => $errors, + 'messages' => 'Cardboard updated failed.' + ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)); + } + } diff --git a/Routes/web.php b/Routes/web.php index 8cfcd00..825a33a 100644 --- a/Routes/web.php +++ b/Routes/web.php @@ -36,6 +36,7 @@ Route::resource('document-type', DocumentTypeController::class); Route::resource('document', DocumentController::class); + Route::resource('dus', DocumentController::class); Route::get('document-download/{id}', [DocumentController::class, 'download'])->name('document.download'); Route::get('document-label/{id}', [DocumentController::class, 'label'])->name('document.label'); Route::get('document-odner/{id}', [DocumentController::class, 'odner'])->name('document.odner');