*/ protected ImportDatabaseHelper $userImportHelper; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $projectImportHelper; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $tagImportHelper; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $clientImportHelper; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $taskImportHelper; protected int $timeEntriesCreated; protected ColorService $colorService; protected TimezoneService $timezoneService; public function init(Organization $organization): void { $this->organization = $organization; $this->userImportHelper = new ImportDatabaseHelper(User::class, ['email'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->belongsToOrganization($this->organization); }, function (User $user) { $user->organizations()->attach($this->organization, [ 'role' => 'placeholder', ]); }, validate: [ 'name' => [ 'required', 'max:255', ], 'timezone' => [ 'required', 'timezone:all', ], ]); $this->projectImportHelper = new ImportDatabaseHelper(Project::class, ['name', 'organization_id'], true, function (Builder $builder) { return $builder->where('organization_id', $this->organization->id); }, validate: [ 'name' => [ 'required', 'max:255', ], ]); $this->tagImportHelper = new ImportDatabaseHelper(Tag::class, ['name', 'organization_id'], true, function (Builder $builder) { return $builder->where('organization_id', $this->organization->id); }, validate: [ 'name' => [ 'required', 'max:255', ], ]); $this->clientImportHelper = new ImportDatabaseHelper(Client::class, ['name', 'organization_id'], true, function (Builder $builder) { return $builder->where('organization_id', $this->organization->id); }, validate: [ 'name' => [ 'required', 'max:255', ], ]); $this->taskImportHelper = new ImportDatabaseHelper(Task::class, ['name', 'project_id', 'organization_id'], true, function (Builder $builder) { return $builder->where('organization_id', $this->organization->id); }, validate: [ 'name' => [ 'required', 'max:500', ], ]); $this->timeEntriesCreated = 0; $this->colorService = app(ColorService::class); $this->timezoneService = app(TimezoneService::class); } #[\Override] public function getReport(): ReportDto { return new ReportDto( clientsCreated: $this->clientImportHelper->getCreatedCount(), projectsCreated: $this->projectImportHelper->getCreatedCount(), tasksCreated: $this->taskImportHelper->getCreatedCount(), timeEntriesCreated: $this->timeEntriesCreated, tagsCreated: $this->tagImportHelper->getCreatedCount(), usersCreated: $this->userImportHelper->getCreatedCount(), ); } }