IncomeTransactionController.php
app/Http/Controllers/IncomeTransactionController.phpunknown
php
a year ago
12 kB
6
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