コード例 #1
0
ファイル: views.py プロジェクト: paocastrob/apiv2
def get_cohorts(request, id=None):

    items = Cohort.objects.filter(private=False)

    if isinstance(request.user, AnonymousUser) == False:
        # filter only to the local academy
        items = localize_query(items, request)

    upcoming = request.GET.get('upcoming', None)
    if upcoming == 'true':
        now = timezone.now()
        items = items.filter(kickoff_date__gte=now)

    academy = request.GET.get('academy', None)
    if academy is not None:
        items = items.filter(academy__slug__in=academy.split(","))

    location = request.GET.get('location', None)
    if location is not None:
        items = items.filter(academy__slug__in=location.split(","))

    items = items.order_by('kickoff_date')
    serializer = GetCohortSerializer(items, many=True)

    return Response(serializer.data)
コード例 #2
0
    def get(self, request, academy_id, user_id=None):
        is_many = bool(not user_id)

        if user_id is not None:
            item = ProfileAcademy.objects.filter(
                user__id=user_id, academy_id=academy_id).first()
            if item is None:
                raise ValidationException(
                    'Profile not found for this user and academy', 404)

            serializer = GETProfileAcademy(item, many=False)
            return Response(serializer.data)

        items = ProfileAcademy.objects.filter(academy__id=academy_id)
        items = localize_query(items, request)  # only form this academy

        roles = request.GET.get('roles', None)
        if is_many and roles is not None:
            items = items.filter(role__in=roles.split(","))

        status = request.GET.get('status', None)
        if is_many and status is not None:
            items = items.filter(status__iexact=status)

        if not is_many:
            items = items.first()

        serializer = GETProfileAcademy(items, many=is_many)
        return Response(serializer.data)
コード例 #3
0
    def validations(self, request, cohort_id=None, user_id=None, matcher=None,
            disable_cohort_user_just_once=False, disable_certificate_validations=False):

        if user_id is None:
            user_id = request.data.get('user')

        if cohort_id is None or user_id is None:
            raise ValidationException("Missing cohort_id or user_id", code=400)

        if User.objects.filter(id=user_id).count() == 0:
            raise ValidationException("invalid user_id", code=400)

        cohort = Cohort.objects.filter(id=cohort_id)
        if not cohort:
            raise ValidationException("invalid cohort_id", code=400)

        cohort = localize_query(cohort, request).first() # only from this academy

        if cohort is None:
            logger.debug(f"Cohort not be found in related academies")
            raise ValidationException('Specified cohort not be found')

        if not disable_cohort_user_just_once and CohortUser.objects.filter(user_id=user_id,
                cohort_id=cohort_id).count():
            raise ValidationException('That user already exists in this cohort')

        if not disable_certificate_validations and self.count_certificates_by_cohort(
                cohort, user_id) > 0:
            raise ValidationException('This student is already in another cohort for the same certificate, please mark him/her hi educational status on this prior cohort as POSTPONED before cotinuing')

        role = request.data.get('role')
        if role == 'TEACHER' and CohortUser.objects.filter(role=role, cohort_id=cohort_id).exclude(user__id__in=[user_id]).count():
            raise ValidationException('There can only be one main instructor in a cohort')

        cohort_user = CohortUser.objects.filter(user__id=user_id, cohort__id=cohort_id).first()

        is_graduated = request.data.get('educational_status') == 'GRADUATED'
        is_late = (True if cohort_user and cohort_user.finantial_status == 'LATE' else request.data
            .get('finantial_status') == 'LATE')
        if is_graduated and is_late:
            raise ValidationException(('Cannot be marked as `GRADUATED` if its financial '
                'status is `LATE`'))

        has_tasks = Task.objects.filter(user_id=user_id, task_status='PENDING',
            task_type='PROJECT').count()
        if is_graduated and has_tasks:
            raise ValidationException('User has tasks with status pending the educational status cannot be GRADUATED')

        data = {}

        for key in request.data:
            data[key] = request.data.get(key)

        data['cohort'] = cohort_id

        return {
            'data': data,
            'cohort': cohort,
            'cohort_user': cohort_user,
        }
