Consolidar

This commit is contained in:
2022-03-25 10:11:02 -03:00
parent fcc84ac09c
commit e3737aba27
13 changed files with 411 additions and 30 deletions

View File

@ -1,9 +1,7 @@
<?php
namespace Contabilidad;
use DateTimeInterface;
use Carbon\Carbon;
use PhpParser\Node\Expr\AssignOp\Mod;
use ProVM\Common\Alias\Model;
use Contabilidad\Common\Service\TiposCambios as Service;
@ -54,7 +52,34 @@ class Cuenta extends Model {
}
return $this->abonos;
}
protected $consolidados;
public function consolidados() {
if ($this->consolidados === null) {
$this->consolidados = $this->parentOf(Consolidado::class, [Model::CHILD_KEY => 'cuenta_id']);
}
return $this->consolidados;
}
public function hasConsolidados(): bool {
return (bool) Model::factory(Consolidado::class)
->whereEqual('cuenta_id', $this->id)
->count('id');
}
public function hasTransacciones(): bool {
return (bool) Model::factory(Transaccion::class)
->select('transacciones.*')
->join('cuentas', 'cuentas.id = transacciones.debito_id OR cuentas.id = transacciones.credito_id')
->whereEqual('cuentas.id', $this->id)
->count('transacciones.id');
}
protected $transacciones;
protected function parseTransaccion(Transaccion $transaccion) {
$transaccion->setFactory($this->factory);
if ($transaccion->debito_id === $this->id) {
$transaccion->valor = - $transaccion->valor;
}
$transaccion->valor = $transaccion->transformar($this->moneda());
return $transaccion;
}
public function transacciones($limit = null, $start = 0) {
$transacciones = Model::factory(Transaccion::class)
->select('transacciones.*')
@ -67,10 +92,7 @@ class Cuenta extends Model {
}
$transacciones = $transacciones->findMany();
foreach ($transacciones as &$transaccion) {
$transaccion->setFactory($this->factory);
if ($transaccion->debito_id === $this->id) {
$transaccion->valor = - $transaccion->valor;
}
$transaccion = $this->parseTransaccion($transaccion);
}
return $transacciones;
}
@ -87,30 +109,21 @@ class Cuenta extends Model {
$transacciones = $transacciones->findMany();
foreach ($transacciones as &$transaccion) {
$transaccion->setFactory($this->factory);
if ($transaccion->desde_id === $this->id) {
$transaccion->valor = - $transaccion->valor;
}
$transaccion = $this->parseTransaccion($transaccion);
}
return $transacciones;
}
public function acumulacion(Carbon $date) {
$abonos = Model::factory(Transaccion::class)
->whereEqual('credito_id', $this->id)
->whereLt('fecha', $date->format('Y-m-d'))
->groupBy('credito_id')
->sum('valor');
$cargos = Model::factory(Transaccion::class)
->whereEqual('debito_id', $this->id)
->whereLt('fecha', $date->format('Y-m-d'))
->groupBy('debito_id')
->sum('valor');
if (in_array($this->tipo()->descripcion, ['activo', 'banco', 'perdida'])) {
return $abonos - $cargos;
$consolidados = $this->consolidados();
$saldo = 0;
foreach ($consolidados as $consolidado) {
if ($consolidado->fecha() >= $date) {
continue;
}
$saldo += $consolidado->saldo($date);
}
return $cargos - $abonos;
return $saldo;
}
protected $saldo;
public function saldo(Service $service = null, $in_clp = false) {