/
home
/
sjslayjy
/
public_html
/
tabson
/
app
/
Exports
/
Upload File
HOME
<?php namespace App\Exports; use App\Item; use DB; use App\Vendor; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Concerns\WithCustomStartCell; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Events\AfterSheet; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Style\Fill; class ReportListExport implements FromCollection,WithHeadings,WithEvents,WithCustomStartCell,ShouldAutoSize { /** * @return \Illuminate\Support\Collection */ protected $excel_name; function __construct($excel_name) { $this->excel_name = $excel_name; } public function collection() { set_time_limit(1200); if($this->excel_name == 1){ $response = Vendor::join('vendor_categories', 'vendor_categories.id', 'vendors.category') ->join('users','users.id','vendors.prepared_by') ->select( 'vendors.vendor_code', 'vendors.vendor_name', 'vendors.address', 'vendors.deals_in', 'vendors.sub_category', 'vendors.po_to', 'vendors.contact_no', 'vendors.other_email', 'vendors.account_number', 'vendors.bank_name', 'vendors.ifsc_code', 'vendors.gst', 'vendors.payment_terms', 'vendors.payment_terms_id', 'vendors.document', 'vendors.remarks', 'vendors.is_active', 'vendors.created_at', 'vendor_categories.name as category_name', 'users.name as prepared_by_name' ) ->get(); $data = []; $i = 1; foreach($response as $key => $value){ $data[$key]['Sr. No.'] = $i++; $data[$key]['Category'] = $value['category_name'] ?? 'NULL'; $data[$key]['Vendor Code'] = $value['vendor_code'] ?? 'NULL'; $data[$key]['Vendor Name'] = $value['vendor_name'] ?? 'NILL'; $data[$key]['Address'] = $value['address'] ?? 'NULL'; $data[$key]['Deals IN'] = $value['deals_in'] ?? 'NULL'; $data[$key]['Sub Category'] = $value['sub_category'] ?? 'NULL'; $data[$key]['PO To'] = $value['po_to'] ?? 'NULL'; $data[$key]['Contact No'] = $value['contact_no'] ?? 'NULL'; $data[$key]['Other Email'] = $value['other_email'] ?? 'NULL'; $data[$key]['Account Number'] = $value['account_number'] ?? 'NULL'; $data[$key]['Bank Name'] = $value['bank_name'] ?? 'NULL'; $data[$key]['IFSC Code'] = $value['ifsc_code'] ?? 'NULL'; $data[$key]['GST'] = $value['gst'] ?? 'NULL'; $data[$key]['Payment Terms'] = $value['payment_terms'] ?? 'NULL'; $data[$key]['Payment Terms Id'] = $value['payment_terms_id'] ?? 'NULL'; $data[$key]['Document'] = $value['document'] ?? 'NULL'; $data[$key]['Remarks'] = $value['remarks'] ?? 'NULL'; $data[$key]['Is Active'] = $value['is_active'] ? 'Yes' : 'No'; $data[$key]['Created By'] = $value['prepared_by_name'] ?? 'NULL'; $data[$key]['Creation Date'] = !empty($value['created_at']) ? date('Y-m-d', strtotime($value['created_at'])) : 'NULL'; } return collect($data); } if($this->excel_name == 2){ $response = \App\Customer::get(); $data=[]; foreach($response as $key=>$value){ $data[$key]['Id']=$value['id']; $data[$key]['Name']=$value['name']; $data[$key]['Location']=$value['location'] ?? 'NULL'; $data[$key]['GST Number']=$value['gst_number'] ?? 'NULL'; $data[$key]['Is Active']=$value['is_active']; } return collect($data); } if($this->excel_name == 3){ $response = \App\Item::join('category', 'category.id', 'items.category') ->join('units', 'units.id', 'items.uom') ->select( 'items.id', 'items.code', 'category.name as category_name', 'items.model', 'items.description', 'items.make', 'units.name as uom_name', 'items.hsn_code', 'items.rate', 'items.gst', 'items.specification', 'items.is_active' ) ->get(); $data=[]; foreach($response as $key=>$value){ $data[$key]['ID']=$value['id']; $data[$key]['Code']=$value['code']; $data[$key]['Category']=$value['category_name']; $data[$key]['Model']=$value['model']; $data[$key]['Description']=$value['description']; $data[$key]['Make']=$value['make']; $data[$key]['UOM']=$value['uom_name']; $data[$key]['HSN Code']=$value['hsn_code']; $data[$key]['Rate']=$value['rate']; $data[$key]['GST']=$value['gst']; $data[$key]['Specification']=$value['specification']; $data[$key]['Is Active'] = $value['is_active'] ? 'Yes' : 'No'; } return collect($data); } } public function headings(): array { if($this->excel_name == 1){ return [ 'Sr. No.', 'Category', 'Vendor Code', 'Vendor Name', 'Address', 'Deals In', 'Sub Category', 'PO To', 'Contact No', 'Other Email', 'Account Number', 'Bank Name', 'IFSC Code', 'GST', 'Payment Terms', 'Payment Terms Id', 'Document', 'Remarks', 'Is Active', 'Created By', 'Creation Date ' ]; } if($this->excel_name == 2){ return [ 'ID', 'Name', 'Location', 'GST Number', 'Is Active' ]; } if($this->excel_name == 3){ return [ 'ID', 'Code', 'Category', 'Model', 'Description', 'Make', 'UOM', 'HSN Code', 'Rate', 'GST', 'Specification', 'Is Active' ]; } } public function startCell(): string { return 'A2'; // Data starts from row 3 } public function registerEvents(): array { return [ AfterSheet::class => function(AfterSheet $event) { $sheet = $event->sheet->getDelegate(); $lastColumn = $sheet->getHighestColumn(); // 1. Title styling: apply background from A1 to last header column $titleRange = "A1:{$lastColumn}1"; $sheet->setCellValue('A1', $this->getReportTitle()); $sheet->getStyle($titleRange)->applyFromArray([ 'font' => [ 'bold' => true, 'size' => 18, 'color' => ['rgb' => 'FFFFFF'], ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_LEFT, 'vertical' => Alignment::VERTICAL_CENTER, ], 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['rgb' => '428BCA'], // Light blue ], ]); // 2. Header styling (A2:??2) // Header row (A2:??2) $lastColumn = $sheet->getHighestColumn(); $headerRange = "A2:{$lastColumn}2"; $sheet->getStyle($headerRange)->applyFromArray([ 'font' => [ 'bold' => true, 'size' => 14, 'color' => ['rgb' => '000000'], ], 'fill' => [ 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb' => '90EE90'], // Light green ], ]); // 3. Alternating row colors for data (striped effect) $rowCount = $sheet->getHighestRow(); // Data starts from row 3 (A3) for ($row = 3; $row <= $rowCount; $row++) { $fillColor = ($row % 2 == 0) ? 'FFFFFF' : 'EDEDED'; // White for even, light gray for odd $dataRange = "A{$row}:{$lastColumn}{$row}"; $sheet->getStyle($dataRange)->applyFromArray([ 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['rgb' => $fillColor], ], ]); } }, ]; } protected function getReportTitle() { switch ($this->excel_name) { case 1: return 'Vendor Report'; case 2: return 'Customer Report'; case 3: return 'Item Report'; default: return 'Report'; } } }