コード例 #4
0
ファイル: views.py プロジェクト: paocastrob/apiv2
def get_leads(request, id=None):

    items = FormEntry.objects.all()

    if isinstance(request.user, AnonymousUser) == False:
        # filter only to the local academy
        items = localize_query(items, request)

    academy = request.GET.get('academy', None)
    if academy is not None:
        items = items.filter(academy__slug__in=academy.split(","))

    start = request.GET.get('start', None)
    if start is not None:
        start_date = datetime.datetime.strptime(start, "%Y-%m-%d").date()
        items = items.filter(created_at__gte=start_date)

    end = request.GET.get('end', None)
    if end is not None:
        end_date = datetime.datetime.strptime(end, "%Y-%m-%d").date()
        items = items.filter(created_at__lte=end_date)

    items = items.order_by('created_at')
    serializer = FormEntrySerializer(items, many=True)
    return Response(serializer.data)
コード例 #5
0
ファイル: views.py プロジェクト: jefer94/apiv2
def get_tasks(request, id=None):

    items = Task.objects.all()
    logger.debug(f"Found {items.count()} tasks")
    if isinstance(request.user, AnonymousUser) == False:
        # filter only to the local academy
        items = localize_query(items, request, "cohort__academy__id__in")

    academy = request.GET.get('academy', None)
    if academy is not None:
        items = items.filter(cohort__academy__slug__in=academy.split(","))

    user = request.GET.get('user', None)
    if user is not None:
        items = items.filter(user__id__in=user.split(","))

    # tasks these cohorts (not the users, but the tasts belong to the cohort)
    cohort = request.GET.get('cohort', None)
    if cohort is not None:
        items = items.filter(
            Q(cohort__slug__in=cohort.split(","))
            | Q(cohort__id__in=cohort.split(",")))

    # tasks from users that belong to these cohort
    stu_cohort = request.GET.get('stu_cohort', None)
    if stu_cohort is not None:
        items = items.filter(
            user__cohortuser__cohort__id__in=stu_cohort.split(","),
            user__cohortuser__role="STUDENT")

    # tasks from users that belong to these cohort
    teacher = request.GET.get('teacher', None)
    if teacher is not None:
        teacher_cohorts = CohortUser.objects.filter(
            user__id__in=teacher.split(","),
            role="TEACHER").values_list('cohort__id', flat=True)
        items = items.filter(user__cohortuser__cohort__id__in=teacher_cohorts,
                             user__cohortuser__role="STUDENT")

    task_status = request.GET.get('task_status', None)
    if task_status is not None:
        items = items.filter(task_status__in=task_status.split(","))

    revision_status = request.GET.get('revision_status', None)
    if revision_status is not None:
        items = items.filter(revision_status__in=revision_status.split(","))

    task_type = request.GET.get('task_type', None)
    if task_type is not None:
        items = items.filter(task_type__in=task_type.split(","))

    items = items.order_by('created_at')
    serializer = TaskGETSerializer(items, many=True)
    return Response(serializer.data)
コード例 #6
0
    def put(self, request, cohort_id=None, academy_id=None):
        if cohort_id is None:
            raise ValidationException("Missing cohort_id", code=400)

        cohort = Cohort.objects.filter(id=cohort_id, academy__id=academy_id)
        cohort = localize_query(cohort, request).first() # only from this academy
        if cohort is None:
            logger.debug(f"Cohort not be found in related academies")
            raise ValidationException('Specified cohort not be found')
        
        serializer = CohortPUTSerializer(cohort, data=request.data, context={ "request": request, "cohort_id": cohort_id })
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
コード例 #7
0
ファイル: views.py プロジェクト: paocastrob/apiv2
def get_leads_report(request, id=None):

    items = FormEntry.objects.all()

    if isinstance(request.user, AnonymousUser) == False:
        # filter only to the local academy
        items = localize_query(items, request)

    group_by = request.GET.get('by', 'location,created_at__date,course')
    if group_by != '':
        group_by = group_by.split(",")
    else:
        group_by = ['location', 'created_at__date', 'course']

    academy = request.GET.get('academy', None)
    if academy is not None:
        items = items.filter(location__in=academy.split(","))

    start = request.GET.get('start', None)
    if start is not None:
        start_date = datetime.datetime.strptime(start, "%Y-%m-%d").date()
        items = items.filter(created_at__gte=start_date)

    end = request.GET.get('end', None)
    if end is not None:
        end_date = datetime.datetime.strptime(end, "%Y-%m-%d").date()
        items = items.filter(created_at__lte=end_date)

    items = items.values(*group_by).annotate(total_leads=Count('location'))

    if "created_at__date" in group_by:
        items = items.annotate(
            created_date=Func(
                F('created_at'),
                Value('YYYYMMDD'),
                function='to_char',
                output_field=CharField()
            )
        )
    # items = items.order_by('created_at')
    return Response(items)
