示例#1
0
 def put(self, request, pk, format=None):
     event = self.get_object(pk)
     serializer = EventSerializer(event, data=request.data)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
示例#2
0
    def get(self, request, *args, **kwargs):
        event_id = self.kwargs.get('event_id', None)
        if not event_id:
            return ApiResponse.bad_request('Event ID missing')
        try:
            event = Event.objects.get(id=event_id)
        except:
            event = None

        if not event:
            return ApiResponse.bad_request("Event Doesn't exist")

        if event.is_public:
            data = EventSerializer(event).data
            return Response(data)

        elif event.host.id == request.user.id:
            data = EventSerializer(event).data
            return Response(data)

        elif Invitation.objects.filter(user_id=request.user.id,
                                       event_id=event.id):
            data = EventSerializer(event).data
            return Response(data)

        else:
            return ApiResponse.forbidden(
                "You are not allow to view this information")
示例#3
0
    def patch(self, request, format=None):
        if request.user.is_authenticated() and is_manager(request):
            shift_id = request.POST.get('shift_id')

            shift = Shift.objects.get(id=shift_id)
            shift_data = {'manager_approved': True}
            shift_serializer = ShiftSerializer(shift,
                                               data=shift_data,
                                               partial=True)

            event = Event.objects.get(id=shift.event_id)
            current_emp_id = event.employee_id
            event_data = {'employee_id': shift.interested_emp_id}
            event_serializer = EventSerializer(event,
                                               data=event_data,
                                               partial=True)

            stat_giver = Stat.objects.get(user_id=current_emp_id)
            stat_taker = Stat.objects.get(user_id=shift.interested_emp_id)
            stat_giver_serializer = StatSerializer(
                stat_giver, data={}, context={'situation': 'giver'})
            stat_taker_serializer = StatSerializer(
                stat_taker, data={}, context={'situation': 'taker'})
            if stat_giver_serializer.is_valid(
            ) and stat_taker_serializer.is_valid():
                stat_giver_serializer.save()
                stat_taker_serializer.save()

            if shift_serializer.is_valid() and event_serializer.is_valid():
                shift_serializer.save()
                event_serializer.save()
                return Response(shift_serializer.data)

        return Response(shift_serializer.errors,
                        status=status.HTTP_400_BAD_REQUEST)
示例#4
0
 def test_update_contact(self):
     url = reverse('event-detail', args=[self.event.id])
     request = self.factory.get(url)
     data = EventSerializer(self.event, context={'request': request}).data
     data.update({'name': 'Update Name'})
     request = self.factory.put(url, data, format='json')
     force_authenticate(request, user=self.user)
     view = EventsViewSet.as_view({'put': 'update'})
     response = view(request, pk=data['id'])
     self.assertEqual(Event.objects.get(id=data['id']).name, 'Update Name')
     self.assertEqual(response.status_code, status.HTTP_302_FOUND)
示例#5
0
def new(request):
    parser_class = (FileUploadParser, )
    if request.method == 'POST':
        serializer = EventSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
    else:
        return Response(status=status.HTTP_400_BAD_REQUEST)
示例#6
0
 def get(self, request, *args, **kwargs):
     public_events = Event.objects.filter(is_public=True,
                                          date__gt=datetime.datetime.now())
     data = {}
     public_events = EventSerializer(public_events, many=True).data
     data['public_events'] = public_events
     private_event_invitations = Event.objects.filter(
         is_public=False, invitation__user=request.user)
     private_event_invitations = EventSerializer(private_event_invitations,
                                                 many=True).data
     data['private_event_invitations'] = private_event_invitations
     return Response(data)
示例#7
0
    def post(self, request, format=None):
        serializer = EventSerializer(data=request.data,
                                     context={'request': request})

        employee_id = request.data.get('employee_id')
        employee_profile = Profile.objects.get(user_id=employee_id)
        profile_serializer = ProfileSerializer(employee_profile)

        if serializer.is_valid():
            serializer.save()
            add_event_data = serializer.data
            add_event_data.update({'employee_profile': profile_serializer.data})
            return Response(add_event_data, status=status.HTTP_201_CREATED)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
