Reservations
This commit is contained in:
@ -4,6 +4,7 @@ namespace Incoviba\Repository\Venta;
|
||||
use DateTimeInterface;
|
||||
use DateInterval;
|
||||
use Incoviba\Common\Define;
|
||||
use Incoviba\Exception\Model\InvalidState;
|
||||
use PDO;
|
||||
use Incoviba\Common;
|
||||
use Incoviba\Model;
|
||||
@ -31,12 +32,12 @@ class Reservation extends Common\Ideal\Repository
|
||||
$map = (new Common\Implement\Repository\MapperParser())
|
||||
->register('project_id', (new Common\Implement\Repository\Mapper())
|
||||
->setProperty('project')
|
||||
->setFunction(function($data) use ($data) {
|
||||
->setFunction(function($data) {
|
||||
return $this->proyectoRepository->fetchById($data['project_id']);
|
||||
}))
|
||||
->register('buyer_rut', (new Common\Implement\Repository\Mapper())
|
||||
->setProperty('buyer')
|
||||
->setFunction(function($data) use ($data) {
|
||||
->setFunction(function($data) {
|
||||
return $this->personaRepository->fetchById($data['buyer_rut']);
|
||||
}))
|
||||
->register('date', new Common\Implement\Repository\Mapper\DateTime('date'));
|
||||
@ -98,6 +99,86 @@ class Reservation extends Common\Ideal\Repository
|
||||
->where('buyer_rut = :buyer_rut AND date >= :date');
|
||||
return $this->fetchOne($query, ['buyer_rut' => $buyer_rut, 'date' => $date->sub(new DateInterval('P10D'))->format('Y-m-d')]);
|
||||
}
|
||||
public function fetchByProject(int $project_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select()
|
||||
->from('reservations')
|
||||
->where('project_id = :project_id');
|
||||
return $this->fetchMany($query, ['project_id' => $project_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $project_id
|
||||
* @param int $state
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
* @throws InvalidState
|
||||
*/
|
||||
public function fetchState(int $project_id, int $state): array
|
||||
{
|
||||
if (!in_array($state, Model\Venta\Reservation\State\Type::getTypes())) {
|
||||
throw new InvalidState();
|
||||
}
|
||||
$sub1 = $this->connection->getQueryBuilder()
|
||||
->select('MAX(id) AS id, reservation_id')
|
||||
->from('reservation_states')
|
||||
->group('reservation_id');
|
||||
$sub2 = $this->connection->getQueryBuilder()
|
||||
->select('er1.*')
|
||||
->from('reservation_states er1')
|
||||
->joined("INNER JOIN ({$sub1}) er0 ON er0.id = er1.id");
|
||||
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select()
|
||||
->from('reservations')
|
||||
->joined("INNER JOIN ({$sub2}) er ON er.reservation_id = reservations.id")
|
||||
->where('project_id = :project_id AND er.type = :state');
|
||||
|
||||
return $this->fetchMany($query, ['project_id' => $project_id,
|
||||
'state' => $state]);
|
||||
}
|
||||
/**
|
||||
* @param int $project_id
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchActive(int $project_id): array
|
||||
{
|
||||
try {
|
||||
return $this->fetchState($project_id, Model\Venta\Reservation\State\Type::ACTIVE->value);
|
||||
} catch (InvalidState $exception) {
|
||||
throw new Common\Implement\Exception\EmptyResult('Select active reservations', $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $project_id
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchPending(int $project_id): array
|
||||
{
|
||||
try {
|
||||
return $this->fetchState($project_id, Model\Venta\Reservation\State\Type::INACTIVE->value);
|
||||
} catch (InvalidState $exception) {
|
||||
throw new Common\Implement\Exception\EmptyResult('Select pending reservations', $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $project_id
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchRejected(int $project_id): array
|
||||
{
|
||||
try {
|
||||
return $this->fetchState($project_id, Model\Venta\Reservation\State\Type::REJECTED->value);
|
||||
} catch (InvalidState $exception) {
|
||||
throw new Common\Implement\Exception\EmptyResult('Select rejected reservations', $exception);
|
||||
}
|
||||
}
|
||||
|
||||
protected function saveUnits(Model\Venta\Reservation $reservation): void
|
||||
{
|
||||
|
Reference in New Issue
Block a user