HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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'),
        ]);
    }
}