Server IP : 103.191.208.50 / Your IP : 216.73.216.53 Web Server : LiteSpeed System : Linux orion.herosite.pro 4.18.0-553.53.1.lve.el8.x86_64 #1 SMP Wed May 28 17:01:02 UTC 2025 x86_64 User : celkcksm ( 1031) PHP Version : 7.4.33 Disable Function : show_source, system, shell_exec, passthru, popen, exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/celkcksm/cms.ncriptech.com/app/Http/Controllers/Admin/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
<?php namespace App\Http\Controllers\Admin; use App\Models\StaffHourlyAttendance; use App\Http\Controllers\Controller; use Spatie\Permission\Models\Role; use App\Models\StaffAttendance; use App\Models\WorkShiftType; use App\Models\PayrollDetail; use Illuminate\Http\Request; use App\Models\PrintSetting; use App\Models\Transaction; use App\Models\Designation; use Illuminate\Support\Str; use App\Models\TaxSetting; use App\Models\Department; use App\Models\Payroll; use Carbon\Carbon; use App\User; use Toastr; use Auth; use DB; class PayrollController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { // Module Data $this->title = trans_choice('module_payroll', 1); $this->route = 'admin.payroll'; $this->view = 'admin.payroll'; $this->path = 'payroll'; $this->access = 'payroll'; $this->middleware('permission:'.$this->access.'-action', ['only' => ['index','generate','store','pay','unpay']]); $this->middleware('permission:'.$this->access.'-view', ['only' => ['index']]); $this->middleware('permission:'.$this->access.'-report', ['only' => ['report']]); $this->middleware('permission:'.$this->access.'-print', ['only' => ['index','print']]); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { // $data['title'] = $this->title; $data['route'] = $this->route; $data['view'] = $this->view; $data['path'] = $this->path; $data['access'] = $this->access; if(!empty($request->salary_type) || $request->salary_type != null){ $data['selected_salary_type'] = $salary_type = $request->salary_type; } else{ $data['selected_salary_type'] = '0'; } if(!empty($request->department) || $request->department != null){ $data['selected_department'] = $department = $request->department; } else{ $data['selected_department'] = '0'; } if(!empty($request->designation) || $request->designation != null){ $data['selected_designation'] = $designation = $request->designation; } else{ $data['selected_designation'] = '0'; } if(!empty($request->month) || $request->month != null){ $data['selected_month'] = $month = $request->month; } else{ $data['selected_month'] = date("m", strtotime(Carbon::today())); } if(!empty($request->year) || $request->year != null){ $data['selected_year'] = $year = $request->year; } else{ $data['selected_year'] = date("Y", strtotime(Carbon::today())); } $data['departments'] = Department::where('status', '1')->orderBy('title', 'asc')->get(); $data['designations'] = Designation::where('status', '1')->orderBy('title', 'asc')->get(); $data['print'] = PrintSetting::where('slug', 'pay-slip')->first(); // Filter Users if($request->salary_type){ $users = User::where('status', '1'); if(!empty($request->salary_type)){ $users->where('salary_type', $salary_type); } if(!empty($request->department)){ $users->where('department_id', $department); } if(!empty($request->designation)){ $users->where('designation_id', $designation); } $data['rows'] = $users->orderBy('staff_id', 'asc')->get(); } // Filter Payrolls if(!empty($request->month) && !empty($request->year)){ $payrolls = Payroll::whereYear('salary_month', $year) ->whereMonth('salary_month', $month); if(!empty($request->salary_type)){ $payrolls->where('salary_type', $salary_type); } if(!empty($request->department)){ $payrolls->with('user')->whereHas('user', function ($query) use ($department){ $query->where('department_id', $department); }); } if(!empty($request->designation)){ $payrolls->with('user')->whereHas('user', function ($query) use ($designation){ $query->where('designation_id', $designation); }); } $data['payrolls'] = $payrolls->orderBy('id', 'asc')->get(); } return view($this->view.'.index', $data); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function generate($id, $month, $year) { // $data['title'] = $this->title; $data['route'] = $this->route; $data['view'] = $this->view; $data['path'] = $this->path; $data['selected_month'] = $month; $data['selected_year'] = $year; $user = $data['row'] = User::where('id', $id)->where('status', '1')->firstOrFail(); // Filter Payroll $data['payroll'] = $payroll = Payroll::where('user_id', $id) ->whereYear('salary_month', $year) ->whereMonth('salary_month', $month) ->first(); // Update Validation if(isset($payroll) && $payroll->status == 1){ return redirect()->back(); } // Attendances if($user->salary_type == 1){ $data['attendances'] = StaffAttendance::whereYear('date', $year) ->whereMonth('date', $month) ->get(); } if($user->salary_type == 2){ $data['attendances'] = StaffHourlyAttendance::whereYear('date', $year) ->whereMonth('date', $month) ->get(); } $data['total_days'] = Carbon::createFromDate($year, $month, 1)->daysInMonth; $data['taxs'] = TaxSetting::where('status', '1')->get(); return view($this->view.'.generate', $data); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // Field Validation $request->validate([ 'user_id' => 'required', 'basic_salary' => 'required|numeric', 'total_earning' => 'required|numeric', 'total_allowance' => 'required|numeric', 'total_deduction' => 'required|numeric', 'gross_salary' => 'required|numeric', 'tax' => 'required|numeric', 'net_salary' => 'required|numeric', 'salary_month' => 'required|date', ]); // Insert Data try{ DB::beginTransaction(); // Insert Or Update Data $payroll = Payroll::updateOrCreate( [ 'user_id' => $request->user_id, 'salary_month' => $request->salary_month ], [ 'user_id' => $request->user_id, 'basic_salary' => $request->basic_salary, 'salary_type' => $request->salary_type, 'total_earning' => $request->total_earning, 'total_allowance' => $request->total_allowance, 'bonus' => '0', 'total_deduction' => $request->total_deduction, 'gross_salary' => $request->gross_salary, 'tax' => $request->tax, 'net_salary' => $request->net_salary, 'salary_month' => $request->salary_month, 'status' => '0', 'created_by' => Auth::guard('web')->user()->id ] ); // Remove Old Details PayrollDetail::where('payroll_id', $payroll->id)->delete(); // Payroll Allowances if(is_array($request->allowances)){ foreach($request->allowances as $key =>$allowance){ if($allowance != '' && $allowance != null){ // Insert Data $allowance = new PayrollDetail; $allowance->payroll_id = $payroll->id; $allowance->title = $request->allowance_titles[$key]; $allowance->amount = $request->allowances[$key]; $allowance->status = '1'; $allowance->save(); } }} // Payroll Deductions if(is_array($request->deductions)){ foreach($request->deductions as $key =>$deduction){ if($deduction != '' && $deduction != null){ // Insert Data $deduction = new PayrollDetail; $deduction->payroll_id = $payroll->id; $deduction->title = $request->deduction_titles[$key]; $deduction->amount = $request->deductions[$key]; $deduction->status = '0'; $deduction->save(); } }} DB::commit(); Toastr::success(__('msg_created_successfully'), __('msg_success')); return redirect()->route($this->route.'.index'); } catch(\Exception $e){ Toastr::error(__('msg_created_error'), __('msg_error')); return redirect()->back(); } } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // Field Validation $request->validate([ 'user_id' => 'required', 'basic_salary' => 'required|numeric', 'total_earning' => 'required|numeric', 'bonus' => 'required|numeric', 'total_deduction' => 'required|numeric', 'gross_salary' => 'required|numeric', 'tax' => 'required|numeric', 'net_salary' => 'required|numeric', 'salary_month' => 'required|date', ]); // Insert Data $payroll = Payroll::findOrFail($id); $payroll->user_id = $request->user_id; $payroll->basic_salary = $request->basic_salary; $payroll->salary_type = $request->salary_type; $payroll->total_earning = $request->total_earning; $payroll->total_allowance = '0'; $payroll->bonus = $request->bonus; $payroll->total_deduction = $request->total_deduction; $payroll->gross_salary = $request->gross_salary; $payroll->tax = $request->tax; $payroll->net_salary = $request->net_salary; $payroll->salary_month = $request->salary_month; $payroll->note = $request->note; $payroll->status = '0'; $payroll->created_by = Auth::guard('web')->user()->id; $payroll->save(); Toastr::success(__('msg_updated_successfully'), __('msg_success')); return redirect()->back(); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function pay(Request $request, $id) { // Field Validation $request->validate([ 'pay_date' => 'required|date|before_or_equal:today', 'payment_method' => 'required', ]); // Update Data $payroll = Payroll::findOrFail($id); $payroll->pay_date = $request->pay_date; $payroll->payment_method = $request->payment_method; $payroll->note = $request->note; $payroll->status = '1'; $payroll->updated_by = Auth::guard('web')->user()->id; $payroll->save(); // Transaction $transaction = new Transaction; $transaction->transaction_id = Str::random(16); $transaction->amount = $payroll->net_salary; $transaction->type = '2'; $transaction->created_by = Auth::guard('web')->user()->id; $payroll->user->transactions()->save($transaction); Toastr::success(__('msg_updated_successfully'), __('msg_success')); return redirect()->back(); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function unpay(Request $request, $id) { // Update Data $payroll = Payroll::findOrFail($id); $payroll->pay_date = null; $payroll->payment_method = null; $payroll->status = '0'; $payroll->updated_by = Auth::guard('web')->user()->id; $payroll->save(); // Transaction $transaction = new Transaction; $transaction->transaction_id = Str::random(16); $transaction->amount = $payroll->net_salary; $transaction->type = '1'; $transaction->created_by = Auth::guard('web')->user()->id; $payroll->user->transactions()->save($transaction); Toastr::success(__('msg_updated_successfully'), __('msg_success')); return redirect()->back(); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function report(Request $request) { // $data['title'] = trans_choice('module_payroll_report', 1); $data['route'] = $this->route; $data['view'] = $this->view; $data['path'] = $this->path; $data['access'] = $this->access; if(!empty($request->salary_type) || $request->salary_type != null){ $data['selected_salary_type'] = $salary_type = $request->salary_type; } else{ $data['selected_salary_type'] = '0'; } if(!empty($request->department) || $request->department != null){ $data['selected_department'] = $department = $request->department; } else{ $data['selected_department'] = '0'; } if(!empty($request->designation) || $request->designation != null){ $data['selected_designation'] = $designation = $request->designation; } else{ $data['selected_designation'] = '0'; } if(!empty($request->shift) || $request->shift != null){ $data['selected_shift'] = $shift = $request->shift; } else{ $data['selected_shift'] = '0'; } if(!empty($request->contract_type) || $request->contract_type != null){ $data['selected_contract'] = $contract_type = $request->contract_type; } else{ $data['selected_contract'] = '0'; } if(!empty($request->month) || $request->month != null){ $data['selected_month'] = $month = $request->month; } else{ $data['selected_month'] = date("m", strtotime(Carbon::today())); } if(!empty($request->year) || $request->year != null){ $data['selected_year'] = $year = $request->year; } else{ $data['selected_year'] = date("Y", strtotime(Carbon::today())); } $data['departments'] = Department::where('status', '1')->orderBy('title', 'asc')->get(); $data['designations'] = Designation::where('status', '1')->orderBy('title', 'asc')->get(); $data['work_shifts'] = WorkShiftType::where('status', '1')->orderBy('title', 'asc')->get(); $data['print'] = PrintSetting::where('slug', 'pay-slip')->first(); // Filter Payrolls if(!empty($request->month) && !empty($request->year)){ $payrolls = Payroll::whereYear('salary_month', $year)->whereMonth('salary_month', $month); if(!empty($request->salary_type)){ $payrolls->where('salary_type', $salary_type); } if(!empty($request->department)){ $payrolls->with('user')->whereHas('user', function ($query) use ($department){ $query->where('department_id', $department); }); } if(!empty($request->designation)){ $payrolls->with('user')->whereHas('user', function ($query) use ($designation){ $query->where('designation_id', $designation); }); } if(!empty($request->shift)){ $payrolls->with('user')->whereHas('user', function ($query) use ($shift){ $query->where('work_shift', $shift); }); } if(!empty($request->contract_type)){ $payrolls->with('user')->whereHas('user', function ($query) use ($contract_type){ $query->where('contract_type', $contract_type); }); } $data['rows'] = $payrolls->orderBy('id', 'asc')->get(); } return view($this->view.'.report', $data); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function print($id) { // $data['title'] = $this->title; $data['route'] = $this->route; $data['view'] = $this->view; $data['path'] = 'print-setting'; // View $data['print'] = PrintSetting::where('slug', 'pay-slip')->firstOrFail(); $data['row'] = Payroll::findOrFail($id); return view($this->view.'.print', $data); } }