Cetaklabel/Http/Controllers/DocumentController.php

358 lines
14 KiB
PHP
Raw Permalink Normal View History

2023-05-15 10:03:46 +00:00
<?php
2023-05-20 14:09:49 +00:00
namespace Modules\Cetaklabel\Http\Controllers;
2023-05-15 10:03:46 +00:00
use anlutro\LaravelSettings\Facades\Setting;
2023-05-15 10:03:46 +00:00
use App\Http\Controllers\Controller;
use Carbon\Carbon;
2023-05-15 10:03:46 +00:00
use Exception;
use Haruncpi\LaravelIdGenerator\IdGenerator;
2023-05-15 10:03:46 +00:00
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
2023-05-20 14:09:49 +00:00
use Modules\Cetaklabel\DataTables\DocumentDataTable;
use Modules\Cetaklabel\Entities\Directorat;
use Modules\Cetaklabel\Entities\Document;
use Modules\Cetaklabel\Entities\DocumentDetail;
use Modules\Cetaklabel\Entities\DocumentType;
2023-08-31 08:42:00 +00:00
use Modules\Cetaklabel\Entities\Job;
2023-05-20 14:09:49 +00:00
use Modules\Cetaklabel\Entities\SpecialCode;
use Modules\Cetaklabel\Entities\SubDirectorat;
2023-05-20 14:09:49 +00:00
use Modules\Cetaklabel\Http\Requests\Document\StoreDocumentRequest;
use Response;
2023-07-07 00:57:32 +00:00
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\File;
2023-06-14 09:20:32 +00:00
2023-05-26 02:31:37 +00:00
// Reference the Dompdf namespace
2023-06-14 09:20:32 +00:00
// Reference the Options namespace
2023-06-14 09:20:32 +00:00
// Reference the Font Metrics namespace
2023-05-26 02:31:37 +00:00
2023-05-15 10:03:46 +00:00
class DocumentController extends Controller
{
public $user;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::guard('web')->user();
return $next($request);
});
2023-05-23 02:31:03 +00:00
addVendor('chained-select');
2023-05-15 10:03:46 +00:00
}
/**
* Display a listing of the resource.
*/
public function index(DocumentDataTable $dataTable)
{
2023-05-23 02:31:03 +00:00
if (is_null($this->user) || !$this->user->can('document.read')) {
2023-05-15 10:03:46 +00:00
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
return $dataTable->render('cetaklabel::app.document.index');
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreDocumentRequest $request)
{
2023-05-23 02:31:03 +00:00
if (is_null($this->user) || !$this->user->can('document.create')) {
2023-05-15 10:03:46 +00:00
abort(403, 'Sorry !! You are Unauthorized to create any master data !');
}
// Validate the request...
$validated = $request->validated();
2023-05-15 10:03:46 +00:00
2023-07-07 00:57:32 +00:00
$detailValidate = Validator::validate($request->all(), [
'file' => [
File::types(['pdf', 'zip', 'jpg', 'jpeg', 'png', 'bmp', 'tiff'])->max(5 * 1024)
2023-07-07 00:57:32 +00:00
]
]);
2023-05-15 10:03:46 +00:00
// Store the Document...
2023-07-07 00:57:32 +00:00
if ($validated && $detailValidate) {
2023-05-23 02:31:03 +00:00
2023-05-15 10:03:46 +00:00
try {
$document = Document::where([
'kode_odner' => $validated['kode_odner'],
'sequence_odner' => $validated['sequence_odner']
])->first();
2023-05-25 04:55:53 +00:00
if ($document) {
2023-05-25 04:55:53 +00:00
$document->update($validated);
} else {
$document = Document::create($validated);
}
2023-05-25 04:55:53 +00:00
$created = Document::find($document->id);
if ($request->hasFile('file')) {
$file = $request->file('file');
$path = 'uploads/' . substr($created->kode, 0, 10) . '/' . $created->sequence_odner . '/' . substr($created->kode, -5, 3);
$filename = substr($created->kode, -2, 2) . '_' . $file->getClientOriginalName();
if ($file->move(public_path($path), $filename)) {
$request['file'] = $path . '/' . $filename;
}
2023-05-15 10:03:46 +00:00
}
$special_code = SpecialCode::find($request->special_code_id);
$kode = IdGenerator::generate([
'table' => 'document_details',
'field' => 'kode',
'length' => 13,
'prefix' => $created->kode
]);
$detail = [
'kode' => $kode . $special_code->kode,
'no_urut' => substr($kode, -3, 3),
'document_id' => $created->id,
'document_type_id' => $request->document_type_id,
'special_code_id' => $request->special_code_id,
'tanggal_upload' => date('Y-m-d H:i:s'),
'tanggal_dokumen' => $request->tanggal_dokumen,
'nomor_dokumen' => $request->nomor_dokumen,
'perihal' => $request->perihal,
'kode_cabang' => $request->kode_cabang,
'jumlah_halaman' => $request->jumlah_halaman,
'custom_field_1' => $request->custom_field_1,
'custom_field_2' => $request->custom_field_2,
'custom_field_3' => $request->custom_field_3,
'custom_field_4' => $request->custom_field_4,
'file' => $path . '/' . $filename,
'nama_nasabah' => $request->nama_nasabah,
'no_rekening' => $request->no_rekening,
'no_cif' => $request->no_cif,
'group' => $request->group,
'kategori' => $request->kategori,
'status' => '0',
'aktif' => '1',
'keterangan' => ''
];
2023-09-21 04:08:59 +00:00
//echo json_encode($detail);exit;
DocumentDetail::create($detail);
2023-05-15 10:03:46 +00:00
return redirect()->route('document.index')->with('success', 'Document created successfully.');
} catch (Exception $e) {
return redirect()
->route('document.index')
->with('error', 'Document created failed, ' . $e->getMessage());
2023-05-15 10:03:46 +00:00
}
}
return false;
}
2023-07-07 00:57:32 +00:00
/**
* Update the specified resource in storage.
*/
public function update(Request $request)
{
2023-07-20 02:42:53 +00:00
if (is_null($this->user) || !$this->user->hasRole('dd')) {
2023-07-07 00:57:32 +00:00
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.']);
}
}
2023-05-15 10:03:46 +00:00
/**
* Show the form for creating a new resource.
*/
public function create()
{
2023-05-23 02:31:03 +00:00
if (is_null($this->user) || !$this->user->can('document.create')) {
2023-05-15 10:03:46 +00:00
abort(403, 'Sorry !! You are Unauthorized to create any master data !');
}
$directorat = [];
if ($this->user->hasRole('ad')) {
$directorat = Directorat::all();
}
$subdirectorats = SubDirectorat::where('directorat_id', $this->user->directorat_id)->get();
$jobs = Job::where('sub_directorat_id', $this->user->sub_directorat_id)->get();
2023-05-15 10:03:46 +00:00
$special_code = SpecialCode::all();
$document_type = DocumentType::all();
2023-06-14 09:20:32 +00:00
$setting = Setting::all();
return view('cetaklabel::app.document.create', compact('directorat', 'special_code', 'document_type', 'setting', 'subdirectorats', 'jobs'));
2023-05-15 10:03:46 +00:00
}
/**
* Display the specified resource.
*/
public function show(Document $documents)
{
2023-05-23 02:31:03 +00:00
if (is_null($this->user) || !$this->user->can('document.read')) {
2023-05-15 10:03:46 +00:00
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
abort(404, 'Page not found !');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
2023-07-20 02:42:53 +00:00
if (is_null($this->user) || !$this->user->hasRole('dd')) {
2023-05-15 10:03:46 +00:00
abort(403, 'Sorry !! You are Unauthorized to update any master data !');
}
2023-06-14 09:20:32 +00:00
$document = DocumentDetail::with('document')->find($id);
2023-05-26 02:31:37 +00:00
if ($document->status != '0') {
abort(403, 'Sorry !! This Document has been authorized !');
}
2023-05-15 10:03:46 +00:00
2023-06-14 09:20:32 +00:00
$document = DocumentDetail::with('document')->find($id);
2023-05-26 02:31:37 +00:00
return view('cetaklabel::app.document.edit', compact('document'));
2023-05-15 10:03:46 +00:00
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Request $request)
{
2023-05-23 02:31:03 +00:00
if (is_null($this->user) || !$this->user->can('document.delete')) {
2023-05-15 10:03:46 +00:00
abort(403, 'Sorry !! You are Unauthorized to delete any master data !');
}
// Delete Detail Document First...
2023-05-26 04:10:23 +00:00
$document_details = DocumentDetail::find($request->document);
2023-06-14 09:20:32 +00:00
if ($document_details->status == 1) {
$document_details->update(['status' => '6', 'keterangan' => $request->keterangan]);
2023-05-26 04:10:23 +00:00
echo json_encode(['status' => 'success', 'message' => 'Document menunggu Approval untuk di Hapus.']);
return;
}
2023-06-14 09:20:32 +00:00
if ($document_details->status == 6) {
2023-05-26 04:10:23 +00:00
$document_details->update(['status' => '7']);
echo json_encode(['status' => 'success',
'message' => 'Document menunggu Approval Tingkat 2 untuk di Hapus.'
]);
2023-05-26 04:10:23 +00:00
return;
}
2023-06-14 09:20:32 +00:00
if ($document_details->status == 7) {
2023-05-26 04:10:23 +00:00
$document_details->update(['status' => '8']);
$document_details->delete();
echo json_encode(['status' => 'success', 'message' => 'Document deleted successfully.']);
}
2023-05-15 10:03:46 +00:00
}
2023-07-07 00:57:32 +00:00
public function download(Request $request)
{
2023-05-26 02:31:37 +00:00
if (is_null($this->user) || !$this->user->can('document.read')) {
abort(403, 'Sorry !! You are Unauthorized to download any master data !');
}
$document = DocumentDetail::find($request->id);
2023-07-07 00:57:32 +00:00
if ($document->status == 1 && $document->approval_flag == 1) {
2023-05-26 02:31:37 +00:00
$document->update(['status' => '4']);
2023-08-10 04:35:07 +00:00
$document->save();
2023-05-26 02:31:37 +00:00
echo json_encode(['status' => 'success', 'message' => 'Document menunggu Approval untuk di Cetak.']);
return;
}
2023-07-07 00:57:32 +00:00
if ($document->status == 4 && $document->approval_flag == 1) {
2023-05-26 02:31:37 +00:00
$document->update(['status' => '5']);
2023-08-10 04:35:07 +00:00
$document->save();
2023-05-26 02:31:37 +00:00
echo json_encode(['status' => 'success', 'message' => 'Approval Berhasil.']);
return;
}
2023-07-07 00:57:32 +00:00
if ($document->status == 5 && $document->approval_flag !== 1) {
2023-05-26 02:31:37 +00:00
$document->update(['status' => '1']);
$document->save();
$filepath = public_path($document->file);
return Response::download($filepath);
}
2023-09-21 06:06:28 +00:00
if($document->status == 1 && $document->approval_flag !== 1){
2023-08-10 04:35:07 +00:00
$filepath = public_path($document->file);
return Response::download($filepath);
2023-09-21 06:06:28 +00:00
}
2023-05-26 02:31:37 +00:00
}
public function aktif(Request $request)
{
$document = DocumentDetail::find($request->id);
2023-06-14 09:20:32 +00:00
if ($document->aktif == 1 && $document->status != 9) {
$document->update(['status' => '9', 'keterangan' => $request->keterangan]);
echo json_encode(['status' => 'success',
'message' => 'Document menunggu Approval untuk di Nonaktifkan.'
]);
2023-05-26 02:31:37 +00:00
return;
}
2023-06-14 09:20:32 +00:00
if ($document->aktif == 1 && $document->status == 9) {
$document->update(['aktif' => '0', 'status' => '1']);
2023-05-26 02:31:37 +00:00
echo json_encode(['status' => 'success', 'message' => 'Document Berhasil di Nonaktifkan.']);
return;
}
}
public function odner(Request $request)
{
if (is_null($this->user) || !$this->user->can('document.read')) {
abort(403, 'Sorry !! You are Unauthorized to download any master data !');
}
$document_detail = DocumentDetail::with(['document'])->find($request->id);
$document = Document::with(['document_details'])->where([
'kode_odner' => $document_detail->document->kode_odner,
'sequence_odner' => $document_detail->document->sequence_odner
])->first();
$start = DocumentDetail::where('document_id', $document_detail->document_id)
->orderBy('tanggal_dokumen', 'asc')
->first()->tanggal_dokumen;
$last = DocumentDetail::where('document_id', $document_detail->document_id)
->orderBy('tanggal_dokumen', 'desc')
->first()->tanggal_dokumen;
$start = Carbon::create($start);
$start = $start->isoFormat('DD MMMM Y');
$last = Carbon::create($last);
$last = $last->isoFormat('DD MMMM Y');
2023-05-26 02:31:37 +00:00
activity()
->performedOn($document)
->causedBy(Auth::user())
->withProperties($document)
->log('Cetak Label Odner');
return view('cetaklabel::app.document.odner', compact('document_detail', 'start', 'last', 'document'));
}
2023-05-15 10:03:46 +00:00
}