Пример #1
0
    def post(self, request, id):
        try:
            employee = Employee.objects.get(user=request.user)
            lessonOwned = LessonOwned.objects.get(lesson__id=id,
                                                  owner=employee)

            if not lessonOwned.isComplete:
                isComplete = False
                for i in lessonOwned.stepOwned.all():
                    if not i.isComplete:
                        isComplete = False
                        break
                    else:
                        isComplete = True

                lessonOwned.isComplete = isComplete
                lessonOwned.save()

            return Response({
                "status": status.HTTP_200_OK,
                "message": "success",
                "data": {
                    "id": lessonOwned.lesson.id,
                    "is_complete": lessonOwned.isComplete
                }
            })

        except FieldError as e:
            return FieldErrorHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #2
0
    def get(self, request, id):
        try:
            article = Article.objects.filter(id=id)
            if id == "":
                raise FieldError("id input not valid")
            if not article:
                raise EmptyResultSet("no result for article id = " + str(id))
            else:
                article = Article.objects.get(id=id)

            return Response(
                {
                    "status": status.HTTP_200_OK,
                    "message": "success",
                    "data": {
                        "id": article.id,
                        "title": article.title,
                        "content": article.content
                    }
                },
                status=status.HTTP_200_OK)

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #3
0
    def get(self, request, id):
        try:
            forum = Forum.objects.filter(id=id)
            if not id:
                raise FieldError("id input not valid")
            if not forum:
                raise EmptyResultSet("no result for forum id = " + str(id))
            else:
                forum = Forum.objects.get(id=id)

            answer = []
            for i in forum.answer.all():
                isUpvote = False
                if Employee.objects.get(user=request.user) in i.upvote.all():
                    isUpvote = True
                data = {
                    "id": i.id,
                    "username": i.owner.user.username,
                    "answer": i.answer,
                    "upvote": i.upvote.count(),
                    "is_upvote": isUpvote,
                    "created_at": i.createdAt
                }
                answer.append(data)
            isUpvote = False
            if Employee.objects.get(user=request.user) in forum.upvote.all():
                isUpvote = True

            return Response({
                "status": status.HTTP_200_OK,
                "message": "success",
                "data": {
                    "id": forum.id,
                    "username": forum.owner.user.username,
                    "title": forum.title,
                    "question": forum.question,
                    "upvote": forum.upvote.count(),
                    "answer": answer,
                    "is_upvote": isUpvote,
                    "created_at": forum.createdAt
                }
            })

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #4
0
    def post(self, request, id):
        try:
            forum = Forum.objects.get(id=id)
            if not id:
                raise FieldError("id input not valid")
            if forum == []:
                raise EmptyResultSet("no result for forum id = ", id)
            if request.data['is_increase'] == "":
                raise FieldError("answer is not valid")

            employee = Employee.objects.get(user=request.user)
            if request.data['is_increase'] == "true":
                if employee in forum.upvote.all():
                    raise Exception("Already upvote")
                else:
                    forum.upvote.add(employee)
            else:
                forum.upvote.remove(employee)

            isUpvote = False
            if Employee.objects.get(user=request.user) in forum.upvote.all():
                isUpvote = True

            return Response({
                "status": status.HTTP_200_OK,
                "message": "success",
                "data": {
                    "id": forum.id,
                    "username": forum.owner.user.username,
                    "title": forum.title,
                    "question": forum.question,
                    "upvote": forum.upvote.count(),
                    "is_upvote": isUpvote,
                    "created_at": forum.createdAt
                }
            })

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #5
0
    def post(self, request, id):
        try:
            forum = Forum.objects.get(id=id)
            if not id:
                raise FieldError("id input not valid")
            if forum == []:
                raise EmptyResultSet("no result for forum id = ", id)
            if request.data['answer'] == "":
                raise FieldError("answer is not valid")

            owner = Employee.objects.get(user=request.user)
            answer = Answer.objects.create(answer=request.data['answer'],
                                           owner=owner)
            forum.answer.add(answer)

            isUpvote = False
            if Employee.objects.get(user=request.user) in answer.upvote.all():
                isUpvote = True

            return Response({
                "status": status.HTTP_201_CREATED,
                "message": "objects created",
                "data": {
                    "id": answer.id,
                    "username": answer.owner.user.username,
                    "upvote": answer.upvote.count(),
                    "is_upvote": isUpvote,
                    "created_at": answer.createdAt
                }
            })

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #6
0
    def post(self, request, id):
        try:
            '''
            answer : [
                {
                    id :
                    question :
                    answer : {
                        id : 
                        answer : 
                    }
                },
                {
                    id :
                    question :
                    answer : {
                        id : 
                        answer : 
                    }
                },
                
            ]
            '''

            employee = Employee.objects.get(user=request.user)
            totalPoint = 0

            quizSection = QuizSection.objects.get(id=id)
            quizSectionOwned = QuizSectionOwned.objects.get(owner=employee,
                                                            quizSection_id=id)

            if quizSectionOwned.attempt < 3:
                allPoint = 0
                for i in request.data["answer"]:
                    quizOwned = QuizOwned.objects.get(owner=employee,
                                                      quiz_id=i["id"])
                    answer = Choice.objects.get(id=i["answer"]["id"])
                    quizOwned.isRight = answer.isRight
                    quizOwned.save()
                    if quizOwned.isRight:
                        totalPoint += quizOwned.quiz.point
                    allPoint += quizOwned.quiz.point

                quizSectionOwned.quizResult = (totalPoint / allPoint) * 100
                quizSectionOwned.attempt += 1
                quizSectionOwned.save()
                if quizSectionOwned.quizResult >= quizSection.minimumQuizScore and not quizSectionOwned.isComplete:
                    quizSectionOwned.isPassedQuiz = True
                    quizSectionOwned.isComplete = True
                    quizSectionOwned.save()
                    sectionOwned = SectionOwned.objects.filter(
                        quizSectionOwned=quizSectionOwned)[0]
                    courseOwned = CourseOwned.objects.filter(
                        sectionOwned=sectionOwned)[0]

                    courseOwned.lastLesson = None
                    courseOwned.lastStep = None
                    courseOwned.lastQuiz = quizSection
                    courseOwned.totalComplete += 1
                    courseOwned.save()

                    if courseOwned.totalComplete / courseOwned.course.totalStepAndQuiz == 1.0:

                        employee.pewiraMilesBalance += courseOwned.course.reward
                        employee.save()
                        BalanceHistory.objects.create(
                            owner=employee,
                            description="Hadiah kursus " +
                            courseOwned.course.name,
                            balance=courseOwned.course.reward,
                            type="Kursus")
                        Notification.objects.create(
                            owner=employee,
                            notif=
                            "Kamu mendapatkan hadiah karena menyelesaikan kursus"
                            + courseOwned.course.name,
                            category="Kursus")
            else:
                raise PermissionDenied("maximum attempt")

            return Response(
                {
                    "status": status.HTTP_200_OK,
                    "message": "success",
                    "data": {
                        "id": quizSection.id,
                        "is_complete": quizSectionOwned.isComplete,
                        "quiz_result": quizSectionOwned.quizResult,
                        "is_passed": quizSectionOwned.isPassedQuiz,
                        "attempt": quizSectionOwned.attempt
                    }
                },
                status=status.HTTP_200_OK)

        except PermissionDenied as e:
            return PermissionDeniedHandler(e)

        except AttributeError as e:
            return FieldErrorHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #7
