Exemplo n.º 1
0
    def patch(self, request, format=None):
        if request.user.is_authenticated() and is_manager(request):
            employee_id = request.data.get('employee_id')
            profile = Profile.objects.get(user_id=employee_id)
            new_position = {'position_id': request.data.get('position_id')}

            serializer = ProfileSerializer(profile, data=new_position,
                                           partial=True)

            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)

        return Response(status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 2
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)
Exemplo n.º 3
0
 def get(self, request, format=None):
     user_id = request.user.id
     employees = Employees.objects.filter(
         manager_id=user_id).values('employee_id')
     employee_profiles = Profile.objects.filter(
         user_id__in=employees).order_by('user_id')
     serializer = ProfileSerializer(employee_profiles, many=True)
     return Response(serializer.data)
Exemplo n.º 4
0
 def get(self, request, format=None):
     if request.user.is_authenticated():
         current_user_id = request.user.id
         profile_exists = exists_or_not(Profile, user_id=current_user_id)
         if profile_exists:
             user_profile = Profile.objects.get(user_id=current_user_id)
             serializer = ProfileSerializer(user_profile)
             return Response(serializer.data)
         else:
             return Response(status=status.HTTP_200_OK)
     return Response(status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 5
0
 def post(self, request, format=None):
     user_id = request.user.id
     profile_exists = exists_or_not(Profile, user_id=user_id) #checks if the user has a profile page in the database
     if profile_exists:
         current_profile = Profile.objects.get(user_id=user_id)
         serializer = ProfileSerializer(current_profile, data=request.data)
     else:
         serializer = ProfileSerializer(data=request.data, context={'user': request.user})
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 6
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)
Exemplo n.º 7
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)
Exemplo n.º 8
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)
Exemplo n.º 9
0
    def post(self, request, format=None):
        first_name = request.POST['firstname']
        last_name = request.POST['lastname']
        email = request.POST['email']
        password = request.POST['password']
        organization_name = request.POST['organization']
        create_org = False
        ismanager = False

        if organization_name is None:
            return Response(status=status.HTTP_400_BAD_REQUEST)
        if type(organization_name) is unicode:
            organization_name = organization_name.encode('utf-8')

        try:
            user = User.objects.create_user(email, email, password)
        except:
            res = {'code': 400, 'message': 'User name already taken!'}
            return Response(data=json.dumps(res),
                            status=status.HTTP_400_BAD_REQUEST)

        user.first_name = first_name
        user.last_name = last_name
        if user is not None:
            print "USER CREATED SUCCESSFULLY"
            organization_name = str.lower(organization_name)
            org_db = Organization.objects.filter(
                organization_name=organization_name)

            #if organization already exists
            if org_db:
                org_id = org_db[0].id
                manager = Profile.objects.get(ismanager=True,
                                              organization_id=org_id)
                Employees.objects.create(manager_id=manager.user_id,
                                         employee_id=user.id)

            #if the organization does not exist
            else:
                org_data = {'organization_name': organization_name}
                org_serializer = OrganizationSerializer(data=org_data)

                if org_serializer.is_valid():
                    org_serializer.save()
                    org_id = org_serializer.data.get('id')
                    ismanager = True
                else:
                    return Response(status=status.HTTP_400_BAD_REQUEST)

            if ismanager is False:
                stat_serializer = StatSerializer(data={},
                                                 context={'user': user})
                stat_serializer.is_valid(raise_exception=True)

            prof_data = {
                'first_name': first_name,
                'last_name': last_name,
                'email': email,
                'organization_id': org_id,
                'ismanager': ismanager
            }
            prof_serializer = ProfileSerializer(data=prof_data,
                                                context={'user': user})

            if prof_serializer.is_valid():
                user.save()
                prof_serializer.save()
                if not ismanager:
                    stat_serializer.save()
                print "PROFILE CREATED SUCCESSFULLY"
                print "STAT PROFILE SUCCESS"
                return Response(status=status.HTTP_201_CREATED)
            else:
                return Response(status=status.HTTP_400_BAD_REQUEST)

        else:
            print "UNSUCCESSFUL CREATION"
            return Response(status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 10
0
    def get(self, request, format=None):
        today = datetime.today()

        user_id = request.user.id
        profile = Profile.objects.get(user_id=user_id)
        organization_id = profile.organization_id
        profile_serializer = ProfileSerializer(profile)
        shifts = Shift.objects.filter(organization_id=organization_id,
                                      manager_approved=False)
        shifts_serializers = ShiftSerializer(shifts, many=True)

        events_ids = shifts.values('event')
        shifts_details = Event.objects.filter(id__in=events_ids)
        shifts_details_serializer = EventSerializer(shifts_details, many=True)

        current_emp_ids = shifts_details.values('employee')
        interested_emp_ids = shifts.values('interested_emp_id')

        current_profiles = Profile.objects.filter(user_id__in=current_emp_ids)
        interested_profiles = Profile.objects.filter(
            user_id__in=interested_emp_ids)
        profiles = (current_profiles | interested_profiles).distinct()
        profiles_serializer = ProfileSerializer(profiles, many=True)

        current_shifts = Event.objects.filter(start_date__gte=today,
                                              employee_id=user_id)
        current_shifts = current_shifts.exclude(id__in=events_ids)
        current_shifts = EventSerializer(current_shifts, many=True)

        shifts = {
            'current_shifts': [],
            'searching': [],
            'waiting_approval': [],
            'user_profile': profile_serializer.data
        }

        shifts['current_shifts'] = current_shifts.data

        for shift in shifts_serializers.data:
            shift_detail = next((sd for sd in shifts_details_serializer.data
                                 if sd.get('id') == shift.get('event_id')),
                                None)
            current_profile = next(
                (p for p in profiles_serializer.data
                 if p.get('user_id') == shift_detail.get('employee_id')), None)
            if shift.get('searching'):
                is_current_user = (shift_detail.get('employee_id') == user_id)
                shifts['searching'].append({
                    'shift': shift,
                    'shift_detail': shift_detail,
                    'current_profile': current_profile,
                    'is_current_user': is_current_user
                })
            elif not shift.get('manager_approved'):
                interested_profile = next(
                    (p for p in profiles_serializer.data
                     if p.get('user_id') == shift.get('interested_emp_id')),
                    None)
                shifts['waiting_approval'].append({
                    'shift':
                    shift,
                    'shift_detail':
                    shift_detail,
                    'current_profile':
                    current_profile,
                    'interested_profile':
                    interested_profile
                })

        return Response(shifts)