示例#8
0
    def get(self, request, format=None):
        date_selected = request.GET.get('start_date')
        start_date = parse(date_selected)
        end_date = start_date + timedelta(hours=23, minutes=59, seconds=59)

        user_id = request.user.id
        user_manager = is_manager(request)

        if user_manager:
            events = Event.objects.filter(start_date__range=(start_date, end_date),
                                          manager_id=user_id)
        else:
            events = Event.objects.filter(start_date__range=(start_date, end_date),
                                          employee_id=user_id)

        serializer = EventSerializer(events, many=True)

        employees = events.values('employee_id')
        employee_profiles = Profile.objects.filter(user_id__in=employees)

        for event in serializer.data:
            event_employee = next((e for e in employee_profiles if e.user_id == event.get('employee_id')), None)
            event_employee = ProfileSerializer(event_employee)
            event.update({'employee_profile': event_employee.data})

        return Response(serializer.data)
示例#9
0
class CrossSearchTagSerializer(serializers.ModelSerializer):
    in_posts = PostSerializer(many=True, read_only=True)
    in_events = EventSerializer(many=True, read_only=True)

    class Meta:
        model = Tag
        fields = ['name', 'in_events', 'in_posts']
示例#10
0
 def deregister_event(self, request, **kwargs):
     student = request.user.student
     event = Event.objects.get(id=kwargs["pk"])
     deregistration = Registration.objects.get(event=event, student=student)
     deregistration.delete()
     serializer = EventSerializer(event)
     return Response(serializer.data)
示例#11
0
def get_events(request):
    if request.method == 'GET':
        event = Event.objects.all()
        serializer = EventSerializer(event, many=True)
        return Response(serializer.data)
    else:
        return Response(status=status.HTTP_400_BAD_REQUEST)
示例#12
0
 def unbookmark_event(self, request, **kwargs):
     student = request.user.student
     event = Event.objects.get(id=kwargs["pk"])
     unbookmark = Bookmark.objects.get(event=event, student=student)
     unbookmark.delete()
     serializer = EventSerializer(event)
     return Response(serializer.data)
示例#13
0
def edit(request, event_id):
    parser_class = (FileUploadParser, )
    try:
        event = Event.objects.get(id=event_id)
    except Event.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'PATCH':
        serializer = EventSerializer(event, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
    else:
        return Response(status=status.HTTP_400_BAD_REQUEST)
示例#14
0
def findEventsByCityAndType(request, city=None, type=None):
    if type:
        events = Event.objects.filter(city=city)  # , type=type)
    else:
        print(city)
        events = Event.objects.filter(city=city)
    serializer = EventSerializer(events, many=True)
    return Response(serializer.data)
示例#15
0
 def bookmarked_events(self, request, **kwargs):
     student = request.user.student
     bookmarks = Bookmark.objects.filter(student=student)
     events = []
     for bookmark in bookmarks:
         events.append(bookmark.event)
     serializer = EventSerializer(events, many=True)
     return Response(serializer.data)
示例#16
0
 def attend_event(self, request, **kwargs):
     student = request.user.student
     event = Event.objects.get(id=kwargs["pk"])
     registration = Registration.objects.filter(event=event,
                                                student=student)
     #registration.attended = True
     registration.update(attended=True)
     serializer = EventSerializer(event)
     return Response(serializer.data)
示例#17
0
 def bookmark_event(self, request, **kwargs):
     student = request.user.student
     event = Event.objects.get(id=kwargs["pk"])
     bookmark, bookmarked = Bookmark.objects.get_or_create(event=event,
                                                           student=student)
     serializer = EventSerializer(event)
     if bookmarked:
         return Response(serializer.data)
     else:
         return Response(bookmarked)
示例#18
0
 def register_event(self, request, **kwargs):
     student = request.user.student
     event = Event.objects.get(id=kwargs["pk"])
     registration, registered = Registration.objects.get_or_create(
         event=event, student=student)
     serializer = EventSerializer(event)
     if registered:
         return Response(serializer.data)
     else:
         return Response(registered)
示例#19
0
def get_event(request, event_id):
    try:
        event = Event.objects.get(id=event_id)
    except Event.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        serializer = EventSerializer(event)
        return Response(serializer.data)
    else:
        return Response(status=status.HTTP_400_BAD_REQUEST)
示例#20
0
 def get(self, request):
     if request.user.userprofile is None:
         return Response({'events': 'there is no userprofile'},
                         status=status.HTTP_404_NOT_FOUND)
     events = Event.objects.filter(organizer_id=request.user.userprofile.id)
     if not events:
         return Response({'events': 'No Events are in the database'},
                         status=status.HTTP_200_OK)
     events = EventSerializer(events, many=True)
     return Response({'events': events.data}, status=status.HTTP_200_OK)
示例#21
0
    def test_retrieve_events(self):
        """Test retrieving list of events"""
        sample_event()
        sample_event()

        res = self.client.get(EVENTS_URL)

        events = Event.objects.all().order_by('-name')
        serializers = EventSerializer(events, many=True)
        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data, serializers.data)