0
    def post(self, request, id):
        try:
            timestamp = request.data['timestamp']

            if not timestamp:
                raise FieldError("timestamp is not valid")

            employee = Employee.objects.get(user=request.user)
            step = Step.objects.get(id=id)
            stepOwned = StepOwned.objects.get(step__id=id, owner=employee)

            if not stepOwned.isComplete:
                stepOwned.isComplete = True if datetime.strptime(
                    timestamp,
                    '%H:%M:%S').time() >= stepOwned.step.timeMinimum else False
                stepOwned.timeConsume = timestamp
                stepOwned.save()

                if stepOwned.isComplete:
                    lessonOwned = LessonOwned.objects.filter(
                        stepOwned=stepOwned)[0]
                    sectionOwned = SectionOwned.objects.filter(
                        lessonOwned=lessonOwned)[0]
                    courseOwned = CourseOwned.objects.filter(
                        sectionOwned=sectionOwned)[0]

                    courseOwned.lastLesson = lessonOwned.lesson
                    courseOwned.lastStep = stepOwned.step
                    courseOwned.lastQuiz = None
                    courseOwned.totalComplete += 1
                    courseOwned.save()

                    isLessonComplete = False
                    for i in lessonOwned.stepOwned.all():
                        if i.isComplete:
                            isLessonComplete = True
                        else:
                            isLessonComplete = False
                            break
                    lessonOwned.isComplete = isLessonComplete
                    lessonOwned.save()
                    isSectionComplete = False
                    for i in sectionOwned.lessonOwned.all():
                        if i.isComplete:
                            isSectionComplete = True
                        else:
                            isSectionComplete = False
                            break
                    for i in sectionOwned.quizSectionOwned.all():
                        if i.isComplete:
                            isSectionComplete = True
                        else:
                            isSectionComplete = False
                            break
                    sectionOwned.isComplete = isSectionComplete
                    sectionOwned.save()

                    if courseOwned.totalComplete / courseOwned.course.totalStepAndQuiz == 1.0:
                        employee.pewiraMilesBalance += courseOwned.course.reward
                        BalanceHistory.objects.create(
                            owner=employee,
                            description="Hadiah kursus " +
                            courseOwned.course.name,
                            balance=courseOwned.course.reward,
                            type="Kursus")
                        Notification.objects.create(
                            owner=employee,
                            notif=
                            "Kamu mendapatkan hadiah karena menyelesaikan kursus"
                            + courseOwned.course.name,
                            category="Kursus")

            return Response({
                "status": status.HTTP_200_OK,
                "message": "success",
                "data": {
                    "id": stepOwned.step.id,
                    "time_consume": stepOwned.timeConsume,
                    "is_complete": stepOwned.isComplete
                }
            })

        except FieldError as e:
            return FieldErrorHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #8
