protected function execute(InputInterface $input, OutputInterface $output)
 {
     $projectResource = new ProjectResource($this->sourceClient);
     $wavesResource = new WaveResource($this->sourceClient);
     $result = $wavesResource->getList();
     foreach ($result['items'] as $idx => $wave) {
         $data[] = ['wave_id' => $wave['id'], 'task_count' => $wave['task_count'], 'survey' => '', 'questions' => '', 'payment' => isset($wave['reward']) ? $wave['reward'] : '', 'max_assignments' => ''];
     }
     $table = new Table($output);
     $table->setHeaders(['wave_id', 'task_id', 'survey', 'questions', 'payment', 'max_assignments'])->setRows($data);
     $table->render();
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $isVerbose = $output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE;
     $sourceProjectCode = $input->getOption('source-project-code');
     $targetProjectCode = $input->getOption('target-project-code');
     $sourceProjectResource = new ProjectResource($this->sourceClient);
     $projectResource = new ProjectResource($this->client);
     $sourceProject = $sourceProjectResource->getByCode($sourceProjectCode);
     $targetProject = $projectResource->getByCode($targetProjectCode);
     if (!$sourceProject) {
         $output->writeln("<error>Project '{$sourceProjectCode}' not found</error>");
         exit;
     }
     if (!$targetProject) {
         $output->writeln("<error>Project '{$targetProjectCode}' not found</error>");
         exit;
     }
     if (!$targetProjectCode) {
         $targetProjectCode = $sourceProjectCode;
     }
     $sourceWaveId = $input->getOption('source-wave-id');
     $targetJobCode = $input->getOption('target-job-code');
     $jobResource = new JobResource($this->client);
     /** @type WaveResource $fromWaveResource */
     $fromWaveResource = new WaveResource($this->sourceClient);
     /** @type WaveResource $toWaveResource */
     $toWaveResource = new WaveResource($this->client);
     try {
         $wave = $fromWaveResource->getById($sourceWaveId);
     } catch (\Exception $e) {
         if (!isset($wave)) {
             $output->writeln("<error>Wave #{$sourceWaveId} not found</error>");
             exit;
         }
     }
     // if no target job code set - use current job
     if (!$targetJobCode) {
         $targetJobCode = $wave['job_code'];
     }
     $job = $jobResource->getOneBy(['code' => $targetJobCode], ['project_code' => $targetProject['code']]);
     if (!$job) {
         throw new \Exception("job '{$targetJobCode}' not found in project '{$targetProject['code']}'");
     }
     // update target job ID
     // find job ID, then update wave data
     $this->processWaveFields($wave, $job);
     $response = $toWaveResource->save($wave);
     $output->writeln("Wave {$response['code']} #{$response['id']} transferred");
 }