diff --git a/app/resources/database/migrations/20250922162206_add_comments_to_reservations.php b/app/resources/database/migrations/20250922162206_add_comments_to_reservations.php new file mode 100644 index 0000000..5770e5b --- /dev/null +++ b/app/resources/database/migrations/20250922162206_add_comments_to_reservations.php @@ -0,0 +1,26 @@ +table('reservations') + ->addColumn('comments', 'text') + ->update(); + } +} diff --git a/app/resources/views/ventas/reservations.blade.php b/app/resources/views/ventas/reservations.blade.php index a7f2cc4..473dd9e 100644 --- a/app/resources/views/ventas/reservations.blade.php +++ b/app/resources/views/ventas/reservations.blade.php @@ -47,9 +47,9 @@
@@ -107,7 +107,7 @@ @push('page_styles') @@ -294,9 +294,9 @@ } } columnsData() { - return this.reservations.map(reservation => { + return this.reservations.map(reservation => { const date = new Date(Date.parse(reservation.date) + 24 * 60 * 60 * 1000) - return { + return { id: reservation.id, unidades: reservation.summary, cliente: reservation.buyer.nombreCompleto, @@ -412,7 +412,7 @@ columnsData() { const data = super.columnsData(); return data.map(row => { - delete (row['valida']) + delete(row['valida']) return row }) } @@ -475,8 +475,8 @@ columnsData() { const data = super.columnsData() return this.reservations.map((reservation, idx) => { - data[idx]['estado'] = reservation.state.charAt(0).toUpperCase() + reservation.state.slice(1) - data[idx]['comentarios'] = reservation.comments?.join('
\n') ?? '' + data[idx]['estado'] = this.mapState(reservation.current_state) + data[idx]['comentarios'] = reservation.comments ?? '' return data[idx] }) } @@ -484,6 +484,13 @@ return '' } watch() {} + + mapState(state) { + return { + 'canceled': 'Cancelado', + 'rejected': 'Rechazado' + }[state.toLowerCase()] + } } const reservations = { @@ -645,6 +652,7 @@ } } } + $(document).ready(() => { reservations.setup({ ids: { diff --git a/app/src/Model/Venta/Reservation.php b/app/src/Model/Venta/Reservation.php index cc777eb..8f84ce4 100644 --- a/app/src/Model/Venta/Reservation.php +++ b/app/src/Model/Venta/Reservation.php @@ -117,6 +117,8 @@ class Reservation extends Common\Ideal\Model return $base >= $price; } + public string $comments; + protected function jsonComplement(): array { return [ @@ -131,7 +133,10 @@ class Reservation extends Common\Ideal\Model 'base' => $this->base(), 'price' => $this->price(), 'valid' => $this->valid(), - 'summary' => $this->summary() + 'summary' => $this->summary(), + 'states' => $this->states() ?? [], + 'current_state' => $this->currentState()?->type?->name ?? null, + 'comments' => $this->comments ?? '', ]; } } diff --git a/app/src/Model/Venta/Reservation/State.php b/app/src/Model/Venta/Reservation/State.php index 64eeed5..c7468d5 100644 --- a/app/src/Model/Venta/Reservation/State.php +++ b/app/src/Model/Venta/Reservation/State.php @@ -16,7 +16,10 @@ class State extends Common\Ideal\Model return [ 'reservation_id' => $this->reservation->id, 'date' => $this->date->format('Y-m-d'), - 'type' => $this->type + 'type' => [ + 'id' => $this->type->value, + 'name' => $this->type->name, + ] ]; } } diff --git a/app/src/Model/Venta/Reservation/State/Type.php b/app/src/Model/Venta/Reservation/State/Type.php index 96d60e5..2ea7319 100644 --- a/app/src/Model/Venta/Reservation/State/Type.php +++ b/app/src/Model/Venta/Reservation/State/Type.php @@ -18,6 +18,6 @@ enum Type: int } public static function getTypes(): array { - return [self::ACTIVE->value, self::INACTIVE->value, self::REJECTED->value]; + return [self::ACTIVE->value, self::INACTIVE->value, self::REJECTED->value, self::CANCELLED->value]; } } diff --git a/app/src/Repository/Venta/Reservation.php b/app/src/Repository/Venta/Reservation.php index e181eba..bd457f4 100644 --- a/app/src/Repository/Venta/Reservation.php +++ b/app/src/Repository/Venta/Reservation.php @@ -4,6 +4,7 @@ namespace Incoviba\Repository\Venta; use DateTimeInterface; use DateInterval; use Incoviba\Common\Define; +use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Exception\Model\InvalidState; use PDO; use Incoviba\Common; @@ -29,7 +30,7 @@ class Reservation extends Common\Ideal\Repository public function create(?array $data = null): Model\Venta\Reservation { - $map = (new Common\Implement\Repository\MapperParser()) + $map = (new Common\Implement\Repository\MapperParser(['comments'])) ->register('project_id', (new Common\Implement\Repository\Mapper()) ->setProperty('project') ->setFunction(function($data) { @@ -114,13 +115,16 @@ class Reservation extends Common\Ideal\Repository /** * @param int $project_id - * @param int $state + * @param int|string $state * @return array - * @throws Common\Implement\Exception\EmptyResult + * @throws EmptyResult * @throws InvalidState */ - public function fetchState(int $project_id, int $state): array + public function fetchState(int $project_id, int|string $state): array { + if (is_string($state)) { + $state = Model\Venta\Reservation\State\Type::from($state)->value; + } if (!in_array($state, Model\Venta\Reservation\State\Type::getTypes())) { throw new InvalidState(); }