IncomeTransactionController.php
app/Http/Controllers/IncomeTransactionController.phpunknown
php
8 months ago
12 kB
3
Indexable
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\IncomeTransaction; use App\Models\PaymentMethod; use App\Models\Category; use Carbon\Carbon; class IncomeTransactionController extends Controller { public function incomes($date = []) { $user_id = auth()->user()->id; if (empty($date)) { $incomes = IncomeTransaction::where('user_id', $user_id) ->orWhere('par_user_id', $user_id) ->orWhere('par_user_id', auth()->user()->par_id) ->latest() ->get(); } else { $start_date = $date['start_date']; $end_date = $date['end_date']; if (auth()->user()->role_id == 2) { $incomes = IncomeTransaction::where('user_id', $user_id) ->whereBetween('date', [$start_date, $end_date]) ->latest() ->get(); } else if (auth()->user()->role_id == 1) { $incomes = IncomeTransaction::where('par_user_id', $user_id) ->whereBetween('date', [$start_date, $end_date]) ->latest() ->get(); } else { $incomes = IncomeTransaction::where('par_user_id', auth()->user()->par_id) ->whereBetween('date', [$start_date, $end_date]) ->latest() ->get(); } } if (auth()->user()->role_id == 3) { foreach ($incomes as $key => $income) { if ($income->status == 2) unset($incomes[$key]); } } if (auth()->user()->role_id == 1) { foreach ($incomes as $key => $income) { if (is_null($income->total_income)) unset($incomes[$key]); } } return $incomes; } public function index() { if (!empty(session()->get('data_incomes')['date'])) { $sess_date = session()->get('data_incomes')['date']; $incomes = $this->incomes([ 'start_date' => $sess_date['start_date'], 'end_date' => $sess_date['end_date'] ]); $input_date = date('m/d/Y', strtotime($sess_date['start_date'])) . ' - ' . date('m/d/Y', strtotime($sess_date['end_date'])); } else { $incomes = $this->incomes(); $today = Carbon::today(); $thirtyDaysAgo = $today->copy()->subDays(30); $formattedToday = $today->format('m/d/Y'); $formattedThirtyDaysAgo = $thirtyDaysAgo->format('m/d/Y'); $input_date = $formattedThirtyDaysAgo . ' - ' . $formattedToday; } $data_parse = [ 'input_date' => $input_date, 'incomes' => $incomes ]; return view("incomes.index", $data_parse); } public function show($id) { $income = IncomeTransaction::where('id', $id) ->where('user_id', auth()->user()->id) ->orWhere('par_user_id', auth()->user()->id) ->orWhere('par_user_id', auth()->user()->par_id) ->firstOrFail(); $income->staff_url = $this->getRoleRoute('teams'); return view('incomes.show', [ 'income' => $income ]); } public function create() { return view("incomes.form", [ 'income' => new IncomeTransaction(), 'page_meta' => [ 'title' => 'Tambahkan Transaksi Pendapatan', 'action' => 'incomes.store', 'method' => 'POST' ] ]); } public function validateIncome($request) { if (!empty($request->total_income)) $request->total_income = intval(str_replace('.', '', $request->total_income)); $payment_method_ids = implode(',', PaymentMethod::pluck('id')->toArray()); $list_validate = []; // BEFORE /* switch (auth()->user()->role_id) { case 3: // finance $list_validate = [ 'total_income' => ['required', 'max:256'], 'payment_method' => ['required', 'in:' . $payment_method_ids, 'numeric'], ]; break; case 2: // manager default: $list_validate = [ 'tenant_name' => ['required', 'min:3', 'max:256', 'string'], 'tenant_phone' => ['nullable', 'digits_between:10,13', 'numeric'], 'tenant_address' => ['nullable', 'min:3', 'max:256', 'string'], 'property_description' => ['required', 'min:3', 'max:256', 'string'], 'date' => ['required'], 'start_date' => ['required'], 'end_date' => ['required'], 'note' => ['nullable', 'min:1', 'max:256', 'string'] ]; break; } */ // REVISION $list_validate = [ 'tenant_name' => ['required', 'min:3', 'max:256', 'string'], 'tenant_phone' => ['nullable', 'digits_between:10,13', 'numeric'], 'tenant_address' => ['nullable', 'min:3', 'max:256', 'string'], 'property_description' => ['required', 'min:3', 'max:256', 'string'], 'date' => ['required'], 'start_date' => ['nullable'], 'end_date' => ['nullable'], 'note' => ['nullable', 'min:1', 'max:256', 'string'] ]; $category_ids = implode(',', Category::pluck('id')->toArray()); if (auth()->user()->role_id == 3) { $list_validate['category'] = ['required', 'in:'.$category_ids, 'numeric']; $list_validate['total_income'] = ['required', 'max:256']; $list_validate['payment_method'] = ['required', 'in:' . $payment_method_ids, 'numeric']; } $validated = $request->validate($list_validate); return $validated; } public function store(Request $request) { $this->validateIncome($request); // AWALNYA KODE DIBUAT SEPERTI INI /* $lastest_code = IncomeTransaction::latest()->pluck('code')->first(); $lastest_code = @intval($lastest_code); if (empty($lastest_code)) { $lastest_code = 1000; } else { $lastest_code += 1; } */ // REVISION $income = new IncomeTransaction(); $income->user_id = auth()->user()->id; $income->par_user_id = auth()->user()->par_id; $income->tenant_name = $request->tenant_name; $income->tenant_address = $request->tenant_address ?? ''; $income->payment_method_id = $request->payment_method; $income->total_income = $request->total_income; $income->tenant_phone = $request->tenant_phone ?? ''; $income->property_description = $request->property_description; $income->date = $request->date; $income->note = $request->note ?? ''; $income->start_date = $request->start_date; $income->end_date = $request->end_date; $income->save(); return redirect(route($this->getRoleRoute('incomes')))->with('success', 'Transaksi pendapatan berhasil ditambahkan'); } public function edit($id) { $income = IncomeTransaction::where('id', $id)->firstOrFail(); return view("incomes.form", [ 'income' => $income, 'page_meta' => [ 'title' => 'Edit Transaksi Pendapatan', 'action' => 'incomes.update', 'method' => 'PUT' ] ]); } public function update(Request $request) { $validated = $this->validateIncome($request); $income = IncomeTransaction::where('id', $request->id) ->whereIn('status', [0, 2]) ->firstOrfail(); if ($income->status == 1) return back()->with('danger', 'Transaksi tidak dapat diubah'); $access_req = []; // BEFORE /* switch (auth()->user()->role_id) { case 2: $access_req = [ 'tenant_name' => $request->tenant_name, 'tenant_address' => $request->tenant_address ?? '', 'tenant_phone' => $request->tenant_phone ?? '', 'property_description' => $request->property_description, 'date' => $request->date, 'note' => $request->note ?? '', 'start_date' => $request->start_date, 'end_date' => $request->end_date ]; break; case 3: $access_req = [ 'payment_method_id' => $request->payment_method, 'total_income' => $request->total_income ]; break; } */ // REVISION $access_req = [ 'tenant_name' => $request->tenant_name, 'tenant_address' => $request->tenant_address ?? '', 'tenant_phone' => $request->tenant_phone ?? '', 'property_description' => $request->property_description, 'date' => $request->date, 'note' => $request->note ?? '', 'start_date' => $request->start_date, 'end_date' => $request->end_date ]; if (auth()->user()->role_id == 3) // 3 = Finance { $access_req['payment_method_id'] = $request->payment_method; $access_req['total_income'] = $request->total_income; $access_req['code'] = Category::where('id', $request->category)->value('code'); $access_req['category_id'] = $request->category; } if (auth()->user()->role_id == 2) $access_req['status'] = 0; $income->update($access_req); session()->forget('data_incomes'); return redirect(route($this->getRoleRoute('incomes.edit'), $income->id))->with('success', 'Data transaksi berhasil diupdate'); } public function delete($id) { $income = IncomeTransaction::findOrFail($id); $income->delete(); session()->forget('data_incomes'); return redirect(route($this->getRoleRoute('incomes')))->with('success', 'Transaksi telah dihapus'); } public function approve($id) { $income = IncomeTransaction::findOrFail($id); $income->update([ 'status' => 1 ]); session()->forget('data_incomes'); return redirect(route($this->getRoleRoute('incomes')))->with('success', 'Transaksi telah disetujui'); } public function review($id) { $income = IncomeTransaction::findOrFail($id); $income->update([ 'status' => 2 ]); session()->forget('data_incomes'); return redirect(route($this->getRoleRoute('incomes')))->with('warning', 'Transaksi telah dikirim kembali untuk ditinjau ulang'); } public function filter_date(Request $request) { $dates = explode('-', trim($request->input('date'))); $dates = array_map('trim', $dates); // [0 => "04/27/2024", 1 => "05/26/2024"] $startDate = Carbon::parse($dates[0])->startOfDay(); $endDate = Carbon::parse($dates[1])->endOfDay(); session()->put('data_incomes', [ 'date' => [ 'start_date' => $startDate, 'end_date' => $endDate ] ]); return redirect()->route($this->getRoleRoute('incomes')); } }
Editor is loading...
Leave a Comment