diff --git a/src/Command/ImportTimesheetCommand.php b/src/Command/ImportTimesheetCommand.php index e81e4f58..d47c1541 100644 --- a/src/Command/ImportTimesheetCommand.php +++ b/src/Command/ImportTimesheetCommand.php @@ -21,6 +21,7 @@ use App\Importer\UnknownUserException; use App\Repository\ActivityRepository; use App\Repository\CustomerRepository; use App\Repository\ProjectRepository; +use App\Repository\TagRepository; use App\Repository\TimesheetRepository; use App\Repository\UserRepository; use App\Utils\Duration; @@ -79,6 +80,10 @@ class ImportTimesheetCommand extends Command * @var UserRepository */ private $users; + /** + * @var TagRepository + */ + private $tagRepository; /** * @var TimesheetRepository */ @@ -116,13 +121,14 @@ class ImportTimesheetCommand extends Command */ private $begin = self::DEFAULT_BEGIN; - public function __construct(CustomerRepository $customers, ProjectRepository $projects, ActivityRepository $activities, UserRepository $users, TimesheetRepository $timesheets, FormConfiguration $configuration) + public function __construct(CustomerRepository $customers, ProjectRepository $projects, ActivityRepository $activities, UserRepository $users, TagRepository $tagRepository, TimesheetRepository $timesheets, FormConfiguration $configuration) { parent::__construct(); $this->customers = $customers; $this->projects = $projects; $this->activities = $activities; $this->users = $users; + $this->tagRepository = $tagRepository; $this->timesheets = $timesheets; $this->configuration = $configuration; } @@ -309,11 +315,16 @@ class ImportTimesheetCommand extends Command $timesheet->setExported((bool) $record['Exported']); if (!empty($record['Tags'])) { - foreach (explode(',', $record['Tags']) as $tag) { - if (empty($tag)) { + foreach (explode(',', $record['Tags']) as $tagName) { + if (empty($tagName)) { continue; } - $timesheet->addTag((new Tag())->setName($tag)); + + if (null === ($tag = $this->tagRepository->findTagByName($tagName))) { + $tag = (new Tag())->setName($tagName); + } + + $timesheet->addTag($tag); } } diff --git a/tests/Command/ImportTimesheetCommandTest.php b/tests/Command/ImportTimesheetCommandTest.php index dc79f26a..35d18368 100644 --- a/tests/Command/ImportTimesheetCommandTest.php +++ b/tests/Command/ImportTimesheetCommandTest.php @@ -14,6 +14,7 @@ use App\Configuration\FormConfiguration; use App\Repository\ActivityRepository; use App\Repository\CustomerRepository; use App\Repository\ProjectRepository; +use App\Repository\TagRepository; use App\Repository\TimesheetRepository; use App\Repository\UserRepository; use Symfony\Bundle\FrameworkBundle\Console\Application; @@ -39,10 +40,11 @@ class ImportTimesheetCommandTest extends KernelTestCase $projects = $this->createMock(ProjectRepository::class); $activities = $this->createMock(ActivityRepository::class); $users = $this->createMock(UserRepository::class); + $tagRepository = $this->createMock(TagRepository::class); $timesheets = $this->createMock(TimesheetRepository::class); $configuration = $this->createMock(FormConfiguration::class); - $this->application->add(new ImportTimesheetCommand($customers, $projects, $activities, $users, $timesheets, $configuration)); + $this->application->add(new ImportTimesheetCommand($customers, $projects, $activities, $users, $tagRepository, $timesheets, $configuration)); } public function testCommandName()