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/StdTransactionReportController.php

<?php

namespace App\Http\Controllers\School;

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

class StdTransactionReportController extends SchoolController {
    
    public function showPurchase($rid,Request $request){
        $transaction = \App\ShopTransaction::where('idTransaction', '=', $rid)->first();
        return view('schools.reports.item_report', compact('transaction'));
    }

    public function markPurchase($rid){
        $transaction = \App\ShopTransaction::where('idTransaction', '=', $rid)->first();
        $transaction->is_received = "Yes";
        $transaction->update();
        return redirect()->back()->with('report-message', 'Status of received changed successfully');
    }

    public function printPurchase($rid,Request $request){
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $transaction = \App\ShopTransaction::where('idTransaction', '=', $rid)->first();
        $student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
        $pdf = PDF::loadView('schools.transaction.print_receipt_shop', ['margin_top' => 20], compact('transaction', 'school', 'student'));
        return $pdf->stream('feereceipt.pdf');
    }

    public function purchaseHistory(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)->format('Y-m-d');
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
        
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $transactions = DB::table('shop_transaction')
        ->join('students', 'shop_transaction.idStudent', '=', 'students.idStudent')
        ->join('classes', 'students.idClass', '=', 'classes.idClass')
        ->join('sections', 'students.idSection', '=', 'sections.idSection')
        ->where('shop_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->where('shop_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
        ->where(function($query) {
            $query->whereNull('status');
            $query->orWhere('status', '=', 'In-Process');
            $query->orWhere('status', '=', 'Cleared');
            $query->orWhere('status', '=', 'Success');
        })
        ->select('ecNo','shop_transaction.updated_at', 'shop_transaction.idTransaction', 'shop_transaction.idFinancialYear','is_received', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'discount', 'paymentDate');

        if (($request->has('toDate') && $request->toDate != null) && ($request->has('fromDate') && $request->fromDate != null)) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $to_date])->get();
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $today_date])->get();
        } else if ($request->has('toDate') && $request->toDate != null) {
            $transactions = $transactions->whereDate('paymentDate', '<=', $to_date)->get();
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $transactions = $transactions->whereIn('students.idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $transactions = $transactions->whereIn('students.idClass', $request->classes)->get();
        } else {
            $transactions = $transactions->get();
        }
        return view('schools.reports.purchase_history', compact('classes', 'transactions'));
    }

    public function extraFeesPaid(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)->format('Y-m-d');
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
                        
        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0) {
            $transactionIds = DB::table('student_transaction_extra_details')->whereIn('student_transaction_extra_details.idFeehead', $request->feeHeaders)->get()->pluck('idTransaction')->toArray();

            if(count($request->feeHeaders) == 1){
                $headerName =  \App\ExtraFeehead::where('idExtraFeehead',$request->feeHeaders[0])->first()->feeheadName;
            }

            $transactions = DB::table('student_transaction_extra')
                    ->leftJoin('school_users', 'student_transaction_extra.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_transaction_extra.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_transaction_extra.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_transaction_extra.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->whereIn('student_transaction_extra.idTransaction', $transactionIds)
                    ->select('school_users.name','ecNo','bankName','idBank', 'student_transaction_extra.idTransaction', 'student_transaction_extra.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'paymentDate', 'chequeNo');
        } else {
            $transactions = DB::table('student_transaction_extra')
                    ->leftJoin('school_users', 'student_transaction_extra.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_transaction_extra.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_transaction_extra.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_transaction_extra.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->select('school_users.name','ecNo','bankName','idBank', 'student_transaction_extra.idTransaction', 'student_transaction_extra.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'paymentDate', 'chequeNo');
        }

        if (($request->has('toDate') && $request->toDate != null) && ($request->has('fromDate') && $request->fromDate != null)) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $to_date])->get();
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $today_date])->get();
        } else if ($request->has('toDate') && $request->toDate != null) {
            $transactions = $transactions->whereDate('paymentDate', '<=', $to_date)->get();
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $transactions = $transactions->whereIn('students.idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $transactions = $transactions->whereIn('students.idClass', $request->classes)->get();
        } else if ($request->has('paymentMode')) {
            if ($request->paymentMode == "All")
                $transactions = $transactions->get();
            else
                $transactions = $transactions->where('paymentMode', '=', $request->paymentMode)->get();
        }else {
            $transactions = $transactions->get();
        }

        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $feeHeaders = \App\ExtraFeehead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                        ->get()->pluck('feeheadName', 'idExtraFeehead')->toArray();
        return view('schools.reports.fee_extra_royal', compact('classes', 'transactions', 'feeHeaders'));
    }

    public function paidFees(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)->format('Y-m-d');
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
        
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $feeHeaders = \App\FeeHead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('idFinancialYear', '=', Session::get('idFinancialYear'))->groupBy('feeheadName')
                        ->orderBy('toDate')->get()->pluck('feeheadName', 'idFeehead')->toArray();
        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0) {
            $transactionIds = DB::table('student_transaction_details')->whereIn('student_transaction_details.idFeehead', $request->feeHeaders)->get()->pluck('idTransaction')->toArray();

            if(count($request->feeHeaders) == 1){
                $headerName =  \App\FeeHead::where('idFeehead',$request->feeHeaders[0])->first()->feeheadName;
                if($headerName == "Plan A (Full Payment)" || $headerName == "Plan B (First Installment)" || $headerName == "Plan B (Second Installment)"){
                    $feedetails = \App\FeeHead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('feeheadName',$headerName)->get()->pluck('idFeehead')->toArray();
                    $transactionIds = DB::table('student_transaction_details')->whereIn('student_transaction_details.idFeehead', $feedetails)->get()->pluck('idTransaction')->toArray();
                }
            }

            $transactions = DB::table('student_transaction')
                    ->leftJoin('excess_transaction', 'student_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                    ->leftJoin('school_users', 'student_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->whereIn('student_transaction.idTransaction', $transactionIds)
                    ->select('school_users.name','ecNo','bankName','idBank',  'student_transaction.idTransaction', 'student_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
        } else {
            $transactions = DB::table('student_transaction')
                    ->leftJoin('excess_transaction', 'student_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                    ->leftJoin('school_users', 'student_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->select('school_users.name','ecNo','bankName','idBank',  'student_transaction.idTransaction', 'student_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
        }

        if (($request->has('toDate') && $request->toDate != null) && ($request->has('fromDate') && $request->fromDate != null)) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $to_date]);
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $today_date]);
        } else if ($request->has('toDate') && $request->toDate != null) {
            $transactions = $transactions->whereDate('paymentDate', '<=', $to_date);
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $transactions = $transactions->whereIn('students.idSection', $request->sections);
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $transactions = $transactions->whereIn('students.idClass', $request->classes);
        }
        
        if ($request->has('paymentMode')) {
            if ($request->paymentMode == "All")
                $transactions = $transactions->get();
            else
                $transactions = $transactions->where('paymentMode', '=', $request->paymentMode)->get();
        }else {
            $transactions = $transactions->get();
        }

        if(Auth::guard('school')->user()->idSchool == 25)
            return view('schools.reports.fee_paid_royal', compact('classes', 'transactions', 'feeHeaders'));
        else if(Auth::guard('school')->user()->idSchool == 140 || Auth::guard('school')->user()->idSchool == 135)
            return view('schools.reports.fee_paid_jr', compact('classes', 'transactions', 'feeHeaders'));
        else 
        return view('schools.reports.fee_paid', compact('classes', 'transactions', 'feeHeaders'));
    }

    public function reversalReport(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)->format('Y-m-d');
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
                        
        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0) {
            $transactionIds = DB::table('student_rollback_details')->whereIn('student_rollback_details.idFeehead', $request->feeHeaders)->whereNotNull('idTransaction')->get()->pluck('idTransaction')->toArray();
            $lransactionIds = DB::table('student_rollback_details')->whereIn('student_rollback_details.idFeehead', $request->feeHeaders)->whereNotNull('idLesserTransaction')->get()->pluck('idLesserTransaction')->toArray();

            if(count($request->feeHeaders) == 1){
                $headerName =  \App\Feehead::where('idFeehead',$request->feeHeaders[0])->first()->feeheadName;
            }

            $transactions = DB::table('student_rollback_transaction')
                    ->leftJoin('school_users', 'student_rollback_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_rollback_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_rollback_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_rollback_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->whereIn('student_rollback_transaction.idTransaction', $transactionIds)
                    ->orWhereIn('student_rollback_transaction.idLesserTransaction', $lransactionIds)
                    ->select('school_users.name','ecNo','bankName','idBank', 'student_rollback_transaction.idTransaction','student_rollback_transaction.idLesserTransaction', 'student_rollback_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'paymentDate', 'chequeNo');
        } else {
            $transactions = DB::table('student_rollback_transaction')
                    ->leftJoin('school_users', 'student_rollback_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_rollback_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_rollback_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_rollback_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->select('school_users.name','ecNo','bankName','idBank', 'student_rollback_transaction.idTransaction','student_rollback_transaction.idLesserTransaction', 'student_rollback_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'paymentDate', 'chequeNo');
        }

        if (($request->has('toDate') && $request->toDate != null) && ($request->has('fromDate') && $request->fromDate != null)) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $to_date])->get();
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $today_date])->get();
        } else if ($request->has('toDate') && $request->toDate != null) {
            $transactions = $transactions->whereDate('paymentDate', '<=', $to_date)->get();
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $transactions = $transactions->whereIn('students.idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $transactions = $transactions->whereIn('students.idClass', $request->classes)->get();
        } else if ($request->has('paymentMode')) {
            if ($request->paymentMode == "All")
                $transactions = $transactions->get();
            else
                $transactions = $transactions->where('paymentMode', '=', $request->paymentMode)->get();
        }else {
            $transactions = $transactions->get();
        }

        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $feeHeaders = \App\FeeHead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('idFinancialYear', '=', Session::get('idFinancialYear'))->groupBy('feeheadName')
                        ->get()->pluck('feeheadName', 'idFeehead')->toArray();
        return view('schools.reports.fee_reversal', compact('classes', 'transactions', 'feeHeaders'));
    }

    public function pendingDues(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();
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();

        $students = \App\AdmEntry::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('isActive','Y')
                ->orderBy('idStudent');
        if ($request->has('sections') && count($request->sections) > 0) {
            $students = $students->whereIn('idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $students = $students->whereIn('idClass', $request->classes)->get();
        } else {
            $students = $students->get();
        }

        if (Auth::guard('school')->user()->idSchool == 135 || Auth::guard('school')->user()->idSchool == 140) {
            return view('schools.reports.mhws_pending_fee', compact('classes', 'students'));
        } else if (Auth::guard('school')->user()->idSchool == 25) {
            return view('schools.reports.royal_pending_fee', compact('classes', 'students'));
        } else if ($school->payment_method == 'default') {
            return view('schools.reports.pending_fee', compact('classes', 'students'));
        } else {
             return view('schools.reports.pending_fee_north', compact('classes', 'students'));
        }
    }

    public function cancelReceipt($id){
        $transaction = DB::table('student_transaction_extra')->where('idTransaction', '=', $id)->first();
        $student = \App\AdmEntry::where('idStudent', '=', $transaction->idStudent)->first();
        return view('schools.transaction.cancelreceipt-extra', compact('transaction', 'student'));
    }

    public function cancelledExtraReceipts(Request $request){
        $today_date = Carbon::today()->format('Y-m-d');
        $lesser_transactions = [];
        if ($request->has('fromDate') && $request->fromDate != null) {
            $from_date = Carbon::createFromFormat('d-m-Y', $request->fromDate)->format('Y-m-d');
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();

        $transactions = DB::table('student_transaction_extra')
                ->leftJoin('excess_transaction', 'student_transaction_extra.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                ->join('students', 'student_transaction_extra.idStudent', '=', 'students.idStudent')
                ->join('classes', 'students.idClass', '=', 'classes.idClass')
                ->join('sections', 'students.idSection', '=', 'sections.idSection')
                ->where('student_transaction_extra.idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('student_transaction_extra.idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('status', '=', 'Cancelled')
                ->select('student_transaction_extra.remarks','bankName', 'ecNo', 'student_transaction_extra.idTransaction', 'student_transaction_extra.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate');
       
        if ($request->toDate != null && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $to_date]);
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $today_date]);
        } else if ($request->has('toDate') && $request->toDate != null) {
            $transactions = $transactions->whereDate('paymentDate', '<=', $to_date);
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $transactions = $transactions->whereIn('students.idSection', $request->sections);
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $transactions = $transactions->whereIn('students.idClass', $request->classes);
        }
        
        if ($request->has('paymentMode')) {
            $transactions = $transactions->where('paymentMode', '=', $request->paymentMode)->get();
        } else {
            $transactions = $transactions->get();
        }

        return view('schools.reports.cancelled-extra-receipts', compact('classes', 'transactions', 'lesser_transactions'));
    }

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

        $ins = $transaction->toArray();
        $ins["rollback_type"] = "extra";
        \App\RollbackTransaction::insert($ins);

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

            unset($det->idTransactionDetail);
            \App\RollbackTransactionDetails::insert($det->toArray());
        }


        DB::commit();
        if ($acessAmount > 0) {
            $excess_transaction = DB::table('excess_transaction')
                                ->join('student_transaction', 'excess_transaction.idTransaction', '=', 'student_transaction.idTransaction')
                                ->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.idTransaction', 'desc')->first();
            if (isset($excess_transaction))
                $acessAmount = $acessAmount + $excess_transaction->excessAmount;

            $excess = new \App\ExcessTransaction();
            $excess->idTransaction = $request->idTransaction;
            $excess->excessAmount = $acessAmount;
            $excess->remarks = "Extra Fee";
            $excess->save();
        }

        return redirect('school/extra-cancelled-receipts');
    }


    public function cancelledReceipts(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)->format('Y-m-d');
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();

        $transactions = DB::table('student_transaction')
                ->leftJoin('excess_transaction', 'student_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                ->join('students', 'student_transaction.idStudent', '=', 'students.idStudent')
                ->join('classes', 'students.idClass', '=', 'classes.idClass')
                ->join('sections', 'students.idSection', '=', 'sections.idSection')
                ->where('student_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('student_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('status', '=', 'Cancelled')
                ->select('student_transaction.remarks', 'ecNo','bankName', 'student_transaction.idTransaction', 'student_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate');
        $lesser_transactions = DB::table('lesser_transaction')
                ->leftJoin('excess_transaction', 'lesser_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                ->join('students', 'lesser_transaction.idStudent', '=', 'students.idStudent')
                ->join('classes', 'students.idClass', '=', 'classes.idClass')
                ->join('sections', 'students.idSection', '=', 'sections.idSection')
                ->where('lesser_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('status', '=', 'Cancelled')
                ->select('lesser_transaction.remarks', 'ecNo','bankName', 'lesser_transaction.idLesserTransaction', 'lesser_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate');

        if ($request->toDate != null && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $to_date])->get();
            $lesser_transactions = $lesser_transactions->whereBetween('paymentDate', [$from_date, $to_date])->get();
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $transactions = $transactions->whereBetween('paymentDate', [$from_date, $today_date])->get();
            $lesser_transactions = $lesser_transactions->whereBetween('paymentDate', [$from_date, $today_date])->get();
        } else if ($request->has('toDate') && $request->toDate != null) {
            $transactions = $transactions->whereDate('paymentDate', '<=', $to_date)->get();
            $lesser_transactions = $lesser_transactions->whereDate('paymentDate', '<=', $to_date)->get();
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $transactions = $transactions->whereIn('students.idSection', $request->sections)->get();
            $lesser_transactions = $lesser_transactions->whereIn('students.idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $transactions = $transactions->whereIn('students.idClass', $request->classes)->get();
            $lesser_transactions = $lesser_transactions->whereIn('students.idClass', $request->classes)->get();
        } else if ($request->has('paymentMode')) {
            $transactions = $transactions->where('paymentMode', '=', $request->paymentMode)->get();
            $lesser_transactions = $lesser_transactions->where('paymentMode', '=', $request->paymentMode)->get();
        } else {
            $transactions = $transactions->get();
            $lesser_transactions = $lesser_transactions->get();
        }
        return view('schools.reports.cancelled-receipts', compact('classes', 'transactions', 'lesser_transactions'));
    }

    public function headerWiseClass(Request $request){
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();

        $students = \App\AdmEntry::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('idFinancialYear', '=', Session::get('idFinancialYear'));
        if ($request->has('classes') && count($request->classes) > 0) {
            $students = $students->whereIn('students.idClass', $request->classes);
        }
        
        if ($request->has('classes') && count($request->classes) > 0){
            $filterClass =  \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->whereIn('idClass', $request->classes)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();      
        }else
        $filterClass =  \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $sectionArr = [];
        foreach($filterClass  as $k => $v){
            $sectionArr[$k] =
            \App\Section::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->where('idClass',$k)->get()->pluck('sectionName', 'idSection')->toArray();
        }                

        $feeheaders = DB::table('feeheads')->select('feeheadName')->where('idFinancialYear', '=', Session::get('idFinancialYear'))
        ->where('idSchool', '=', Auth::guard('school')->user()->idSchool)->groupBy('feeheadName')->get()->pluck('feeheadName')->toArray();

        $students = $students->where('isActive','Y')->orderBy('idClass')->get();
        if(Auth::guard('school')->user()->idSchool == 25)
        return view('schools.reports.royal_paid_studentwise', compact('classes','students'));
        else
        {
            $todayCollection = $this->fetchFilterData('today');
            $weekCollection  = $this->fetchFilterData('week');
            $monthCollection  = $this->fetchFilterData('month');
            $startDate = Carbon::now(); //returns current day
            $firstDay = Carbon::now()->firstOfMonth();  
            $monthStart = DB::table('student_transaction')->where('idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('idFinancialYear', '=', Session::get('idFinancialYear'))->whereBetween('paymentDate', [$firstDay, $startDate])->where(function ($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Success');
            })
            ->select('paymentDate')->orderBy('idTransaction','ASC')->first();
            $monthEnd = DB::table('student_transaction')->where('idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('idFinancialYear', '=', Session::get('idFinancialYear'))->whereBetween('paymentDate', [$firstDay, $startDate])->where(function ($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Success');
            })
            ->select('paymentDate')->orderBy('idTransaction','DESC')->first();

            return view('schools.reports.mhws_studentwise', compact('classes','students','feeheaders','filterClass','sectionArr','todayCollection','weekCollection','monthCollection','monthEnd','monthStart','firstDay','startDate'));
        }
    }

    private function fetchFilterData($data){
        $startDate = Carbon::now(); //returns current day
        $firstDay = Carbon::now()->firstOfMonth();  

        $lesspaid = DB::table('lesser_transaction')->where('idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('idFinancialYear', '=', Session::get('idFinancialYear'));

        if($data == 'today')    
            $lesspaid->whereDate('paymentDate', '=', \Carbon\Carbon::now()->today());       
        else if($data == 'week')    
            $lesspaid->whereBetween('paymentDate', [\Carbon\Carbon::now()->startOfWeek(), \Carbon\Carbon::now()->endOfWeek()]);
        else if($data == 'month')    
            $lesspaid->whereBetween('paymentDate', [$firstDay, $startDate]);

        
        $lesspaid= $lesspaid->where(function ($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Success');
            })
            ->select(DB::raw('SUM(totalPaid) as totalPaid'))->first();
        $fullpaid = DB::table('student_transaction')->where('idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('idFinancialYear', '=', Session::get('idFinancialYear'));

        if($data == 'today')   
            $fullpaid->whereDate('paymentDate', '=', \Carbon\Carbon::now()->today());
        else if($data == 'week')    
            $fullpaid->whereBetween('paymentDate', [\Carbon\Carbon::now()->startOfWeek(), \Carbon\Carbon::now()->endOfWeek()]);
        else if($data == 'month')    
            $fullpaid->whereBetween('paymentDate', [$firstDay, $startDate]);

        $fullpaid =   $fullpaid->where(function ($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Success');
            })
            ->select(DB::raw('SUM(totalPaid) as totalPaid'))->first();

       return $lesspaid->totalPaid + $fullpaid->totalPaid;
    }

    public function headerClass(Request $request){
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();

        $students = \App\AdmEntry::select('ecNo','firstName','middleName','lastName','idClass','idSection','studentType','idSchool','idFinancialYear','idStudent')->where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('idFinancialYear', '=', Session::get('idFinancialYear'));
        if ($request->has('sections') && count($request->sections) > 0) {
            $students = $students->whereIn('students.idSection', $request->sections);
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $students = $students->whereIn('students.idClass', $request->classes);
        } 

        $students = $students->where('isActive','Y')->orderBy('idClass')->get();
        return view('schools.reports.royal_header_studentwise', compact('classes','students'));
    }

    public function feeheadWiseDues(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();
        return view('schools.reports.feeheaderwise_report', compact('classes', 'transactions'));
    }

    public function lessPaidFees(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)->format('Y-m-d');;
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $to_date = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');;
        }

        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $feeHeaders = \App\FeeHead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('idFinancialYear', '=', Session::get('idFinancialYear'))->groupBy('feeheadName')
                        ->orderBy('toDate')->get()->pluck('feeheadName', 'idFeehead')->toArray();

        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0) {
            $lesser_transactionIds = DB::table('lesser_transaction_details')->whereIn('lesser_transaction_details.idFeehead', $request->feeHeaders)->get()->pluck('idLesserTransaction')->toArray();
            $lesser_transactions = DB::table('lesser_transaction')
                    ->leftJoin('excess_transaction', 'lesser_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                    ->leftJoin('school_users', 'lesser_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'lesser_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('lesser_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->whereIn('lesser_transaction.idLesserTransaction', $lesser_transactionIds)
                    ->select('school_users.name','ecNo','bankName','idBank', 'lesser_transaction.idLesserTransaction', 'lesser_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
        } else {
            $lesser_transactions = DB::table('lesser_transaction')
                    ->leftJoin('excess_transaction', 'lesser_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                    ->leftJoin('school_users', 'lesser_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'lesser_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('lesser_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->select('school_users.name','ecNo','bankName','idBank', 'lesser_transaction.idLesserTransaction', 'lesser_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
        
                }

        if ($request->toDate != null && $request->fromDate != null) {
            $lesser_transactions = $lesser_transactions->whereBetween('paymentDate', [$from_date, $to_date])->get();
        } else if ($request->has('fromDate') && $request->fromDate != null) {
            $lesser_transactions = $lesser_transactions->whereBetween('paymentDate', [$from_date, $today_date])->get();
        } else if ($request->has('toDate') && $request->toDate != null) {
            $lesser_transactions = $lesser_transactions->whereDate('paymentDate', '<=', $to_date)->get();
        } else if ($request->has('sections') && count($request->sections) > 0) {
            $lesser_transactions = $lesser_transactions->whereIn('students.idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $lesser_transactions = $lesser_transactions->whereIn('students.idClass', $request->classes)->get();
        } else if ($request->has('paymentMode')) {
            if ($request->paymentMode == "All")
                $lesser_transactions = $lesser_transactions->get();
            else
                $lesser_transactions = $lesser_transactions->where('paymentMode', '=', $request->paymentMode)->get();
        }else {
            $lesser_transactions = $lesser_transactions->get();
        }
        if(Auth::guard('school')->user()->idSchool == 135){
            $feeheadInstallment = \DB::table('feeheads')->where('idFinancialYear','=', Session::get('idFinancialYear'))
                                              ->where('feeheadName','Plan B (First Installment)')
                                              ->where('idSchool',135)
                                              ->distinct()
                                              ->pluck('idFeehead')->toArray();
            $feeheadFull = \DB::table('feeheads')->where('idFinancialYear','=', Session::get('idFinancialYear'))
                                              ->where('feeheadName','Plan A (Full Payment)')
                                              ->where('idSchool',135)
                                              ->distinct()
                                              ->pluck('idFeehead')->toArray();                                  
            if($feeheadInstallment != null){
                $feepaid = \App\StudentTransactionDetail::whereIn('idFeehead',$feeheadInstallment)->get()->pluck('idStudent')->toArray();
                $feepaidFull = \App\StudentTransactionDetail::whereIn('idFeehead',$feeheadFull)->get()->pluck('idStudent')->toArray();
    
                $feestudent = \App\AdmEntry::join('classes', 'students.idClass', '=', 'classes.idClass')
                ->join('sections', 'students.idSection', '=', 'sections.idSection')->select('idStudent','ecNo','firstName','studentType','middleName','lastName','father_fname','father_lname','father_mobile','className','sectionName',DB::raw("'Plan B (First Installment)' as headerNames"))
                                        ->whereNotIn('idStudent', array_merge($feepaid,$feepaidFull))
                                        ->where('students.idSchool',135)
                                        ->where('idFinancialYear','=', Session::get('idFinancialYear'));
                                        if ($request->has('sections') && count($request->sections) > 0) {
                                            $feestudent = $feestudent->whereIn('students.idSection', $request->sections)->get();
                                        } else if ($request->has('classes') && count($request->classes) > 0) {
                                            $feestudent = $feestudent->whereIn('students.idClass', $request->classes)->get();
                                        } else{
                                            $feestudent = $feestudent->get();
                                        }
                                        foreach($feestudent as $var){
                                            $class_feeheads = \DB::table('feeheads')->where('idClass', '=', $var->idClass)
                                            ->where('idSection', '=', $var->idSection)
                                            ->where('idFinancialYear','=', Session::get('idFinancialYear'))
                                            ->where('studentCategory', '=', $var->studentType)
                                            ->whereNull('idStudent');
                                            $allcat_feeheads = \DB::table('feeheads')->where('idClass', '=', $var->idClass)
                                            ->where('idSection', '=', $var->idSection)
                                            ->where('studentCategory', '=', 'All')
                                            ->where('idFinancialYear','=', Session::get('idFinancialYear'))
                                            ->whereNull('idStudent');
                                            $feeheads = \DB::table('feeheads')->where('idStudent', '=', $var->idStudent)
                                            ->where('idFinancialYear','=', Session::get('idFinancialYear'))
                                            ->union($class_feeheads)
                                            ->union($allcat_feeheads)
                                            ->orderBy('toDate')
                                            ->get();
                                            if(count($feeheads) > 0)
                                            return view('schools.reports.mhws_fee_paid', compact('classes', 'feeHeaders', 'lesser_transactions','feestudent'));
                                        }                        
                                         
            }                
        }
        if (Auth::guard('school')->user()->idSchool == 25) {
            return view('schools.reports.less_fee_royal_paid', compact('classes', 'feeHeaders', 'lesser_transactions'));
        }else
        return view('schools.reports.less_fee_paid', compact('classes', 'feeHeaders', 'lesser_transactions'));
    }


    public function royalDiscountList(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();
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();

        $students = \App\AdmEntry::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                ->where('idFinancialYear', '=', Session::get('idFinancialYear'))
                ->where('isActive','Y')
                ->orderBy('idStudent');
        if ($request->has('sections') && count($request->sections) > 0) {
            $students = $students->whereIn('idSection', $request->sections)->get();
        } else if ($request->has('classes') && count($request->classes) > 0) {
            $students = $students->whereIn('idClass', $request->classes)->get();
        } else {
            $students = $students->get();
        }

        return view('schools.reports.royal_discount_fee', compact('classes', 'students'));
    }


    public function todayReport(Request $request){
        $today =  Carbon::today()->format('Y-m-d');
        $till =  Carbon::today()->format('Y-m-d');
        if ($request->has('fromDate') && $request->fromDate != null) {
            $today = Carbon::createFromFormat('d-m-Y', $request->fromDate)->format('Y-m-d');;
        }
        if ($request->has('toDate') && $request->toDate != null) {
            $till = Carbon::createFromFormat('d-m-Y', $request->toDate)->format('Y-m-d');
        }
        $classes = \App\ClassM::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idClass')->get()->pluck('className', 'idClass')->toArray();
        $feeHeaders = \App\FeeHead::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('idFinancialYear', '=', Session::get('idFinancialYear'))->groupBy('feeheadName')
        ->orderBy('toDate')->get()->pluck('feeheadName', 'idFeehead')->toArray();



        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0){
            $lesser_transactionIds = DB::table('lesser_transaction_details')->whereIn('lesser_transaction_details.idFeehead', $request->feeHeaders)->get()->pluck('idLesserTransaction')->toArray();
            $lesser_transactions = DB::table('lesser_transaction')
            ->leftJoin('excess_transaction', 'lesser_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
            ->leftJoin('school_users', 'lesser_transaction.created_by', '=', 'school_users.idSchoolUser')
            ->join('students', 'lesser_transaction.idStudent', '=', 'students.idStudent')
            ->join('classes', 'students.idClass', '=', 'classes.idClass')
            ->join('sections', 'students.idSection', '=', 'sections.idSection')
            ->where('lesser_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
            ->where(function($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'Success');
            })
            ->whereIn('lesser_transaction.idLesserTransaction', $lesser_transactionIds)
            ->select('school_users.name','ecNo','bankName','idBank','lesser_transaction.idLesserTransaction', 'lesser_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
        }
        else
        $lesser_transactions = DB::table('lesser_transaction')
                    ->leftJoin('excess_transaction', 'lesser_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
                    ->leftJoin('school_users', 'lesser_transaction.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'lesser_transaction.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('lesser_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('lesser_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->select('school_users.name','ecNo','bankName','idBank', 'lesser_transaction.idLesserTransaction', 'lesser_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
       
        if ($request->has('sections') && count($request->sections) > 0) {
            $lesser_transactions = $lesser_transactions->whereIn('students.idSection', $request->sections);
        } 
        if ($request->has('classes') && count($request->classes) > 0) {
            $lesser_transactions = $lesser_transactions->whereIn('students.idClass', $request->classes);
        } 
        
        if ($request->has('paymentMode')) {
            if ($request->paymentMode != "All")
                $lesser_transactions = $lesser_transactions->where('paymentMode', '=', $request->paymentMode);
        }

        if ($request->has('toDate') && $request->has('fromDate')){
            $lesser_transactions = $lesser_transactions->whereDate('paymentDate','>=', $today)->whereDate('paymentDate','<=', $till);
        }else $lesser_transactions = $lesser_transactions->whereDate('paymentDate', $today);

        $lesser_transactions = $lesser_transactions->get();


        if ($request->has('feeHeaders') && count($request->feeHeaders) > 0){
            $transactionIds = DB::table('student_transaction_details')->whereIn('student_transaction_details.idFeehead', $request->feeHeaders)->get()->pluck('idTransaction')->toArray();
            $transactions = DB::table('student_transaction')
            ->leftJoin('excess_transaction', 'student_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
            ->leftJoin('school_users', 'student_transaction.created_by', '=', 'school_users.idSchoolUser')
            ->join('students', 'student_transaction.idStudent', '=', 'students.idStudent')
            ->join('classes', 'students.idClass', '=', 'classes.idClass')
            ->join('sections', 'students.idSection', '=', 'sections.idSection')
            ->where('student_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('student_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
            ->where(function($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'Success');
            })
            ->whereIn('student_transaction.idTransaction', $transactionIds)
            ->select('school_users.name','ecNo','bankName','idBank', 'student_transaction.idTransaction', 'student_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
       
        }else
        $transactions = DB::table('student_transaction')
            ->leftJoin('excess_transaction', 'student_transaction.idExcessTransaction', '=', 'excess_transaction.idExcessTransaction')
            ->leftJoin('school_users', 'student_transaction.created_by', '=', 'school_users.idSchoolUser')
            ->join('students', 'student_transaction.idStudent', '=', 'students.idStudent')
            ->join('classes', 'students.idClass', '=', 'classes.idClass')
            ->join('sections', 'students.idSection', '=', 'sections.idSection')
            ->where('student_transaction.idSchool', '=', Auth::guard('school')->user()->idSchool)
            ->where('student_transaction.idFinancialYear', '=', Session::get('idFinancialYear'))
            ->where(function($query) {
                $query->whereNull('status');
                $query->orWhere('status', '=', 'In-Process');
                $query->orWhere('status', '=', 'Cleared');
                $query->orWhere('status', '=', 'Success');
            })
            ->select('school_users.name','ecNo','bankName','idBank', 'student_transaction.idTransaction', 'student_transaction.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'excessAmount', 'paymentDate', 'chequeNo','additionalAmount');
            if ($request->has('sections') && count($request->sections) > 0) {
                $transactions = $transactions->whereIn('students.idSection', $request->sections);
            } 
            if ($request->has('classes') && count($request->classes) > 0) {
                $transactions = $transactions->whereIn('students.idClass', $request->classes);
            } 
            
            if ($request->has('paymentMode')) {
                if ($request->paymentMode != "All")
                    $transactions = $transactions->where('paymentMode', '=', $request->paymentMode);
            }
        
        
            if ($request->has('toDate') && $request->has('fromDate')){
                $transactions = $transactions->whereDate('paymentDate','>=', $today)->whereDate('paymentDate','<=', $till);
            }else $transactions = $transactions->whereDate('paymentDate', $today);

            $transactions = $transactions->get();


            if ($request->has('feeHeaders') && count($request->feeHeaders) > 0){
                $etransactionIds = DB::table('student_transaction_extra_details')->whereIn('student_transaction_extra_details.idFeehead', $request->feeHeaders)->get()->pluck('idTransaction')->toArray();
                $extra_transactions = DB::table('student_transaction_extra')
                    ->leftJoin('school_users', 'student_transaction_extra.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_transaction_extra.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_transaction_extra.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_transaction_extra.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->whereIn('student_transaction_extra.idTransaction', $etransactionIds)
                    ->select('school_users.name','ecNo','bankName','idBank', 'student_transaction_extra.idTransaction', 'student_transaction_extra.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'paymentDate', 'chequeNo');
       
            }else
            $extra_transactions = DB::table('student_transaction_extra')
                    ->leftJoin('school_users', 'student_transaction_extra.created_by', '=', 'school_users.idSchoolUser')
                    ->join('students', 'student_transaction_extra.idStudent', '=', 'students.idStudent')
                    ->join('classes', 'students.idClass', '=', 'classes.idClass')
                    ->join('sections', 'students.idSection', '=', 'sections.idSection')
                    ->where('student_transaction_extra.idSchool', '=', Auth::guard('school')->user()->idSchool)
                    ->where('student_transaction_extra.idFinancialYear', '=', Session::get('idFinancialYear'))
                    ->where(function($query) {
                        $query->whereNull('status');
                        $query->orWhere('status', '=', 'In-Process');
                        $query->orWhere('status', '=', 'Cleared');
                        $query->orWhere('status', '=', 'Success');
                    })
                    ->select('school_users.name','ecNo','bankName','idBank', 'student_transaction_extra.idTransaction', 'student_transaction_extra.idFinancialYear', 'students.idClass', 'students.idStudent', 'students.idSection', 'firstName', 'middleName', 'contactPersonMobile', 'lastName', 'className', 'sectionName', 'father_fname', 'father_mobile', 'father_lname', 'receiptNo', 'paymentMode', 'totalPaid', 'penaltyAmount', 'discount', 'fine', 'penaltyRemarks', 'paymentDate', 'chequeNo');
       
                    if ($request->has('sections') && count($request->sections) > 0) {
                        $extra_transactions = $extra_transactions->whereIn('students.idSection', $request->sections);
                    } 
                    if ($request->has('classes') && count($request->classes) > 0) {
                        $extra_transactions = $extra_transactions->whereIn('students.idClass', $request->classes);
                    } 
                    
                    if ($request->has('paymentMode')) {
                        if ($request->paymentMode != "All")
                            $extra_transactions = $extra_transactions->where('paymentMode', '=', $request->paymentMode);
                    }
                
                    if ($request->has('toDate') && $request->has('fromDate')){
                        $extra_transactions = $extra_transactions->whereDate('paymentDate','>=', $today)->whereDate('paymentDate','<=', $till);
                    }else $extra_transactions = $extra_transactions->whereDate('paymentDate', $today);

                    $extra_transactions = $extra_transactions->get();

        return view('schools.reports.combined_royal_paid', compact('classes', 'feeHeaders', 'lesser_transactions' ,'transactions','extra_transactions'));
    }

}

Copyright © 2021 - 2025 IMMREX7