Move Cartola::import into the Service and added errors
This commit is contained in:
@ -7,7 +7,6 @@ use Psr\Http\Message\ServerRequestInterface;
|
||||
use Incoviba\Common\Ideal\Controller;
|
||||
use Incoviba\Common\Implement\Exception\EmptyResult;
|
||||
use Incoviba\Controller\API\withJson;
|
||||
use Incoviba\Model\Inmobiliaria;
|
||||
use Incoviba\Repository;
|
||||
use Incoviba\Service;
|
||||
|
||||
@ -97,62 +96,47 @@ class Cartolas extends Controller
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
public function importar(ServerRequestInterface $request, ResponseInterface $response,
|
||||
Repository\Inmobiliaria\Cuenta $cuentaRepository,
|
||||
Service\Contabilidad\Cartola $cartolaService,
|
||||
Service\Contabilidad\Movimiento $movimientoService): ResponseInterface
|
||||
Service\Contabilidad\Cartola $cartolaService): ResponseInterface
|
||||
{
|
||||
$body = $request->getParsedBody();
|
||||
$files = $request->getUploadedFiles();
|
||||
|
||||
$output = [
|
||||
'input' => $body,
|
||||
'movimientos' => []
|
||||
'movimientos' => [],
|
||||
'errors' => []
|
||||
];
|
||||
|
||||
$errors = [
|
||||
UPLOAD_ERR_OK => 'Ok',
|
||||
UPLOAD_ERR_INI_SIZE => 'El archivo excede el tamaño máximo permitido',
|
||||
UPLOAD_ERR_FORM_SIZE => 'El archivo excede el tamaño máximo permitido',
|
||||
UPLOAD_ERR_PARTIAL => 'El archivo fue subido parcialmente',
|
||||
UPLOAD_ERR_NO_FILE => 'No se subió ningún archivo',
|
||||
UPLOAD_ERR_NO_TMP_DIR => 'Falta la carpeta temporal',
|
||||
UPLOAD_ERR_CANT_WRITE => 'No se pudo escribir el archivo',
|
||||
UPLOAD_ERR_EXTENSION => 'Una extensión de PHP detuvo la subida del archivo'
|
||||
];
|
||||
if (is_array($files['file'])) {
|
||||
foreach ($files['file'] as $i => $file) {
|
||||
if ($file->getError() !== UPLOAD_ERR_OK) {
|
||||
$output['errors'] []= ['filename' => $file->getClientFilename(), 'error' => $errors[$file->getError()]];
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
$cuenta = $cuentaRepository->fetchById($body['cuenta_id'][$i]);
|
||||
$movimientos = $cartolaService->process($cuenta->banco, $file);
|
||||
$this->addMovimientos($movimientoService, $cuenta, $movimientos);
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
$output['movimientos'] = array_merge($output['movimientos'], array_map(function($movimiento) use ($inmobiliaria) {
|
||||
$movimiento['sociedad'] = $inmobiliaria;
|
||||
return $movimiento;
|
||||
}, $movimientos));
|
||||
$output['movimientos'] = array_merge($output['movimientos'], $cartolaService->import($body['cuenta_id'][$i], $file));
|
||||
} catch (EmptyResult) {}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
$cuenta = $cuentaRepository->fetchById($body['cuenta_id']);
|
||||
$movimientos = $cartolaService->process($cuenta->banco, $files['file']);
|
||||
$this->addMovimientos($movimientoService, $cuenta, $movimientos);
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
$output['movimientos'] = array_map(function($movimiento) use ($inmobiliaria) {
|
||||
$movimiento['sociedad'] = $inmobiliaria;
|
||||
return $movimiento;
|
||||
}, $movimientos);
|
||||
} catch (EmptyResult) {}
|
||||
$file = $files['file'];
|
||||
if ($file->getError() !== UPLOAD_ERR_OK) {
|
||||
$output['errors'][] = ['filename' => $file->getClientFilename(), 'error' => $errors[$file->getError()]];
|
||||
} else {
|
||||
try {
|
||||
$output['movimientos'] = $cartolaService->import($body['cuenta_id'], $file);
|
||||
} catch (EmptyResult) {}
|
||||
}
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
|
||||
protected function addMovimientos(Service\Contabilidad\Movimiento $movimientoService, Inmobiliaria\Cuenta $cuenta, array $movimientos): void
|
||||
{
|
||||
foreach ($movimientos as $dataMovimiento) {
|
||||
$dataMovimiento['cuenta_id'] = $cuenta->id;
|
||||
if (array_key_exists('centro_costo', $dataMovimiento)) {
|
||||
$dataMovimiento['centro_costo_id'] = $dataMovimiento['centro_costo'];
|
||||
}
|
||||
$dataMovimiento['fecha'] = new DateTimeImmutable($dataMovimiento['fecha']);
|
||||
if (array_key_exists('rut', $dataMovimiento)) {
|
||||
list($rut, $digito) = explode('-', $dataMovimiento['rut']);
|
||||
$dataMovimiento['rut'] = trim(preg_replace('/\D+/', '', $rut));
|
||||
$dataMovimiento['digito'] = trim($digito);
|
||||
}
|
||||
$movimientoService->add($dataMovimiento);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -91,6 +91,31 @@ class Cartola extends Service
|
||||
$cartola = $this->buildCartola($cuenta, $fecha, $cartolaData);
|
||||
return compact('cartola', 'movimientos');
|
||||
}
|
||||
public function import(int $cuenta_id, UploadedFileInterface $file): array
|
||||
{
|
||||
$cuenta = $this->cuentaRepository->fetchById($cuenta_id);
|
||||
$movimientos = $this->process($cuenta->banco, $file);
|
||||
|
||||
foreach ($movimientos as $dataMovimiento) {
|
||||
$dataMovimiento['cuenta_id'] = $cuenta->id;
|
||||
if (array_key_exists('centro_costo', $dataMovimiento)) {
|
||||
$dataMovimiento['centro_costo_id'] = $dataMovimiento['centro_costo'];
|
||||
}
|
||||
$dataMovimiento['fecha'] = new DateTimeImmutable($dataMovimiento['fecha']);
|
||||
if (array_key_exists('rut', $dataMovimiento)) {
|
||||
list($rut, $digito) = explode('-', $dataMovimiento['rut']);
|
||||
$dataMovimiento['rut'] = trim(preg_replace('/\D+/', '', $rut));
|
||||
$dataMovimiento['digito'] = trim($digito);
|
||||
}
|
||||
$this->movimientoService->add($dataMovimiento);
|
||||
}
|
||||
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
return array_map(function($movimiento) use ($inmobiliaria) {
|
||||
$movimiento['sociedad'] = $inmobiliaria;
|
||||
return $movimiento;
|
||||
}, $movimientos);
|
||||
}
|
||||
|
||||
protected function getMovimientosDiarios(Model\Contabilidad\Banco $banco, UploadedFileInterface $file): array
|
||||
{
|
||||
|
Reference in New Issue
Block a user