Import de fichiers excel et queues

4959
,

Bonjour,

J'utilise maatwebsite/excel pour importer des fichiers excel dans mon appli. Comme certains fichiers peuvent etre volumineux, j'utilise le système de queue pour ces imports afin de notifier les utilisateurs a la fin de l'import.
J'aimerais compter le nombre de lignes que j'ai importé et le nombre de ligne que j'ai rejetés (grace au Validator) a la fin de chaque import. Cependant, je me retouve toujours avec des compteurs à 0 car l'événement AfterImport est initialisé avant la mise en file d'attente du job...

Si quelqu'un à une idée de comment je pourrais remedier à ce problème.

Voici mon code :

class TaskController extends Controller
{
 public function store(TaskRequest $request)
    {
       ...

        (new ItemsImport($task, $file))
            ->import($file->getPath())
            ->chain([
                new ImportReporting(),
                new ExportTaskFailures($task, $file),
                new UpdateTaskStatusAfterImport($task),
                new NotifyUser(request()->user(), $task),
            ])
        ;
}
class ItemsImport extends DefaultValueBinder implements WithCustomValueBinder, WithEvents, WithMultipleSheets, ToModel,
    WithHeadingRow, WithValidation, SkipsOnFailure, WithChunkReading, ShouldQueue
{
    use Importable, SkipsFailures;

    public $countImports = 0;
    public $countFailures = 0;

    public function registerEvents(): array
    {
        return [
            AfterImport::class => function(AfterImport $event) {
                $report = "imports : {$this->countImports} | fails : {$this->countFailures}";
                echo $report;
            },
        ];    
    }

    public function model(array $row)
    {
        ++$this->countImports;
        ...
    }

    public function onFailure(Failure ...$failures)
    {
        ++$this->countFailures;
    }

 }

Je précise que la solution de compter le nombre d'enregistrement en BDD ne me convient pas car couhaite pouvoir réimporter des données utlérieurement pour la meme tache.