···1010from django.http import Http404
1111from django.shortcuts import render, redirect, get_object_or_404
1212from django.utils import timezone
1313+from django.utils.safestring import mark_safe
1414+from django.utils.timezone import make_naive
1515+from django.utils.translation import ugettext_lazy as _
1316from django.views.generic import View
1414-from django.utils.translation import ugettext_lazy as _
1515-from django.utils.timezone import make_naive
16171718from journeys import GOING
1819from journeys.exceptions import AlreadyAPassenger, NoFreePlaces, NotAPassenger
1919-from journeys.forms import SmartJourneyForm, JourneyForm, FilterForm, \
2020- ConfirmRejectJourneyForm, SearchJourneyForm
2020+from journeys.forms import SmartJourneyTemplateForm, JourneyForm, FilterForm, \
2121+ ConfirmRejectJourneyForm, SearchJourneyForm
2122from journeys.models import Residence, Campus, Journey, Passenger
22232324···2526 """View to show journey creation form and to handle its creation."""
26272728 template_name = "journeys/create.smart.html"
2828- form = SmartJourneyForm
2929+ form = SmartJourneyTemplateForm
29303030- def get(self, request):
3131+ @staticmethod
3232+ def _initial_values(request):
3133 residences = Residence.objects.filter(user=request.user)
3234 campuses = Campus.objects.all()
3335 initial_departure = timezone.now().replace(second=0, minute=0) + datetime.timedelta(hours=1)
···3840 "departure": initial_departure,
3941 "arrival": initial_departure + datetime.timedelta(minutes=30)
4042 }
4343+ return initial
4444+4545+ def get(self, request):
4646+ initial = self._initial_values(request)
4147 form = self.form(initial=initial, user=request.user)
4248 data = {
4349 "form": form
4450 }
5151+ # Warnings
5252+ if request.user.transports.count() == 0:
5353+ messages.warning(request, mark_safe(_(
5454+ "Parece que no has creado ningún medio de transporte, "
5555+ "si quieres crear un viaje y que otros compañeros puedan "
5656+ "apuntarse, tienes que <strong>registrar antes un medio de transporte</strong>."
5757+ )))
5858+ if request.user.residences.count() == 0:
5959+ messages.warning(request, mark_safe(_(
6060+ "Parece que no has especificado desde donde o hasta donde sueles viajar. "
6161+ "Para dar de alta un viaje deberás antes <strong>registrar al menos un lugar</strong> para usar "
6262+ "como origen o destino."
6363+ )))
4564 return render(request, self.template_name, data)
46654766 def post(self, request):
4848- form = self.form(request.POST, user=request.user)
6767+ form = self.form(request.POST, user=request.user, initial=self._initial_values(request))
4968 data = {
5069 "form": form
5170 }
5271 if form.is_valid():
5353- journey = form.save()
5454- return redirect("journeys:details", pk=journey.pk)
7272+ journey_template = form.save()
7373+ journeys = journey_template.journeys.order_by("-departure")
7474+ return redirect("journeys:details", pk=journeys.first().pk)
5575 return render(request, self.template_name, data)
56765777···6181 template_name = "journeys/edit.html"
62826383 def get(self, request, pk):
6464- journey = get_object_or_404(Journey, pk=pk, user=request.user)
8484+ journey = get_object_or_404(Journey, pk=pk, template__user=request.user)
6585 form = JourneyForm(
6686 instance=journey,
6787 initial={"i_am_driver": journey.driver is not None and journey.driver == request.user},
···7494 return render(request, self.template_name, data)
75957696 def post(self, request, pk):
7777- journey = get_object_or_404(Journey, pk=pk, user=request.user)
9797+ journey = get_object_or_404(Journey, pk=pk, template__user=request.user)
7898 form = JourneyForm(request.POST, instance=journey, user=request.user)
7999 data = {
80100 "form": form,
···113133 "fulfilled_by": journey.fulfilled_by(),
114134 "passengers": journey.passengers_list(request.user),
115135 "recommended": journey.recommended(),
116116- "has_recurrence": journey.parent is not None or journey.children.exists()
136136+ "has_recurrence": journey.has_recurrence
117137 }
118138 return render(request, self.template_name, data)
119139···145165 template_name = "journeys/list.html"
146166147167 def get(self, request):
148148- journeys = Journey.objects.filter(user=request.user).order_by("departure")
168168+ journeys = Journey.objects.filter(template__user=request.user).order_by("departure")
149169 data = {
150170 "journeys": journeys,
151171 "journeys_count": journeys.count()
···220240221241 def post(self, request, pk):
222242 journey = get_object_or_404(Journey, pk=pk)
243243+ leave_from = request.POST.get("leave_from")
223244 try:
224224- journey.leave_passenger(request.user)
225225- messages.success(request, _('Has dejado el viaje'))
245245+ journey.leave_passenger(request.user, leave_from=leave_from)
246246+ if leave_from == "one":
247247+ messages.success(request, _('Has dejado el viaje'))
248248+ elif leave_from == "all":
249249+ messages.success(request, _('Has dejado todos los viajes'))
226250 except NotAPassenger:
227251 messages.success(request, _('No estás en este viaje'))
228252 return_to = request.POST.get("return_to", self.return_to)
···269293 template_name = "journeys/cancel.html"
270294271295 def get(self, request, pk):
272272- journey = get_object_or_404(Journey, pk=pk, user=request.user)
296296+ journey = get_object_or_404(Journey, pk=pk, template__user=request.user)
273297 data = {
274298 "journey": journey,
275299 }
···277301278302 @staticmethod
279303 def post(request, pk):
280280- journey = get_object_or_404(Journey, pk=pk, user=request.user)
304304+ journey = get_object_or_404(Journey, pk=pk, template__user=request.user)
281305 journey.cancel()
282306 return redirect("journeys:details", pk=journey.pk)
283307···287311288312 @staticmethod
289313 def get(request, pk):
290290- journey = get_object_or_404(Journey, pk=pk, user=request.user)
314314+ journey = get_object_or_404(Journey, pk=pk, template__user=request.user)
291315 # Delete only if the journey hasn't driver
292316 if journey.driver is None:
293293- if journey.has_recurrence and journey.children.exists():
294294- new_parent = journey.children.order_by("departure").first()
295295- journey.children.exclude(pk=new_parent.pk).update(parent=new_parent)
296296- new_parent.parent = None
297297- new_parent.save()
298298- # Get again the journey
299299- journey = get_object_or_404(Journey, pk=pk, user=request.user)
300317 journey.delete()
301318 messages.success(request, _('Has borrado el viaje'))
302319 return redirect("journeys:list")
···309326310327 @staticmethod
311328 def get(request, pk):
312312- journey = get_object_or_404(Journey, pk=pk, user=request.user)
329329+ journey = get_object_or_404(Journey, pk=pk, template__user=request.user)
313330 # Delete only if the journey hasn't driver
314331 if journey.driver is None:
315332 if journey.has_recurrence:
316316- if journey.parent is not None:
317317- journeys = journey.parent.children.filter(departure__gte=journey.departure)
318318- journeys.delete()
319319- else:
320320- journey.delete()
333333+ # If has recurrente, delete all future brothers
334334+ journeys = journey.brothers().filter(departure__gte=journey.departure)
335335+ journeys.delete()
321336 else:
322337 journey.delete()
323338 messages.success(request, _('Has borrado el viaje y sus repeticiones'))
+1-1
upvcarshare/journeys/views/places.py
···3636 if form.is_valid():
3737 residence = form.save(user=request.user)
3838 messages.success(request, ugettext('Has creado el lugar "%s"') % residence.name)
3939- return redirect("journeys:residences")
3939+ return redirect(request.GET.get("next", "journeys:residences"))
4040 return render(request, self.template_name, data)
41414242
+1-1
upvcarshare/journeys/views/transports.py
···3838 if form.is_valid():
3939 form.save(user=request.user)
4040 messages.success(request, _('Has creado el transporte correctamente'))
4141- return redirect("journeys:transports")
4141+ return redirect(request.GET.get("next", "journeys:transports"))
4242 data = {"form": form}
4343 return render(request, self.template_name, data)
4444
+1-1
upvcarshare/notifications/models.py
···6767 target_date = localize(target_date)
6868 if self.verb == JOIN:
6969 # actor is a user and target is a journey
7070- value = _("%(user)s se ha <strong>unido</strong> al viaje <strong>%(journey)s</strong> del %(date)s") % {
7070+ value = _("%(user)s ha <strong>solicitado</strong> unirse al viaje <strong>%(journey)s</strong> del %(date)s") % {
7171 "user": six.text_type(self.actor),
7272 "journey": six.text_type(self.target).lower(),
7373 "date": target_date,