Sindbad~EG File Manager

Current Path : /home/copmadinaarea/creditunion.copeastlegondistrict.org/app/Http/Controllers/
Upload File :
Current File : /home/copmadinaarea/creditunion.copeastlegondistrict.org/app/Http/Controllers/ReportController.php

<?php

namespace App\Http\Controllers;

use App\Models\Expense;
use App\Models\Loan;
use App\Models\LoanPayment;
use App\Models\LoanRepayment;
use App\Models\Member;
use App\Models\SavingsAccount;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ReportController extends Controller {

	/**
	 * Create a new controller instance.
	 *
	 * @return void
	 */
	public function __construct() {
		date_default_timezone_set(get_option('timezone', 'Asia/Dhaka'));
	}

	/**
	 * Display a listing of the resource.
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function account_statement(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.account_statement');
		} else if ($request->isMethod('post')) {
			@ini_set('max_execution_time', 0);
			@set_time_limit(0);

			$data = array();
			$date1 = $request->date1;
			$date2 = $request->date2;
			$account_number = isset($request->account_number) ? $request->account_number : '';

			$account = SavingsAccount::where('account_number', $account_number)->with('savings_type.currency')->first();
			if (!$account) {
				return back()->with('error', _lang('Account not found'));
			}

			DB::select("SELECT ((SELECT IFNULL(SUM(amount),0) FROM transactions WHERE dr_cr = 'cr' AND member_id = $account->member_id AND savings_account_id = $account->id AND status=2 AND created_at < '$date1') - (SELECT IFNULL(SUM(amount),0) FROM transactions WHERE dr_cr = 'dr' AND member_id = $account->member_id AND savings_account_id = $account->id AND status = 2 AND created_at < '$date1')) into @openingBalance");

			$data['report_data'] = DB::select("SELECT '$date1' trans_date,'Opening Balance' as description, 0 as 'debit', 0 as 'credit', @openingBalance as 'balance'
            UNION ALL
            SELECT date(trans_date), description, debit, credit, @openingBalance := @openingBalance + (credit - debit) as balance FROM
            (SELECT date(transactions.trans_date) as trans_date, transactions.description, IF(transactions.dr_cr='dr',transactions.amount,0) as debit, IF(transactions.dr_cr='cr',transactions.amount,0) as credit FROM `transactions` JOIN savings_accounts ON savings_account_id=savings_accounts.id WHERE savings_accounts.id = $account->id AND transactions.member_id = $account->member_id AND transactions.status=2 AND date(transactions.trans_date) >= '$date1' AND date(transactions.trans_date) <= '$date2')
            as all_transaction");

			$data['date1'] = $request->date1;
			$data['date2'] = $request->date2;
			$data['account_number'] = $request->account_number;
			$data['account'] = $account;
			return view('backend.reports.account_statement', $data);
		}
	}

	public function loan_report(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.loan_report');
		} else if ($request->isMethod('post')) {
			@ini_set('max_execution_time', 0);
			@set_time_limit(0);

			$data = array();
			$date1 = $request->date1;
			$date2 = $request->date2;
			$member_no = isset($request->member_no) ? $request->member_no : '';
			$status = isset($request->status) ? $request->status : '';
			$loan_type = isset($request->loan_type) ? $request->loan_type : '';

			$data['report_data'] = Loan::select('loans.*')
				->with(['borrower', 'loan_product'])
				->when($status, function ($query, $status) {
					return $query->where('status', $status);
				}, function ($query, $status) {
					if ($status != '') {
						return $query->where('status', $status);
					}
				})
				->when($loan_type, function ($query, $loan_type) {
					return $query->where('loan_product_id', $loan_type);
				})
				->when($member_no, function ($query, $member_no) {
					return $query->whereHas('borrower', function ($query) use ($member_no) {
						return $query->where('member_no', $member_no);
					});
				})
				->whereRaw("date(loans.created_at) >= '$date1' AND date(loans.created_at) <= '$date2'")
				->orderBy('id', 'desc')
				->get();

			$data['date1'] = $request->date1;
			$data['date2'] = $request->date2;
			$data['status'] = $request->status;
			$data['member_no'] = $request->member_no;
			$data['loan_type'] = $request->loan_type;
			return view('backend.reports.loan_report', $data);
		}
	}

	public function loan_due_report(Request $request) {
		@ini_set('max_execution_time', 0);
		@set_time_limit(0);

		$data = array();
		$date = date('Y-m-d');

		$data['report_data'] = LoanRepayment::selectRaw('loan_repayments.*, SUM(amount_to_pay) as total_due')
			->with('loan')
			->whereRaw("repayment_date < '$date'")
			->where('status', 0)
			->groupBy('loan_id')
			->get();

		return view('backend.reports.loan_due_report', $data);
	}

	public function transactions_report(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.transactions_report');
		} else if ($request->isMethod('post')) {
			@ini_set('max_execution_time', 0);
			@set_time_limit(0);

			$data = array();
			$date1 = $request->date1;
			$date2 = $request->date2;
			$account_number = isset($request->account_number) ? $request->account_number : '';
			$status = isset($request->status) ? $request->status : '';
			$transaction_type = isset($request->transaction_type) ? $request->transaction_type : '';

			$data['report_data'] = Transaction::select('transactions.*')
				->with(['member', 'account'])
				->when($status, function ($query, $status) {
					return $query->where('status', $status);
				}, function ($query, $status) {
					if ($status != '') {
						return $query->where('status', $status);
					}
				})
				->when($transaction_type, function ($query, $transaction_type) {
					return $query->where('type', $transaction_type);
				})
				->when($account_number, function ($query, $account_number) {
					return $query->whereHas('account', function ($query) use ($account_number) {
						return $query->where('account_number', $account_number);
					});
				})
				->whereRaw("date(transactions.trans_date) >= '$date1' AND date(transactions.trans_date) <= '$date2'")
				->orderBy('transactions.trans_date', 'desc')
				->get();

			$data['date1'] = $request->date1;
			$data['date2'] = $request->date2;
			$data['status'] = $request->status;
			$data['account_number'] = $request->account_number;
			$data['transaction_type'] = $request->transaction_type;
			return view('backend.reports.transactions_report', $data);
		}
	}

	public function expense_report(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.expense_report');
		} else if ($request->isMethod('post')) {
			@ini_set('max_execution_time', 0);
			@set_time_limit(0);

			$data = array();
			$date1 = $request->date1;
			$date2 = $request->date2;
			$category = isset($request->category) ? $request->category : '';
			$branch = isset($request->branch) ? $request->branch : '';

			$data['report_data'] = Expense::select('expenses.*')
				->with(['expense_category'])
				->when($category, function ($query, $category) {
					return $query->whereHas('expense_category', function ($query) use ($category) {
						return $query->where('expense_category_id', $category);
					});
				})
				->when($branch, function ($query, $branch) {
					return $query->where('branch_id', $branch);
				})
				->whereRaw("date(expenses.expense_date) >= '$date1' AND date(expenses.expense_date) <= '$date2'")
				->orderBy('expense_date', 'desc')
				->get();

			$data['date1'] = $request->date1;
			$data['date2'] = $request->date2;
			$data['category'] = $request->category;
			$data['branch'] = $request->branch;
			return view('backend.reports.expense_report', $data);
		}
	}

	public function account_balances(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.account_balances');
		} else if ($request->isMethod('post')) {
			$member_no = $request->member_no;
			$member = Member::where('member_no', $member_no)->first();
			if (!$member) {
				return back()->with('error', _lang('Invalid Member No'));
			}
			$accounts = get_account_details($member->id);
			return view('backend.reports.account_balances', compact('accounts', 'member_no'));
		}
	}

	public function revenue_report(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.revenue_report');
		} else if ($request->isMethod('post')) {
			@ini_set('max_execution_time', 0);
			@set_time_limit(0);

			$data = array();
			$year = $request->year;
			$month = $request->month;
			$currency_id = $request->currency_id;

			$transaction_revenue = Transaction::selectRaw("CONCAT('Revenue from ', type), sum(charge) as amount")
				->whereRaw("YEAR(trans_date) = '$year' AND MONTH(trans_date) = '$month'")
				->where('charge', '>', 0)
				->where('status', 2)
				->whereHas('account.savings_type', function ($query) use ($currency_id) {
					return $query->where('currency_id', $currency_id);
				})
				->groupBy('type');

			$maintainaince_fee = Transaction::selectRaw("CONCAT('Revenue from ', type), sum(amount) as amount")
				->whereRaw("YEAR(trans_date) = '$year' AND MONTH(trans_date) = '$month'")
				->where('type', 'Account_Maintenance_Fee')
				->where('status', 2)
				->whereHas('account.savings_type', function ($query) use ($currency_id) {
					return $query->where('currency_id', $currency_id);
				})
				->groupBy('type');

			$others_fee = Transaction::join('transaction_categories', function ($join) {
				$join->on('transaction_categories.name', '=', 'transactions.type')
					->where('transaction_categories.status', '=', 1);
			})
				->selectRaw("CONCAT('Revenue from ', type), sum(amount) as amount")
				->whereRaw("YEAR(trans_date) = '$year' AND MONTH(trans_date) = '$month'")
				->where('dr_cr', 'dr')
				->where('transactions.status', 2)
				->whereHas('account.savings_type', function ($query) use ($currency_id) {
					return $query->where('currency_id', $currency_id);
				})
				->groupBy('type');

			$data['report_data'] = LoanPayment::selectRaw("'Revenue from Loan' as type, sum(interest + late_penalties) as amount")
				->whereRaw("YEAR(loan_payments.paid_at) = '$year' AND MONTH(loan_payments.paid_at) = '$month'")
				->whereHas('loan', function ($query) use ($currency_id) {
					return $query->where('currency_id', $currency_id);
				})
				->union($transaction_revenue)
				->union($maintainaince_fee)
				->union($others_fee)
				->get();

			$data['year'] = $request->year;
			$data['month'] = $request->month;
			$data['currency_id'] = $request->currency_id;
			return view('backend.reports.revenue_report', $data);
		}

	}

	public function loan_repayment_report(Request $request) {
		if ($request->isMethod('get')) {
			return view('backend.reports.loan_repayment_report');
		} else if ($request->isMethod('post')) {
			@ini_set('max_execution_time', 0);
			@set_time_limit(0);

			$data = array();
			$loan_id = isset($request->loan_id) ? $request->loan_id : '';

			$data['report_data'] = Loan::select('loans.*')
				->with(['borrower', 'loan_product', 'payments'])
				->when($loan_id, function ($query, $loan_id) {
					return $query->where('id', $loan_id);
				})
				->orderBy('id', 'desc')
				->first();

			return view('backend.reports.loan_repayment_report', $data);
		}
	}

}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists