<?php namespace App\Imports; use App\Jobs\OrgStudentSignupNotification; use App\User; use Brian2694\Toastr\Facades\Toastr; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; use Maatwebsite\Excel\Concerns\OnEachRow; use Maatwebsite\Excel\Concerns\SkipsFailures; use Maatwebsite\Excel\Concerns\SkipsOnFailure; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\WithHeadingRow; use Maatwebsite\Excel\Concerns\WithStartRow; use Maatwebsite\Excel\Concerns\WithValidation; use Maatwebsite\Excel\Row; use Maatwebsite\Excel\Validators\Failure; class ImportOrgStudent implements WithStartRow, WithHeadingRow, WithValidation, OnEachRow, SkipsOnFailure { use SkipsFailures; //ToModel, public function rules(): array { return [ 'email' => 'required|unique:users,email', 'employee_id' => 'required|unique:users,employee_id', 'position_code' => 'required', 'name' => 'required', 'org_chart_code' => 'required', ]; } public function customValidationMessages() { return [ 'email.unique' => trans('org.The Email has already been taken'), 'employee_id.unique' => trans('org.The Employee ID has already been taken'), 'email.required' => trans('org.Email is required'), 'name.required' => trans('org.Name is required'), 'employee_id.required' => trans('org.Employee ID is required'), 'position_code.required' => trans('org.Position Code is required'), 'org_chart_code.required' => trans('org.Org Chart Code is required'), ]; } public function startRow(): int { return 2; } public function headingRow(): int { return 1; } public function onRow(Row $row) { $row = $row->toArray(); $name = $row['name']; $org_chart_code = $row['org_chart_code']; $position_code = $row['position_code']; $email = $row['email']; $employee_id = $row['employee_id']; $birthday = transformExcelDate($row['birthday']) ?? null; $start_working_date = transformExcelDate($row['start_working_date']) ?? null; $gender = $row['gender'] ?? null; $phone = $row['phone'] ?? null; $phone = !empty($phone) ? substr($phone, 0, 1) != 0 ? '0' . $phone : $phone : null; $password = Str::random(8); $exist = null; if (!empty($phone)) { $exist = User::where('phone', $phone)->first(); if ($exist) { Toastr::error($phone . ' ' . trans('org.Phone Number has already been taken'), trans('common.Failed')); } } if (!$exist) { $new_student = User::create([ 'name' => $name, 'org_chart_code' => $org_chart_code, 'org_position_code' => $position_code, 'email' => strtolower($email), 'employee_id' => $employee_id, 'dob' => $birthday, 'start_working_date' => $start_working_date, 'gender' => $gender, 'phone' => $phone, 'email_verified_at' => now(), 'password' => Hash::make($password), 'referral' => generateUniqueId(), 'language_id' => Settings('language_id') ?? '19', 'language_name' => Settings('language_name') ?? 'English', 'language_code' => Settings('language_code') ?? 'en', 'language_rtl' => Settings('language_rtl') ?? '0', 'country' => Settings('country_id'), 'created_at' => now(), 'updated_at' => now(), ]); if (isModuleActive('UserType')) { $user = User::find($new_student->id); if ($user) { applyDefaultRoleToUser($user); } } if ($new_student) { OrgStudentSignupNotification::dispatch($new_student, $password); } } } public function onFailure(Failure ...$failures) { foreach ($failures as $failure) { foreach ($failure->errors() as $error) { Toastr::error(trans('org.Row no') . $failure->row() . ', ' . $error, trans('common.Failed')); } } } }