示例#22
0
    def get(self, request, event_date, name):
        event_date = datetime.strptime(event_date, "%Y-%m-%d").date()
        events = Event.objects.filter(name=name, event_date=event_date)
        if not events:
            return Response({'reason': "there is no event with the name:"\
                     f"{name} and the date {str(event_date)} "},
                      status=status.HTTP_404_NOT_FOUND)

        event_serializer = EventSerializer(events[0])
        return Response({'event': event_serializer.data},
                        status=status.HTTP_200_OK)
示例#23
0
    def retrieve(self, request, pk=None):
        try:
            queryset_organisation = Organisation.objects.get(pk=pk)
        except Organisation.DoesNotExist:
            raise Http404
        queryset_event = Event.objects.filter(organisation=pk)
        serialized_data_events = EventSerializer(queryset_event, many=True)
        serialized_data_organisation = OrganisationSerializer(
            queryset_organisation)
        data = {**serialized_data_organisation.data}
        data['events'] = serialized_data_events.data

        return Response(data, status=status.HTTP_200_OK)
示例#24
0
    def test_retrieve_event_list(self):
        """test retrieve event"""
        Event.objects.create(state=Event.EventState.CREATED, title="test name")
        Event.objects.create(state=Event.EventState.CREATED,
                             title="Atest name")

        res = self.client.get(EVENT_URL)

        lst = Event.objects.all().order_by("-title")
        serializer = EventSerializer(lst, many=True)

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data["items"], serializer.data)
示例#25
0
    def get(self, request, format=None):
        selected_date = request.GET.get('selected_date')
        selected_date = parse(selected_date)

        user_id = request.user.id
        profile = Profile.objects.get(user_id=user_id)
        position_id = profile.position_id

        response = {'week_hours': 0,
                    'week_salary': 0,
                    'month_hours': 0,
                    'month_salary': 0,
                    'hourly_salary': 0}

        if not position_id:
            return Response(response)

        today = datetime.today()
        events_week = get_week_events(today, user_id)
        events_month = get_month_events(selected_date, user_id)

        position = Position.objects.get(id=position_id)
        hourly_salary = position.salary

        week_serializer = EventSerializer(events_week, many=True)
        month_serializer = EventSerializer(events_month, many=True)

        week_hours, week_salary = get_total_salary(week_serializer, hourly_salary)
        month_hours, month_salary = get_total_salary(month_serializer, hourly_salary)

        response = {'week_hours': week_hours,
                    'week_salary': week_salary,
                    'month_hours': month_hours,
                    'month_salary': month_salary,
                    'hourly_salary': hourly_salary}

        return Response(response)
