Guardar factura
This commit is contained in:
@ -9,10 +9,12 @@ use Incoviba\Common\Implement;
|
||||
use Incoviba\Common\Implement\Exception\EmptyResult;
|
||||
use Incoviba\Model;
|
||||
use Incoviba\Repository;
|
||||
use Incoviba\Service;
|
||||
|
||||
class Factura extends Ideal\Repository
|
||||
{
|
||||
public function __construct(Implement\Connection $connection, protected Repository\Venta $ventaRepository,
|
||||
protected Service\Persona $personaService,
|
||||
protected Repository\Persona $personaRepository, protected Unidad $unidadRepository)
|
||||
{
|
||||
parent::__construct($connection);
|
||||
@ -30,31 +32,67 @@ class Factura extends Ideal\Repository
|
||||
->register('cliente_rut', (new Implement\Repository\Mapper())
|
||||
->setProperty('cliente')
|
||||
->setFunction(function($data) {
|
||||
return $this->personaRepository->fetchById($data['cliente_rut']);
|
||||
return $this->personaService->getById($data['cliente_rut']);
|
||||
}));
|
||||
$factura = $this->parseData(new Model\Venta\Factura(), $data, $map);
|
||||
return $this->createDatos($factura);
|
||||
return $this->createDatos($factura, $data);
|
||||
}
|
||||
public function createDatos(Model\Venta\Factura &$factura): Model\Venta\Factura
|
||||
public function createDatos(Model\Venta\Factura &$factura, ?array $data = null): Model\Venta\Factura
|
||||
{
|
||||
try {
|
||||
$result = $this->getDatos($factura->venta->id);
|
||||
$factura->fecha = new DateTimeImmutable($result['fecha']);
|
||||
$factura->uf = json_decode($result['uf']);
|
||||
$factura->uf->fecha = new DateTimeImmutable($factura->uf->fecha);
|
||||
$factura->ipc = json_decode($result['ipc']);
|
||||
$factura->ipc->fecha = new DateTimeImmutable($factura->ipc->fecha);
|
||||
$factura->unidades = array_map(function($datos) use ($factura) {
|
||||
$unidad = $this->unidadRepository->fetchById($datos->unidad_id);
|
||||
return (object) [
|
||||
'unidad' => $unidad,
|
||||
'descripcion' => implode(' ', [ucwords($unidad->proyectoTipoUnidad->tipoUnidad->descripcion), $unidad->descripcion]),
|
||||
'precio' => $datos->precio,
|
||||
'prorrateo' => $datos->prorrateo
|
||||
];
|
||||
}, json_decode($result['unidades']));
|
||||
$factura->terreno = $result['terreno'];
|
||||
} catch (EmptyResult) {}
|
||||
if ($result['fecha'] !== null) {
|
||||
$factura->fecha = new DateTimeImmutable($result['fecha']);
|
||||
}
|
||||
if ($result['uf'] !== null) {
|
||||
$factura->uf = json_decode($result['uf']);
|
||||
$factura->uf->fecha = new DateTimeImmutable($factura->uf->fecha);
|
||||
}
|
||||
if ($result['ipc'] !== null) {
|
||||
$factura->ipc = json_decode($result['ipc']);
|
||||
$factura->ipc->fecha = new DateTimeImmutable($factura->ipc->fecha);
|
||||
}
|
||||
if ($result['unidades'] !== null) {
|
||||
$factura->unidades = array_map(function($datos) use ($factura) {
|
||||
$unidad = $this->unidadRepository->fetchById($datos->unidad_id);
|
||||
return (object) [
|
||||
'unidad' => $unidad,
|
||||
'descripcion' => implode(' ', [ucwords($unidad->proyectoTipoUnidad->tipoUnidad->descripcion), $unidad->descripcion]),
|
||||
'precio' => $datos->precio,
|
||||
'prorrateo' => $datos->prorrateo
|
||||
];
|
||||
}, json_decode($result['unidades']));
|
||||
}
|
||||
if ($result['terreno'] !== null) {
|
||||
$factura->terreno = $result['terreno'];
|
||||
}
|
||||
} catch (EmptyResult) {
|
||||
if (isset($data['fecha'])) {
|
||||
$factura->fecha = new DateTimeImmutable($data['fecha']);
|
||||
}
|
||||
if (isset($data['uf'])) {
|
||||
$factura->uf = json_decode($data['uf']);
|
||||
$factura->uf->fecha = new DateTimeImmutable($factura->uf->fecha);
|
||||
}
|
||||
if (isset($data['ipc'])) {
|
||||
$factura->ipc = json_decode($data['ipc']);
|
||||
$factura->ipc->fecha = new DateTimeImmutable($factura->ipc->fecha);
|
||||
}
|
||||
if (isset($data['unidades'])) {
|
||||
$factura->unidades = array_map(function($datos) use ($factura) {
|
||||
$unidad = $this->unidadRepository->fetchById($datos->unidad_id);
|
||||
return (object) [
|
||||
'unidad' => $unidad,
|
||||
'descripcion' => implode(' ', [ucwords($unidad->proyectoTipoUnidad->tipoUnidad->descripcion), $unidad->descripcion]),
|
||||
'precio' => $datos->precio,
|
||||
'prorrateo' => $datos->prorrateo
|
||||
];
|
||||
}, json_decode($data['unidades']));
|
||||
}
|
||||
if (isset($data['terreno'])) {
|
||||
$factura->terreno = (int) $data['terreno'];
|
||||
}
|
||||
}
|
||||
|
||||
return $factura;
|
||||
}
|
||||
@ -93,20 +131,27 @@ class Factura extends Ideal\Repository
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->insert()
|
||||
->into('venta_datos_facturas')
|
||||
->columns([
|
||||
'venta_id',
|
||||
'fecha',
|
||||
'unidades',
|
||||
'terreno',
|
||||
'uf',
|
||||
'ipc'
|
||||
])
|
||||
->values([
|
||||
'venta_id' => $factura->venta->id,
|
||||
'index' => $factura->index,
|
||||
'proporcion' => $factura->proporcion,
|
||||
'unidades' => json_encode(array_map(function($unidad) {
|
||||
'fecha' => $factura->fecha?->format('Y-m-d'),
|
||||
'unidades' => (isset($factura->unidades)) ? json_encode(array_map(function($unidad) {
|
||||
return [
|
||||
'unidad_id' => $unidad->unidad->id,
|
||||
'precio' => $unidad->precio,
|
||||
'prorrateo' => $unidad->prorrateo
|
||||
];
|
||||
}, $factura->unidades)),
|
||||
'terreno' => $factura->terreno,
|
||||
'uf' => json_encode($factura->uf),
|
||||
'ipc' => json_encode($factura->ipc)
|
||||
}, $factura?->unidades)) : null,
|
||||
'terreno' => $factura?->terreno,
|
||||
'uf' => (isset($factura->uf)) ? json_encode(['fecha' => $factura->uf?->fecha->format('Y-m-d'), 'valor' => $factura->uf?->valor]) : null,
|
||||
'ipc' => (isset($factura->ipc)) ? json_encode(['fecha' => $factura->ipc?->fecha->format('Y-m-d'), 'valor' => $factura->ipc?->valor]) : null
|
||||
]);
|
||||
$this->connection->execute($query);
|
||||
}
|
||||
|
Reference in New Issue
Block a user