You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.3 KiB
PHP
144 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Exports\ExpensesExport;
|
|
use App\Models\Expense;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
|
|
class ExpenseController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$isAdmin = Auth::user()->role == User::ROLE_CASIER;
|
|
$today = Carbon::now();
|
|
$query = Expense::query();
|
|
|
|
if ($isAdmin) {
|
|
$query->orderBy('date_expense', 'DESC');
|
|
}
|
|
|
|
if (!$isAdmin) {
|
|
$query->where('isIncome', 0)->orderBy('created_at', 'DESC');
|
|
}
|
|
|
|
if (Auth::user()->role == User::ROLE_MANAJEMEN) {
|
|
$query->where('is_paid', Expense::IS_PAID_DRAFT);
|
|
}
|
|
|
|
if ($request->q != null) {
|
|
$query->where('name', 'like', '%'.$request->q.'%')
|
|
->orWhere('description', 'like', '%'.$request->q.'%')
|
|
->orWhere('job_number', 'like', '%'.$request->q.'%');
|
|
}
|
|
|
|
$endDate = Carbon::now()->toDateString();
|
|
$startDate = $today->subDays(30)->toDateString();
|
|
|
|
if ($request->startDate != null && $request->endDate != null) {
|
|
$startDate = Carbon::parse($request->startDate)->toDateString();
|
|
$endDate = Carbon::parse($request->endDate)->toDateString();
|
|
}
|
|
|
|
$query->whereDate('date_expense', '<=', $endDate)
|
|
->whereDate('date_expense', '>=', $startDate);
|
|
|
|
$limit = $request->limit ? $request->limit : 10;
|
|
|
|
return inertia('Expense/Index', [
|
|
'expenses' => $query->paginate($limit),
|
|
'_startDate' => $startDate,
|
|
'_endDate' => $endDate,
|
|
'_limit' => $limit,
|
|
'_q' => $request->q
|
|
]);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'description' => ['required'],
|
|
'date_expense' => ['required', 'date'],
|
|
'amount' => ['required', 'numeric'],
|
|
'is_paid' => ['required', 'in:0,1,2,3,4'],
|
|
'isIncome' => ['required', 'in:0,1'],
|
|
]);
|
|
|
|
$is_paid = $request->is_paid;
|
|
if ($request->isIncome === 0) {
|
|
$request->validate([
|
|
'name' => ['required'],
|
|
'job_number' => ['required'],
|
|
]);
|
|
} else {
|
|
$is_paid = Expense::IS_PAID_PAID;
|
|
}
|
|
|
|
Expense::create([
|
|
'name' => $request->name,
|
|
'description' => $request->description,
|
|
'job_number' => $request->job_number,
|
|
'date_expense' => Carbon::parse($request->date_expense)->toDateString(),
|
|
'amount' => $request->amount,
|
|
'is_paid' => $is_paid,
|
|
'isIncome' => $request->isIncome,
|
|
]);
|
|
|
|
return redirect()->route('expenses.index');
|
|
}
|
|
|
|
public function update(Request $request, Expense $expense)
|
|
{
|
|
$request->validate([
|
|
'description' => ['required'],
|
|
'date_expense' => ['required', 'date'],
|
|
'amount' => ['required', 'numeric'],
|
|
'is_paid' => ['required', 'in:0,1,2,3,4'],
|
|
'isIncome' => ['required', 'in:0,1'],
|
|
]);
|
|
|
|
$is_paid = $request->is_paid;
|
|
if ($request->isIncome === 0) {
|
|
$request->validate([
|
|
'name' => ['required'],
|
|
'job_number' => ['required'],
|
|
]);
|
|
} else {
|
|
$is_paid = Expense::IS_PAID_PAID;
|
|
}
|
|
|
|
$expense->update([
|
|
'name' => $request->name,
|
|
'description' => $request->description,
|
|
'job_number' => $request->job_number,
|
|
'date_expense' => Carbon::parse($request->date_expense)->toDateString(),
|
|
'amount' => $request->amount,
|
|
'is_paid' => $is_paid,
|
|
'isIncome' => $request->isIncome,
|
|
]);
|
|
|
|
return redirect()->route('expenses.index');
|
|
}
|
|
|
|
public function decision(Expense $expense, $status)
|
|
{
|
|
$expense->update(['is_paid' => $status]);
|
|
return redirect()->route('expenses.index');
|
|
}
|
|
|
|
public function destroy(Expense $expense)
|
|
{
|
|
$expense->delete();
|
|
}
|
|
|
|
public function export()
|
|
{
|
|
return Excel::download(new ExpensesExport, 'expenses.xlsx');
|
|
}
|
|
}
|