Skip to content

Commit 2626400

Browse files
committed
Ajuste en la plantilla de valoraciones para mostrar información contextual según el usuario.
1 parent 1e37032 commit 2626400

4 files changed

Lines changed: 112 additions & 78 deletions

File tree

codigo/reports/_utils.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,6 @@ def filter_reports(request, reports):
7272
"""
7373
filter_form = ReportFilterForm(request.GET)
7474

75-
# Guardar copia del queryset original para comparación
76-
original_count = reports.count()
77-
7875
if filter_form.is_valid():
7976
# Filtrar por tipo
8077
if report_type := request.GET.get("report_type"):
@@ -121,23 +118,6 @@ def filter_reports(request, reports):
121118
Q(title__icontains=search) | Q(description__icontains=search)
122119
)
123120

124-
# Registrar información sobre el filtrado para diagnóstico
125-
filtered_count = reports.count()
126-
if request.GET.get("importance"):
127-
importance_value = request.GET.get("importance")
128-
print(f"\n--- FILTRO DE IMPORTANCIA APLICADO ---")
129-
print(f"Valor del filtro: '{importance_value}'")
130-
print(f"Reportes antes: {original_count}, después: {filtered_count}")
131-
132-
# Mostrar las IMPORTANCE_CHOICES definidas en el modelo Report
133-
print(
134-
f"Valores de importancia definidos en el modelo: {Report.IMPORTANCE_CHOICES}"
135-
)
136-
137-
# Imprimir valores de importancia de algunos reportes para diagnóstico
138-
for report in Report.objects.all()[:3]:
139-
print(f"Reporte ID {report.id}: importance='{report.importance}'")
140-
141121
return reports, filter_form
142122

143123

codigo/reports/views.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ def report_list(request):
4141
if importance := request.GET.get("importance"):
4242
if importance:
4343
# Filtrar directamente con el valor exacto
44-
print(f"Aplicando filtro de importancia: '{importance}'")
4544
reports = reports.filter(importance=importance)
4645

4746
# Filtro de estado
@@ -92,7 +91,6 @@ def my_reports(request):
9291
if importance := request.GET.get("importance"):
9392
if importance:
9493
# Filtrar directamente con el valor exacto
95-
print(f"Aplicando filtro de importancia: '{importance}'")
9694
reports = reports.filter(importance=importance)
9795

9896
# Filtro de estado

codigo/reviews/_utils.py

Lines changed: 78 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,133 +1,161 @@
11
"""
22
Funciones de utilidad interna para la aplicación de valoraciones (reviews).
33
"""
4+
45
from django.contrib import messages
5-
from django.shortcuts import redirect, get_object_or_404
66
from django.http import HttpResponseForbidden
7+
from django.shortcuts import get_object_or_404, redirect
78
from django.utils import timezone
8-
9-
from .models import Review
109
from rides.models import Ride
10+
11+
from .constants import (CREATE_REVIEW_NAME, DELETE_REVIEW_NAME,
12+
DETAIL_REVIEW_NAME, FORM_KEY, LIST_REVIEWS_NAME,
13+
NO_PARTICIPATION_ERROR, NO_PERMISSION_ERROR,
14+
REVIEW_ALREADY_EXISTS_ERROR, REVIEW_CREATED_SUCCESS,
15+
REVIEW_DELETED_SUCCESS, REVIEW_KEY, REVIEWS_GIVEN_KEY,
16+
REVIEWS_RECEIVED_KEY, RIDE_KEY,
17+
RIDE_NOT_FINISHED_ERROR, get_url_full)
1118
from .forms import ReviewForm
12-
from .constants import (
13-
CREATE_REVIEW_NAME, DELETE_REVIEW_NAME, LIST_REVIEWS_NAME, DETAIL_REVIEW_NAME,
14-
REVIEW_KEY, REVIEWS_GIVEN_KEY, REVIEWS_RECEIVED_KEY, RIDE_KEY, FORM_KEY,
15-
REVIEW_CREATED_SUCCESS, REVIEW_DELETED_SUCCESS, NO_PERMISSION_ERROR,
16-
NO_PARTICIPATION_ERROR, RIDE_NOT_FINISHED_ERROR, REVIEW_ALREADY_EXISTS_ERROR,
17-
get_url_full
18-
)
19-
from .public import (
20-
get_review_by_id, get_reviews_by_user, get_reviews_received_by_user,
21-
user_has_participation, ride_has_finished, can_review_ride,
22-
can_delete_review, get_user_already_reviewed
23-
)
19+
from .models import Review
20+
from .public import (can_delete_review, can_review_ride, get_review_by_id,
21+
get_reviews_by_user, get_reviews_received_by_user,
22+
get_user_already_reviewed, ride_has_finished,
23+
user_has_participation)
24+
2425

2526
def get_review_or_404(review_id):
2627
"""
2728
Obtiene una valoración o devuelve un 404.
2829
"""
2930
return get_object_or_404(Review, pk=review_id)
3031

32+
3133
def get_ride_or_404(ride_id):
3234
"""
3335
Obtiene un viaje o devuelve un 404.
3436
"""
3537
return get_object_or_404(Ride, pk=ride_id)
3638

39+
3740
def check_review_permission(request, ride):
3841
"""
3942
Verifica que el usuario tenga permiso para valorar un viaje.
4043
"""
4144
# Verificar que el usuario participó en el viaje (como conductor o pasajero)
4245
if not user_has_participation(request.user, ride):
4346
messages.error(request, NO_PARTICIPATION_ERROR)
44-
return redirect('rides:ride_detail', ride_id=ride.id)
45-
47+
return redirect("rides:ride_detail", ride_id=ride.id)
48+
4649
# Verificar que el viaje ya ha ocurrido
4750
if not ride_has_finished(ride):
4851
messages.error(request, RIDE_NOT_FINISHED_ERROR)
49-
return redirect('rides:ride_detail', ride_id=ride.id)
50-
52+
return redirect("rides:ride_detail", ride_id=ride.id)
53+
5154
# Verificar si el usuario ya ha dejado una valoración para este viaje
5255
if get_user_already_reviewed(request.user, ride):
5356
messages.info(request, REVIEW_ALREADY_EXISTS_ERROR)
54-
return redirect('rides:ride_detail', ride_id=ride.id)
55-
57+
return redirect("rides:ride_detail", ride_id=ride.id)
58+
5659
return None
5760

61+
5862
def check_delete_permission(request, review):
5963
"""
6064
Verifica que el usuario tenga permiso para eliminar una valoración.
6165
"""
6266
if not can_delete_review(request.user, review):
6367
return HttpResponseForbidden(NO_PERMISSION_ERROR)
64-
68+
6569
return None
6670

71+
6772
def format_review_for_api(review):
6873
"""
6974
Formatea una valoración para la API JSON.
7075
"""
7176
return {
72-
'id': review.id,
73-
'user': review.user.username,
74-
'ride': {
75-
'id': review.ride.id,
76-
'origin': review.ride.origin,
77-
'destination': review.ride.destination,
78-
'driver': review.ride.driver.username,
79-
} if review.ride else None,
80-
'rating': review.rating,
81-
'comment': review.comment,
82-
'created_at': review.created_at.strftime('%Y-%m-%d %H:%M'),
77+
"id": review.id,
78+
"user": review.user.username,
79+
"ride": (
80+
{
81+
"id": review.ride.id,
82+
"origin": review.ride.origin,
83+
"destination": review.ride.destination,
84+
"driver": review.ride.driver.username,
85+
}
86+
if review.ride
87+
else None
88+
),
89+
"rating": review.rating,
90+
"comment": review.comment,
91+
"created_at": review.created_at.strftime("%Y-%m-%d %H:%M"),
8392
}
8493

94+
8595
def prepare_review_form_context(request, ride):
8696
"""
8797
Prepara el contexto para el formulario de valoración.
8898
"""
8999
form = ReviewForm(request.POST or None)
90-
91-
return {
92-
FORM_KEY: form,
93-
RIDE_KEY: ride
94-
}
100+
101+
return {FORM_KEY: form, RIDE_KEY: ride}
102+
95103

96104
def prepare_review_list_context(request):
97105
"""
98106
Prepara el contexto para la lista de valoraciones.
99107
"""
100-
reviews_given = get_reviews_by_user(request.user)
101-
reviews_received = get_reviews_received_by_user(request.user)
102-
108+
# Verificar si se ha solicitado ver valoraciones de otro usuario
109+
username = request.GET.get("user")
110+
target_user = None
111+
112+
if username:
113+
from django.contrib.auth.models import User
114+
115+
try:
116+
target_user = User.objects.get(username=username)
117+
except User.DoesNotExist:
118+
pass
119+
120+
# Si no se encontró el usuario o no se proporcionó username, usar el usuario actual
121+
if not target_user:
122+
target_user = request.user
123+
124+
# Determinar si estamos viendo nuestras propias valoraciones o las de otro usuario
125+
viewing_own = target_user == request.user
126+
127+
reviews_given = get_reviews_by_user(target_user)
128+
reviews_received = get_reviews_received_by_user(target_user)
129+
103130
return {
104131
REVIEWS_GIVEN_KEY: reviews_given,
105-
REVIEWS_RECEIVED_KEY: reviews_received
132+
REVIEWS_RECEIVED_KEY: reviews_received,
133+
"target_user": target_user,
134+
"viewing_own": viewing_own,
106135
}
107136

137+
108138
def prepare_review_detail_context(review):
109139
"""
110140
Prepara el contexto para la vista detallada de una valoración.
111141
"""
112-
return {
113-
REVIEW_KEY: review
114-
}
142+
return {REVIEW_KEY: review}
143+
115144

116145
def prepare_review_delete_context(review):
117146
"""
118147
Prepara el contexto para la confirmación de eliminación de una valoración.
119148
"""
120-
return {
121-
REVIEW_KEY: review
122-
}
149+
return {REVIEW_KEY: review}
150+
123151

124152
def redirect_after_delete(review):
125153
"""
126154
Redirecciona adecuadamente después de eliminar una valoración.
127155
"""
128156
# Si el viaje existe, redireccionar a la página de detalles del viaje
129157
if review.ride:
130-
return redirect('rides:ride_detail', ride_id=review.ride.id)
131-
158+
return redirect("rides:ride_detail", ride_id=review.ride.id)
159+
132160
# De lo contrario, redireccionar a la lista de valoraciones
133161
return redirect(get_url_full(LIST_REVIEWS_NAME))

codigo/reviews/templates/list_review.html

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% extends 'base.html' %}
22
{% load static %}
33

4-
{% block title %}Mis Valoraciones{% endblock %}
4+
{% block title %}{% if viewing_own %}Mis Valoraciones{% else %}Valoraciones de {{ target_user.username }}{% endif %}{% endblock %}
55

66
{% block extra_styles %}
77
<link rel="stylesheet" href="{% static 'css/pages/profile.css' %}">
@@ -151,13 +151,31 @@
151151
{% block content %}
152152
<div class="page-container">
153153
<div class="page-header">
154-
<h1 class="page-title">Mis Valoraciones</h1>
154+
<h1 class="page-title">
155+
{% if viewing_own %}
156+
Mis Valoraciones
157+
{% else %}
158+
Valoraciones de {{ target_user.username }}
159+
{% endif %}
160+
</h1>
155161
</div>
156162

157163
<div class="tabs-container">
158164
<div class="tabs-header">
159-
<button class="tab-button active" data-tab="given">Valoraciones dadas</button>
160-
<button class="tab-button" data-tab="received">Valoraciones recibidas</button>
165+
<button class="tab-button active" data-tab="given">
166+
{% if viewing_own %}
167+
Valoraciones dadas
168+
{% else %}
169+
Valoraciones dadas por {{ target_user.username }}
170+
{% endif %}
171+
</button>
172+
<button class="tab-button" data-tab="received">
173+
{% if viewing_own %}
174+
Valoraciones recibidas
175+
{% else %}
176+
Valoraciones recibidas por {{ target_user.username }}
177+
{% endif %}
178+
</button>
161179
</div>
162180

163181
<!-- Valoraciones dadas -->
@@ -186,9 +204,11 @@ <h3 class="review-title">{{ review.ride.origin }} → {{ review.ride.destination
186204
<a href="{% url 'reviews:detail' review.id %}" class="button button-primary">
187205
<i class="fas fa-eye"></i> Ver
188206
</a>
207+
{% if viewing_own %}
189208
<a href="{% url 'reviews:delete' review.id %}" class="button button-secondary">
190209
<i class="fas fa-trash"></i> Eliminar
191210
</a>
211+
{% endif %}
192212
</div>
193213
</div>
194214
{% endfor %}
@@ -198,7 +218,11 @@ <h3 class="review-title">{{ review.ride.origin }} → {{ review.ride.destination
198218
<div class="empty-icon">
199219
<i class="fas fa-star"></i>
200220
</div>
201-
<p>No has dado ninguna valoración aún.</p>
221+
{% if viewing_own %}
222+
<p>No has dado ninguna valoración aún.</p>
223+
{% else %}
224+
<p>{{ target_user.username }} no ha dado ninguna valoración aún.</p>
225+
{% endif %}
202226
</div>
203227
{% endif %}
204228
</div>
@@ -241,7 +265,11 @@ <h3 class="review-title">{{ review.ride.origin }} → {{ review.ride.destination
241265
<div class="empty-icon">
242266
<i class="fas fa-star"></i>
243267
</div>
244-
<p>No has recibido ninguna valoración aún.</p>
268+
{% if viewing_own %}
269+
<p>No has recibido ninguna valoración aún.</p>
270+
{% else %}
271+
<p>{{ target_user.username }} no ha recibido ninguna valoración aún.</p>
272+
{% endif %}
245273
</div>
246274
{% endif %}
247275
</div>

0 commit comments

Comments
 (0)