bancos[$name] = $banco; return $this; } public function process(Model\Inmobiliaria $inmobiliaria, Model\Banco $banco, DateTimeInterface $mes, UploadedFileInterface $file): array { return $this->bancos[strtolower($banco->nombre)]->process($file); } public function export(Model\Inmobiliaria $inmobiliaria, Model\Banco $banco, DateTimeInterface $mes, array $movimientos): string { return $this->exporter->export($inmobiliaria, $banco, $mes, $movimientos); } public function diaria(Model\Inmobiliaria $inmobiliaria, Model\Banco $banco, DateTimeInterface $fecha, UploadedFileInterface $file): array { $cuenta = $this->cuentaRepository->fetchByInmobiliariaAndBanco($inmobiliaria->rut, $banco->id); $ms = $this->bancos[strtolower($banco->nombre)]->process($file); $ms = array_reverse($ms); $c = array_shift($ms); $cargos = 0; $abonos = 0; $saldo = $c['saldo']; $movimientos = []; foreach ($ms as $m) { $m['cuenta_id'] = $cuenta->id; try { $movimiento = $this->movimientoRepository ->fetchByCuentaAndFechaAndMonto( $cuenta->id, new DateTimeImmutable($m['fecha']), $m['cargo'] ?? $m['abono'] ); } catch (Exception\EmptyResult) { $movimiento = $this->movimientoRepository->create($m); $movimiento = $this->movimientoRepository->save($movimiento); } $movimientos []= $movimiento; if ($movimiento->fecha === $fecha) { $cargos += $movimiento->cargo; $abonos += $movimiento->abono; } $saldo = $m['saldo']; } try { $cartola = $this->cartolaRepository->fetchByCuentaAndFecha($cuenta->id, $fecha); } catch (Exception\EmptyResult) { $cartola = $this->cartolaRepository->create([ 'cuenta_id' => $cuenta->id, 'fecha' => $fecha->format('Y-m-d'), 'cargos' => $cargos, 'abonos' => $abonos, 'saldo' => $saldo ]); $cartola = $this->cartolaRepository->save($cartola); } return compact('cartola', 'movimientos'); } }