File: D:/HostingSpaces/SBogers10/ehbo.today/app/KommaApp/Kms/MemberTransfer/MemberCsvImportService.php
<?php
namespace App\KommaApp\Kms\MemberTransfer;
use App\KommaApp\Kms\Core\AbstractTranslatableModel;
use App\KommaApp\Kms\Transfer\AbstractCsvImportService;
use App\KommaApp\Kms\Transfer\ColumnMap;
use App\KommaApp\Languages\Models\Language;
use App\KommaApp\Users\Genders;
use App\KommaApp\Users\Kms\UserService;
use App\KommaApp\Users\Models\User;
use App\KommaApp\Users\Roles;
use App\Notifications\CustomerRegisteredSetPassword;
use Carbon\Carbon;
class MemberCsvImportService extends AbstractCsvImportService
{
use MemberColumnMapsTrait;
/** @var UserService $service */
private $service;
public function __construct(UserService $service)
{
$this->service = $service;
}
/**
* Imports the row into the database
*i
* @param array $row
* @param int $lineNumber
* @return string A success or fail message
*/
public function import(array $row, int $lineNumber): string
{
$columnMaps = $this->getColumnMaps();
$languages = Language::whereIn('iso_2', ['nl', 'de', 'en'])->get();
//Get the model FQCN and retrieve or create a new non-saved model
$modelFQCN = $this->service->getForModelName();
$memberDataColumnMaps = $columnMaps['userData']; /** @var ColumnMap $memberDataColumnMaps */
$idColumnMap = null;
foreach($memberDataColumnMaps as $columnMap) { /** @var ColumnMap $columnMap */
if($columnMap->getModelAttributeName() == 'email') $idColumnMap = $columnMap;
}
$model = $modelFQCN::firstOrNew([['email', '=', $row[$idColumnMap->getColumnNumber()]]]); /** @var AbstractTranslatableModel $model */
$exists = $model->exists;
$roles = [];
/** @var ColumnMap $columnMap */
foreach($memberDataColumnMaps as $columnMap) {
$value = trim($row[$columnMap->getColumnNumber()]);
$attributeName = $columnMap->getModelAttributeName();
if($attributeName == 'gender') {
$model->$attributeName = (strtolower($value) == 'mevr.') ? Genders::Female : Genders::Male;
} elseif($attributeName == 'name_insertion') {
$model->last_name = $value.' '.$model->last_name;
} elseif($attributeName == 'roles') {
if(strpos(strtolower($value), 'lotus') !== false) $roles[] = Roles::LotusMember;
if(strpos(strtolower($value), 'lid') !== false) $roles[] = Roles::Member;
if(strpos(strtolower($value), 'erelid') !== false) $roles[] = Roles::HonoraryMember;
if(strpos(strtolower($value), 'kaderinstructeur') !== false) $roles[] = Roles::Trainer;
if(strpos(strtolower($value), 'commissielid') !== false) $roles[] = Roles::CommissionMember;
if(strpos(strtolower($value), 'penningmeester') !== false) $roles[] = Roles::BoardMember;
} elseif($attributeName == 'birthdate' || $attributeName == 'certificate_valid_trough_date' || $attributeName == 'certificate_acquirement_date') {
try {
$date = Carbon::createFromFormat('d/m/Y', $value);
$model->$attributeName = $date;
} catch (\Exception $e) {
dd('Import fail. Date: ' . $value);
//Skip the date
}
} elseif($attributeName == 'email') {
$model->$attributeName = $value;
$model->username = $value;
} else {
$model->$attributeName = $value;
};
}
$model->save();
//Attach roles
/** @var $model User */
$model->roles()->sync($roles);
if(!$exists) {
// send mail to new user with their password
$token = \Password::getRepository()->create($model);
$model->notify(new CustomerRegisteredSetPassword($model, $token));
}
//Return ok message string
return __('kms/transfer.import_row_ok', [
'sign' => ($exists) ? __('kms/transfer.updated_sign') : __('kms/transfer.imported_sign'),
'row_number' => $lineNumber,
'id' => $row[$idColumnMap->getColumnNumber()],
'imported_or_updated' => ($exists) ? __('kms/transfer.updated') : __('kms/transfer.imported'),
]);
}
}