diff --git a/app/resources/routes/api/proyectos.php b/app/resources/routes/api/proyectos.php
index 5216427..784b0d1 100644
--- a/app/resources/routes/api/proyectos.php
+++ b/app/resources/routes/api/proyectos.php
@@ -9,4 +9,5 @@ $app->group('/proyecto/{proyecto_id}', function($app) {
$app->get('/estados[/]', [Proyectos\EstadosProyectos::class, 'byProyecto']);
$app->get('/estado[/]', [Proyectos\EstadosProyectos::class, 'currentByProyecto']);
$app->get('/inicio[/]', [Proyectos\EstadosProyectos::class, 'firstByProyecto']);
+ $app->get('/recepcion[/]', [Proyectos\EstadosProyectos::class, 'recepcionByProyecto']);
});
diff --git a/app/resources/views/proyectos/list.blade.php b/app/resources/views/proyectos/list.blade.php
index f0dc90d..3dbdb83 100644
--- a/app/resources/views/proyectos/list.blade.php
+++ b/app/resources/views/proyectos/list.blade.php
@@ -11,6 +11,7 @@
Etapa |
Estado |
Tiempo Total |
+ Tiempo RF |
@@ -21,6 +22,7 @@
|
|
|
+ |
@endforeach
@@ -38,7 +40,8 @@
this.id = id
this.estados = {
start: null,
- current: null
+ current: null,
+ recepcion: null
}
}
get() {
@@ -60,6 +63,21 @@
}).then(data => {
this.estados.current = data.estado
})
+ },
+ recepcion: () => {
+ return fetch('{{$urls->api}}/proyecto/' + this.id + '/recepcion').then(response => {
+ if (response.ok) {
+ if (response.status === 204) {
+ return null
+ }
+ return response.json()
+ }
+ }).then(data => {
+ if (data === null) {
+ return
+ }
+ this.estados.recepcion = data.estado
+ })
}
}
}
@@ -87,10 +105,10 @@
if (diff >= 30) {
diff /= 30
frame = 'meses'
- }
- if (diff >= 12) {
- diff /= 12
- frame = 'años'
+ if (diff >= 12) {
+ diff /= 12
+ frame = 'años'
+ }
}
if (diff > 0) {
estado += ' (hace ' + Math.floor(diff) + ' ' + frame + ')'
@@ -111,83 +129,55 @@
if (diff >= 30) {
diff /= 30
frame = 'meses'
- }
- if (diff >= 12) {
- diff /= 12
- frame = 'años'
+ if (diff >= 12) {
+ diff /= 12
+ frame = 'años'
+ }
}
- row.find('.tiempo').html('Hace ' + Math.floor(diff) + ' ' + frame)
+ row.find('.tiempo').html(Math.floor(diff) + ' ' + frame)
+ },
+ recepcion: () => {
+ if (this.estados.recepcion === null) {
+ return
+ }
+ let diff = (today - new Date(this.estados.recepcion.fecha.date)) / (1000 * 60 * 60 * 24)
+ if (isNaN(diff) || diff === 0) {
+ return
+ }
+
+ let frame = 'dias'
+ if (diff >= 30) {
+ diff /= 30
+ frame = 'meses'
+ if (diff >= 12) {
+ diff /= 12
+ frame = 'años'
+ }
+ }
+
+ row.find('.recepcion').html(Math.floor(diff) + ' ' + frame)
}
}
}
}
- function showTiempo(proyecto_id, tiempo) {
- if (tiempo.trim() === '') {
- return
- }
- const row = $(".proyecto[data-id='" + proyecto_id + "']")
- row.find('.tiempo').html(tiempo)
- }
- function getEstados(proyecto_id) {
- return fetch('{{$urls->api}}/proyecto/' + proyecto_id + '/estados').then(response => {
- if (response.ok) {
- return response.json()
- }
- }).then(data => {
- let tiempo = 0
- const current = new Date(data.estados.at(-1).fecha.date)
- const start = new Date(data.estados[0].fecha.date)
- tiempo = (current - start) / (1000 * 60 * 60 * 24)
- if (isNaN(tiempo) || tiempo === 0) {
- return
- }
- let frame = 'días'
- if (tiempo > 30) {
- tiempo /= 30
- frame = 'meses'
- }
- if (tiempo > 12) {
- tiempo /= 12
- frame = 'años'
- }
- showTiempo(data.proyecto_id, 'Hace ' + Math.ceil(tiempo) + ' ' + frame)
- })
- }
- function showEtapa(proyecto_id, etapa) {
- const row = $(".proyecto[data-id='" + proyecto_id + "']")
- row.find('.etapa').html(etapa)
- }
- function showEstado(proyecto_id, estado) {
- const row = $(".proyecto[data-id='" + proyecto_id + "']")
- row.find('.estado').html(estado)
- }
- function getEstado(proyecto_id) {
- return fetch('{{$urls->api}}/proyecto/' + proyecto_id + '/estado').then(response => {
- if (response.ok) {
- return response.json()
- }
- }).then(data => {
- showEtapa(data.proyecto_id, data.estado.tipo_estado_proyecto.etapa.descripcion)
- showEstado(data.proyecto_id, data.estado.tipo_estado_proyecto.descripcion)
- })
- }
+
function loadEstados(proyecto_id) {
const proyecto = new Proyecto(proyecto_id)
const promises = []
promises.push(proyecto.get().start())
promises.push(proyecto.get().current())
+ promises.push(proyecto.get().recepcion())
Promise.all(promises).then(() => {
proyecto.show().etapa()
proyecto.show().current()
proyecto.show().tiempo()
+ proyecto.show().recepcion()
})
}
$(document).ready(() => {
@foreach ($proyectos as $proyecto)
loadEstados('{{$proyecto->id}}')
- /*getEstado('{{$proyecto->id}}')
- getEstados('{{$proyecto->id}}')*/
@endforeach
})
diff --git a/app/src/Controller/API/Proyectos/EstadosProyectos.php b/app/src/Controller/API/Proyectos/EstadosProyectos.php
index bc03d06..9fc451f 100644
--- a/app/src/Controller/API/Proyectos/EstadosProyectos.php
+++ b/app/src/Controller/API/Proyectos/EstadosProyectos.php
@@ -50,4 +50,17 @@ class EstadosProyectos
}
return $this->withJson($response, $output);
}
+ public function recepcionByProyecto(ServerRequestInterface $request, ResponseInterface $response, Repository\Proyecto\EstadoProyecto $estadoProyectoRepository, int $proyecto_id): ResponseInterface
+ {
+ $output = [
+ 'proyecto_id' => $proyecto_id,
+ 'estado' => null
+ ];
+ try {
+ $output['estado'] = $estadoProyectoRepository->fetchRecepcionByProyecto($proyecto_id);
+ } catch (EmptyResult) {
+ return $this->emptyBody($response);
+ }
+ return $this->withJson($response, $output);
+ }
}
diff --git a/app/src/Repository/Proyecto.php b/app/src/Repository/Proyecto.php
index 924d62b..21b1c7e 100644
--- a/app/src/Repository/Proyecto.php
+++ b/app/src/Repository/Proyecto.php
@@ -102,7 +102,7 @@ ORDER BY a.`descripcion`";
SELECT MAX(e1.`id`) AS 'id', e1.`proyecto`
FROM `estado_proyecto` e1
JOIN (
- SELECT MAX(`id`) AS 'id', `proyecto`, `fecha`
+ SELECT `id`, `proyecto`, MAX(`fecha`) as 'fecha'
FROM `estado_proyecto`
GROUP BY `proyecto`, `fecha`
) e0 ON e1.`id` = e0.`id`
diff --git a/app/src/Repository/Proyecto/EstadoProyecto.php b/app/src/Repository/Proyecto/EstadoProyecto.php
index b27a0ca..ff6ece5 100644
--- a/app/src/Repository/Proyecto/EstadoProyecto.php
+++ b/app/src/Repository/Proyecto/EstadoProyecto.php
@@ -70,4 +70,12 @@ FROM `{$this->getTable()}` a
WHERE a.`proyecto` = ?";
return $this->fetchOne($query, [$proyecto_id]);
}
+ public function fetchRecepcionByProyecto(int $proyecto_id): Model\Proyecto\EstadoProyecto
+ {
+ $query = "SELECT a.*
+FROM `{$this->getTable()}` a
+ JOIN `tipo_estado_proyecto` tep ON tep.`id` = a.`estado`
+WHERE a.`proyecto` = ? AND tep.`descripcion` = 'Recepción Final'";
+ return $this->fetchOne($query, [$proyecto_id]);
+ }
}