/
home
/
sjslayjy
/
public_html
/
cropnet
/
app
/
Exports
/
Upload File
HOME
<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\FromArray; use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithStyles; use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Events\AfterSheet; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; class AnimalFormExport implements FromArray, WithHeadings, WithStyles, WithEvents { protected $animalData; public function __construct($animalData) { $this->animalData = $animalData; } public function array(): array { $data = []; $serial = 1; foreach ($this->animalData as $item) { $isFirstRowForAadhar = true; // Ensure filling only for the first row of each member_aadhar foreach ($item['animal_details'] as $index => $detail) { $row = []; if ($isFirstRowForAadhar) { $row[] = $serial; $serial++; $row[] = $item['member_aadhar']; // Retrieve member_code and mpp_code based on is_old_member flag if($detail->is_old_member == 1) { $legacyData = \DB::table('legacy_data') ->select('member_code', 'mpp_code') ->where('aadhar_no', $item['member_aadhar']) ->where('is_active', 1) ->first(); $row[] = $legacyData ? $legacyData->member_code : ''; $row[] = $legacyData ? $legacyData->mpp_code : ''; } else { $memberData = \App\MembershipDetail::select('member_code', 'mpp_code') ->where('aadhar_card', $item['member_aadhar']) ->where('is_active', 1) ->first(); $row[] = $memberData ? $memberData->member_code : ''; $row[] = $memberData ? $memberData->mpp_code : ''; } $row[] = $item['total_animals']; // Fill total animals $isFirstRowForAadhar = false; // Set flag to false after first row } else { // Empty cells for all the columns associated with member data $row[] = ''; // Serial $row[] = ''; // Member Aadhar $row[] = ''; // Member Code $row[] = ''; // MPP Code $row[] = ''; // Total Animals } // Always fill animal details for each animal $row[] = $detail->animal_registration_date; $row[] = $detail->animal_tag_no; $row[] = $detail->virtual_tag_number; $row[] = getModelById('AnimalType', $detail->animal_type)->animal_type; $row[] = getModelById('AnimalBreed', $detail->animal_breed)->breed_name; $row[] = $detail->animal_category; $row[] = $detail->age; $row[] = $detail->milk_production; $row[] = $detail->lactation_count; $row[] = $detail->is_pregnant; $row[] = $detail->month_of_pregnancy; $row[] = getModelById('User', $detail->created_by)->name; $data[] = $row; } } return $data; } public function headings(): array { return [ 'S.no', 'Member Aadhar', 'Member Code', 'MPP Code', 'Total Animals', 'Animal Reg. Date', 'Animal Tag No', 'Virtual Tag No', 'Animal Type', 'Animal Breed', 'Animal Category', 'Age', 'Milk Production (LPD)', 'Lactation Count', 'Pregnant', 'Pregnancy Month', 'Created By' ]; } public function styles(Worksheet $sheet) { // Apply bold style to the first row (headings) $sheet->getStyle('A1:Q1')->getFont()->setBold(true); // Set column widths from A to Q $sheet->getColumnDimension('A')->setWidth(5); $sheet->getColumnDimension('B')->setWidth(20); $sheet->getColumnDimension('C')->setWidth(20); $sheet->getColumnDimension('D')->setWidth(20); $sheet->getColumnDimension('E')->setWidth(20); $sheet->getColumnDimension('F')->setWidth(20); $sheet->getColumnDimension('G')->setWidth(20); $sheet->getColumnDimension('H')->setWidth(20); $sheet->getColumnDimension('I')->setWidth(20); $sheet->getColumnDimension('J')->setWidth(20); $sheet->getColumnDimension('K')->setWidth(10); $sheet->getColumnDimension('L')->setWidth(20); $sheet->getColumnDimension('M')->setWidth(20); $sheet->getColumnDimension('N')->setWidth(20); $sheet->getColumnDimension('O')->setWidth(20); $sheet->getColumnDimension('P')->setWidth(20); $sheet->getColumnDimension('Q')->setWidth(20); $sheet->getStyle('A1:E1000')->getAlignment()->setHorizontal('center'); $sheet->getStyle('A1:E1000')->getAlignment()->setVertical('center'); } public function registerEvents(): array { return [ AfterSheet::class => function (AfterSheet $event) { $sheet = $event->sheet->getDelegate(); $data = $this->animalData; $rowIndex = 2; // Start from row after the headings foreach ($data as $item) { $animalCount = count($item['animal_details']); // Merge cells for Member Aadhar, Member Code, MPP Code, and Total Animals $mergeStartRow = $rowIndex; $mergeEndRow = $rowIndex + $animalCount - 1; if ($animalCount > 1) { $sheet->mergeCells("A{$mergeStartRow}:A{$mergeEndRow}"); // S.no $sheet->mergeCells("B{$mergeStartRow}:B{$mergeEndRow}"); // Member Aadhar $sheet->mergeCells("C{$mergeStartRow}:C{$mergeEndRow}"); // Member Code $sheet->mergeCells("D{$mergeStartRow}:D{$mergeEndRow}"); // MPP Code $sheet->mergeCells("E{$mergeStartRow}:E{$mergeEndRow}"); // Total Animals } $rowIndex += $animalCount; // Move to the next set of rows } } ]; } }