Identificar movimientos nuevos y obsoletos
This commit is contained in:
@ -99,4 +99,18 @@ class Movimiento extends Ideal\Repository
|
||||
}
|
||||
return $this->fetchMany($query, [$sociedad_rut, $mes->format('Y-m-01'), $mes->format('Y-m-t')]);
|
||||
}
|
||||
public function fetchMissingInDateRange(int $cuenta_id, DateTimeInterface $startDate, DateTimeInterface $endDate, array $idList = []): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select()
|
||||
->from($this->getTable())
|
||||
->where('cuenta_id = ? AND fecha BETWEEN ? AND ?');
|
||||
if (count($idList) > 0) {
|
||||
$idString = implode(', ', array_map(function(int $id) {
|
||||
return $this->connection->getPDO()->quote($id);
|
||||
}, $idList));
|
||||
$query->where("id NOT IN ({$idString})");
|
||||
}
|
||||
return $this->fetchMany($query, [$cuenta_id, $startDate->format('Y-m-d'), $endDate->format('Y-m-d')]);
|
||||
}
|
||||
}
|
||||
|
@ -91,12 +91,16 @@ 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) {
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
|
||||
$addedMovimientos = [];
|
||||
foreach ($movimientos as &$dataMovimiento) {
|
||||
$dataMovimiento['cuenta_id'] = $cuenta->id;
|
||||
if (array_key_exists('centro_costo', $dataMovimiento) and $dataMovimiento['centro_costo'] !== 0) {
|
||||
$dataMovimiento['centro_costo_id'] = $dataMovimiento['centro_costo'];
|
||||
@ -112,10 +116,20 @@ class Cartola extends Service
|
||||
$dataMovimiento['digito'] = $ruts[0]['digito'];
|
||||
}
|
||||
}
|
||||
$this->movimientoService->add($dataMovimiento);
|
||||
try {
|
||||
$movimiento = $this->movimientoRepository
|
||||
->fetchByCuentaAndFechaAndGlosaAndCargoAndAbonoAndSaldo($dataMovimiento['cuenta_id'], $dataMovimiento['fecha'],
|
||||
$dataMovimiento['glosa'], $dataMovimiento['cargo'] ?? 0,
|
||||
$dataMovimiento['abono'] ?? 0, $dataMovimiento['saldo']);
|
||||
} catch (Exception\EmptyResult) {
|
||||
$movimiento = $this->movimientoService->add($dataMovimiento);
|
||||
$dataMovimiento['nuevo'] = true;
|
||||
}
|
||||
$dataMovimiento['sociedad'] = $inmobiliaria;
|
||||
$addedMovimientos []= $movimiento->id;
|
||||
}
|
||||
$fechas = array_unique(array_map(function($movimiento) {
|
||||
return $movimiento['fecha'];
|
||||
return $movimiento['fecha']->format('Y-m-d');
|
||||
}, $movimientos));
|
||||
foreach ($fechas as $dia) {
|
||||
try {
|
||||
@ -140,11 +154,20 @@ class Cartola extends Service
|
||||
$this->buildCartola($cuenta, new DateTimeImmutable($dia), $cartolaData);
|
||||
}
|
||||
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
return array_map(function($movimiento) use ($inmobiliaria) {
|
||||
$movimiento['sociedad'] = $inmobiliaria;
|
||||
return $movimiento;
|
||||
}, $movimientos);
|
||||
$startDate = new DateTimeImmutable(min($fechas));
|
||||
$endDate = new DateTimeImmutable(max($fechas));
|
||||
$movimientosFaltantes = $this->movimientoService->findMissing($cuenta, $addedMovimientos, $startDate, $endDate);
|
||||
$movimientosObsoletos = [];
|
||||
if (count($movimientosFaltantes) > 0) {
|
||||
$movimientosObsoletos = array_map(function(&$movimiento) {
|
||||
$arr = (array) $movimiento;
|
||||
$arr['sociedad'] = $movimiento->cuenta->inmobiliaria;
|
||||
$arr['obsoleto'] = true;
|
||||
return $arr;
|
||||
}, $movimientosFaltantes);
|
||||
}
|
||||
|
||||
return array_merge($movimientos, $movimientosObsoletos);
|
||||
}
|
||||
public function check(): array
|
||||
{
|
||||
|
@ -85,6 +85,14 @@ class Movimiento extends Service
|
||||
{
|
||||
return $this->detalleService->findRut($rut);
|
||||
}
|
||||
public function findMissing(Model\Inmobiliaria\Cuenta $cuenta, array $currentIdList, DateTimeInterface $startDate, DateTimeInterface $endDate): array
|
||||
{
|
||||
try {
|
||||
return $this->movimientoRepository->fetchMissingInDateRange($cuenta->id, $startDate, $endDate, $currentIdList);
|
||||
} catch (EmptyResult) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
public function process(Model\Contabilidad\Movimiento $movimiento): Model\Contabilidad\Movimiento
|
||||
{
|
||||
|
Reference in New Issue
Block a user