IMMREX7
<?php
namespace App\Http\Controllers\School\Hostel;
use Illuminate\Http\Request;
use App\Http\Controllers\School\SchoolController;
use Auth;
use DB;
use Carbon\Carbon;
use PDF;
use Session;
class HostelFeeController extends SchoolController {
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request) {
$students = DB::table('hostel_students')
->join('hostel_floors', 'hostel_students.idFloor', '=', 'hostel_floors.idFloor')
->join('hostel_rooms', 'hostel_students.idRoom', '=', 'hostel_rooms.idRoom')
->join('hostel_beds', 'hostel_students.idBed', '=', 'hostel_beds.idBed')
->join('students', 'hostel_students.idStudent', '=', 'students.idStudent')
->join('classes', 'students.idClass', '=', 'classes.idClass')
->join('sections', 'students.idSection', '=', 'sections.idSection')
->where('hostel_students.idSchool', '=', Auth::guard('school')->user()->idSchool)
->select('students.idStudent', 'ecNo', 'firstName', 'lastName', 'middleName', 'floorName', 'bedName', 'roomName', 'father_fname', 'father_lname', 'father_mobile', 'className', 'sectionName');
if ($request->has('idFinancialYear')) {
$students = $students->where('hostel_students.idFinancialYear', '=', $request->idFinancialYear)->get();
} else {
$students = $students->where('hostel_students.idFinancialYear', '=', Session::get('idFinancialYear'))->get();
}
return view('schools.hostel.hostel_students', compact('classes', 'students', 'floors'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create() {
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$rules = [];
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Online') {
$rules += ['totalPaid' => 'required'];
} else if ($request->paymentMode == 'Card') {
$rules += ['cardNo' => 'required', 'totalPaid' => 'required'];
} else {
$rules += [
'idBank' => 'required',
'chequeDate' => 'required',
'chequeNo' => 'required',
'amount' => 'required'
];
}
$messages = [
'cardNo.required' => 'Card No or Trans ID field is required',
'totalPaid.required' => 'Enter The Amount.',
'idBank.required' => 'Bank must be selected',
'chequeDate.required' => 'Cheque / DD Date must be filled.',
'chequeNo.required' => 'Cheque / DD No. must be filled.'
];
$this->validate($request, $rules, $messages);
$penaltyAmount = 0;
$total_paid = 0;
$isSuccessful = 0;
$excessAmount = 0;
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
$total_paid = $request->totalPaid;
} else {
$total_paid = $request->amount;
}
$payableAmount = $request->payable;
//Check Bounce fine
$chqbounce = \App\HostelFailedTransaction::where('idStudent', '=', $request->idStudent)
->where('idFinancialYear', '=', $request->idFinancialYear)
->where('status', '=', 'Bounced')
->where('chqFineStatus', '=', '0')
->get();
if (isset($chqbounce)) {
foreach ($chqbounce as $chqFine)
$penaltyAmount = $penaltyAmount + $chqFine->chequeBounceCharge;
}
//Check if excess amount exists
$student_transaction = DB::table('hostel_transaction')
->select('idHostelTransaction')
->where('idStudent', '=', $request->idStudent)
->where('idFinancialYear', '=', $request->idFinancialYear)
->where(function($query) {
$query->whereNull('status');
$query->orWhere('status', '=', 'Cleared');
$query->orWhere('status', '=', 'In-Process');
$query->orWhere('status', '=', 'Success');
})
->get()->toArray();
$excessIds = array();
foreach ($student_transaction as $transaction)
array_push($excessIds, $transaction->idHostelTransaction);
$excess_transaction = DB::table('hostel_excess_transaction')
->whereIn('idHostelTransaction', $excessIds)
->where('isActive', '=', 'Y')
->orderBy('idHostelTransaction', 'desc')->first();
if ((count($request->selectedHeaders) == '1') && $total_paid < $payableAmount) {
$isSuccessful = $this->storeLesserTransaction($request, $penaltyAmount, $excess_transaction);
} else {
$lesser_transaction = DB::table('hostel_lesser_transaction')
->join('hostel_lesser_transaction_details', 'hostel_lesser_transaction_details.idHostelLesserTransaction', '=', 'hostel_lesser_transaction.idHostelLesserTransaction')
->where('hostel_lesser_transaction.idStudent', '=', $request->idStudent)
->where('hostel_lesser_transaction.idFinancialYear', '=', $request->idFinancialYear)
->whereIn('idFeehead', $request->selectedHeaders)
->where(function($query) {
$query->whereNull('hostel_lesser_transaction.status');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Cleared');
$query->orWhere('hostel_lesser_transaction.status', '=', 'In-Process');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Success');
})
->select(DB::raw('SUM(totalPaid) as totalPaid'))
->first();
if ((count($request->selectedHeaders) == '1') && $total_paid == $payableAmount && $lesser_transaction->totalPaid > 0) {
$isSuccessful = $this->storeLesserTransaction($request, $penaltyAmount, $excess_transaction);
} else if ($lesser_transaction->totalPaid > 0) {
flash('Fees cannot been submitted because one selected header belongs to lesser transaction !!');
if ($request->ajax()) {
return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
}
} else {
$isSuccessful = $this->storeSuccessTransaction($request, $penaltyAmount, $excess_transaction);
}
}
if ($isSuccessful == 1) {
if (isset($chqbounce)) {
foreach ($chqbounce as $chqFine) {
$chqFine->chqFineStatus = 1;
$chqFine->update();
}
}
if ($excess_transaction) {
$this->addAccessTransaction($excess_transaction->excessAmount, $excess_transaction->idHostelExcessTransaction, 1, 0);
}
flash('Fees has been submitted successfully!!');
if ($request->ajax()) {
return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
}
} else {
flash('Fees has not been submitted successfully!!');
if ($request->ajax()) {
return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
}
}
}
public function storeLesserTransaction(Request $request, $penaltyAmount, $excess_transaction) {
$stdtransaction = new \App\HostelLesserTransaction();
$stdtransaction->fill($request->all());
if ($request->has('paymentDate') && $request->paymentDate != null) {
$stdtransaction->paymentDate = $request->paymentDate;
} else {
$stdtransaction->paymentDate = today_date();
}
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
if ($excess_transaction) {
$stdtransaction->totalPaid = $request->totalPaid + $excess_transaction->excessAmount;
$request->totalPaid = $stdtransaction->totalPaid;
$stdtransaction->excessAmountUsed = $excess_transaction->excessAmount;
$stdtransaction->idHostelExcessTransaction = $excess_transaction->idHostelExcessTransaction;
} else
$stdtransaction->totalPaid = $request->totalPaid;
} else {
if ($excess_transaction) {
$stdtransaction->totalPaid = $request->amount +
$excess_transaction->excessAmount;
$request->totalPaid = $stdtransaction->totalPaid;
$stdtransaction->excessAmountUsed = $excess_transaction->excessAmount;
$stdtransaction->idHostelExcessTransaction = $excess_transaction->idHostelExcessTransaction;
} else
$stdtransaction->totalPaid = $request->amount;
$stdtransaction->status = 'In-Process';
}
$next_receiptno = next_receiptno();
$stdtransaction->receiptNo = 'SFP000' . $next_receiptno;
$stdtransaction->idSchool = Auth::guard('school')->user()->idSchool;
$stdtransaction->penaltyAmount = $penaltyAmount;
$stdtransaction->fine = 0;
$stdtransaction->discount = 0;
$stdtransaction->save();
foreach ($request->selectedHeaders as $key => $var) {
if ($this->storeLesserDetailsTransaction($request, $stdtransaction->idHostelLesserTransaction, $var) == 1)
return 1;
}
return 0;
}
public function storeLesserDetailsTransaction(Request $request, $idLesserTransaction, $feeHeaderId) {
$stepDiscount = 0;
$stepFine = 0;
$headerObject = \App\HostelFeehead::where('idHostelFeehead', '=', $feeHeaderId)->first()->toArray();
$date = Carbon::parse($headerObject['toDate']);
$now = Carbon::now();
$diff = $date->diffInDays($now, false);
if ($diff > 0) {
if ($headerObject['fine'] != null && $headerObject['fine'] != 0.00) {
$stepFine = ( $headerObject['fine'] * $diff);
} else
if ($headerObject['flatFine'] != null) {
$stepFine = $stepFine + $headerObject['flatFine'];
}
}
$discountfees = DB::table('hostelfee_discount')->where('idFinancialYear', '=', $request->idFinancialYear)->where('idStudent', '=', $request->idStudent)->where('idHostelFeehead', '=', $headerObject['idHostelFeehead'])->where('isActive', 'Y')->get();
if (isset($discountfees)) {
foreach ($discountfees as $discounts) {
$stepDiscount = $stepDiscount + $discounts->amount;
}
}
if ($this->isLesserHeader($request, $idLesserTransaction, $feeHeaderId, $stepFine) == 0) {
$stdtransaction_detail = new \App\HostelLesserTransactionDetail();
$stdtransaction_detail->idStudent = $request->idStudent;
$stdtransaction_detail->idHostelLesserTransaction = $idLesserTransaction;
$stdtransaction_detail->idFeehead = $feeHeaderId;
if ($request->has('paymentDate') && $request->paymentDate != null) {
$stdtransaction_detail->paymentDate = $request->paymentDate;
} else {
$stdtransaction_detail->paymentDate = today_date();
}
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
$stdtransaction_detail->amountPaid = $request->totalPaid;
} else {
$stdtransaction_detail->amountPaid = $request->amount;
$stdtransaction_detail->status = 'In-Process';
}
$stdtransaction_detail->fine = $stepFine;
$stdtransaction_detail->discount = $stepDiscount;
$stdtransaction_detail->save();
}
return 1;
}
public function isLesserHeader(Request $request, $idLesserTransaction, $feeHeaderID, $fine) {
$lesser_transaction = DB::table('hostel_lesser_transaction')
->join('hostel_lesser_transaction_details', 'hostel_lesser_transaction_details.idHostelLesserTransaction', '=', 'hostel_lesser_transaction.idHostelLesserTransaction')
->where('hostel_lesser_transaction.idStudent', '=', $request->idStudent)
->where('hostel_lesser_transaction.idFinancialYear', '=', $request->idFinancialYear)
->whereIn('idFeehead', $request->selectedHeaders)
->where(function($query) {
$query->whereNull('hostel_lesser_transaction.status');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Cleared');
$query->orWhere('hostel_lesser_transaction.status', '=', 'In-Process');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Success');
})
->select(DB::raw('SUM(totalPaid) as totalPaid'), DB::raw('SUM(hostel_lesser_transaction_details.fine) as fine'))
->first();
if ($lesser_transaction->totalPaid > 0) {
$stdtransaction_detail = new \App\HostelLesserTransactionDetail();
$stdtransaction_detail->idStudent = $request->idStudent;
$stdtransaction_detail->idHostelLesserTransaction = $idLesserTransaction;
$stdtransaction_detail->idFeehead = $feeHeaderID;
if ($request->has('paymentDate') && $request->paymentDate != null) {
$stdtransaction_detail->paymentDate = $request->paymentDate;
} else {
$stdtransaction_detail->paymentDate = today_date();
}
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
$stdtransaction_detail->amountPaid = $request->totalPaid;
} else {
$stdtransaction_detail->amountPaid = $request->amount;
$stdtransaction_detail->status = 'In-Process';
}
if ($lesser_transaction->fine == $fine)
$stdtransaction_detail->fine = 0;
else
$stdtransaction_detail->fine = $fine - $lesser_transaction->fine;
$stdtransaction_detail->discount = 0;
$stdtransaction_detail->save();
return 1;
}else {
return 0;
}
}
//
public function addAccessTransaction($excessAmount, $idHostelTransaction, $flag, $isCheque) {
if ($flag == 1) {
$excess = \App\HostelExcessTransaction::where('idHostelExcessTransaction', '=', $idHostelTransaction)->first(); //idHostelTransaction is the idHostelExcessTransaction in excess table
$excess->isActive = 'N';
$excess->update();
} else {
$excess = new \App\HostelExcessTransaction();
$excess->idHostelTransaction = $idHostelTransaction;
if ($isCheque == 1)
$excess->isActive = 'P';
$excess->excessAmount = $excessAmount;
$excess->save();
}
}
public function storeSuccessTransaction(Request $request, $penaltyAmount, $excess_transaction) {
$total_paid = 0;
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
$total_paid = $request->totalPaid;
} else {
$total_paid = $request->amount;
}
$excessAmount = $total_paid - $request->payable;
$stdtransaction = new \App\HostelTransaction();
$stdtransaction->fill($request->all());
if ($request->has('paymentDate') && $request->paymentDate != null) {
$stdtransaction->paymentDate = $request->paymentDate;
} else {
$stdtransaction->paymentDate = today_date();
}
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
$stdtransaction->totalPaid = $total_paid;
} else {
$stdtransaction->totalPaid = $total_paid;
$stdtransaction->status = 'In-Process';
}
$next_receiptno = next_receiptno();
$stdtransaction->receiptNo = 'SFP000' . $next_receiptno;
$stdtransaction->idSchool = Auth::guard('school')->user()->idSchool;
$stdtransaction->penaltyAmount = $penaltyAmount;
$stdtransaction->fine = 0;
$stdtransaction->discount = 0;
if ($excess_transaction) {
$stdtransaction->excessAmountUsed = $excess_transaction->excessAmount;
$stdtransaction->idHostelExcessTransaction = $excess_transaction->idHostelExcessTransaction;
}
$stdtransaction->save();
if ($excessAmount > 0) {
if ($request->paymentMode == 'Cheque')
$this->addAccessTransaction($excessAmount, $stdtransaction->idHostelTransaction, 0, 1);
else
$this->addAccessTransaction($excessAmount, $stdtransaction->idHostelTransaction, 0, 0);
}
return $this->storeDetailsTransaction($request, $stdtransaction, $excess_transaction);
}
public function storeDetailsTransaction(Request $request, $stdtransaction, $excess_transaction) {
$totalFine = 0;
$totalAmount = 0;
$totalDiscount = 0;
foreach ($request->selectedHeaders as $key => $var) {
$stepFine = 0;
$stepDiscount = 0;
$stepAmount = 0;
$headerObject = \App\HostelFeehead::where('idHostelFeehead', '=', $var)->first()->toArray();
$date = Carbon::parse($headerObject['toDate']);
$now = Carbon::now();
$diff = $date->diffInDays($now, false);
if ($diff > 0) {
if ($headerObject['fine'] != null && $headerObject['fine'] != 0.00) {
$stepFine = ( $headerObject['fine'] * $diff);
} else
if ($headerObject['flatFine'] != null) {
$stepFine = $stepFine + $headerObject['flatFine'];
}
}
$discountfees = DB::table('hostelfee_discount')->where('idFinancialYear', '=', $request->idFinancialYear)->where('idStudent', '=', $request->idStudent)->where('idHostelFeehead', '=', $headerObject['idHostelFeehead'])->where('isActive', 'Y')->get();
if (isset($discountfees)) {
foreach ($discountfees as $discounts) {
$stepDiscount = $stepDiscount + $discounts->amount;
}
}
$stepAmount = ( $headerObject['amount'] + $stepFine );
$stepAmount = $stepAmount - $stepDiscount;
$stdtransaction_detail = new \App\HostelTransactionDetail();
$stdtransaction_detail->idStudent = $request->idStudent;
$stdtransaction_detail->idHostelTransaction = $stdtransaction->idHostelTransaction;
$stdtransaction_detail->idFeehead = $var;
if ($request->has('paymentDate') && $request->paymentDate != null) {
$stdtransaction_detail->paymentDate = $request->paymentDate;
} else {
$stdtransaction_detail->paymentDate = today_date();
}
$stdtransaction_detail->amountPaid = $stepAmount;
$stdtransaction_detail->fine = $stepFine;
$stdtransaction_detail->discount = $stepDiscount;
if ($request->paymentMode == 'Cheque' || $request->paymentMode == 'DD') {
$stdtransaction_detail->status = 'In-Process';
}
$stdtransaction_detail->save();
$totalAmount = $totalAmount + ( $headerObject['amount'] + $stepFine );
$totalAmount = $totalAmount - $stepDiscount;
$totalDiscount = $totalDiscount + $stepDiscount;
$totalFine = $totalFine + $stepFine;
}
$stdtransaction->totalPaid = $totalAmount;
$stdtransaction->discount = $totalDiscount;
$stdtransaction->fine = $totalFine;
if ($request->payable == 0) {
$excessAmount = $excess_transaction->excessAmount - $totalAmount;
if ($excessAmount > 0) {
$this->addAccessTransaction($excessAmount, $stdtransaction->idHostelTransaction, 0, 0);
}
$stdtransaction->excessAmountUsed = $totalAmount;
$stdtransaction->idHostelExcessTransaction = $excess_transaction->idHostelExcessTransaction;
}
$stdtransaction->update();
return 1;
}
public function addZeroAmountTransaction(Request $request, $penaltyAmount, $excess_transaction) {
$total_paid = 0;
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online') {
$total_paid = $request->totalPaid;
} else {
$total_paid = $request->amount;
}
if ($excess_transaction) {
$total_paid = $excess_transaction->excessAmount;
}
$stdtransaction = new \App\HostelTransaction();
$stdtransaction->fill($request->all());
if ($request->has('paymentDate') && $request->paymentDate != null) {
$stdtransaction->paymentDate = $request->paymentDate;
} else {
$stdtransaction->paymentDate = today_date();
}
if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card') {
$stdtransaction->totalPaid = $total_paid;
} else {
$stdtransaction->totalPaid = $total_paid;
$stdtransaction->status = 'In-Process';
}
$next_receiptno = next_receiptno();
$stdtransaction->receiptNo = 'SFP000' . $next_receiptno;
$stdtransaction->idSchool = Auth::guard('school')->user()->idSchool;
$stdtransaction->penaltyAmount = $penaltyAmount;
$stdtransaction->fine = 0;
$stdtransaction->discount = 0;
$stdtransaction->save();
return $this->storeDetailsTransaction($request, $stdtransaction);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id) {
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id) {
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id) {
//
}
public function getFeeDetails($id) {
$student = \App\AdmEntry::where('idStudent', '=', $id)->first();
$class_feeheads = \DB::table('hostel_feeheads')->where('idClass', '=', $student->idClass)
->where('idSection', '=', $student->idSection)
->where('studentCategory', '=', $student->studentType)
->whereNull('idStudent');
$allcat_feeheads = \DB::table('hostel_feeheads')->where('idClass', '=', $student->idClass)
->where('idSection', '=', $student->idSection)
->where('studentCategory', '=', 'All')
->whereNull('idStudent');
$feeheads = \DB::table('hostel_feeheads')->where('idStudent', '=', $student->idStudent)
->union($class_feeheads)
->union($allcat_feeheads)
->orderBy('toDate')
->get();
$feetotal = $feeheads->sum('amount');
$feeheader_ids = $feeheads->pluck('idHostelFeehead')->toArray();
$prevaccess_fee = DB::table('hostel_excess_transaction')
->join('hostel_transaction', 'hostel_excess_transaction.idHostelTransaction', '=', 'hostel_transaction.idHostelTransaction')
->where('idStudent', '=', $student->idStudent)
->where('idFinancialYear', '=', $student->idFinancialYear)
->where('hostel_excess_transaction.isActive', '=', 'Y')
->orderBy('hostel_excess_transaction.idHostelTransaction', 'desc')->first();
$lesser_transaction = DB::table('hostel_lesser_transaction')
->join('hostel_lesser_transaction_details', 'hostel_lesser_transaction_details.idHostelLesserTransaction', '=', 'hostel_lesser_transaction.idHostelLesserTransaction')
->where('hostel_lesser_transaction.idStudent', '=', $student->idStudent)
->where('hostel_lesser_transaction.idFinancialYear', '=', $student->idFinancialYear)
->whereIn('idFeehead', $feeheader_ids)
->where(function($query) {
$query->whereNull('hostel_lesser_transaction.status');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Cleared');
$query->orWhere('hostel_lesser_transaction.status', '=', 'In-Process');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Success');
})
->select(DB::raw('SUM(totalPaid) as totalPaid'))
->first();
$paidfees_tot = \App\HostelTransaction::where('idStudent', '=', $student->idStudent)
->where(function($query) {
$query->whereNull('status');
$query->orWhere('status', '=', 'Cleared');
$query->orWhere('status', '=', 'In-Process');
$query->orWhere('status', '=', 'Success');
})
->select('paymentMode', 'paymentDate', 'idHostelTransaction', DB::raw('SUM(totalPaid) as totalPaid'), DB::raw('SUM(discount) as discount'), DB::raw('SUM(fine) as fine'), DB::raw('SUM(penaltyAmount) as penaltyAmount'))->first();
$paidfees = \App\HostelTransaction::where('idStudent', '=', $student->idStudent)
->where(function($query) {
$query->whereNull('status');
$query->orWhere('status', '=', 'In-Process');
$query->orWhere('status', '=', 'Cleared');
$query->orWhere('status', '=', 'Success');
})->get();
$lesserfees = \App\HostelLesserTransaction::where('idStudent', '=', $student->idStudent)
->where(function($query) {
$query->whereNull('status');
$query->orWhere('status', '=', 'In-Process');
$query->orWhere('status', '=', 'Cleared');
$query->orWhere('status', '=', 'Success');
})->get();
return view('schools.hostel.feedetails_hostel', compact('lesserfees', 'lesser_transaction', 'feetotal', 'paidfees_tot', 'student', 'paidfees', 'feeheads', 'excesspaid', 'penalty', 'feeheadwiseamount', 'prevaccess_fee'));
}
public function getFeewiseData($id, $studentId) {
$feeheader_ids = array_map('intval', explode(',', $id));
//return $feeheader_ids;
$student = \App\AdmEntry::where('idStudent', '=', $studentId)->first();
$chqbounce = \App\HostelFailedTransaction::where('idStudent', '=', $student->idStudent)
->where('idFinancialYear', '=', $student->idFinancialYear)
->where('status', '=', 'Bounced')
->where('chqFineStatus', '=', '0')
->get();
$penaltyAmount = 0;
$amountDiscount = 0;
if (isset($chqbounce)) {
foreach ($chqbounce as $chqFine)
$penaltyAmount = $penaltyAmount + $chqFine->chequeBounceCharge;
}
$excess_transaction = DB::table('hostel_excess_transaction')
->join('hostel_transaction', 'hostel_excess_transaction.idHostelTransaction', '=', 'hostel_transaction.idHostelTransaction')
->where('idStudent', '=', $student->idStudent)
->where('idFinancialYear', '=', $student->idFinancialYear)
->where(function($query) {
$query->whereNull('status');
$query->orWhere('status', '=', 'Cleared');
$query->orWhere('status', '=', 'In-Process');
$query->orWhere('status', '=', 'Success');
})
->where('hostel_excess_transaction.isActive', '=', 'Y')
->orderBy('hostel_excess_transaction.idHostelTransaction', 'desc')->first();
$excessAmount = 0;
if (isset($excess_transaction))
$excessAmount = $excess_transaction->excessAmount;
$selectedHeaders = \App\HostelFeehead::whereIn('idHostelFeehead', $feeheader_ids)->get();
$totalAmount = 0;
$lessPaid = 0;
$lesser_transaction = DB::table('hostel_lesser_transaction')
->join('hostel_lesser_transaction_details', 'hostel_lesser_transaction_details.idHostelLesserTransaction', '=', 'hostel_lesser_transaction.idHostelLesserTransaction')
->where('hostel_lesser_transaction.idStudent', '=', $student->idStudent)
->where('hostel_lesser_transaction.idFinancialYear', '=', $student->idFinancialYear)
->whereIn('idFeehead', $feeheader_ids)
->where(function($query) {
$query->whereNull('hostel_lesser_transaction.status');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Cleared');
$query->orWhere('hostel_lesser_transaction.status', '=', 'In-Process');
$query->orWhere('hostel_lesser_transaction.status', '=', 'Success');
})
->select(DB::raw('SUM(totalPaid) as totalPaid'))
->first();
if (isset($lesser_transaction))
$lessPaid = $lesser_transaction->totalPaid;
for ($i = 0; $i < sizeof($selectedHeaders); $i++) {
$stepFine = 0;
$stepDiscount = 0;
$stepAmount = 0;
$headerObject = $selectedHeaders[$i];
$date = Carbon::parse($headerObject['toDate']);
$now = Carbon::now();
$diff = $date->diffInDays($now, false);
if ($diff > 0) {
if ($headerObject['fine'] != null && $headerObject['fine'] != 0.00) {
$stepFine = ( $headerObject['fine'] * $diff);
} else
if ($headerObject['flatFine'] != null) {
$stepFine = $stepFine + $headerObject['flatFine'];
}
}
$discountfees = DB::table('hostelfee_discount')->where('idFinancialYear', '=', $student->idFinancialYear)->where('idStudent', '=', $student->idStudent)->where('idHostelFeehead', '=', $headerObject['idHostelFeehead'])->where('isActive', 'Y')->get();
if (isset($discountfees)) {
foreach ($discountfees as $discounts) {
$stepDiscount = $stepDiscount + $discounts->amount;
$amountDiscount = $amountDiscount + $stepDiscount;
}
}
$totalAmount = $totalAmount + ( $headerObject['amount'] + $stepFine );
$totalAmount = $totalAmount - $stepDiscount;
}
$totalAmount = $totalAmount + $penaltyAmount;
$totalAmount = $totalAmount - $lessPaid;
if ($totalAmount < $excessAmount)
return 0;
else
return $totalAmount - $excessAmount;
}
public function printHostelReceipt($type,$id) {
$school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
if($type == 'lessamt'){
$transaction = \App\HostelLesserTransaction::where('idHostelLesserTransaction', '=', $id)->first();
}else{
$transaction = \App\HostelTransaction::where('idHostelTransaction', '=', $id)->first();
}
$student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
$class_feeheads = \DB::table('hostel_feeheads')->where('idClass', '=', $student->idClass)
->where('idSection', '=', $student->idSection)
->where('studentCategory', '=', $student->studentType)
->whereNull('idStudent');
$allcat_feeheads = \DB::table('hostel_feeheads')->where('idClass', '=', $student->idClass)
->where('idSection', '=', $student->idSection)
->where('studentCategory', '=', 'All')
->whereNull('idStudent');
$feeheads = \DB::table('hostel_feeheads')->where('idStudent', '=', $student->idStudent)
->union($class_feeheads)
->union($allcat_feeheads)
->orderBy('toDate')
->get();
$feetotal = $feeheads->sum('amount');
$pdf = PDF::loadView('schools.hostel.fee_receipt', ['margin_top' => 20], compact('transaction', 'school', 'student', 'feetotal'));
return $pdf->stream('feereceipt.pdf');
}
public function cancelReceipt($type, $id) {
if($type == 'lessamt'){
$transaction = \App\HostelLesserTransaction::where('idHostelLesserTransaction', '=', $id)->first();
}else{
$transaction = \App\HostelTransaction::where('idHostelTransaction', '=', $id)->first();
}
$student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
return view('schools.hostel.cancelreceipt', compact('transaction', 'student'));
}
public function receiptCancellation(Request $request) {
$rules = ['remarks' => 'required'];
$this->validate($request, $rules);
$acessAmount = 0;
if ($request->type == 'Full') {
$transaction = \App\HostelTransaction::where('idHostelTransaction', '=', $request->idHostelTransaction)->first();
$acessAmount = $transaction->accessPaid;
DB::beginTransaction();
$transaction->status = 'Cancelled';
$transaction->remarks = $request->remarks;
$transaction->update();
$stdtransaction_dets = \App\HostelTransactionDetail::where('idHostelTransaction', '=', $request->idHostelTransaction)->get();
foreach ($stdtransaction_dets as $var) {
$det = \App\HostelTransactionDetail::where('idHostelTransactionDetail', '=', $var->idHostelTransactionDetail)->first();
$det->status = 'Cancelled';
$det->update();
}
DB::commit();
if ($acessAmount > 0) {
$excess_transaction = DB::table('hostel_excess_transaction')
->join('hostel_transaction', 'hostel_excess_transaction.idHostelTransaction', '=', 'hostel_transaction.idHostelTransaction')
->where('idStudent', '=', $request->idStudent)
->where('idFinancialYear', '=', $request->idFinancialYear)
->where(function($query) {
$query->whereNull('status');
$query->orWhere('status', '=', 'Cleared');
$query->orWhere('status', '=', 'In-Process');
$query->orWhere('status', '=', 'Success');
})
->where('hostel_excess_transaction.isActive', '=', 'Y')
->orderBy('hostel_excess_transaction.idHostelTransaction', 'desc')->first();
if (isset($excess_transaction))
$acessAmount = $acessAmount + $excess_transaction->excessAmount;
$excess = new \App\HostelExcessTransaction();
$excess->idHostelTransaction = $request->idHostelTransaction;
$excess->excessAmount = $acessAmount;
$excess->remarks = "Access amount has been reverted to this transaction and previous access amount has been added";
$excess->save();
}
} else {
$transaction = \App\HostelLesserTransaction::where('idHostelLesserTransaction', '=', $request->idHostelLesserTransaction)->first();
$acessAmount = $transaction->accessPaid;
DB::beginTransaction();
$transaction->status = 'Cancelled';
$transaction->remarks = $request->remarks;
$transaction->update();
$stdtransaction_dets = \App\HostelLesserTransactionDetail::where('idHostelLesserTransaction', '=', $request->idHostelTransaction)->get();
foreach ($stdtransaction_dets as $var) {
$det = \App\HostelLesserTransactionDetail::where('idHostelLessTransactionDet', '=', $var->idHostelLessTransactionDet)->first();
$det->status = 'Cancelled';
$det->update();
}
DB::commit();
}
return redirect('school/hfcancelled-receipts');
}
}
Copyright © 2021 -