|
Server : Apache/2.4.41 (Ubuntu) System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.2.12 Disable Function : NONE Directory : /var/www/paras.theinteractive.in/app/Exports/ |
Upload File : |
<?php
namespace App\Exports;
use App\Models\User;
use App\Models\Feesallotment;
use Illuminate\Support\Facades\Auth;
use App\Helpers\Frontend;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class FeescollectionExport implements FromArray, WithHeadings, WithStyles
{
use Exportable;
protected $request;
public function __construct($request)
{
$this->request = $request;
}
public function styles(Worksheet $sheet)
{
// Wrap text in the column that contains the expand_due_date info
return [
'T' => ['alignment' => ['wrapText' => true]], // Column T = 20th column
];
}
public function array(): array
{
$request = $this->request;
$schoolCodes = Frontend::get_schools();
$returnFees = [];
$query = Feesallotment::with('user', 'class', 'section', 'feescollection', 'users_admission', 'school');
// Filter: School
if (!empty($request->school)) {
$query->whereHas('school', fn($q) => $q->where('schools.id', $request->school));
} elseif (!Auth::user()->hasRole('superadmin')) {
$query->whereHas('school', fn($q) => $q->whereIn('schools.id', $schoolCodes));
}
// Filter: Class
if (!empty($request->class)) {
$query->where('feesallotments.class_id', $request->class);
}
// Filter: Section
if (!empty($request->section)) {
$query->whereHas('section', fn($q) => $q->where('sections.id', $request->section));
}
// Filter: Roll no
if (!empty($request->roll_no)) {
$query->whereHas('users_admission', fn($q) => $q->where('users_admissions.enrollment_no', 'like', '%' . $request->roll_no . '%'));
}
// Filter: Due Date
if (!empty($request->due_date)) {
$query->whereDate('feesallotments.due_date', date('Y-m-d', strtotime($request->due_date)));
}
// Filter: active users
$query->whereHas('user', fn($q) => $q->where('users.status', 1));
$query->orderByDesc('id');
$students = $query->get();
foreach ($students as $student) {
$admission = $student->users_admission;
$school = $student->school;
$class = $student->class;
$section = $student->section;
$collections = $student->feescollection;
// dd($collections);
$feesCollect = [];
$feesCollect[] = optional($admission)->id;
$feesCollect[] = optional($admission)->enrollment_no;
$feesCollect[] = optional($school)->school;
$feesCollect[] = optional($class)->class;
$feesCollect[] = optional($section)->section;
$user_unique_id = Frontend::getUserUniquidId($student->user_id);
$promote = Frontend::getPromoteStudent($user_unique_id, $student->class_id);
$feesCollect[] = optional($promote)->section;
$feesCollect[] = optional($admission)->first_name . ' ' . optional($admission)->last_name;
$feesCollect[] = ''; // Father name or blank
$feesCollect[] = optional($admission)->dob;
$feesCollect[] = optional($admission)->gender;
$feesCollect[] = $student->amount;
$fine = $collections->sum('fine');
$discount = $collections->sum('discount');
$paid = $collections->where('payment_status', 'credit')->sum('amount');
$refund = $collections->where('payment_status', 'refund')->sum('amount');
$adjustment = $collections->where('payment_status', 'adjustment')->sum('amount');
$credit = $collections->where('payment_status', 'credit')->sum('amount');
$balanceAmount = ($student->amount - $discount) - ($paid-$refund-$adjustment);
if ($fine < 0) {
$balanceAmount -= abs($fine);
}
$feesCollect[] = $fine;
$feesCollect[] = $discount;
$feesCollect[] = $paid;
$feesCollect[] = ($balanceAmount != 0 && $balanceAmount != null) ? $balanceAmount + abs($fine) : "0";
$feesCollect[] = $balanceAmount <= 0 ? "PAID" : "UNPAID";
$feesCollect[] = $collections->count();
$feesCollect[] = date('Y-m-d', strtotime($student->due_date));
$feesCollect[] = (!empty($refund)) ? $refund : "0"; // Refund amount
$feesCollect[] = (!empty($adjustment))?$adjustment:"0";
$feesCollect[] = (!empty($credit))?$credit:"0";
$feesCollect[] = $student->remarks;
// Expand Due Dates with \n and wrap
$expandDueInfo = [];
if (!empty($student->expand_due_date) && is_string($student->expand_due_date)) {
$decoded = json_decode($student->expand_due_date, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
foreach ($decoded as $key => $value) {
$value = is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value;
$date = date('d-m-Y', strtotime($key));
$expandDueInfo[] = "$date: $value";
}
}
}
$feesCollect[] = implode("\n", $expandDueInfo); // final cell with line breaks
$returnFees[] = $feesCollect;
}
return $returnFees;
}
public function headings(): array
{
return [
'Admission No',
'Enrollment No',
'Center',
'Attempt',
'Batch',
'Current Batch',
'Full Name',
'Father Name',
'DOB',
'Gender',
'Fees',
'Fine',
'Discount',
'Paid',
'Balance',
'Status',
'Installments',
'Due Date',
'Refund',
'Adjustment',
'Credit',
'Remarks',
'Expand Due Dates'
];
}
}