*/ protected ImportDatabaseHelper $userImportHelper; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $memberImportHelper; /** * @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; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $projectMemberImportHelper; /** * @var ImportDatabaseHelper */ protected ImportDatabaseHelper $organizationInvitationsImportHelper; protected BillableRateService $billableRateService; 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); }, null, validate: [ 'name' => [ 'required', 'max:255', ], 'timezone' => [ 'required', 'timezone:all', ], ]); $this->memberImportHelper = new ImportDatabaseHelper(Member::class, ['user_id', 'organization_id'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->whereBelongsTo($this->organization, 'organization'); }, null, validate: [ 'role' => [ 'required', 'string', 'in:placeholder', ], ]); $this->projectImportHelper = new ImportDatabaseHelper(Project::class, ['name', 'organization_id'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->where('organization_id', $this->organization->id); }, validate: [ 'name' => [ 'required', 'max:255', ], 'is_billable' => [ 'required', 'boolean', ], 'billable_rate' => [ 'nullable', 'integer', ], ], beforeSave: function (Project $project) { if ($project->billable_rate === 0) { $project->billable_rate = null; } }); $this->projectMemberImportHelper = new ImportDatabaseHelper(ProjectMember::class, ['project_id', 'member_id'], true, function (Builder $builder): Builder { /** @var Builder $builder */ return $builder->whereBelongsToOrganization($this->organization); }, validate: [ 'billable_rate' => [ 'nullable', 'integer', ], ], beforeSave: function (ProjectMember $projectMember) { if ($projectMember->billable_rate === 0) { $projectMember->billable_rate = null; } }); $this->tagImportHelper = new ImportDatabaseHelper(Tag::class, ['name', 'organization_id'], true, function (Builder $builder): Builder { /** @var 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): Builder { /** @var 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): Builder { /** @var Builder $builder */ return $builder->where('organization_id', $this->organization->id); }, validate: [ 'name' => [ 'required', 'max:500', ], ]); $this->organizationInvitationsImportHelper = new ImportDatabaseHelper(OrganizationInvitation::class, ['email', 'organization_id'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->where('organization_id', $this->organization->id); }, validate: [ 'email' => [ 'required', 'email', 'max:255', ], ]); $this->timeEntriesCreated = 0; $this->colorService = app(ColorService::class); $this->timezoneService = app(TimezoneService::class); $this->billableRateService = app(BillableRateService::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(), ); } }