···187187 """
188188 pass
189189190190+191191+class ConfirmRejectJourneyForm(forms.Form):
192192+ """Form to get the user to confirm or reject."""
193193+194194+ user = forms.IntegerField(widget=forms.HiddenInput())
195195+196196+ def clean_user(self):
197197+ user_pk = self.cleaned_data["user"]
198198+ try:
199199+ user = User.objects.get(pk=user_pk)
200200+ except User.DoesNotExist:
201201+ raise forms.ValidationError(_("El usuario no existe"))
202202+ return user
+29-5
upvcarshare/journeys/models.py
···15151616from core.models import GisTimeStampedModel
1717from journeys import JOURNEY_KINDS, GOING, RETURN, DEFAULT_DISTANCE, DEFAULT_PROJECTED_SRID, DEFAULT_WGS84_SRID, \
1818- DEFAULT_TIME_WINDOW, PASSENGER_STATUSES, UNKNOWN
1818+ DEFAULT_TIME_WINDOW, PASSENGER_STATUSES, UNKNOWN, CONFIRMED, REJECTED
1919from journeys.exceptions import NoFreePlaces, NotAPassenger, AlreadyAPassenger
2020from journeys.helpers import make_point_wgs84
2121from journeys.managers import JourneyManager, ResidenceManager, MessageManager
2222-from notifications import JOIN, LEAVE, CANCEL
2222+from notifications import JOIN, LEAVE, CANCEL, CONFIRM, REJECT
2323from notifications.decorators import dispatch
24242525···171171172172 def count_passengers(self):
173173 """Gets the count of passengers."""
174174- return self.passengers.count()
174174+ return self.passengers.filter(status=CONFIRMED).count()
175175176176 def current_free_places(self):
177177 """Gets the current number of free places."""
···189189 if self.count_passengers() < self.free_places:
190190 return Passenger.objects.create(
191191 journey=self,
192192- user=user
192192+ user=user,
193193+ status=UNKNOWN
193194 )
194195 raise NoFreePlaces()
195196···202203 raise NotAPassenger()
203204 self.passengers.filter(user=user).delete()
204205205205- def is_passenger(self, user):
206206+ @dispatch(CONFIRM)
207207+ def confirm_passenger(self, user):
208208+ """Confirms the user as passenger."""
209209+ if not self.is_passenger(user=user, all_passengers=True):
210210+ raise NotAPassenger()
211211+ self.passengers.filter(user=user).update(status=CONFIRMED)
212212+213213+ @dispatch(REJECT)
214214+ def reject_passenger(self, user):
215215+ """Confirms the user as passenger."""
216216+ if not self.is_passenger(user=user, all_passengers=True):
217217+ raise NotAPassenger()
218218+ self.passengers.filter(user=user).update(status=REJECTED)
219219+220220+ def is_passenger(self, user, all_passengers=False):
206221 """Checks if the given user is a passenger of this journey."""
222222+ if not all_passengers:
223223+ return self.passengers.filter(user=user, status=CONFIRMED).exists()
207224 return self.passengers.filter(user=user).exists()
208225209226 def recommended(self, ignore_full=False):
···246263 self.disabled = True
247264 self.save()
248265266266+ def passengers_list(self, user):
267267+ """Gets the suitable list of passenger for this user."""
268268+ if self.user == user:
269269+ return self.passengers.all()
270270+ elif self.is_passenger(user):
271271+ return self.passengers.filter(status=CONFIRMED)
272272+ return Passenger.objects.none()
249273250274class Passenger(TimeStampedModel):
251275 """A user who has joined a journey."""