Writeoff/Http/Controllers/ApprovalController.php
2023-12-19 18:00:24 +07:00

198 lines
6.7 KiB
PHP

<?php
namespace Modules\Writeoff\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Modules\Writeoff\DataTables\ApprovalDataTable;
use Modules\Writeoff\Entities\Approval;
class ApprovalController extends Controller
{
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::guard('web')->user();
return $next($request);
});
}
/**
* Display a listing of the resource.
*
* @return Renderable
*/
public function index(ApprovalDataTable $dataTable)
{
return $dataTable->render('writeoff::approval.index');
}
/**
* Show the form for creating a new resource.
*
* @return Renderable
*/
public function create()
{
return view('cetaklabel::create');
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
*
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
*
* @param int $id
*
* @return Renderable
*/
public function show($id)
{
return view('cetaklabel::show');
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
*
* @return Renderable
*/
public function edit($id)
{
$authorization = Approval::findOrFail($id);
return view('writeoff::approval.edit', compact('authorization'));
}
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param int $id
*
* @return Renderable
*/
public function update(Request $request, $id)
{
try {
$approval = Approval::findOrFail($id);
$approval->approved_by = $this->user->id;
$approval->approved_at = date('Y-m-d H:i:s');
$approval->status = $request->status;
$model = "Modules\\Cetaklabel\\Entities\\$approval->menu";
$model = new $model();
//20555012,18
if ($approval->status == 1) {
if ($approval->method == 'create') {
if ($approval->menu == 'CardboardDetail') {
$data = json_decode($approval->new_request, true);
$document_id = $data['document_id'];
foreach ($document_id as $key => $value) {
$model = new $model();
$_data['status'] = 1;
$_data['approved_by'] = $this->user->id;
$_data['approved_at'] = date('Y-m-d H:i:s');
$_data['cardboard_id'] = $data['cardboard_id'];
$_data['document_id'] = $value;
$model->fill($_data);
$model->save();
}
} else {
$data = json_decode($approval->new_request, true);
$data['status'] = 1;
$data['approved_by'] = $this->user->id;
$data['approved_at'] = date('Y-m-d H:i:s');
$model->fill($data);
$model->save();
}
} else if ($approval->method == 'update') {
$old = json_decode($approval->old_request, true);
$data = json_decode($approval->new_request, true);
$data['status'] = 1;
$data['approved_by'] = $this->user->id;
$data['approved_at'] = date('Y-m-d H:i:s');
$model = $model::findOrFail($old['id']);
if ($approval->menu == 'CardboardDetail') {
$data = json_decode($approval->new_request, true);
$document_id = $data['document_id'];
foreach ($document_id as $key => $value) {
$model = new $model();
$model = $model::findOrFail($data['cardboard_id']);
$_data['status'] = 1;
$_data['approved_by'] = $this->user->id;
$_data['approved_at'] = date('Y-m-d H:i:s');
$_data['cardboard_id'] = $data['cardboard_id'];
$_data['document_id'] = $value;
$model->fill($_data);
$model->save();
}
} else {
$model->fill($data);
$model->save();
}
} else if ($approval->method == 'delete') {
$data = json_decode($approval->old_request, true);
$model = $model::findOrFail($data['id']);
$data_ = [];
$data_['status'] = 1;
$data_['approved_by'] = $this->user->id;
$data_['approved_at'] = date('Y-m-d H:i:s');
$model = $model::findOrFail($data['id']);
$model->fill($data_);
$model->save();
$model->delete();
}
}
$approval->save();
$approval->delete();
echo json_encode([
'status' => 'success',
'message' => 'Approval ' . $approval->description . ' successfully.'
]);
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => 'Approval ' . $approval->description . ' failed.']);
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return Renderable
*/
public function destroy($id)
{
//
}
}