IMMREX7

aku nok ndi : /home/spdtg/www/schoolmis/app/Http/Controllers/School/
File Up :
aku nok ndi : /home/spdtg/www/schoolmis/app/Http/Controllers/School/BusFeepaymentController.php

<?php

namespace App\Http\Controllers\School;

use Illuminate\Http\Request;
use App\Http\PaymentCalculation;
use Auth;
use DB;
use PDF;
use Carbon\Carbon;
use Session;

class BusFeepaymentController extends SchoolController {

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request) {
        $stdtransport = \App\StudentTransport::where('student_transport.idSchool', '=', Auth::guard('school')->user()->idSchool);
        if($request->has('idFinancialYear')){
            $stdtransport = $stdtransport->where('idFinancialYear','=',$request->idFinancialYear)->get();
        }else{
            $stdtransport = $stdtransport->where('idFinancialYear','=', Session::get('idFinancialYear'))->get();
        }
        return view('schools.buses.studentbusfee', compact('stdtransport'));
    }

    /**
     * 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) {
        // dd($request->all());
        $rules = [];
        if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Online') {
            $rules += ['totalPaid' => 'required'];
        } else if ($request->paymentMode == 'IMPS') {
            $rules = [];
        } 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' || $request->paymentMode == 'IMPS') {
            $total_paid = $request->totalPaid;
        } else {
            $total_paid = $request->amount;
        }

        $payableAmount = $request->payable;
        //Check Bounce fine
        $chqbounce = \App\BusFailedTransaction::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('bus_transaction')
                        ->select('idBusTransaction')
                        ->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->idBusTransaction);
        $excess_transaction = DB::table('bus_excess_transaction')
                        ->whereIn('idBusTransaction', $excessIds)
                        ->where('isActive', '=', 'Y')
                        ->orderBy('idBusTransaction', 'desc')->first();


        if ((count($request->selectedHeaders) == '1') && $total_paid < $payableAmount) {

            $isSuccessful = $this->storeLesserTransaction($request, $penaltyAmount, $excess_transaction);
        } else {
            $lesser_transaction = DB::table('bus_lesser_transaction')
                    ->join('bus_lesser_transaction_details', 'bus_lesser_transaction_details.idBusLesserTransaction', '=', 'bus_lesser_transaction.idBusLesserTransaction')
                    ->where('bus_lesser_transaction.idStudent', '=', $request->idStudent)
                    ->where('bus_lesser_transaction.idFinancialYear', '=', $request->idFinancialYear)
                    ->whereIn('idBusFeehead', $request->selectedHeaders)
                    ->where(function($query) {
                        $query->whereNull('bus_lesser_transaction.status');
                        $query->orWhere('bus_lesser_transaction.status', '=', 'Cleared');
                        $query->orWhere('bus_lesser_transaction.status', '=', 'In-Process');
                        $query->orWhere('bus_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->idBusExcessTransaction, 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\BusLesserTransaction();
        $stdtransaction->fill($request->all());
        if ($request->has('paymentDate') && $request->paymentDate != null) {
            $stdtransaction->paymentDate = $request->paymentDate;
        } else {
            $stdtransaction->paymentDate = today_date();
        }

        if($request->has('remarks')){
            $stdtransaction->remarks = $request->remarks;
        }

        if($request->has('additionalAmount')){
            if($request->additionalAmount != null)
            $stdtransaction->additionalAmount = $request->additionalAmount;
        }

        if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online' || $request->paymentMode == 'IMPS') {

            if ($excess_transaction) {
                $stdtransaction->totalPaid = $request->totalPaid + $excess_transaction->excessAmount;
                $request->totalPaid = $stdtransaction->totalPaid;
                $stdtransaction->excessAmountUsed = $excess_transaction->excessAmount;
                $stdtransaction->idBusExcessTransaction = $excess_transaction->idBusExcessTransaction;
            } 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->idBusExcessTransaction = $excess_transaction->idBusExcessTransaction;
            } else
                {
                    $stdtransaction->totalPaid = $request->amount;
                    if($request->has('additionalAmount')){
                        if($request->additionalAmount != null)
                        {
                            $stdtransaction->totalPaid = $request->amount - $request->additionalAmount;
                        }
                    }
            }

            $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->created_by = Auth::guard('school')->user()->idSchoolUser;

        $stdtransaction->save();

        foreach ($request->selectedHeaders as $key => $var) {
            if ($this->storeLesserDetailsTransaction($request, $stdtransaction->idBusLesserTransaction, $var) == 1)
                return 1;
        }

        return 0;
    }

    public function storeLesserDetailsTransaction(Request $request, $idBusLesserTransaction, $feeHeaderId) {

        $stepDiscount = 0;
        $stepFine = 0;
        $headerObject = \App\BusFeehead::where('idBusFeehead', '=', $feeHeaderId)->first()->toArray();
        $date = Carbon::parse($headerObject['toDate']);
        if ($request->has('paymentDate') && $request->paymentDate != null) {
            $now = Carbon::parse($request->paymentDate);
        }else{
            $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) {
                if(Auth::guard('school')->user()->idSchool == 25){
                    $student = \App\AdmEntry::where('idStudent', $request->idStudent)->first();
                    if ($request->has('paymentDate') && $request->paymentDate != null) {
                        $headerObject['paymentDate'] = $request->paymentDate;
                    }
                    $calculatedFine = PaymentCalculation::calculateFine($headerObject,$student);
                    $fetchFine = PaymentCalculation::fetchFineTransaction($headerObject['idBusFeehead'],$student);
                    if( $calculatedFine > $fetchFine)
                    $stepFine = $calculatedFine - $fetchFine;
                    else $stepFine = 0;
                }else
                $stepFine = $stepFine + $headerObject['flatFine'];
            }
        }

        $discountfees = DB::table('busfee_discounts')->where('idFinancialYear', '=', $request->idFinancialYear)->where('idStudent', '=', $request->idStudent)->where('idBusFeehead', '=', $headerObject['idBusFeehead'])->where('isActive', 'Y')->get();

        if (isset($discountfees)) {
            foreach ($discountfees as $discounts) {
                $stepDiscount = $stepDiscount + $discounts->amount;
            }
        }

        if ($this->isLesserHeader($request, $idBusLesserTransaction, $feeHeaderId, $stepFine) == 0) {

            $stdtransaction_detail = new \App\BusLesserTransactionDetail();
            $stdtransaction_detail->idStudent = $request->idStudent;
            $stdtransaction_detail->idBusLesserTransaction = $idBusLesserTransaction;
            $stdtransaction_detail->idBusFeehead = $feeHeaderId;
            $stdtransaction_detail->created_by = Auth::guard('school')->user()->idSchoolUser;
            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' || $request->paymentMode == 'IMPS') {
                $stdtransaction_detail->amountPaid = $request->totalPaid;
            } else {
                $stdtransaction_detail->amountPaid = $request->amount;
                if($request->has('additionalAmount')){
                    if($request->additionalAmount != null)
                    {
                        $stdtransaction_detail->amountPaid = $request->amount - $request->additionalAmount;
                    }
                }
                $stdtransaction_detail->status = 'In-Process';
            }

            $stdtransaction_detail->fine = $stepFine;
            $stdtransaction_detail->discount = $stepDiscount;
            $stdtransaction_detail->save();
        }

        return 1;
    }

    public function isLesserHeader(Request $request, $idBusLesserTransaction, $feeHeaderID, $fine) {
        $lesser_transaction = DB::table('bus_lesser_transaction')
                ->join('bus_lesser_transaction_details', 'bus_lesser_transaction.idBusLesserTransaction', '=', 'bus_lesser_transaction.idBusLesserTransaction')
                ->where('bus_lesser_transaction.idStudent', '=', $request->idStudent)
                ->where('bus_lesser_transaction.idFinancialYear', '=', $request->idFinancialYear)
                ->whereIn('idBusFeehead', $request->selectedHeaders)
                ->where(function($query) {
                    $query->whereNull('bus_lesser_transaction.status');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Cleared');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'In-Process');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Success');
                })
                ->select(DB::raw('SUM(totalPaid) as totalPaid'), DB::raw('SUM(bus_lesser_transaction_details.fine) as fine'))
                ->first();
        if ($lesser_transaction->totalPaid > 0) {
            $stdtransaction_detail = new \App\BusLesserTransactionDetail();
            $stdtransaction_detail->idStudent = $request->idStudent;
            $stdtransaction_detail->idBusLesserTransaction = $idBusLesserTransaction;
            $stdtransaction_detail->idBusFeehead = $feeHeaderID;
            $stdtransaction_detail->created_by = Auth::guard('school')->user()->idSchoolUser;
            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' || $request->paymentMode == 'IMPS') {
                $stdtransaction_detail->amountPaid = $request->totalPaid;
            } else {
                $stdtransaction_detail->amountPaid = $request->amount;
                if($request->has('additionalAmount')){
                    if($request->additionalAmount != null)
                    {
                        $stdtransaction_detail->amountPaid = $request->amount - $request->additionalAmount;
                    }
                }
                $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, $idTransaction, $flag, $isCheque) {
        if ($flag == 1) {
            $excess = \App\BusExcessTransaction::where('idBusExcessTransaction', '=', $idTransaction)->first(); //idTransaction is the  idBusExcessTransaction in excess table
            $excess->isActive = 'N';
            $excess->update();
        } else {
            $excess = new \App\BusExcessTransaction();
            $excess->idBusTransaction = $idTransaction;
            if ($isCheque == 1)
                $excess->isActive = 'P';
            $excess->created_by = Auth::guard('school')->user()->idSchoolUser;
            $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' || $request->paymentMode == 'IMPS') {
            $total_paid = $request->totalPaid;
        } else {
            $total_paid = $request->amount;
        }

        $excessAmount = $total_paid - $request->payable;
        $stdtransaction = new \App\BusTransaction();
        $stdtransaction->fill($request->all());
        if ($request->has('paymentDate') && $request->paymentDate != null) {
            $stdtransaction->paymentDate = $request->paymentDate;
        } else {
            $stdtransaction->paymentDate = today_date();
        }

        if($request->has('remarks')){
            $stdtransaction->remarks = $request->remarks;
        }

        if($request->has('additionalAmount')){
            if($request->additionalAmount != null)
            $stdtransaction->additionalAmount = $request->additionalAmount;
        }


        if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online' || $request->paymentMode == 'IMPS') {
            $stdtransaction->totalPaid = $total_paid;
        } else {
            $stdtransaction->totalPaid = $total_paid;
            if($request->has('additionalAmount')){
                if($request->additionalAmount != null)
                {
                    $stdtransaction->totalPaid = $total_paid - $request->additionalAmount;
                }
            }
            $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->idBusExcessTransaction = $excess_transaction->idBusExcessTransaction;
        }
        $stdtransaction->created_by = Auth::guard('school')->user()->idSchoolUser;
        $stdtransaction->save();

        if ($excessAmount > 0) {
            if ($request->paymentMode == 'Cheque')
                $this->addAccessTransaction($excessAmount, $stdtransaction->idBusTransaction, 0, 1);
            else
                $this->addAccessTransaction($excessAmount, $stdtransaction->idBusTransaction, 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\BusFeehead::where('idBusFeehead', '=', $var)->first()->toArray();
                $date = Carbon::parse($headerObject['toDate']);
                if ($request->has('paymentDate') && $request->paymentDate != null) {
                    $now = Carbon::parse($request->paymentDate);
                }else{
                    $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) {
                        if(Auth::guard('school')->user()->idSchool == 25){
                            if($now->format('M') != $date->format('M')){
                                $now->addMonth();
                                $months = $now->diffInMonths($date);
                                if($months > 0){
                                    $stepFine = $stepFine + ($headerObject['flatFine'] * $months);
                                }else
                                $stepFine = $stepFine + $headerObject['flatFine'];
                            }else  $stepFine = $stepFine + $headerObject['flatFine'];
                        }else
                        $stepFine = $stepFine + $headerObject['flatFine'];
                    }
                }

            $discountfees = DB::table('busfee_discounts')->where('idFinancialYear', '=', $request->idFinancialYear)->where('idStudent', '=', $request->idStudent)->where('idBusFeehead', '=', $headerObject['idBusFeehead'])->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\BusTransactionDetail();
            $stdtransaction_detail->idStudent = $request->idStudent;
            $stdtransaction_detail->idBusTransaction = $stdtransaction->idBusTransaction;
            $stdtransaction_detail->idBusFeehead = $var;
            if ($request->has('paymentDate') && $request->paymentDate != null) {
                $stdtransaction_detail->paymentDate = $request->paymentDate;
            } else {
                $stdtransaction_detail->paymentDate = today_date();
            }
            $stdtransaction_detail->created_by = Auth::guard('school')->user()->idSchoolUser;
            $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->idBusTransaction, 0, 0);
            }
            $stdtransaction->excessAmountUsed = $totalAmount;
            $stdtransaction->idBusExcessTransaction = $excess_transaction->idBusExcessTransaction;
        }

        $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' || $request->paymentMode == 'IMPS') {
            $total_paid = $request->totalPaid;
        } else {
            $total_paid = $request->amount;
        }

        if ($excess_transaction) {
            $total_paid = $excess_transaction->excessAmount;
        }


        $stdtransaction = new \App\BusTransaction();
        $stdtransaction->fill($request->all());
        $stdtransaction->created_by = Auth::guard('school')->user()->idSchoolUser;
        if ($request->has('paymentDate') && $request->paymentDate != null) {
            $stdtransaction->paymentDate = $request->paymentDate;
        } else {
            $stdtransaction->paymentDate = today_date();
        }
        
        if($request->has('remarks')){
            $stdtransaction->remarks = $request->remarks;
        }

        if($request->has('additionalAmount')){
            if($request->additionalAmount != null)
            $stdtransaction->additionalAmount = $request->additionalAmount;
        }

        if ($request->paymentMode == 'Cash' || $request->paymentMode == 'Card' || $request->paymentMode == 'Online' || $request->paymentMode == 'IMPS') {
            $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 fetchRoyalBusFee($student,$stdtransport,$request){
        $lesser_transaction = [];
        $feeheads = [];
        $feetotal = 0;
        $plan = '';

        $prevaccess_fee = DB::table('bus_excess_transaction')
                        ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                        ->where('idStudent', '=', $student->idStudent)
                        ->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                        ->where('bus_excess_transaction.isActive', '=', 'Y')
                        ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();

        $paidfees_tot = \App\BusTransaction::where('idStudent', '=', $student->idStudent)
                        ->where(function($query) {
                            $query->whereNull('status');
                            $query->orWhere('status', '=', 'Cleared');
                            $query->orWhere('status', '=', 'In-Process');
                            $query->orWhere('status', '=', 'Success');
                        })
                        ->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                        ->select('paymentMode', 'paymentDate', 'idBusTransaction', 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\BusTransaction::where('idStudent', '=', $student->idStudent)
                        ->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                        ->where(function($query) {
                            $query->whereNull('status');
                            $query->orWhere('status', '=', 'In-Process');
                            $query->orWhere('status', '=', 'Cleared');
                            $query->orWhere('status', '=', 'Success');
                            $query->orWhere('status', '=', 'Bounced');
                        })->get();

        $lesserfees = \App\BusLesserTransaction::where('idStudent', '=', $student->idStudent)
                        ->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                        ->where(function($query) {
                            $query->whereNull('status');
                            $query->orWhere('status', '=', 'In-Process');
                            $query->orWhere('status', '=', 'Cleared');
                            $query->orWhere('status', '=', 'Success');
                            $query->orWhere('status', '=', 'Bounced');
                        })->get();
        
        if($paidfees->count() > 0){
                foreach($paidfees as $paidfee){
            if($paidfee->status != "Bounced"){
                    $transactions = \App\BusTransactionDetail::where('idBusTransaction','=',$paidfee->idBusTransaction)->get();
                    foreach($transactions as $transaction){
                        $header = \DB::table('busfeeheads')->where('idBusFeehead',$transaction->idBusFeehead)->first();
                        if (str_contains($header->feeheadLabel, 'Plan A')) {
                            $plan = 'Plan A';
                            break;
                        }else if (str_contains($header->feeheadLabel, 'Plan B')) {
                            $plan = 'Plan B';
                            break;
                        }else if (str_contains($header->feeheadLabel, 'Plan C')) {
                            $plan = 'Plan C';
                            break;
                        }
                    }
                }

                if($plan != '') break;
            }
        }

        if($plan == '')
        if($lesserfees->count() > 0){
            foreach($lesserfees as $paidfee){
                $transactions = \App\BusLesserTransactionDetail::where('idBusLesserTransaction','=',$paidfee->idBusLesserTransaction)->get();
                foreach($transactions as $transaction){
                    $header = \DB::table('busfeeheads')->where('idBusFeehead',$transaction->idBusFeehead)->first();
                    if (str_contains($header->feeheadLabel, 'Plan A')) {
                        $plan = 'Plan A';
                        break;
                    }else if (str_contains($header->feeheadLabel, 'Plan B')) {
                        $plan = 'Plan B';
                        break;
                    }else if (str_contains($header->feeheadLabel, 'Plan C')) {
                        $plan = 'Plan C';
                        break;
                    }
                }

                if($plan != '') break;
            }
        }

        $type = '';
            
        if($request->get('paymode') != null && $plan == ''){
            $type = $request->get('paymode');
            $feeheads = \DB::table('busfeeheads')->where('idStop', '=', $stdtransport->idStop)
                    ->where('idRoute', '=', $stdtransport->idRoute)
                    ->where('feeheadLabel', 'LIKE', $type.'%')
                    ->orderBy('toDate')
                    ->get();
            $feetotal = $feeheads->sum('amount');
            $feeheader_ids = $feeheads->pluck('idBusFeehead')->toArray();
            $lesser_transaction = DB::table('bus_lesser_transaction')
                ->join('bus_lesser_transaction_details', 'bus_lesser_transaction.idBusLesserTransaction', '=', 'bus_lesser_transaction_details.idBusLesserTransaction')
                ->where('bus_lesser_transaction.idStudent', '=', $student->idStudent)
                ->where('bus_lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                ->whereIn('idBusFeehead', $feeheader_ids)
                ->where(function($query) {
                    $query->whereNull('bus_lesser_transaction.status');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Cleared');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'In-Process');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Success');
                })
                ->select(DB::raw('SUM(totalPaid) as totalPaid'),DB::raw('SUM(bus_lesser_transaction_details.discount) as discount'))
                ->first();

        }else if($plan != ''){
            $feeheads = \DB::table('busfeeheads')->where('idStop', '=', $stdtransport->idStop)
                    ->where('idRoute', '=', $stdtransport->idRoute)
                    ->where('feeheadLabel', 'LIKE', $plan.'%')
                    ->orderBy('toDate')
                    ->get();   
            $feetotal = $feeheads->sum('amount');
            $feeheader_ids = $feeheads->pluck('idBusFeehead')->toArray();
            $lesser_transaction = DB::table('bus_lesser_transaction')
            ->join('bus_lesser_transaction_details', 'bus_lesser_transaction_details.idBusLesserTransaction', '=', 'bus_lesser_transaction.idBusLesserTransaction')
            ->where('bus_lesser_transaction.idStudent', '=', $student->idStudent)
            ->where('bus_lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
            ->whereIn('idBusFeehead', $feeheader_ids)
            ->where(function($query) {
                $query->whereNull('bus_lesser_transaction.status');
                $query->orWhere('bus_lesser_transaction.status', '=', 'Cleared');
                $query->orWhere('bus_lesser_transaction.status', '=', 'In-Process');
                $query->orWhere('bus_lesser_transaction.status', '=', 'Success');
            })
            ->select(DB::raw('SUM(totalPaid) as totalPaid'),DB::raw('SUM(bus_lesser_transaction_details.discount) as discount'))
            ->first();
        }

        $feeData = PaymentCalculation::calculateBusFee($student,$request,$stdtransport);
        $sessionPending = [];
        $idStudentSession = null;
        $isCollectionAllowed = "Y";
        $fetchSession = \App\FinancialYear::where('idFinancialYear','<',$student->idFinancialYear)->where('idSchool', '=',$student->idSchool)->orderBy('idFinancialYear','DESC')->get();
        if(count($fetchSession) > 0){
            foreach($fetchSession as $var){
                $studentSession = \App\AdmEntry::where('idSchool', '=', $student->idSchool)->where('idFinancialYear', '=', $var->idFinancialYear)->where('ecNo', '=', $student->ecNo)->where('isActive','Y')->first();
                if($studentSession != null){
                    $sessionPending[$var->financialYearName] = PaymentCalculation::getOutstandingAmount($studentSession,$request);
                }
            }                
        }
        return view('schools.buses.busfeedetails_royal', compact('isCollectionAllowed','sessionPending', 'stdtransport','feeData','lesserfees', 'lesser_transaction', 'feetotal', 'paidfees_tot', 'student', 'paidfees', 'feeheads', 'prevaccess_fee','plan','type'));
    }

    public function busFeeDetails($id,Request $request) {
        $stdtransport = \App\StudentTransport::where('idStdTransport', '=', $id)->where('idFinancialYear','=', Session::get('idFinancialYear'))->first();
        $student = \App\AdmEntry::where('idStudent', '=', $stdtransport->idStudent)->first();
        //dd( $student);
        if($student->idSchool == 25){
            return $this->fetchRoyalBusFee($student,$stdtransport,$request);
        }
        $feeheads = \App\BusFeehead::where('idStop', '=', $stdtransport->idStop)
                ->where('idRoute', '=', $stdtransport->idRoute)
                ->where('idFinancialYear','=', Session::get('idFinancialYear'))
                ->get();
        $feeheader_ids = $feeheads->pluck('idBusFeehead')->toArray();
        $feetotal = $feeheads->sum('amount');
        $prevaccess_fee = DB::table('bus_excess_transaction')
                        ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                        ->where('idStudent', '=', $student->idStudent)
                        ->where('idFinancialYear', '=', $student->idFinancialYear)
                        ->where('bus_excess_transaction.isActive', '=', 'Y')
                        ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();
        $lesser_transaction = DB::table('bus_lesser_transaction')
                ->join('bus_lesser_transaction_details', 'bus_lesser_transaction_details.idBusLesserTransaction', '=', 'bus_lesser_transaction.idBusLesserTransaction')
                ->where('bus_lesser_transaction.idStudent', '=', $student->idStudent)
                ->where('bus_lesser_transaction.idFinancialYear', '=', $student->idFinancialYear)
                ->whereIn('idBusFeehead', $feeheader_ids)
                ->where(function($query) {
                    $query->whereNull('bus_lesser_transaction.status');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Cleared');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'In-Process');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Success');
                })
                ->select(DB::raw('SUM(totalPaid) as totalPaid'))
                ->first();
        $paidfees_tot = \App\BusTransaction::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', 'idBusTransaction', 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\BusTransaction::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\BusLesserTransaction::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.buses.busfeedetails', compact('lesser_transaction', 'prevaccess_fee', 'lesserfees', 'stdtransport', 'feetotal', 'paidfees_tot', 'student', 'paidfees', 'feeheads'));
    }

    public function getChequeList(Request $request) {
        $today_date = Carbon::today()->format('Y-m-d');
        if ($request->has('fromDate') && $request->fromDate != null) {
            $from_date = Carbon::createFromFormat('d-m-Y', $request->fromDate);
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate);
        }

        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $feeHeaders = \App\BusFeehead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->groupBy('feeheadName')
        ->orderBy('toDate')->get()->pluck('feeheadName', 'idBusFeehead')->toArray();
        $fys = ['' => '--Select Academic Year--'] + \App\FinancialYear::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idFinancialYear')->get()->pluck('financialYearName', 'idFinancialYear')->toArray();
        $chequelist = DB::table('bus_transaction')
                ->join('banks', 'bus_transaction.idBank', '=', 'banks.idBank')
                ->join('students', 'bus_transaction.idStudent', '=', 'students.idStudent')
                ->join('classes', 'students.idClass', '=', 'classes.idClass')
                ->join('sections', 'students.idSection', '=', 'sections.idSection')
                ->leftJoin('school_users', 'bus_transaction.created_by', '=', 'school_users.idSchoolUser')
                ->select('bus_transaction.*','banks.*','school_users.name','students.*','classes.*','sections.*')
                ->where('bus_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('bus_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool);
        $lesserchequelist = DB::table('bus_lesser_transaction')
                ->join('banks', 'bus_lesser_transaction.idBank', '=', 'banks.idBank')
                ->join('students', 'bus_lesser_transaction.idStudent', '=', 'students.idStudent')
                ->join('classes', 'students.idClass', '=', 'classes.idClass')
                ->join('sections', 'students.idSection', '=', 'sections.idSection')
                ->leftJoin('school_users', 'bus_lesser_transaction.created_by', '=', 'school_users.idSchoolUser')
                ->select('bus_lesser_transaction.*','banks.*','school_users.name','students.*','classes.*','sections.*')
                ->where('bus_lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('bus_lesser_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool);
        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0) {
            $transactionIds = DB::table('bus_transaction_details')->whereIn('bus_transaction_details.idBusFeehead', $request->feeHeaders)->get()->pluck('idBusTransaction')->toArray();
            $chequelist = $chequelist->whereIn('bus_transaction.idBusTransaction', $transactionIds);
            $transactionLessIds = DB::table('bus_lesser_transaction_details')->whereIn('bus_lesser_transaction_details.idBusFeehead', $request->feeHeaders)->get()->pluck('idBusLesserTransaction')->toArray();
            $lesserchequelist = $lesserchequelist->whereIn('bus_lesser_transaction.idBusLesserTransaction', $transactionLessIds);
        }
        if ($request->toDate != null && $request->fromDate != null) {
            $chequelist = $chequelist->whereBetween('paymentDate', [$from_date->format('Y-m-d'), $to_date->format('Y-m-d')]);
            $lesserchequelist = $lesserchequelist->whereBetween('paymentDate', [$from_date->format('Y-m-d'), $to_date->format('Y-m-d')]);
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $chequelist = $chequelist->whereBetween('paymentDate', [$from_date->format('Y-m-d'), $today_date]);
            $lesserchequelist = $lesserchequelist->whereBetween('paymentDate', [$from_date->format('Y-m-d'), $today_date]);
        } else if ($request->has('toDate') && $request->toDate != null) {
            $chequelist = $chequelist->whereDate('paymentDate', '<=', $to_date);
            $lesserchequelist = $lesserchequelist->whereDate('paymentDate', '<=', $to_date);
        } 
        
        if ($request->has('sections') && count($request->sections) > 0) {
            $chequelist = $chequelist->whereIn('students.idSection', $request->sections);
            $lesserchequelist = $lesserchequelist->whereIn('students.idSection', $request->sections);
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $chequelist = $chequelist->whereIn('students.idClass', $request->classes);
            $lesserchequelist = $lesserchequelist->whereIn('students.idClass', $request->classes);
        }  
        
        if ($request->has('paymentMode')) {
            if ($request->paymentMode == "All"){
                $lesserchequelist = $lesserchequelist->get();
                $chequelist = $chequelist->get();
            }
            else
            {
                $chequelist = $chequelist->where('paymentMode', '=', $request->paymentMode)->get();
                $lesserchequelist = $lesserchequelist->where('paymentMode', '=', $request->paymentMode)->get();
            }
        }else {
            $lesserchequelist = $lesserchequelist->get();
            $chequelist = $chequelist->get();
        }
        return view('schools.buses.chequelist', compact('chequelist', 'classes', 'fys','lesserchequelist','feeHeaders'));
    }

    public function updateCheque(Request $request) {
        $acessAmount = 0;
        if ($request->has('idBusTransaction')) {
            if ($request->status == 'Bounced') {
                $stdcheque = \App\BusTransaction::where('idBusTransaction', '=', $request->idBusTransaction)->first();
                $stdcheque->status = 'Bounced';

                $acessAmount = $stdcheque->excessAmountUsed;
                $stdcheque->chequeBounceCharge = $request->chequeBounceCharge;
                DB::beginTransaction();
                $stdcheque->update();
                $stdtransaction_dets = \App\BusTransactionDetail::where('idBusTransaction', '=', $request->idBusTransaction)->get();
                foreach ($stdtransaction_dets as $var) {
                    $det = \App\BusTransactionDetail::where('idBusTransactionDetail', '=', $var->idBusTransactionDetail)->first();
                    $det->status = 'Bounced';
                    $det->update();
                }
                DB::commit();

                if ($acessAmount > 0) {
                    $excess_transaction = DB::table('bus_excess_transaction')
                                    ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                                    ->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('bus_excess_transaction.isActive', '=', 'Y')
                                    ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();
                    if (isset($excess_transaction))
                        $acessAmount = $acessAmount + $excess_transaction->excessAmount;

                    $excess = new \App\BusExcessTransaction();
                    $excess->idBusTransaction = $request->idBusTransaction;
                    $excess->excessAmount = $acessAmount;
                    $excess->remarks = "Access amount has been reverted to this transaction and previous access amount has been added";
                    $excess->save();
                }
            } else if ($request->status == 'Cleared') {

                $stdcheque = \App\BusTransaction::where('idBusTransaction', '=', $request->idBusTransaction)->first();
                $stdcheque->status = 'Cleared';
                DB::beginTransaction();
                $stdcheque->update();
                $stdtransaction_dets = \App\BusTransactionDetail::where('idBusTransaction', '=', $request->idBusTransaction)->get();
                foreach ($stdtransaction_dets as $var) {
                    $det = \App\BusTransactionDetail::where('idBusTransactionDetail', '=', $var->idBusTransactionDetail)->first();
                    $det->status = 'Cleared';
                    $det->update();
                }
                DB::commit();

                $excess_transaction = DB::table('bus_excess_transaction')
                                ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_excess_transaction.idBusTransaction')
                                ->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('bus_excess_transaction.isActive', '=', 'Y')
                                ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();

                if (isset($excess_transaction)) {
                    $acessAmount = $acessAmount + $excess_transaction->excessAmount;

                    $excess_pending_transaction = DB::table('bus_excess_transaction')
                            ->where('idBusTransaction', $request->idBusTransaction)
                            ->where('isActive', 'P')
                            ->first();

                    if ($excess_pending_transaction) {
                        $acessAmount = $acessAmount + $excess_pending_transaction->excessAmount;

                        DB::table('bus_excess_transaction')
                                ->where('idBusTransaction', $request->idBusTransaction)
                                ->update(['isActive' => 'N']);
                    }

                    $excess = new \App\BusExcessTransaction();
                    $excess->idBusTransaction = $request->idBusTransaction;
                    $excess->excessAmount = $acessAmount;
                    $excess->remarks = "Access amount has been adjusted to this transaction";
                    $excess->save();
                } else {
                    DB::table('bus_excess_transaction')
                            ->where('idBusTransaction', $request->idBusTransaction)
                            ->update(['isActive' => 'Y', 'remarks' => 'Access amount active on cheque clearance']);
                }
            } else {
                $stdcheque = \App\BusTransaction::where('idBusTransaction', '=', $request->idBusTransaction)->first();
                $stdcheque->status = 'In-Process';
                DB::beginTransaction();
                $stdcheque->update();
                $stdtransaction_dets = \App\BusTransactionDetail::where('idBusTransaction', '=', $request->idBusTransaction)->get();
                foreach ($stdtransaction_dets as $var) {
                    $det = \App\BusTransactionDetail::where('idBusTransactionDetail', '=', $var->idBusTransactionDetail)->first();
                    $det->status = 'In-Process';
                    $det->update();
                }
                DB::commit();
            }
        } else {
            if ($request->status == 'Bounced') {
                $acessAmount = 0;
                $stdcheque = \App\BusLesserTransaction::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->first();
                $stdcheque->status = 'Bounced';

                $acessAmount = $stdcheque->excessAmountUsed;
                $stdcheque->chequeBounceCharge = $request->chequeBounceCharge;
                DB::beginTransaction();
                $stdcheque->update();
                $stdtransaction_dets = \App\BusLesserTransactionDetail::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->get();
                foreach ($stdtransaction_dets as $var) {
                    $det = \App\BusLesserTransactionDetail::where('idBusLessTransactionDet', '=', $var->idBusLessTransactionDet)->first();
                    $det->status = 'Bounced';
                    $det->update();
                }
                DB::commit();

                if ($acessAmount > 0) {
                    $excess_transaction = DB::table('bus_excess_transaction')
                                    ->join('bus_lesser_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                                    ->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('bus_excess_transaction.isActive', '=', 'Y')
                                    ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();
                    if (isset($excess_transaction))
                        $acessAmount = $acessAmount + $excess_transaction->excessAmount;

                    $excess = new \App\BusExcessTransaction();
                    $excess->idBusTransaction = $request->idBusTransaction;
                    $excess->excessAmount = $acessAmount;
                    $excess->remarks = "Access amount has been reverted to this transaction and previous access amount has been added";
                    $excess->save();
                }
            } else if ($request->status == 'Cleared') {

                $stdcheque = \App\BusLesserTransaction::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->first();
                $stdcheque->status = 'Cleared';
                DB::beginTransaction();
                $stdcheque->update();
                $stdtransaction_dets = \App\BusLesserTransactionDetail::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->get();
                foreach ($stdtransaction_dets as $var) {
                    $det = \App\BusLesserTransactionDetail::where('idBusLessTransactionDet', '=', $var->idBusLessTransactionDet)->first();
                    $det->status = 'Cleared';
                    $det->update();
                }
                DB::commit();

                $excess_transaction = DB::table('bus_excess_transaction')
                                ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                                ->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('bus_excess_transaction.isActive', '=', 'Y')
                                ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();

                if (isset($excess_transaction)) {
                    $acessAmount = $acessAmount + $excess_transaction->excessAmount;

                    $excess_pending_transaction = DB::table('bus_excess_transaction')
                            ->where('idBusTransaction', $request->idBusTransaction)
                            ->where('isActive', 'P')
                            ->first();

                    if ($excess_pending_transaction) {
                        $acessAmount = $acessAmount + $excess_pending_transaction->excessAmount;

                        DB::table('bus_excess_transaction')
                                ->where('idBusTransaction', $request->idBusTransaction)
                                ->update(['isActive' => 'N']);
                    }

                    $excess = new \App\BusExcessTransaction();
                    $excess->idBusTransaction = $request->idBusTransaction;
                    $excess->excessAmount = $acessAmount;
                    $excess->remarks = "Access amount has been adjusted to this transaction";
                    $excess->save();
                } else {
                    DB::table('bus_excess_transaction')
                            ->where('idBusTransaction', $request->idBusTransaction)
                            ->update(['isActive' => 'Y', 'remarks' => 'Access amount active on cheque clearance']);
                }
            } else {
                $stdcheque = \App\BusLesserTransaction::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->first();
                $stdcheque->status = 'In-Process';
                DB::beginTransaction();
                $stdcheque->update();
                $stdtransaction_dets = \App\BusLesserTransactionDetail::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->get();
                foreach ($stdtransaction_dets as $var) {
                    $det = \App\BusLesserTransactionDetail::where('idBusLessTransactionDet', '=', $var->idBusLessTransactionDet)->first();
                    $det->status = 'In-Process';
                    $det->update();
                }
                DB::commit();
            }
        }
        flash('Status has been updated Successfully !!');
        return redirect('school/tpcheques');
    }

    public function printReceipt($id) {
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $transaction = \App\BusTransaction::where('idBusTransaction', '=', $id)->first();

        $student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
        $stdtransport = \App\StudentTransport::where('idStudent', '=', $student->idStudent)->where('idFinancialYear', '=', Session::get('idFinancialYear'))->first();
        $feeheads = \App\BusFeehead::where('idStop', '=', $stdtransport->idStop)
                ->orderBy('toDate')
                ->get();
        $feetotal = $feeheads->sum('amount');

        $pdf = PDF::loadView('schools.buses.print_receipt', ['margin_top' => 20], compact('transaction', 'school', 'student', 'feetotal'));
        return $pdf->stream('feereceipt.pdf');
    }
    
    public function printLessPaidReceipt($id) {
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $transaction = \App\BusLesserTransaction::where('idBusLesserTransaction', '=', $id)->first();
        $student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
        $stdtransport = \App\StudentTransport::where('idStudent', '=', $student->idStudent)->where('idFinancialYear', '=', Session::get('idFinancialYear'))->first();
        $feeheads = \App\BusFeehead::where('idStop', '=', $stdtransport->idStop)
                ->orderBy('toDate')
                ->get();
        $feetotal = $feeheads->sum('amount');
        $pdf = PDF::loadView('schools.buses.print_lesseramt_receipt', ['margin_top' => 20], compact('transaction', 'school', 'student', 'feetotal'));
        return $pdf->stream('feereceipt.pdf');
    }

    public function cancelReceipt($id) {
        $transaction = \App\BusTransaction::where('idBusTransaction', '=', $id)->first();
        $student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
        return view('schools.buses.cancelreceipt', compact('transaction', 'student'));
    }

    public function cancelLessPaidReceipt($id) {
        $transaction = \App\BusLesserTransaction::where('idBusLesserTransaction', '=', $id)->first();
        $student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
        return view('schools.buses.cancelreceipt', compact('transaction', 'student'));
    }

    public function receiptCancellation(Request $request) {
        $rules = ['remarks' => 'required'];
        $this->validate($request, $rules);
        $acessAmount = 0;
        if ($request->type == 'Full') {
            $transaction = \App\BusTransaction::where('idBusTransaction', '=', $request->idBusTransaction)->first();
            $acessAmount = $transaction->accessPaid;
            DB::beginTransaction();
            $transaction->status = 'Cancelled';
            $transaction->remarks = $request->remarks;
            $transaction->update();

            \App\RollbackBusTransaction::insert($transaction->toArray());

            $stdtransaction_dets = \App\BusTransactionDetail::where('idBusTransaction', '=', $request->idBusTransaction)->get();
            foreach ($stdtransaction_dets as $var) {
                $det = \App\BusTransactionDetail::where('idBusTransactionDetail', '=', $var->idBusTransactionDetail)->first();
                $det->status = 'Cancelled';
                $det->update();

                unset($det->idBusTransactionDetail);
                \App\RollbackBusTransactionDetails::insert($det->toArray());
            }
            DB::commit();
            if ($acessAmount > 0) {
                $excess_transaction = DB::table('bus_excess_transaction')
                                ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                                ->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('bus_excess_transaction.isActive', '=', 'Y')
                                ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();
                if (isset($excess_transaction))
                    $acessAmount = $acessAmount + $excess_transaction->excessAmount;

                $excess = new \App\BusExcessTransaction();
                $excess->idBusTransaction = $request->idBusTransaction;
                $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\BusLesserTransaction::where('idBusLesserTransaction', '=', $request->idBusLesserTransaction)->first();
            $acessAmount = $transaction->accessPaid;
            DB::beginTransaction();
            $transaction->status = 'Cancelled';
            $transaction->remarks = $request->remarks;
            $transaction->update();

            \App\RollbackBusTransaction::insert($transaction->toArray());

            $stdtransaction_dets = \App\BusLesserTransactionDetail::where('idBusLesserTransaction', '=', $request->idBusTransaction)->get();
            foreach ($stdtransaction_dets as $var) {
                $det = \App\BusLesserTransactionDetail::where('idBusLessTransactionDet', '=', $var->idBusLessTransactionDet)->first();
                $det->status = 'Cancelled';
                $det->update();

                unset($det->idBusLessTransactionDet);
                \App\RollbackBusTransactionDetails::insert($det->toArray());
            }
            DB::commit();
//            if ($acessAmount > 0) {
//                $excess_transaction = DB::table('excess_transaction')
//                                ->join('lesser_transaction', 'excess_transaction.idLesserTransaction', '=', 'lesser_transaction.idLesserTransaction')
//                                ->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('excess_transaction.isActive', '=', 'Y')
//                                ->orderBy('excess_transaction.idLesserTransaction', 'desc')->first();
//                if (isset($excess_transaction))
//                    $acessAmount = $acessAmount + $excess_transaction->excessAmount;
//
//                $excess = new \App\Bus();
//                $excess->idBusTransaction = $request->idBusTransaction;
//                $excess->excessAmount = $acessAmount;
//                $excess->remarks = "Access amount has been reverted to this transaction and previous access amount has been added";
//                $excess->save();
//            }
        }
        return redirect('school/tpcancelled-receipts');
    }

    public function getFeewiseData($id, $studentId,Request $request) {
        $feeheader_ids = array_map('intval', explode(',', $id));
        //return $feeheader_ids;
        $student = \App\AdmEntry::where('idStudent', '=', $studentId)->first();
        $chqbounce = \App\BusFailedTransaction::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('bus_excess_transaction')
                        ->join('bus_transaction', 'bus_excess_transaction.idBusTransaction', '=', 'bus_transaction.idBusTransaction')
                        ->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('bus_excess_transaction.isActive', '=', 'Y')
                        ->orderBy('bus_excess_transaction.idBusTransaction', 'desc')->first();

        $excessAmount = 0;
        if (isset($excess_transaction))
            $excessAmount = $excess_transaction->excessAmount;


        $selectedHeaders = \App\BusFeehead::whereIn('idBusFeehead', $feeheader_ids)->get();
        $totalAmount = 0;

        $lessPaid = 0;
        $lesser_transaction = DB::table('bus_lesser_transaction')
                ->join('bus_lesser_transaction_details', 'bus_lesser_transaction_details.idBusLesserTransaction', '=', 'bus_lesser_transaction.idBusLesserTransaction')
                ->where('bus_lesser_transaction.idStudent', '=', $student->idStudent)
                ->where('bus_lesser_transaction.idFinancialYear', '=', $student->idFinancialYear)
                ->whereIn('idBusFeehead', $feeheader_ids)
                ->where(function($query) {
                    $query->whereNull('bus_lesser_transaction.status');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'Cleared');
                    $query->orWhere('bus_lesser_transaction.status', '=', 'In-Process');
                    $query->orWhere('bus_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();
            if($request->get('paydate') != null){
                $now = Carbon::parse($request->get('paydate'));
            }
            $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('busfee_discounts')->where('idFinancialYear', '=', $student->idFinancialYear)->where('idStudent', '=', $student->idStudent)->where('idBusFeehead', '=', $headerObject['idBusFeehead'])->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 tempRecord() {
        return view('schools.buses.temperature-record');
    }
}

Copyright © 2021 - 2025 IMMREX7