File: /var/www/vhost/disk-apps/agile-selling-wpb/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;
use Maatwebsite\Excel\Events\AfterSheet;
class ReportInventory implements FromCollection, WithHeadings, WithEvents {
// set the headings
public function headings(): array
{
return [
'Nombre','PLU', 'Unidades totales','Available warehouse', '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','available_warehouse')->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,
$product->available_warehouse,
$attribute->dispatched_units,
);
}
}else{
$data[] = array(
$product->name, $product->plu, $product->available_units, $product->available_warehouse, $sucursal_name
);
}
}
return collect($data);
}
}