0

Hi i already see the documentation for Maatwebsite\Excel and try to understand the new way to export files .. now i have this project which made with Laravel 5.1 and I upgrade it to 8 and fixed most of problems but im stuck with this Maatwebsite\Excel ( package )

how to rewrite this code in the new version ..

          ini_set("memory_limit", "-1");
        $requested = (array) $request->columns_to_export;
        return Excel::create('instances-' . date('Y-m-d'), function ($excel) use ($request, $requested) {
            $excel->sheet('instances', function ($sheet) use ($request, $requested) {
                $columns = [];
                foreach ($requested as $key => $column) {
                    if ($column == 'sku') {
                        $columns[] = 'SKU';
                    }
                    if ($column == 'material_name') {
                        $columns[] = 'Material Nmae';
                    }
                    if ($column == 'new_or_used') {
                        $columns[] = 'NEW OR USED';
                    }
                    if ($column == 'barcode') {
                        $columns[] = 'BARCODE';
                    }
                    if ($column == 'asset_or_sale') {
                        $columns[] = 'ASSEST OR SALE';
                    }
                    if ($column == 'cost') {
                        $columns[] = 'COST';
                    }
                }
                if (!empty($columns)) {
                    $sheet->appendRow($columns);
                }
                $this->data['query']->chunk(500, function ($_500) use ($sheet, $request, $requested) {
                    foreach ($_500 as $o => $INSTANCE) {
                        $row     = [];
                        foreach ($requested as $key => $column) {
                            if ($column == 'sku') {
                                $row[]     = (string) '[' . $INSTANCE->sku . ']';
                            }
                            if ($column == 'material_name') {
                                $row[]     = (string) (empty($INSTANCE->Material) ? '------' : $INSTANCE->Material->{'name_' . app()->getLocale()});
                            }
                            if ($column == 'new_or_used') {
                                $row[]     = (string) ($INSTANCE->is_new == 'Y' ? 'NEW' : 'secondhand');
                            }
                            if ($column == 'barcode') {
                                $row[]     = (string) '[' . $INSTANCE->barcode . ']';
                            }
                            if ($column == 'asset_or_sale') {
                                $row[]     = (string) ($INSTANCE->is_asset == 'Y' ? 'ASSET' : ' not asset');
                            }
                            if ($column == 'cost') {
                                $row[]     = (string) round($INSTANCE->cost_of_good_sold, 2);
                            }
                            if ($column == 'last_stock') {
                                $row[]     = (string) (empty($INSTANCE->LastOrderEntry) ? '------' : ($INSTANCE->LastOrderEntry->Stock ? $INSTANCE->LastOrderEntry->Stock->{'name_' . app()->getLocale()} : '------'));
                            }
                            
                           else {
                                        $row[] = '------';
                                    }
                                }
                            }
                        }
                        if (!empty($row)) {
                            $sheet->appendRow($row);
                        }
                    }
                });
            });
        })
            ->download('xlsx');

1 Answers1

0

ok For people who want to know Know How to rewrite the same code in New Version .. i just used heading : for this

foreach ($requested as $key => $column) {
                if ($column == 'sku') {
                    $columns[] = 'SKU';
                }
                if ($column == 'material_name') {
                    $columns[] = 'Material Nmae';
                }
                if ($column == 'new_or_used') {
                    $columns[] = 'NEW OR USED';
                }
                if ($column == 'barcode') {
                    $columns[] = 'BARCODE';
                }
                if ($column == 'asset_or_sale') {
                    $columns[] = 'ASSEST OR SALE';
                }
                if ($column == 'cost') {
                    $columns[] = 'COST';
                }
            }

and Mapping For this

  $this->data['query']->chunk(500, function ($_500) use ($sheet, $request, $requested) {
                foreach ($_500 as $o => $INSTANCE) {
                    $row     = [];
                    foreach ($requested as $key => $column) {
                        if ($column == 'sku') {
                            $row[]     = (string) '[' . $INSTANCE->sku . ']';
                        }
                        if ($column == 'material_name') {
                            $row[]     = (string) (empty($INSTANCE->Material) ? '------' : $INSTANCE->Material->{'name_' . app()->getLocale()});
                        }
                        if ($column == 'new_or_used') {
                            $row[]     = (string) ($INSTANCE->is_new == 'Y' ? 'NEW' : 'secondhand');
                        }
                        if ($column == 'barcode') {
                            $row[]     = (string) '[' . $INSTANCE->barcode . ']';
                        }
                        if ($column == 'asset_or_sale') {
                            $row[]     = (string) ($INSTANCE->is_asset == 'Y' ? 'ASSET' : ' not asset');
                        }
                        if ($column == 'cost') {
                            $row[]     = (string) round($INSTANCE->cost_of_good_sold, 2);
                        }
                        if ($column == 'last_stock') {
                            $row[]     = (string) (empty($INSTANCE->LastOrderEntry) ? '------' : ($INSTANCE->LastOrderEntry->Stock ? $INSTANCE->LastOrderEntry->Stock->{'name_' . app()->getLocale()} : '------'));
                        }
                        
                       else {
                                    $row[] = '------';
                                }
                            }
                        }
                    }
                    if (!empty($row)) {
                        $sheet->appendRow($row);
                    }
                }
            });
        });

so the new code will be somthing like this ..

class MaterialInventoreyExport implements
    FromCollection,
    WithMapping,
    WithHeadings,
    ShouldAutoSize
{
    use Exportable;

    protected $data;
    protected $requst;

    public function __construct($data, $requst)
    {
        $this->data = $data;
        $this->requst = $requst;
        // dd($this->data->get()[0]);
    }

    public function headings(): array
    {
        $requested = $this->requst;
        $columns = [];
        foreach ($requested as $key => $column) {
                    if ($column == 'sku') {
                        $columns[] = 'SKU';
                    }
                    if ($column == 'material_name') {
                        $columns[] = 'Material Nmae';
                    }
                    if ($column == 'new_or_used') {
                        $columns[] = 'NEW OR USED';
                    }
                    if ($column == 'barcode') {
                        $columns[] = 'BARCODE';
                    }
                    if ($column == 'asset_or_sale') {
                        $columns[] = 'ASSEST OR SALE';
                    }
                    if ($column == 'cost') {
                        $columns[] = 'COST';
                    }
                }
        return $columns;
    }


    public function collection()
    {
        return $this->data->get();
    }

    public function map($data): array
    {
        $row = null;
        $requested = $this->requst;
        $A = [];


        foreach ($requested as $key => $column) {
            if ($column == 'sku') {
                $A[] = $data->sku;
            }
            if ($column == 'material_name') {
                $A[] = (string) (empty($data->Material) ? '------' : $data->Material->{'name_' . app()->getLocale()});
            }
            if ($column == 'new_or_used') {
                $A[] =  (string) ($data->is_new == 'Y' ? 'new' : 'secondHand');
            }
            if ($column == 'barcode') {
                $A[] =  (string) '[' . $data->barcode . ']';
            }
            if ($column == 'asset_or_sale') {
                $A[] =  (string) ($data->is_asset == 'Y' ? 'asset' : 'Not Asset');
            }
            if ($column == 'cost') {
                $A[] = (string) round($data->cost_of_good_sold, 2);
            }
            if ($column == 'last_stock') {
                $A[] = (string) (empty($data->LastOrderEntry) ? '------' : 
                ($data->LastOrderEntry->Stock ? $data->LastOrderEntry->Stock->{'name_' . app()->getLocale()} : '------'));
            }
        }

        return $A;
    }
}
SEYED BABAK ASHRAFI
  • 4,093
  • 4
  • 22
  • 32