File: /var/www/vhost/disk-apps/comfama.sports-crowd.com/app/Http/Controllers/Exports/ReportInventory.php
<?php
namespace App\Http\Controllers\Exports;
use App\Product;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ReportInventory implements FromCollection, WithHeadings, WithEvents
{
// set the headings
public function headings(): array
{
return [
'Nombre', 'PLU', 'Unidades totales', 'Sucursal', 'SKU', 'Atributo', 'Valor', 'Unidades disponibles', 'Unidades en despacho'
];
}
// freeze the first row with headings
public function registerEvents(): array
{
return [];
}
public function collection()
{
$products = Product::select('id', 'name', 'plu', 'available_units', 'sucursal_id')->with('sucursal', 'productAttributes')->get();
$data = [];
foreach ($products as $product) {
$sucursal_name = "";
if ($product->sucursal) {
$sucursal_name = $product->sucursal->name;
}
if ($product->productAttributes && count($product->productAttributes)) {
foreach ($product->productAttributes as $attribute) {
$data[] = array(
$product->name,
$product->plu,
$product->available_units,
$sucursal_name,
$attribute->sku,
$attribute->attribute->display_name,
$attribute->value,
$attribute->available_units,
$attribute->dispatched_units,
);
}
} else {
$data[] = array(
$product->name, $product->plu, $product->available_units, $sucursal_name
);
}
}
return collect($data);
}
}