One Hat Cyber Team
Your IP :
3.144.139.191
Server IP :
192.145.235.60
Server :
Linux ngx365.inmotionhosting.com 5.14.0-427.33.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Aug 30 09:45:56 EDT 2024 x86_64
Server Software :
Apache
PHP Version :
8.2.27
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
centos12
/
www
/
centosuit
/
app
/
Http
/
Controllers
/
View File Name :
ExpenseReportController.php
<?php namespace App\Http\Controllers; use App\DataTables\ExpenseCategoryReportDataTable; use Illuminate\Http\Request; use App\DataTables\ExpenseReportDataTable; use App\Helper\Reply; use App\Models\Currency; use App\Models\Expense; use App\Models\ExpensesCategory; use App\Models\Project; use App\Models\User; use Illuminate\Support\Facades\DB; class ExpenseReportController extends AccountBaseController { public function __construct() { parent::__construct(); $this->pageTitle = 'app.menu.expenseReport'; $this->categoryTitle = 'modules.expenseCategory.expenseCategoryReport'; } public function index(ExpenseReportDataTable $dataTable) { abort_403(user()->permission('view_expense_report') != 'all'); $this->fromDate = now($this->company->timezone)->startOfMonth(); $this->toDate = now($this->company->timezone); $this->currencies = Currency::all(); $this->currentCurrencyId = $this->company->currency_id; $this->projects = Project::allProjects(); $this->employees = User::withRole('employee')->get(); $this->categories = ExpensesCategory::get(); return $dataTable->render('reports.expense.index', $this->data); } public function expenseChartData(Request $request) { $startDate = ($request->startDate == null) ? null : now($this->company->timezone)->startOfMonth()->toDateString(); $endDate = ($request->endDate == null) ? null : now($this->company->timezone)->toDateString(); // Expense report start $expenses = Expense::where('status', 'approved'); if ($request->startDate !== null && $request->startDate != 'null' && $request->startDate != '') { $startDate = companyToDateString($request->startDate); $expenses = $expenses->where(DB::raw('DATE(`purchase_date`)'), '>=', $startDate); } if ($request->endDate !== null && $request->endDate != 'null' && $request->endDate != '') { $endDate = companyToDateString($request->endDate); $expenses = $expenses->where(DB::raw('DATE(`purchase_date`)'), '<=', $endDate); } if ($request->categoryID != 'all' && !is_null($request->categoryID)) { $expenses = $expenses->where('category_id', '=', $request->categoryID); } if ($request->projectID != 'all' && !is_null($request->projectID)) { $expenses = $expenses->where('project_id', '=', $request->projectID); } if ($request->employeeID != 'all' && !is_null($request->employeeID)) { $employeeID = $request->employeeID; $expenses = $expenses->where(function ($query) use ($employeeID) { $query->where('user_id', $employeeID); }); } $expenses = $expenses->orderBy('purchase_date', 'ASC') ->get([ DB::raw('DATE_FORMAT(purchase_date,"%d-%M-%y") as date'), DB::raw('YEAR(purchase_date) year, MONTH(purchase_date) month'), 'price', 'user_id', 'project_id', 'currency_id', 'exchange_rate', 'default_currency_id', 'category_id', ]); $prices = array(); foreach ($expenses as $expense) { if (!isset($prices[$expense->date])) { $prices[$expense->date] = 0; } $prices[$expense->date] += $expense->default_currency_price; } $dates = array_keys($prices); $graphData = array(); foreach ($dates as $date) { $graphData[] = [ 'date' => $date, 'total' => isset($prices[$date]) ? round($prices[$date], 2) : 0, ]; } usort($graphData, function ($a, $b) { $t1 = strtotime($a['date']); $t2 = strtotime($b['date']); return $t1 - $t2; }); $graphData = collect($graphData); $data['labels'] = $graphData->pluck('date')->toArray(); $data['values'] = $graphData->pluck('total')->toArray(); $totalExpense = $graphData->sum('total'); $data['colors'] = [$this->appTheme->header_color]; $data['name'] = __('modules.dashboard.totalExpenses'); $this->chartData = $data; // Expense report end // Expense category report start $startDate = ($request->startDate == null) ? null : now($this->company->timezone)->startOfMonth()->toDateString(); $endDate = ($request->endDate == null) ? null : now($this->company->timezone)->toDateString(); $expenseCategoryId = ExpensesCategory::join('expenses', 'expenses_category.id', '=', 'expenses.category_id') ->where('expenses.status', 'approved') ->where('expenses.category_id', '!=', null); if ($request->startDate !== null && $request->startDate != 'null' && $request->startDate != '') { $startDate = companyToDateString($request->startDate); $expenses = $expenseCategoryId->where(DB::raw('DATE(expenses.`purchase_date`)'), '>=', $startDate); } if ($request->endDate !== null && $request->endDate != 'null' && $request->endDate != '') { $endDate = companyToDateString($request->endDate); $expenses = $expenseCategoryId->where(DB::raw('DATE(expenses.`purchase_date`)'), '<=', $endDate); } if ($request->employeeID != 'all' && !is_null($request->employeeID)) { $expenseCategoryId = $expenseCategoryId->where('expenses.user_id', $request->employeeID); } if ($request->projectID != 'all' && !is_null($request->projectID)) { $expenseCategoryId = $expenseCategoryId->where('expenses.project_id', $request->projectID); } $expenseCategoryId = $expenseCategoryId->distinct('expenses.category_id')->selectRaw('expenses.category_id as id')->pluck('id')->toArray(); $categories = ExpensesCategory::whereIn('id', $expenseCategoryId)->get(); if ($request->categoryID != 'all' && !is_null($request->categoryID)) { $categories = $categories->where('id', $request->categoryID); } $barData['labels'] = $categories->pluck('category_name'); $barData['name'] = __('modules.reports.totalCategories'); $barData['colors'] = [$this->appTheme->header_color]; $barData['values'] = []; foreach ($categories as $category) { /** @phpstan-ignore-next-line */ $category_id = isset($category->id) ? $category->id : $category->category_id; if ($startDate && $endDate != null) { $barData['values'][] = Expense::where('category_id', $category_id)->whereBetween(DB::raw('DATE(`purchase_date`)'), [$startDate, $endDate])->count(); } else{ $barData['values'][] = Expense::where('category_id', $category_id)->count(); } } $this->barChartData = $barData; // Expense category report end $html = view('reports.expense.chart', $this->data)->render(); /* Expense report view */ $html2 = view('reports.expense.bar_chart', $this->data)->render(); /* Expense Category report view */ return Reply::dataOnly(['status' => 'success', 'html' => $html,'html2' => $html2, 'title' => $this->pageTitle, 'totalExpenses' => currency_format($totalExpense, company()->currency_id)]); } public function expenseCategoryReport() { abort_403(user()->permission('view_expense_report') != 'all'); $dataTable = new ExpenseCategoryReportDataTable(); $this->fromDate = now($this->company->timezone)->startOfMonth(); $this->toDate = now($this->company->timezone); $this->categories = ExpensesCategory::get(); return $dataTable->render('reports.expense.expense-category-report', $this->data); } }