Skip to content

Commit f483913

Browse files
committed
Actualizar estado de pagos al cancelar viajes
- Añade función update_payments_on_booking_cancel en payments/public.py para actualizar pagos a REFUNDED - Soluciona el problema donde los pagos quedaban en estado activo después de cancelar reservas
1 parent 4cfd977 commit f483913

4 files changed

Lines changed: 32 additions & 7 deletions

File tree

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,15 @@ El siguiente diagrama muestran la planificación del proyecto:
4646
## Instalación
4747

4848
### Requisitos previos
49-
- Python 3.8+
49+
- Python 3.13.3 (en caso de otra versión los paquetes de requirements.txt podrían usar versiones diferentes).
5050
- pip
5151
- Virtualenv (recomendado)
5252

5353
### Pasos de instalación
5454

5555
1. Clonar el repositorio:
5656
```
57-
git clone https://github.com/tu-usuario/charlacar.git
58-
cd charlacar
57+
git clone https://github.com/alejandroGM0proyecto_software.git
5958
```
6059

6160
2. Crear y activar entorno virtual:

codigo/payments/public.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from datetime import timedelta
99

1010
from .models import Payment
11-
from .constants import PAYMENT_STATUS_COMPLETED
11+
from .constants import PAYMENT_STATUS_COMPLETED, PAYMENT_STATUS_REFUNDED
1212

1313
# Clave pública de Stripe para usar en el frontend
1414
STRIPE_PUBLIC_KEY = getattr(settings, 'STRIPE_PUBLIC_KEY', '')
@@ -83,7 +83,26 @@ def get_recent_payments(days=7, limit=5):
8383
"""
8484
Obtiene los pagos más recientes realizados en los últimos días especificados.
8585
"""
86-
recent_date = timezone.now() - timedelta(days=days)
86+
recent_date = timezone.now() - timedelta(days=7)
8787
return Payment.objects.filter(
8888
created_at__gte=recent_date
8989
).order_by('-created_at')[:limit]
90+
91+
def update_payments_on_booking_cancel(user, ride):
92+
"""
93+
Actualiza el estado de los pagos asociados a un usuario y un viaje cuando
94+
se cancela una reserva de viaje.
95+
96+
"""
97+
payments = Payment.objects.filter(
98+
payer=user,
99+
ride=ride,
100+
)
101+
102+
count = 0
103+
for payment in payments:
104+
payment.status = PAYMENT_STATUS_REFUNDED
105+
payment.save()
106+
count += 1
107+
108+
return count

codigo/payments/views.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,14 @@ def create_payment(request, ride_id):
125125
)
126126
return redirect("rides:ride_detail", ride_id=ride_id)
127127

128+
# Modificar esta consulta para buscar correctamente solo pagos activos o completados
128129
existing_payment = Payment.objects.filter(
129130
payer=request.user,
130131
ride=ride,
131-
status__in=[PAYMENT_STATUS_PENDING, PAYMENT_STATUS_COMPLETED],
132+
).exclude(
133+
status__in=[PAYMENT_STATUS_CANCELLED, PAYMENT_STATUS_FAILED, PAYMENT_STATUS_REFUNDED]
132134
).first()
135+
133136

134137
if existing_payment:
135138
if existing_payment.status == PAYMENT_STATUS_COMPLETED:
@@ -148,6 +151,7 @@ def create_payment(request, ride_id):
148151
amount=ride.price,
149152
ride=ride,
150153
status=PAYMENT_STATUS_PENDING,
154+
payment_method=PAYMENT_METHOD_STRIPE,
151155
)
152156
payment.save()
153157

codigo/rides/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django.contrib.auth.decorators import login_required
77
from django.shortcuts import get_object_or_404, redirect, render
88
from django.utils import timezone
9+
from payments.public import update_payments_on_booking_cancel
910

1011
from ._utils import filter_rides_complex, get_ride_context, paginate_rides, process_search_params
1112
from .constants import (AVAILABLE_SEATS_KEY, DATE_KEY, DESTINATION_KEY,
@@ -152,7 +153,6 @@ def edit_ride(request, ride_id):
152153
return render(request, RIDE_FORM_TEMPLATE, {FORM_KEY: form, EDIT_MODE_KEY: True})
153154

154155

155-
#DEBERIA DE HABER UN ENDPOINT PARA PAYMENTS
156156
@login_required
157157
def cancel_booking(request, ride_id):
158158
"""Cancela la reserva de un viaje para el usuario actual."""
@@ -170,5 +170,8 @@ def cancel_booking(request, ride_id):
170170
ride.passengers.remove(request.user)
171171
ride.save()
172172

173+
update_payments_on_booking_cancel(request.user, ride)
174+
175+
173176
messages.success(request, RIDE_BOOKING_CANCELLED_SUCCESS)
174177
return redirect(RIDE_DETAIL_URL, ride_id=ride.id)

0 commit comments

Comments
 (0)