Restructura contabilidad

This commit is contained in:
Juan Pablo Vial
2024-03-26 09:38:20 -03:00
parent 4b3397dd63
commit 5f56022109
57 changed files with 311 additions and 291 deletions

View File

@ -0,0 +1,34 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
class Banco extends Ideal\Repository
{
public function __construct(Define\Connection $connection)
{
parent::__construct($connection);
$this->setTable('banco');
}
public function create(?array $data = null): Define\Model
{
$map = new Implement\Repository\MapperParser(['nombre']);
return $this->parseData(new Model\Contabilidad\Banco(), $data, $map);
}
public function save(Define\Model $model): Define\Model
{
$model->id = $this->saveNew(
['nombre'],
[$model->nombre]
);
return $model;
}
public function edit(Define\Model $model, array $new_data): Define\Model
{
return $this->update($model, ['nombre'], $new_data);
}
}

View File

@ -0,0 +1,78 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use DateTimeInterface;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
use Incoviba\Repository;
class Cartola extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected Repository\Inmobiliaria\Cuenta $cuentaRepository)
{
parent::__construct($connection);
$this->setTable('cartolas');
}
public function create(?array $data = null): Model\Contabilidad\Cartola
{
$map = (new Implement\Repository\MapperParser(['cargos', 'abonos', 'saldo']))
->register('fecha', new Implement\Repository\Mapper\DateTime('fecha'))
->register('cuenta_id', (new Implement\Repository\Mapper())
->setProperty('cuenta')
->setFunction(function($data) {
return $this->cuentaRepository->fetchById($data['cuenta_id']);
}));
return $this->parseData(new Model\Contabilidad\Cartola(), $data, $map);
}
public function save(Define\Model $model): Model\Contabilidad\Cartola
{
$model->id = $this->saveNew([
'cuenta_id',
'fecha',
'cargos',
'abonos',
'saldo'
], [
$model->cuenta->id,
$model->fecha->format('Y-m-d'),
$model->cargos,
$model->abonos,
$model->saldo
]);
return $model;
}
public function edit(Define\Model $model, array $new_data): Model\Contabilidad\Cartola
{
return $this->update($model, ['cuenta_id', 'fecha', 'cargos', 'abonos', 'saldo'], $new_data);
}
public function fetchByFecha(DateTimeInterface $fecha): array
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('fecha = ?');
return $this->fetchMany($query, [$fecha->format('Y-m-d')]);
}
public function fetchByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): Model\Contabilidad\Cartola
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('cuenta_id = ? AND fecha = ?');
return $this->fetchOne($query, [$cuenta_id, $fecha->format('Y-m-d')]);
}
public function fetchLastByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): Model\Contabilidad\Cartola
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('cuenta_id = ? AND fecha <= ?')
->order('fecha DESC')
->limit(1);
return $this->fetchOne($query, [$cuenta_id, $fecha->format('Y-m-d')]);
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use Incoviba\Common\Define;
use Incoviba\Model;
use Incoviba\Repository\Tipo;
class CategoriaCentro extends Tipo
{
public function __construct(Define\Connection $connection)
{
parent::__construct($connection);
$this->setTable('categorias_centros_costos');
}
protected function getBlank(): Define\Model
{
return new Model\Contabilidad\CategoriaCentro();
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement\Repository\Mapper;
use Incoviba\Common\Implement\Repository\MapperParser;
use Incoviba\Model;
use Incoviba\Repository\TipoCuenta;
class CentroCosto extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected TipoCentro $tipoCentroRepository,
protected CategoriaCentro $categoriaCentroRepository,
protected TipoCuenta $tipoCuentaRepository)
{
parent::__construct($connection);
$this->setTable('centros_costos');
}
public function create(?array $data = null): Model\Contabilidad\CentroCosto
{
$map = (new MapperParser(['descripcion']))
->register('tipo_centro_id', (new Mapper())
->setProperty('tipoCentro')
->setFunction(function(array $data) {
return $this->tipoCentroRepository->fetchById($data['tipo_centro_id']);
}))
->register('categoria_id', (new Mapper())
->setProperty('categoria')
->setFunction(function(array $data) {
return $this->categoriaCentroRepository->fetchById($data['categoria_id']);
}))
->register('tipo_cuenta_id', (new Mapper())
->setProperty('tipoCuenta')
->setFunction(function(array $data) {
return $this->tipoCuentaRepository->fetchById($data['tipo_cuenta_id']);
})
->setDefault(null))
->register('cuenta_contable', (new Mapper())
->setProperty('cuentaContable'));
return $this->parseData(new Model\Contabilidad\CentroCosto(), $data, $map);
}
public function save(Define\Model $model): Model\Contabilidad\CentroCosto
{
$this->saveNew(
['id', 'tipo_centro_id', 'categoria_id', 'tipo_cuenta_id', 'cuenta_contable', 'descripcion'],
[$model->id, $model->tipoCentro->id, $model->categoria->id, $model->tipoCuenta?->id, $model->cuentaContable, $model->descripcion]
);
return $model;
}
public function edit(Define\Model $model, array $new_data): Model\Contabilidad\CentroCosto
{
return $this->update($model, ['tipo_centro_id', 'categoria_id', 'tipo_cuenta_id', 'cuenta_contable', 'descripcion'], $new_data);
}
public function fetchByDescripcion(string $descripcion): Model\Contabilidad\CentroCosto
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('descripcion LIKE ?');
return $this->fetchOne($query, [$descripcion]);
}
public function fetchByTipoCuenta(string $tipo_cuenta): array
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('tipo_cuenta_id LIKE ?');
return $this->fetchMany($query, [$tipo_cuenta]);
}
public function fetchByCategoria(string $categoria): array
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('categoria_id LIKE ?');
return $this->fetchMany($query, [$categoria]);
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use DateTimeImmutable;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
use Incoviba\Repository;
class Deposito extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected Repository\Inmobiliaria\Cuenta $cuentaRepository)
{
parent::__construct($connection);
$this->setTable('depositos');
}
public function create(?array $data = null): Model\Contabilidad\Deposito
{
$map = (new Implement\Repository\MapperParser(['id', 'capital', 'futuro']))
->register('cuenta_id', (new Implement\Repository\Mapper())
->setProperty('cuenta')
->setFunction(function(array $data) {
return $this->cuentaRepository->fetchById($data['cuenta_id']);
}))
->register('inicio', new Implement\Repository\Mapper\DateTime('inicio'))
->register('termino', new Implement\Repository\Mapper\DateTime('termino'));
return $this->parseData(new Model\Contabilidad\Deposito(), $data, $map);
}
public function save(Define\Model $model): Model\Contabilidad\Deposito
{
$this->saveNew([
'id', 'cuenta_id', 'capital', 'futuro', 'inicio', 'termino'
], [
$model->id, $model->cuenta->id, $model->capital, $model->futuro,
$model->inicio->format('Y-m-d'), $model->termino->format('Y-m-d')
]);
return $model;
}
public function edit(Define\Model $model, array $new_data): Model\Contabilidad\Deposito
{
return $this->update($model, ['cuenta_id', 'capital', 'futuro', 'inicio', 'termino'], $new_data);
}
public function fetchByCuenta(int $cuenta_id): array
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('cuenta_id = ?');
return $this->fetchMany($query, [$cuenta_id]);
}
public function fetchAllActive(): array
{
$fecha = new DateTimeImmutable();
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('inicio <= ? AND termino >= ?');
return $this->fetchMany($query, [$fecha->format('Y-m-d'), $fecha->format('Y-m-d')]);
}
}

