header; // Récupération des tickets. Ticket::query() ->whereNotIn( 'status', [TicketStatusEnum::archived, TicketStatusEnum::production] ) ->orderBy(Site::select('name') ->whereColumn('sites.id', 'tickets.site_id')) ->orderBy('order')->get()->each(function (Ticket $ticket) use (&$csvlines, &$lastSiteId, &$order) { $csvlines[] = [ "", $ticket->site->name, $ticket->id, $lastSiteId === $ticket->site_id ? $order + 1 : 1, $ticket->date_mep?->format('d-m-Y') ?? 'No MEP Date', $ticket->type->label(), $ticket->title, $ticket->status->label(), $ticket->projectManager->name ?? 'No PM', $ticket->assignedUser()->name ?? 'No Assigned User', Carbon::create($ticket->getRawOriginal('last_activity'))->format('d-m-Y H:i:s'), $ticket->created_at->format('d-m-Y H:i:s'), route('bo.ticket.show', $ticket->id), $ticket->gitlab_issue ?? 'No GitLab Issue' ]; $order = $lastSiteId === $ticket->site_id ? $order + 1 : 1; $lastSiteId = $ticket->site_id; }); Notification::route('mail', config('mail.MAIL_ADMIN')) ->notify(new ExportTicketsStateNotification($this->array2csv($csvlines, ";"))); } /** * converts an array to a csv stream * * @param array $data * @param string $delimiter * @param string $enclosure * @param string $escape_char * * @return string */ protected function array2csv( array $data, string $delimiter = ',', string $enclosure = '"', string $escape_char = "\\" ) { $f = fopen('php://memory', 'r+'); // UTF-8 BOM. $BOM = "\xEF\xBB\xBF"; fwrite($f, $BOM); foreach ($data as $item) { fputcsv($f, $item, $delimiter, $enclosure, $escape_char); } rewind($f); return stream_get_contents($f); } }