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\Ideal\Controller;
|
||||||
use Incoviba\Common\Implement\Exception\EmptyResult;
|
use Incoviba\Common\Implement\Exception\EmptyResult;
|
||||||
use Incoviba\Controller\API\withJson;
|
use Incoviba\Controller\API\withJson;
|
||||||
use Incoviba\Model\Inmobiliaria;
|
|
||||||
use Incoviba\Repository;
|
use Incoviba\Repository;
|
||||||
use Incoviba\Service;
|
use Incoviba\Service;
|
||||||
|
|
||||||
@ -97,62 +96,47 @@ class Cartolas extends Controller
|
|||||||
return $this->withJson($response, $output);
|
return $this->withJson($response, $output);
|
||||||
}
|
}
|
||||||
public function importar(ServerRequestInterface $request, ResponseInterface $response,
|
public function importar(ServerRequestInterface $request, ResponseInterface $response,
|
||||||
Repository\Inmobiliaria\Cuenta $cuentaRepository,
|
Service\Contabilidad\Cartola $cartolaService): ResponseInterface
|
||||||
Service\Contabilidad\Cartola $cartolaService,
|
|
||||||
Service\Contabilidad\Movimiento $movimientoService): ResponseInterface
|
|
||||||
{
|
{
|
||||||
$body = $request->getParsedBody();
|
$body = $request->getParsedBody();
|
||||||
$files = $request->getUploadedFiles();
|
$files = $request->getUploadedFiles();
|
||||||
|
|
||||||
$output = [
|
$output = [
|
||||||
'input' => $body,
|
'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'])) {
|
if (is_array($files['file'])) {
|
||||||
foreach ($files['file'] as $i => $file) {
|
foreach ($files['file'] as $i => $file) {
|
||||||
if ($file->getError() !== UPLOAD_ERR_OK) {
|
if ($file->getError() !== UPLOAD_ERR_OK) {
|
||||||
|
$output['errors'] []= ['filename' => $file->getClientFilename(), 'error' => $errors[$file->getError()]];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$cuenta = $cuentaRepository->fetchById($body['cuenta_id'][$i]);
|
$output['movimientos'] = array_merge($output['movimientos'], $cartolaService->import($body['cuenta_id'][$i], $file));
|
||||||
$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));
|
|
||||||
} catch (EmptyResult) {}
|
} catch (EmptyResult) {}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
$file = $files['file'];
|
||||||
$cuenta = $cuentaRepository->fetchById($body['cuenta_id']);
|
if ($file->getError() !== UPLOAD_ERR_OK) {
|
||||||
$movimientos = $cartolaService->process($cuenta->banco, $files['file']);
|
$output['errors'][] = ['filename' => $file->getClientFilename(), 'error' => $errors[$file->getError()]];
|
||||||
$this->addMovimientos($movimientoService, $cuenta, $movimientos);
|
} else {
|
||||||
$inmobiliaria = $cuenta->inmobiliaria;
|
try {
|
||||||
$output['movimientos'] = array_map(function($movimiento) use ($inmobiliaria) {
|
$output['movimientos'] = $cartolaService->import($body['cuenta_id'], $file);
|
||||||
$movimiento['sociedad'] = $inmobiliaria;
|
} catch (EmptyResult) {}
|
||||||
return $movimiento;
|
}
|
||||||
}, $movimientos);
|
|
||||||
} catch (EmptyResult) {}
|
|
||||||
}
|
}
|
||||||
return $this->withJson($response, $output);
|
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);
|
$cartola = $this->buildCartola($cuenta, $fecha, $cartolaData);
|
||||||
return compact('cartola', 'movimientos');
|
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
|
protected function getMovimientosDiarios(Model\Contabilidad\Banco $banco, UploadedFileInterface $file): array
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user