コード例 #8
0
ファイル: serializers.py プロジェクト: breatheco-de/apiv2
    def validate(self, data):
        self.index = self.index + 1

        request = self.context['request']
        is_many = isinstance(request.data, list)
        cohort_id = self.context['cohort_id']
        user_id = self.context['user_id']
        disable_cohort_user_just_once = True
        disable_certificate_validations = True
        body = request.data if is_many else [request.data]
        request_item = body[self.index]
        is_post_method = request.method == 'POST'

        id = None
        if is_many and 'id' in request_item:
            id = request_item['id']

        if is_many and 'user' in request_item:
            user_id = request_item['user']

        if is_many and 'cohort' in request_item:
            cohort_id = request_item['cohort']

        if id and (not user_id or not cohort_id):
            ids = CohortUser.objects.filter(id=id).values_list(
                'user_id', 'cohort_id').first()

            if not ids:
                raise ValidationException("Invalid id", code=400)
            user_id = ids[0]
            cohort_id = ids[1]

        if user_id is None:
            user_id = request_item.get('user')

        if not is_many and (cohort_id is None or user_id is None):
            raise ValidationException("Missing cohort_id or user_id", code=400)

        if User.objects.filter(id=user_id).count() == 0:
            raise ValidationException("invalid user_id", code=400)

        cohort = Cohort.objects.filter(id=cohort_id)
        if not cohort:
            raise ValidationException("invalid cohort_id", code=400)

        # only from this academy
        cohort = localize_query(cohort, request).first()

        if cohort is None:
            logger.debug(f"Cohort not be found in related academies")
            raise ValidationException('Specified cohort not be found')

        if not disable_cohort_user_just_once and CohortUser.objects.filter(
                user_id=user_id, cohort_id=cohort_id).count():
            raise ValidationException(
                'That user already exists in this cohort')

        if ('role' in request_item and request_item['role'] != 'STUDENT'
                and not ProfileAcademy.objects.filter(
                    user_id=user_id, academy__id=cohort.academy.id).exclude(
                        role__slug='student').exists()):
            raise ValidationException(
                'The user must be staff member to this academy before it can be a teacher'
            )

        if (is_post_method and cohort.syllabus
                and self.count_certificates_by_cohort(cohort, user_id) > 0):
            raise ValidationException(
                'This student is already in another cohort for the same certificate, please mark him/her hi educational status on this prior cohort different than ACTIVE before cotinuing'
            )

        role = request_item.get('role')
        if role == 'TEACHER' and CohortUser.objects.filter(
                role=role,
                cohort_id=cohort_id).exclude(user__id__in=[user_id]).count():
            raise ValidationException(
                'There can only be one main instructor in a cohort')

        cohort_user = CohortUser.objects.filter(user__id=user_id,
                                                cohort__id=cohort_id).first()

        if not is_post_method and not cohort_user:
            raise ValidationException('Cannot find CohortUser')

        if not id and cohort_user:
            id = cohort_user.id

        is_graduated = request_item.get('educational_status') == 'GRADUATED'
        is_late = (True
                   if cohort_user and cohort_user.finantial_status == 'LATE'
                   else request_item.get('finantial_status') == 'LATE')
        if is_graduated and is_late:
            raise ValidationException(
                ('Cannot be marked as `GRADUATED` if its financial '
                 'status is `LATE`'))

        has_tasks = Task.objects.filter(user_id=user_id,
                                        task_status='PENDING',
                                        task_type='PROJECT').count()
        if is_graduated and has_tasks:
            raise ValidationException(
                'User has tasks with status pending the educational status cannot be GRADUATED'
            )

        data = {}

        for key in request_item:
            data[key] = request_item.get(key)

        data['cohort'] = cohort_id

        user = User.objects.filter(id=user_id).first()
        return {**data, 'id': id, 'cohort': cohort, 'user': user}