示例#26
0
    def get(self, request, format=None):
        date_selected = request.GET.get('month_date')
        date_selected = parse(date_selected)

        if date_selected.hour != 0:
            offset = timedelta(hours=date_selected.hour)
        else:
            offset = timedelta(hours=0)

        month_selected = date_selected.month
        year_selected = date_selected.year

        [month_start, month_end] = calendar.monthrange(year_selected,
                                                       month_selected)

        start_date = datetime(year_selected, month_selected, 1) + offset
        end_date = (datetime(year_selected, month_selected, month_end) +
                    timedelta(hours=24) + offset)

        user_id = request.user.id
        user_manager = is_manager(request)

        if user_manager:
            events = Event.objects.filter(start_date__range=(start_date, end_date),
                                          manager_id=user_id)
        else:
            events = Event.objects.filter(start_date__range=(start_date, end_date),
                                          employee_id=user_id)

        serializer = EventSerializer(events, many=True)

        employees = events.values('employee_id')
        employee_profiles = Profile.objects.filter(user_id__in=employees)

        events_list = [[] for x in range(month_end + 1)]

        for event in serializer.data:
            if parse(event.get('start_date')).month != month_selected:
                day = month_end
            else:
                day = (parse(event.get('start_date')) - offset).day

            event_employee = next((e for e in employee_profiles if e.user_id == event.get('employee_id')), None)
            event_employee = ProfileSerializer(event_employee)
            event.update({'employee_profile': event_employee.data})
            events_list[day].append(event)

        return Response(events_list)
示例#27
0
 def create(self, request):
     """create"""
     serializer = CreateEventSerializer(data=request.data, many=False)
     serializer.is_valid(raise_exception=True)
     event = self.model.objects.create(
         name=serializer.data['name'],
         created_by=serializer.data['login']['username'],
         date=serializer.data['date'],
         url=serializer.data['url'],
     )
     Participant.objects.create(
         event=event,
         username=serializer.data['login']['username'],
         status=Participant.STATUS_YES
     )
     return Response(EventSerializer(event).data)
示例#28
0
def indexView(request):
    yesterday = datetime.today() - timedelta(days=1)

    if request.user.is_authenticated:
        #Show all events to club members
        events_obj = Event.objects.exclude(date_time__lte=yesterday)
    else:
        #Show events with poster, form_link, message to general public
        events_obj = Event.objects.exclude(
            Q(date_time__lte=yesterday) | Q(poster='') | Q(form_link='')
            | Q(publicity_message=''))
    events_data = EventSerializer(
        events_obj,
        many=True,
        fields=['name', 'date_time', 'poster', 'sigs', 'venue']).data
    return Response(events_data)
示例#29
0
 def post(self, request, *args, **kwargs):
     try:
         name = request.data.get('name', '')
         host = request.user
         date = request.data.get('date', '')
         duration = request.data.get('duration', 0)
         is_public = request.data.get('is_public', True)
         capacity = request.data.get('capacity', 0)
         obj = Event.objects.create(name=name,
                                    host=host,
                                    date=date,
                                    duration=duration,
                                    is_public=is_public,
                                    capacity=capacity)
         obj.save()
         data = EventSerializer(obj).data
         return Response(data)
     except Exception as e:
         return ApiResponse.bad_request(
             "Unable to add new event, something went wrong! Maybe Use YYYY-MM-DD HH:MM:SS date format"
         )
示例#30
0
    def get(self, request, format=None):
        week_monday = request.GET.get('week_monday')
        week_monday = parse(week_monday)

        if week_monday.hour != 0:
            offset = timedelta(hours=week_monday.hour, seconds=1)
        else:
            offset = timedelta(hours=0)

        start_date = datetime(week_monday.year, week_monday.month, week_monday.day)
        end_date = start_date + timedelta(days=7)

        user_id = request.user.id
        user_manager = is_manager(request)

        if user_manager:
            events = Event.objects.filter(start_date__range=(start_date, end_date),
                                          manager_id=user_id).order_by('start_date')
        else:
            events = Event.objects.filter(start_date__range=(start_date, end_date),
                                          employee_id=user_id).order_by('start_date')

        serializer = EventSerializer(events, many=True)

        employees = events.values('employee_id')
        employee_profiles = Profile.objects.filter(user_id__in=employees)

        events_list = [[] for x in range(7)]

        for event in serializer.data:
            weekday = (parse(event.get('start_date')) - offset).weekday()

            event_employee = next((e for e in employee_profiles if e.user_id == event.get('employee_id')), None)
            event_employee = ProfileSerializer(event_employee)
            event.update({'employee_profile': event_employee.data})

            events_list[weekday].append(event)

        return Response(events_list)