getOrdersWithLinesAndShopForPickupDay(now()); $matricules = collect($orders) ->map(fn ($order) => $order->employee->matricule) ->filter() ->uniqueValues(); /** @var array $matriculesArray */ $matriculesArray = $matricules->values()->toArray(); $employees = collect($employeeRepository->getWithCustomerWhereMatriculeIn($matriculesArray)); foreach ($orders as $order) { $matricule = $order->employee->matricule->value; if (! $employees->has($matricule)) { continue; } $employee = $employees->get($matricule); if (! $employee) { continue; } $this->notifyEmployee( $employee, $this->toDto($order, $employee) ); } } private function notifyEmployee(Employee $employee, OrderReminderDto $dto): void { $employee->notify(new OrderTodayReminderNotification($dto)); } private function toDto(Order $order, Employee $employee): OrderReminderDto { $linesDto = []; foreach ($order->lines as $line) { $linesDto[] = new OrderReminderLineDto( name: $line->product->name ?? '', quantity: $line->quantity, priceKgTtc: $this->moneyFormatter->format($line->product->priceKgTtc), totalTtc: $this->moneyFormatter->format($line->total_ttc), ); } return new OrderReminderDto( firstname: $employee->prenom, lastname: $employee->nom, reference: (string) $order->reference, total: $this->moneyFormatter->format($order->total), pickupDayFormatted: $order->pickup_day ? $order->pickup_day->translatedFormat('l j F Y') : '', lines: $linesDto, shopName: $order->shop ? $order->shop->name : '', shopAddress: $order->shop ? $order->shop->address : '', shopPostcode: $order->shop ? $order->shop->postcode : '', shopCity: $order->shop ? $order->shop->city : '' ); } }