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();
}