handleFile($file); $temp = []; $columns = $this->columnMap(); foreach ($data as $row) { $r = []; foreach ($columns as $old => $new) { if (!isset($row[$old])) { continue; } $r[$new] = $row[$old]; } $temp []= $r; } return $temp; } /** * There are banks that need some post-processing * @param array $movimientos * @return array */ public function processMovimientosDiarios(array $movimientos): array { return $movimientos; } /** * Move the UploadedFile into a temp file from getFilename and after parseFile remove temp file * @param UploadedFileInterface $uploadedFile * @return array */ protected function handleFile(UploadedFileInterface $uploadedFile): array { $filename = $this->getFilename($uploadedFile); $uploadedFile->moveTo($filename); $data = $this->parseFile($filename); unlink($filename); return $data; } /** * Get filename where to move UploadedFile * @param UploadedFileInterface $uploadedFile * @return string */ abstract protected function getFilename(UploadedFileInterface $uploadedFile): string; /** * Mapping of uploaded file data columns to database columns * @return array */ abstract protected function columnMap(): array; /** * Translate uploaded file data to database data * @param string $filename * @return array */ abstract protected function parseFile(string $filename): array; }