site = $site; } public function collection(Collection $rows) { /** @var \App\Models\User */ $user = auth()->user(); /** @var \App\Models\Site */ $site = Site::where('id', $user->selected_site_id)->firstOrFail(); $cMAT = 0; $cNOM = 1; $cPRENOM = 2; $cMAIL = 3; foreach ($rows as $k => $row) { $employee = Employee::where('matricule', $row[$cMAT])->firstOrNew(); if (!$this->validateRow($k, $row, $employee)) { $this->importedFailed[$k] = $row; continue; } $createdAccount = false; // If employee exists but is in a different Site if (!is_null($employee->site) and $employee->site_id !== $site->id) { $this->setErrorMessages($k, [sprintf( 'Le salariée %s %s %s existe déjà dans le site %s', $row[$cMAT], $row[$cNOM], $row[$cPRENOM], $site->name )]); $this->importedFailed[$k] = $row; } // set fields $employee->fill([ 'matricule' => $row[$cMAT], 'firstname' => $row[$cPRENOM], 'lastname' => $row[$cNOM], 'site_id' => $site->id, ]); if (!$employee->exists) { $createdAccount = true; } $employee->email = $row[$cMAIL]; // Anti date mdp $employee->password_date = Carbon::now()->subDay(); $employee->password_attempts = 0; try { $employee->saveOrFail(); } catch (Exception $e) { $this->setErrorMessages($k, [sprintf( 'Erreur %s', $e->getMessage() )]); $this->importedFailed[$k] = $row; continue; } if ($createdAccount) { $this->importedCount += 1; $employee->sendMailConfirm(); } else { $this->updatedCount += 1; } } } public function getCsvSettings(): array { return [ 'input_encoding' => 'UTF-8', 'delimiter' => ';' ]; } /** * Validate row * * @param \Illuminate\Support\Collection $key * @param array $row * @return boolean */ private function validateRow(int $key, Collection $row, Employee $employee = null): bool { try { $unique = 'unique:employees,email'; if ($employee->id) { $unique .= ",$employee->id"; } Validator::make($row->all(), [ '0' => 'required|digits_between:7,8', '1' => 'required|string', '2' => 'required|string', '3' => "required|$unique|email:rfc,dns" ], [], ['matricule', 'prénom', 'nom', 'email'])->validate(); } catch (ValidationException $e) { $this->setErrorMessages($key, $e->errors()); return false; } return true; } /** * Set import error messages * * @param integer $row * @param array $messages * @return void */ public function setErrorMessages(int $row, array $messages): void { if (!isset($this->errorMessages[$row])) { $this->errorMessages[$row] = []; } $m1 = $this->errorMessages[$row]; $m2 = collect($messages)->flatten()->all(); array_merge_recursive_distinct($m1, $m2); $this->errorMessages[$row] = array_merge_recursive_distinct($m1, $m2); } }