Project for the UPV to develop an app like BlaBlaCar but only for UPV people.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

throw all and leave all

+174 -11
+17 -2
upvcarshare/journeys/models.py
··· 377 377 @dispatch(LEAVE) 378 378 def leave_passenger(self, user, leave_from=None): 379 379 """A user leave a journey. 380 + :param leave_from: 380 381 :param user: 381 382 """ 382 - self._leave_passenger(user=user) 383 + # Join only one 384 + if leave_from is None or leave_from == "one": 385 + return self._leave_passenger(user=user) 386 + # Join to recurrence 387 + elif leave_from is not None and leave_from == "all": 388 + if self.has_recurrence: 389 + journeys = self.brothers(exclude_myself=True) 390 + journeys = journeys.filter(departure__gte=self.departure) 391 + passengers = [self._leave_passenger(user=user)] 392 + for journey in journeys: 393 + try: 394 + passengers.append(journey.leave_passenger(user)) 395 + except NotAPassenger: 396 + pass 397 + return passengers 383 398 384 399 @dispatch(THROW_OUT) 385 400 def throw_out(self, user): 386 401 """A user is throw out from a journey. 387 402 :param user: 388 403 """ 389 - self.leave_passenger(user) 404 + self.leave_passenger(user, leave_from="all") 390 405 391 406 @dispatch(CONFIRM) 392 407 def confirm_passenger(self, user):
+6 -2
upvcarshare/journeys/views/journeys.py
··· 240 240 241 241 def post(self, request, pk): 242 242 journey = get_object_or_404(Journey, pk=pk) 243 + leave_from = request.POST.get("leave_from") 243 244 try: 244 - journey.leave_passenger(request.user) 245 - messages.success(request, _('Has dejado el viaje')) 245 + journey.leave_passenger(request.user, leave_from=leave_from) 246 + if leave_from == "one": 247 + messages.success(request, _('Has dejado el viaje')) 248 + elif leave_from == "all": 249 + messages.success(request, _('Has dejado todos los viajes')) 246 250 except NotAPassenger: 247 251 messages.success(request, _('No estás en este viaje')) 248 252 return_to = request.POST.get("return_to", self.return_to)
+5 -1
upvcarshare/static/src/js/journeys/index.js
··· 16 16 SearchJourneyForm, 17 17 ConfirmPassengerForm, 18 18 RejectPassengerForm, 19 - ResidenceForm 19 + ResidenceForm, 20 + LeaveJourneyForm, 21 + ThrowPassengerForm 20 22 } from './journey.directive'; 21 23 import JoinAllOneController from './journeys.controller'; 22 24 ··· 54 56 .directive('residenceForm', ResidenceForm) 55 57 .directive('searchJourneyForm', SearchJourneyForm) 56 58 .directive('joinJourneyForm', JoinJourneyForm) 59 + .directive('leaveJourneyForm', LeaveJourneyForm) 57 60 .directive('confirmPassengerForm', ConfirmPassengerForm) 61 + .directive('throwPassengerForm', ThrowPassengerForm) 58 62 .directive('rejectPassengerForm', RejectPassengerForm) 59 63 60 64 // Angular Google Maps
+76 -2
upvcarshare/static/src/js/journeys/journey.directive.js
··· 1 - import {JoinAllOneController, ConfirmRejectPassengerController} from './journeys.controller'; 1 + import { 2 + JoinAllOneController, 3 + ConfirmRejectPassengerController, 4 + LeaveAllOneController, 5 + ConfirmThrowPassengerController 6 + } from './journeys.controller'; 2 7 import moment from 'moment'; 3 8 4 9 ··· 85 90 }); 86 91 JoinJourneyForm.$inject = ["$uibModal"]; 87 92 93 + const LeaveJourneyForm = ($uibModal) => ({ 94 + restrict: 'A', 95 + link: (scope, element, attr) => { 96 + // Initial value for leave from value to one. It could be 'one' or 'all' 97 + scope.leaveFromValue = null; 98 + scope.journeyId = attr.journeyId; 99 + 100 + // Function to open modal 101 + function openModal() { 102 + var modalInstance = $uibModal.open({ 103 + animation: true, 104 + templateUrl: 'leave-all-one.html', 105 + controller: LeaveAllOneController, 106 + resolve: { 107 + journeyId: function () { 108 + return scope.journeyId; 109 + } 110 + } 111 + }); 112 + modalInstance.result.then( (selectedOption) => { 113 + scope.leaveFromValue = selectedOption; 114 + var field = element.find("[name='leave_from']"); 115 + field.val(selectedOption); 116 + element.submit(); 117 + }); 118 + } 119 + 120 + // Link on submit form 121 + element.submit(() => { 122 + if (scope.leaveFromValue == null) { 123 + openModal(); 124 + return false; 125 + } 126 + return true; 127 + }); 128 + } 129 + }); 130 + LeaveJourneyForm.$inject = ["$uibModal"]; 131 + 88 132 89 133 const ConfirmPassengerForm = ($uibModal) => ({ 90 134 restrict: 'A', ··· 118 162 }); 119 163 ConfirmPassengerForm.$inject = ["$uibModal"]; 120 164 165 + const ThrowPassengerForm = ($uibModal) => ({ 166 + restrict: 'A', 167 + link: (scope, element, attr) => { 168 + // Initial value for join to value to one. It could be 'one' or 'all' 169 + scope.confirmValue = null; 170 + 171 + // Function to open modal 172 + function openModal() { 173 + var modalInstance = $uibModal.open({ 174 + animation: true, 175 + templateUrl: 'throw-passenger.html', 176 + controller: ConfirmThrowPassengerController 177 + }); 178 + modalInstance.result.then( (selectedOption) => { 179 + scope.confirmValue = selectedOption; 180 + element.submit(); 181 + }); 182 + } 183 + 184 + // Link on submit form 185 + element.submit(() => { 186 + if (scope.confirmValue == null) { 187 + openModal(); 188 + return false; 189 + } 190 + return scope.confirmValue; 191 + }); 192 + } 193 + }); 194 + ThrowPassengerForm.$inject = ["$uibModal"]; 121 195 122 196 const RejectPassengerForm = ($uibModal) => ({ 123 197 restrict: 'A', ··· 153 227 154 228 155 229 export {JourneyForm, JoinJourneyForm, SearchJourneyForm, ConfirmPassengerForm, 156 - RejectPassengerForm, ResidenceForm}; 230 + RejectPassengerForm, ResidenceForm, LeaveJourneyForm, ThrowPassengerForm};
+46 -1
upvcarshare/static/src/js/journeys/journeys.controller.js
··· 511 511 JoinAllOneController.$inject = ["$scope", "$uibModalInstance", 'JourneyService', 'uiCalendarConfig', 'journeyId']; 512 512 513 513 514 + /** 515 + * Controller for the modal showed when a journey has repetitions. 516 + */ 517 + class LeaveAllOneController { 518 + constructor($scope, $uibModalInstance, journeyId) { 519 + this.$scope = $scope; 520 + this.$uibModalInstance = $uibModalInstance; 521 + this.journeyId = journeyId; 522 + } 523 + 524 + $onInit() { 525 + this.$scope.cancel = ($event) => { 526 + this.$uibModalInstance.dismiss(false); 527 + }; 528 + this.$scope.one = ($event) => { 529 + this.$uibModalInstance.close("one"); 530 + }; 531 + this.$scope.all = ($event) => { 532 + this.$uibModalInstance.close("all"); 533 + }; 534 + } 535 + } 536 + LeaveAllOneController.$inject = ["$scope", "$uibModalInstance", 'journeyId']; 537 + 538 + 514 539 class RecurrenceCalendarController { 515 540 516 541 constructor($scope, JourneyService, uiCalendarConfig) { ··· 624 649 } 625 650 ConfirmRejectPassengerController.$inject = ["$scope", "$uibModalInstance"]; 626 651 652 + 653 + class ConfirmThrowPassengerController { 654 + constructor($scope, $uibModalInstance) { 655 + this.$scope = $scope; 656 + this.$uibModalInstance = $uibModalInstance; 657 + } 658 + 659 + $onInit() { 660 + this.$scope.continue = ($event) => { 661 + this.$uibModalInstance.close(true); 662 + }; 663 + this.$scope.cancel = ($event) => { 664 + this.$uibModalInstance.dismiss(false); 665 + }; 666 + } 667 + } 668 + ConfirmThrowPassengerController.$inject = ["$scope", "$uibModalInstance"]; 669 + 670 + 627 671 export {OriginDestinationSelectController, DatetimeController, TimeController, 628 672 DateController, CalendarController, CircleMapController, JoinAllOneController, 629 - RecurrenceCalendarController, ConfirmRejectPassengerController}; 673 + RecurrenceCalendarController, ConfirmRejectPassengerController, 674 + LeaveAllOneController, ConfirmThrowPassengerController};
+8 -1
upvcarshare/templates/journeys/blocks/details.passengers.html
··· 17 17 {% if request.user == journey.driver and request.user == journey.user %} 18 18 {% if passenger.status == CONFIRMED %} 19 19 <td colspan="2"> 20 - <form method="post" action="{% url "journeys:throw-out" passenger.pk %}"> 20 + <form method="post" action="{% url "journeys:throw-out" passenger.pk %}" {% if passenger.has_recurrence %}throw-passenger-form{% endif %}> 21 21 {% csrf_token %} 22 22 <input type="hidden" name="return_to" value="{{ request.path }}"> 23 23 <button type="submit" class="btn btn-danger">{% trans "Expulsar" %}</button> 24 + <script type="text/ng-template" id="throw-passenger.html"> 25 + <div class="modal-body text-xs-center"> 26 + <p class="lead">{% trans "El usuario se ha apuntado a más de una de las ocurrencias de este viaje" %}</p> 27 + <button class="btn btn-lg btn-danger" type="button" ng-click="cancel($event)">{% trans "Cancelar" %}</button> 28 + <button class="btn btn-lg btn-success" type="button" ng-click="continue($event)">{% trans "Expulsar para todos" %}</button> 29 + </div> 30 + </script> 24 31 </form> 25 32 </td> 26 33 {% else %}
+16 -2
upvcarshare/templates/journeys/templatetags/join_leave_button.html
··· 26 26 {% endif %} 27 27 </form> 28 28 {% elif not journey_item.needs_driver and journey_item|is_passenger:request.user %} 29 - <form method="post" action="{% url "journeys:leave" journey_item.pk %}"> 29 + <form method="post" action="{% url "journeys:leave" journey_item.pk %}" {% if journey_item.has_recurrence %}leave-journey-form journey-id="{{ journey_item.pk }}"{% endif %}> 30 30 {% csrf_token %} 31 31 <input type="hidden" name="return_to" value="{{ request.path }}"> 32 - <button type="submit" class="btn btn-danger">{% trans "Abandonar" %}</button> 32 + {% if not journey_item.has_recurrence %} 33 + <input type="hidden" name="leave_from" value="one"> 34 + <button type="submit" class="btn btn-danger">{% trans "Abandonar" %}</button> 35 + {% else %} 36 + <script type="text/ng-template" id="leave-all-one.html"> 37 + <div class="modal-body text-xs-center"> 38 + <p class="lead">{% trans "Esté viaje tiene más de una ocurrencia, ¿quieres abandonar todos o sólo este?" %}</p> 39 + <button class="btn btn-lg btn-danger" type="button" ng-click="cancel($event)">{% trans "Cancelar" %}</button> 40 + <button class="btn btn-lg btn-success" type="button" ng-click="one($event)">{% trans "Abandonar sólo este" %}</button> 41 + <button class="btn btn-lg btn-success" type="button" ng-click="all($event)">{% trans "Abandonar todos" %}</button> 42 + </div> 43 + </script> 44 + <input type="hidden" name="leave_from" ng-value="leaveFromValue"> 45 + <button type="submit" class="btn btn-danger">{% trans "Abandonar" %}</button> 46 + {% endif %} 33 47 </form> 34 48 {% endif %}