View File

@ -0,0 +1,73 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use DateTimeInterface;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
use Incoviba\Repository\Inmobiliaria;
class Movimiento extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected Inmobiliaria\Cuenta $cuentaRepository)
{
parent::__construct($connection);
$this->setTable('movimientos');
}
public function create(?array $data = null): Model\Contabilidad\Movimiento
{
$map = (new Implement\Repository\MapperParser(['cargo', 'abono', 'saldo', 'glosa', 'documento']))
->register('fecha', new Implement\Repository\Mapper\DateTime('fecha'))
->register('cuenta_id', (new Implement\Repository\Mapper())
->setProperty('cuenta')
->setFunction(function($data) {
return $this->cuentaRepository->fetchById($data['cuenta_id']);
})
);
return $this->parseData(new Model\Contabilidad\Movimiento(), $data, $map);
}
public function save(Define\Model $model): Model\Contabilidad\Movimiento
{
$model->id = $this->saveNew([
'cuenta_id',
'fecha',
'glosa',
'documento',
'cargo',
'abono',
'saldo'
], [
$model->cuenta->id,
$model->fecha->format('Y-m-d'),
$model->glosa,
$model->documento,
$model->cargo,
$model->abono,
$model->saldo
]);
return $model;
}
public function edit(Define\Model $model, array $new_data): Model\Contabilidad\Movimiento
{
return $this->update($model, ['cuenta_id', 'fecha', 'glosa', 'documento', 'cargo', 'abono', 'saldo'], $new_data);
}
public function fetchByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): array
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('cuenta_id = ? AND fecha = ?');
return $this->fetchMany($query, [$cuenta_id, $fecha->format('Y-m-d')]);
}
public function fetchByCuentaAndFechaAndCargoAndAbonoAndSaldo(int $cuenta_id, DateTimeInterface $fecha, int $cargo, int $abono, int $saldo): Model\Contabilidad\Movimiento
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('cuenta_id = ? AND fecha = ? AND cargo = ? AND abono = ? AND saldo = ?');
return $this->fetchOne($query, [$cuenta_id, $fecha->format('Y-m-d'), $cargo, $abono, $saldo]);
}
}

