Ejemplo n.º 1
0
 /**
  * Run the actual import
  *
  * @return Collection
  */
 public function createImportEntries() : Collection
 {
     $config = $this->job->configuration;
     $content = $this->job->uploadFileContents();
     // create CSV reader.
     $reader = Reader::createFromString($content);
     $reader->setDelimiter($config['delimiter']);
     $start = $config['has-headers'] ? 1 : 0;
     $results = $reader->fetch();
     Log::notice('Building importable objects from CSV file.');
     foreach ($results as $index => $row) {
         if ($index >= $start) {
             $line = $index + 1;
             Log::debug('----- import entry build start --');
             Log::debug(sprintf('Now going to import row %d.', $index));
             $importEntry = $this->importSingleRow($index, $row);
             $this->collection->put($line, $importEntry);
             /**
              * 1. Build import entry.
              * 2. Validate import entry.
              * 3. Store journal.
              * 4. Run rules.
              */
             $this->job->addTotalSteps(4);
             $this->job->addStepsDone(1);
         }
     }
     Log::debug(sprintf('Import collection contains %d entries', $this->collection->count()));
     Log::notice(sprintf('Built %d importable object(s) from your CSV file.', $this->collection->count()));
     return $this->collection;
 }
Ejemplo n.º 2
0
 /**
  * @return array
  */
 private function getDataForColumnRoles() : array
 {
     $config = $this->job->configuration;
     $data = ['columns' => [], 'columnCount' => 0];
     // show user column role configuration.
     $content = $this->job->uploadFileContents();
     // create CSV reader.
     $reader = Reader::createFromString($content);
     $reader->setDelimiter($config['delimiter']);
     $start = $config['has-headers'] ? 1 : 0;
     $end = $start + config('csv.example_rows');
     // collect example data in $data['columns']
     while ($start < $end) {
         $row = $reader->fetchOne($start);
         // run specifics here:
         // and this is the point where the specifix go to work.
         foreach ($config['specifics'] as $name => $enabled) {
             /** @var SpecificInterface $specific */
             $specific = app('FireflyIII\\Import\\Specifics\\' . $name);
             // it returns the row, possibly modified:
             $row = $specific->run($row);
         }
         foreach ($row as $index => $value) {
             $value = trim($value);
             if (strlen($value) > 0) {
                 $data['columns'][$index][] = $value;
             }
         }
         $start++;
         $data['columnCount'] = count($row) > $data['columnCount'] ? count($row) : $data['columnCount'];
     }
     // make unique example data
     foreach ($data['columns'] as $index => $values) {
         $data['columns'][$index] = array_unique($values);
     }
     $data['set_roles'] = [];
     // collect possible column roles:
     $data['available_roles'] = [];
     foreach (array_keys(config('csv.import_roles')) as $role) {
         $data['available_roles'][$role] = trans('csv.column_' . $role);
     }
     $config['column-count'] = $data['columnCount'];
     $this->job->configuration = $config;
     $this->job->save();
     return $data;
 }