0
    def get(self, request):
        try:

            search = request.GET.get("search")

            article = ArticleSection.objects.all()
            if not search:
                category = request.GET.get("category")
                if not category:
                    raise FieldError("category or search input not valid")
                categoryObject = Topic.objects.get(topic=category)
                if not categoryObject:
                    raise EmptyResultSet

                article = ArticleSection.objects.filter(topic=categoryObject)

                articleSection = []
                for i in article:
                    article = []
                    for j in i.section.all():
                        article.append({
                            "id": j.id,
                            "title": j.title,
                            "content": j.content
                        })
                    articleSection.append({
                        "id": i.id,
                        "title": i.title,
                        "article": article
                    })

                return Response(
                    {
                        "status": status.HTTP_200_OK,
                        "message": "success",
                        "data": {
                            'section': articleSection,
                            'count': len(articleSection),
                        }
                    },
                    status=status.HTTP_200_OK)

            else:
                article = Article.objects.filter(title__icontains=search)
                articles = []
                for i in article:
                    articles.append({
                        'id': i.id,
                        'title': i.title,
                        'content': i.content
                    })

                return Response(
                    {
                        "status": status.HTTP_200_OK,
                        "message": "success",
                        "data": {
                            "articles": articles,
                            'count': len(article)
                        }
                    },
                    status=status.HTTP_200_OK)

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #9
0
    def post(self, request):
        try:
            if request.data['title'] == "":
                raise FieldError("title is not valid")
            if request.data['question'] == "":
                raise FieldError("question is not valid")
            if request.data['topic'] == "":
                raise FieldError("topic is not valid")

            owner = Employee.objects.get(user=request.user)
            forum = Forum.objects.create(title=request.data['title'],
                                         question=request.data['question'],
                                         owner=owner)

            for i in request.data['topic']:
                topic = Topic.objects.filter(topic=i)
                if topic.count() == 0:
                    topic = Topic.objects.create(topic=i)
                else:
                    topic = topic[0]

                forum.topic.add(topic)

            answer = []
            for i in forum.answer.all():
                isUpvote = False
                if Employee.objects.get(user=request.user) in i.upvote.all():
                    isUpvote = True
                data = {
                    "id": i.id,
                    "username": i.owner.user.username,
                    "answer": i.answer,
                    "upvote": i.upvote.count(),
                    "is_upvote": isUpvote
                }
                answer.append(data)

            isUpvote = False
            if Employee.objects.get(user=request.user) in forum.upvote.all():
                isUpvote = True

            return Response({
                "status": status.HTTP_201_CREATED,
                "message": "object created",
                "data": {
                    "id": forum.id,
                    "username": forum.owner.user.username,
                    "title": forum.title,
                    "question": forum.question,
                    "upvote": forum.upvote.count(),
                    "answer": answer,
                    "is_upvote": isUpvote,
                    "created_at": forum.createdAt
                }
            })

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)
Пример #10
0
    def get(self, request):
        try:
            category = request.GET.get("category")
            sortInput = request.GET.get("sort")
            search = request.GET.get("search")

            forum = Forum.objects.all()

            # Validate search
            if not search:
                # Validate category and sort
                if not category:
                    raise FieldError("category or search input not valid")
                if not sortInput:
                    raise FieldError("sort or search input not valid")

                # Get topic object based on category
                categoryObject = Topic.objects.get(topic=category)
                if not categoryObject:
                    raise EmptyResultSet
                # Get forum based on category and sort input
                if sortInput == "date":
                    forum = Forum.objects.filter(
                        topic__in=[categoryObject.id]).order_by("-createdAt")
                elif sortInput == "vote":
                    forum = Forum.objects.filter(
                        topic__in=[categoryObject.id]).annotate(
                            num_vote=Count('upvote')).order_by('-num_vote')
                elif sortInput == "answer":
                    forum = Forum.objects.filter(
                        topic__in=[categoryObject.id]).annotate(
                            num_answer=Count('answer')).order_by('-num_answer')
                else:
                    raise FieldError("sort input not valid")

            else:  # if sort exist
                forum = Forum.objects.filter(title__icontains=search)

            # Create list of forum
            forumList = []
            for i in forum:

                # Check is upvote
                isUpvote = False
                if Employee.objects.get(user=request.user) in i.upvote.all():
                    isUpvote = True

                # Append
                forumList.append({
                    "id": i.id,
                    "username": i.owner.user.username,
                    "title": i.title,
                    "question": i.question,
                    "upvote": i.upvote.count(),
                    "total_answer": i.answer.count(),
                    "created_at": i.createdAt,
                    "is_upvote": isUpvote
                })

            # Response
            resp = {
                "status": status.HTTP_200_OK,
                "message": "success",
                "data": {
                    "forum": forumList,
                    "count": forum.count()
                }
            }

            return Response(resp, status=status.HTTP_200_OK)

        except FieldError as e:
            return FieldErrorHandler(e)

        except EmptyResultSet as e:
            return EmptyResultSetHandler(e)

        except Exception as e:
            return ExceptionHandler(e)