View File

@ -0,0 +1,56 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
use Incoviba\Repository\Inmobiliaria;
class Nubox extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected Inmobiliaria $inmobiliariaRepository)
{
parent::__construct($connection);
$this->setTable('inmobiliarias_nubox');
}
public function create(?array $data = null): Model\Contabilidad\Nubox
{
$map = (new Implement\Repository\MapperParser(['usuario', 'alias']))
->register('inmobiliaria_rut', (new Implement\Repository\Mapper())
->setProperty('inmobiliaria')
->setFunction(function(array $data) {
return $this->inmobiliariaRepository->fetchById($data['inmobiliaria_rut']);
}))
->register('contraseña', (new Implement\Repository\Mapper())
->setProperty('password'));
return $this->parseData(new Model\Contabilidad\Nubox(), $data, $map);
}
public function save(Define\Model $model): Model\Contabilidad\Nubox
{
$this->saveNew(
['inmobiliaria_rut', 'alias', 'usuario', 'contraseña'],
[$model->inmobiliaria->rut, $model->alias, $model->usuario, $model->password]
);
return $model;
}
public function edit(Define\Model $model, array $new_data): Model\Contabilidad\Nubox
{
return $this->update($model, ['inmobiliaria_rut', 'alias', 'usuario', 'contraseña'], $new_data);
}
public function fetchByInmobiliaria(int $inmobiliaria_rut): Model\Contabilidad\Nubox
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('inmobiliaria_rut = ?');
return $this->fetchOne($query, [$inmobiliaria_rut]);
}
protected function getKey(): string
{
return 'inmobiliaria_rut';
}
}

View File

@ -0,0 +1,42 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement;
use Incoviba\Model;
use Incoviba\Repository;
class PagoCentroCosto extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected Repository\Venta\Pago $pagoRepository, protected CentroCosto $centroCostoRepository)
{
parent::__construct($connection);
$this->setTable('pagos_centros_costos');
}
public function create(?array $data = null): Model\Contabilidad\PagoCentroCosto
{
$map = (new Implement\Repository\MapperParser())
->register('pago_id', (new Implement\Repository\Mapper())
->setProperty('pago')
->setFunction(function(array $data) {
return $this->pagoRepository->fetchById($data['pago_id']);
}))
->register('centro_costo_id', (new Implement\Repository\Mapper())
->setProperty('centroCosto')
->setFunction(function(array $data) {
return $this->centroCostoRepository->fetchById($data['centro_costo_id']);
}));
return $this->parseData(new Model\Contabilidad\PagoCentroCosto(), $data, $map);
}
public function save(Define\Model $model): Model\Contabilidad\PagoCentroCosto
{
$model->id = $this->saveNew(['pago_id', 'centro_costo_id'], [$model->pago->id, $model->centroCosto->id]);
return $model;
}
public function edit(Define\Model $model, array $new_data): Model\Contabilidad\PagoCentroCosto
{
return $this->update($model, ['pago_id', 'centro_costo_id'], $new_data);
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace Incoviba\Repository\Contabilidad;
use Incoviba\Common\Define;
use Incoviba\Model;
use Incoviba\Repository\Tipo;
class TipoCentro extends Tipo
{
public function __construct(Define\Connection $connection)
{
parent::__construct($connection);
$this->setTable('tipos_centros_costos');
}
protected function getBlank(): Define\Model
{
return new Model\Contabilidad\TipoCentro();
}
}