IMMREX7

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

<?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 - 2025 IMMREX7