File "ExpensesController.php"
Full Path: /home/isoftco/public_html/hrm/app/Http/Controllers/Admin/ExpensesController.php
File size: 6.55 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers\Admin;
use App\Classes\Files;
use App\Classes\Reply;
use App\Http\Controllers\AdminBaseController;
use App\Http\Requests\Admin\Expense\DeleteRequest;
use App\Http\Requests\Admin\Expense\EditRequest;
use App\Http\Requests\Admin\Expense\StoreRequest;
use App\Http\Requests\Admin\Expense\UpdateRequest;
use App\Models\Employee;
use App\Models\Expense;
use App\Models\Payroll;
use Barryvdh\DomPDF\PDF;
use Carbon\Carbon;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Yajra\DataTables\Facades\DataTables;
class ExpensesController extends AdminBaseController
{
public function __construct()
{
parent::__construct();
$this->expensesActive = 'active';
$this->hrMenuActive = 'active';
$this->expensesOpen = 'active open';
$this->pageTitle = trans('pages.expenses.indexTitle');
}
public function index()
{
return View::make('admin.expenses.index', $this->data);
}
//Datatable ajax request
public function ajax_expenses()
{
$result = Expense::join('employees', 'expenses.employee_id', '=', 'employees.id')
->select(DB::raw('(@cnt := if(@cnt IS NULL, 0, @cnt) + 1) AS s_id'), 'item_name', 'purchase_from', 'purchase_date', 'full_name', 'price', 'expenses.status', 'bill', 'expenses.id','employee_id')
->orderBy('expenses.id', 'desc')
->get();
return DataTables::of($result)
->editColumn('status', function ($row) {
$color = ['pending' => 'warning', 'approved' => 'success', 'rejected' => 'danger'];
return "<span id='status{$row->id}' class='label label-{$color[$row->status]}'>" . trans("core." . $row->status) . "</span>";
})->addColumn('edit', function ($row) {
$display_accept = '';
$display_reject = '';
if ($row->status == 'rejected') {
$display_reject = 'style="display:none"';
} elseif ($row->status == 'approved') {
$display_accept = 'style="display:none"';
}
$string = '';
$accept = '<a ' . $display_accept . ' id="accept' . $row->id . '" data-container="body" data-placement="top" data-original-title="Approve" href="javascript:;" onclick="changeStatus(' . $row->id . ',\'approved\');return false;" class="btn green btn-sm tooltips margin-bottom-10"><i class="fa fa-check"></i> Approve</a>';
$reject = '<a ' . $display_reject . ' id="reject' . $row->id . '" data-placement="top" data-original-title="Reject" href="javascript:;" onclick="changeStatus(' . $row->id . ',\'rejected\');return false;" class="btn red btn-sm tooltips margin-bottom-10"><i class="fa fa-close"></i> Reject</a>';
$string .= '' . $accept . $reject . '';
$string .= '<a class="btn purple btn-sm margin-bottom-10" onclick="loadView(\'' . route('admin.expenses.edit', $row->id) . '\')" ><i class="fa fa-edit"></i> ' . trans("core.btnViewEdit") . '</a>
<a style="width: 94px" href="javascript:;" onclick="del(' . $row->id . ',\'' . $row->item_name . '\');return false;" class="btn red margin-bottom-10 btn-sm">
<i class="fa fa-trash"></i> ' . trans("core.btnDelete") . '</a>';
return $string;
})->editColumn('full_name', function ($row) {
$employee = Employee::find($row->employee_id);
return $employee->decryptToCollection()->full_name;
})
->removeColumn('bill')
->rawColumns(['edit', 'status','employee_id'])
->make();
}
public function change_status(Request $request, $id)
{
$expense = Expense::findOrFail($id);
$expense->status = $request->status;
$expense->save();
return Reply::success("messages.expenseStatusChangeMessage");
}
public function create()
{
$this->pageTitle = trans('pages.expenses.createTitle');
$this->expensesAddActive = 'active';
$this->employees = Employee::manager()
->select('full_name', 'employees.id','employeeID')
->where('status', '=', 'active')->get();
return View::make('admin.expenses.create', $this->data);
}
/**
* @param StoreRequest $request
* @return array
* @throws \Exception
*/
public function store(StoreRequest $request)
{
$request->purchase_date = Carbon::createFromFormat('d-m-Y', $request->purchase_date)->format('Y-m-d');
$expense = Expense::create($request->toArray());
if ($request->hasFile('bill')) {
$file = new Files();
$filename = $file->upload($request->file('bill'), 'expense/bills', null, null, false);
$expense->bill = $filename;
$expense->save();
}
return Reply::redirect(route('admin.expenses.index'), "messages.expenseAddMessage");
}
/**
* @param EditRequest $request
* @param $id
* @return \Illuminate\Contracts\View\View
*/
public function edit(EditRequest $request, $id)
{
$this->pageTitle = trans('pages.expenses.editTitle');
$this->employees = Employee::manager()
->select('full_name', 'employees.id','employeeID')
->where('status', '=', 'active')->get();
$this->expense = Expense::find($id);
return View::make('admin.expenses.edit', $this->data);
}
/**
* @param UpdateRequest $request
* @param $id
* @return array
* @throws \Exception
*/
public function update(UpdateRequest $request, $id)
{
$expense = Expense::findOrFail($id);
$expense->update($request->toArray());
// If file is uploaded
if ($request->hasFile('bill')) {
$file = new Files();
$filename = $file->upload($request->file('bill'), 'expense/bills', null, null, false);
$expense->bill = $filename;
}
$expense->save();
return Reply::success("messages.expenseUpdateMessage");
}
public function download($id)
{
$this->payroll = Payroll::findOrFail($id);
return PDF::loadView("admin.payrolls.pdfview", $this->data)
->download($this->payroll->employeeID . "-" . date('F', mktime(0, 0, 0, $this->payroll->month, 10)) . "-" . $this->payroll->year . ".pdf");
}
public function destroy(DeleteRequest $request, $id)
{
Expense::destroy($id);
return Reply::success("messages.expenseDeleteMessage");
}
}