Ejemplo n.º 1
0
    def list(self, request, *args, **kwargs):
        user_type = get_user_type(request.user)

        if user_type == 'student':
            _query_set = get_queryset_for_student(request_data=request)

        elif user_type == 'teacher':
            _query_set = get_queryset_for_teacher(request_data=request)

        else:
            return Response([])

        if _query_set is None:
            return Response([])

        announcement_ids = set(
            list(_query_set.values_list("announcement_id", flat=True)))
        _main_query = Q()
        _main_query.add(Q(id__in=announcement_ids), Q.AND)

        queryset = self.get_queryset().filter(_main_query).order_by(
            '-created_at')
        page = self.paginate_queryset(queryset)

        if page is not None:
            serializer = self.get_serializer(page, many=True)
            response = self.get_paginated_response(serializer.data)
            return response

        serializer = self.get_serializer(_query_set, many=True)
        return Response(serializer.data)
Ejemplo n.º 2
0
    def newest_product(self, res):

        user_type = get_user_type(self.request.user)
        if user_type == 'student':
            products = self.queryset.filter(
                gender__in=[self.request.user.baseuser.gender, 'both'],
                published=True,
                deleted=False,
                for_student=True,
            ).order_by('-created_at')[:12]
        elif user_type == 'teacher':
            products = self.queryset.filter(
                gender__in=[self.request.user.baseuser.gender, 'both'],
                published=True,
                deleted=False,
                for_teacher=True).order_by('-created_at')[:12]

        # products = self.queryset.filter(
        #     gender__in=[self.request.user.baseuser.gender, 'both'],
        #     published=True
        # ).order_by()[:12]

        _dict = {
            "query_param": 'order=newest',
            "title": "تازه ترین ها",
            "products": self.get_serializer(products, many=True).data
        }
        res.append(_dict)
Ejemplo n.º 3
0
    def list(self, request, *args, **kwargs):
        params = request.query_params
        end = params.get("end_date", "")
        start = params.get("start_date", "")
        user_type = get_user_type(request.user)

        try:
            start = datetime.datetime.strptime(start, '%Y-%m-%d')
            end = datetime.datetime.strptime(end, '%Y-%m-%d')

        except:
            raise ValidationError(
                {"message": "start date or end date not valid"},
                code=status.HTTP_400_BAD_REQUEST)

        response_data = []
        user = request.user

        self.get_occurrence(response_data, start, end, user)
        self.get_occurrence_announcements(response_data, start, end, request)

        if user_type == "student":
            self.get_occurrence_activities(response_data, start, end, user)

        return Response(response_data)
Ejemplo n.º 4
0
def check_code(request):
    phone_number = request.POST.get('to_phone_number')
    user_id = request.POST.get('to_phone_number')
    activation_code = request.POST.get('activation_code')

    phone_number = baghery_encode(phone_number)

    if phone_number and activation_code:

        is_valid, user, as_user_login = is_activation_code_valid(activation_code, phone_number, user_id)
        if is_valid:

            if not user:
                return Response({
                    "success": False
                }, status=status.HTTP_400_BAD_REQUEST)

            base_user = BaseSerializer(user)

            user_type = get_user_type(user)

            user_data = base_user.data.copy()
            user_data["type"] = user_type
            user_data["level"] = get_user_level(user)
            user_data["camp_id"], user_data["county_id"], user_data["province_id"] = get_user_location(user)
            user_data["school_name"] = ""

            token = generate_token(user)
            if user_type == 'student':
                student_data = StudentSerializer(user.student).data

                user_data["school_name"] = student_data["school"]["name"]
                user_data["school_id"] = student_data["school"]["id"]
                user_data["province_id"] = user.student.school.province.id
                try:
                    user_data["image"] = "/" + user.image.url
                except:
                    user_data["image"] = ""

            if not as_user_login:  # اگر در حالت به عنوان یوزر وارد نشده بودیم تاریخ آخرین ورود ذخیره شود
                user.last_login = datetime.datetime.now()
                user.save()

            return JsonResponse({
                "user": user_data,
                "token": token,
                "success": True,
            })

        else:
            return JsonResponse({
                "success": False
            }, status=status.HTTP_400_BAD_REQUEST)
    else:
        return JsonResponse({
            "success": False
        }, status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 5
0
    def get_occurrence_announcements(response_data, start, end, request):
        user_type = get_user_type(request.user)
        announcements = []
        if user_type == 'student':
            announcements = list(
                get_queryset_for_student(request_data=request,
                                         has_date=True,
                                         start_date=start,
                                         end_date=end))

        elif user_type == 'teacher':
            announcements = list(
                get_queryset_for_teacher(request_data=request,
                                         has_date=True,
                                         start_date=start,
                                         end_date=end))

        for announcement in announcements:
            response_data.append({
                'id':
                random.randint(9999, 99999),
                'title':
                announcement.announcement.title,
                'start':
                announcement.announcement.date,
                'start_jalali':
                to_jorjean(str(announcement.announcement.date)),
                'end':
                None,
                'event_id':
                random.randint(9999, 99999),
                'color':
                "#00bbd2",
                'description':
                announcement.announcement.description,
                'rule':
                None,
                'end_recurring_period':
                None,
                'cancelled':
                None,
                'all_day':
                True,
                'editable':
                False,
                'type':
                "announcement",
                'id_href':
                announcement.announcement_id,
            })
Ejemplo n.º 6
0
    def calculate_announcement_count(self, request):
        """ تابع محاسبه تعداد اطلاعیه های خوانده نشده یک کاربر"""
        # kahrizi
        count = 0
        try:
            cache_key = 'announcement_count_{0}'.format(request.user.id)
            announcement_view = AnnouncementSeenHistory.objects.filter(
                user_id=request.user.id).count()

            user_type = get_user_type(request.user)

            if user_type == 'student':
                announcement_not_view = get_queryset_for_student(
                    request_data=request).count()

            elif user_type == 'teacher':
                announcement_not_view = get_queryset_for_teacher(
                    request_data=request)
                announcement_ids = set(
                    list(
                        announcement_not_view.values_list("announcement_id",
                                                          flat=True)))
                announcement_not_view = self.get_queryset().filter(
                    id__in=announcement_ids).count()
            else:
                count = 0
                return count

            count = announcement_not_view - announcement_view

            if count < 0:
                count = 0
                # logger_api.error("AnnouncementCount  calculate_announcement_count Error", extra={
                #     "detail": {
                #         "error": "AnnouncementCount =" + str(count) + "User="******"AnnouncementCount  calculate_announcement_count Error",
                extra={"detail": {
                    "error": e,
                }})

        finally:
            data = {"count": count, "date_calculate": datetime.datetime.now()}
            cache.set(cache_key, data, CACHE_TIME_ANN_COUNT)
            return count
Ejemplo n.º 7
0
def has_perm_login_app(request, user):
    _dict = {
        1: "student",
        2: "teacher",
        3: "advisor"
    }
    _dict_app = {
        "student": 2,
        "teacher": 3,
        "advisor": 4,
    }
    app_code = request.POST.get("app_code", 'web')  # check app name {1: "student", 2: "teacher", 3: "hamraz"}
    user_type = get_user_type(user)
    if app_code == "web" or _dict.get(int(app_code)) == user_type:
        return True, _dict_app[user_type]
    return False, _dict_app[user_type]
Ejemplo n.º 8
0
    def list(self, request, *args, **kwargs):
        user_type = get_user_type(request.user)

        if user_type == 'teacher':
            queryset = self.get_queryset().filter(
                creator_id=request.user.id).order_by('-created_at')
            page = self.paginate_queryset(queryset)

            if page is not None:
                serializer = self.get_serializer(page, many=True)
                response = self.get_paginated_response(serializer.data)
                return response

            serializer = self.get_serializer(queryset, many=True)
            return Response(serializer.data)

        else:
            return Response([])
Ejemplo n.º 9
0
        def wrap(request, *args, **kwargs):
            disable = False
            message = ''
            for item in AppDisableList.app_list_disable:
                if item.id_part == part.value[0]:
                    if item.status_current:
                        message = item.message_disable
                        user_type = get_user_type(request.request._user)
                        user_level = get_user_level(request.request._user,
                                                    user_type)
                        disable = check_admin_acees(item, user_type,
                                                    user_level)
                    break

            if disable:
                raise PermissionLocked(detail=message)

            return function(request, *args, **kwargs)
Ejemplo n.º 10
0
    def slider(self, request):
        """
        :param request:
        :return: slider from product
        """
        # queryset = ShopSlider.objects.all()
        user_type = get_user_type(request.user)
        if user_type == 'student':
            queryset = ShopSlider.objects.filter(for_student=True)
        elif user_type == 'teacher':
            queryset = ShopSlider.objects.filter(for_teacher=True)
        else:
            queryset = []
        queryset = queryset.filter(
            Q(gender=request.user.baseuser.gender) | Q(gender="both"))
        serializer = SliderSerializer(queryset, many=True)

        return Response(serializer.data)
Ejemplo n.º 11
0
    def get_query(self, dict_params):
        orders = []
        q_object = Q()

        q_object.add(Q(gender__in=[self.request.user.baseuser.gender, 'both']),
                     Q.AND)
        q_object.add(Q(published=True), Q.AND)
        q_object.add(Q(deleted=False), Q.AND)

        if 'order' in dict_params:
            if dict_params["order"] == "newest":
                orders.append('-created_at')

            if dict_params["order"] == "price_high":
                orders.append('-price')

            if dict_params["order"] == "price_low":
                orders.append('price')

        if 'category' in dict_params:
            q_object.add(Q(category_id=dict_params['category']), Q.AND)

        if 'has_discount' in dict_params and dict_params['has_discount'] == 1:
            q_object.add(Q(has_discount=dict_params['has_discount']), Q.AND)

        if 'text' in dict_params:
            q_object.add(Q(title__regex=dict_params['text']), Q.AND)

        if 'price_start' in dict_params:
            q_object.add(Q(price__gte=dict_params['price_start']), Q.AND)

        if 'price_end' in dict_params:
            q_object.add(Q(price__lte=dict_params['price_end']), Q.AND)

        # برای فیلتر کردن محصولات دانش آموزان و مربی ها
        user_type = get_user_type(self.request.user)
        if user_type == 'student':
            q_object.add(Q(for_student=True), Q.AND)
        elif user_type == 'teacher':
            q_object.add(Q(for_teacher=True), Q.AND)

        return q_object, orders
Ejemplo n.º 12
0
def get_user(request):
    user = request.user.baseuser

    base_user = BaseSerializer(user)

    user_type = get_user_type(user)

    user_data = base_user.data.copy()
    user_data["type"] = user_type
    user_data["level"] = get_user_level(user)
    user_data["camp_id"], user_data["county_id"], user_data["province_id"] = get_user_location(user)
    user_data["school_name"] = ""
    user_data["image"] = user_data["image"]

    if user_type == 'student':
        student_data = StudentSerializer(user.student).data

        user_data["school_name"] = student_data["school"]["name"]
        user_data["school_id"] = student_data["school"]["id"]
        user_data["province_id"] = user.student.school.province.id

    return JsonResponse(user_data)
Ejemplo n.º 13
0
    def retrieve(self, request, *args, **kwargs):
        """
        :param request:
        :return: return product by gender
        """
        self.serializer_class = SingleProductSerializer
        instance = self.get_object()

        serializer = self.get_serializer(instance)
        product = serializer.data
        product["groups"] = self.create_sample_form_field(product)
        user_type = get_user_type(self.request.user)

        if instance.deleted:
            return Response(status=status.HTTP_404_NOT_FOUND)

        if user_type == 'student':
            if not instance.for_student:
                return Response(status=status.HTTP_403_FORBIDDEN)
        elif user_type == 'teacher':
            if not instance.for_teacher:
                return Response(status=status.HTTP_403_FORBIDDEN)

        return Response(product)
Ejemplo n.º 14
0
 def _user_type(obj):
     return get_user_type(obj.creator)
Ejemplo n.º 15
0
    def list(self, request, *args, **kwargs):
        user_type = get_user_type(request.user)
        list_tab = [{}]
        if user_type == "student":
            type_query = request.query_params.get("query_type", None)

            if type_query == "top_school":
                return self.get_top_school(request)

            elif type_query == "citizen":
                return self.get_citizen_school(request, user_type)

            elif type_query == "provincial":
                return self.get_provincial_school(request, user_type)

            elif type_query == "same_point":
                return self.get_same_point_school(request)

            else:
                student = Student.objects.filter(
                    id=request.user.id).select_related('school').get()
                list_tab = copy.deepcopy(list_column_league_student)
                # for item in list_tab:
                #     if item["query_type"] == "citizen" and student.school.point > MIN_POINT_CITIZEN:
                #         item["locked"] = False
                #         continue
                #
                #     if item["query_type"] == "provincial" and student.school.point > MIN_POINT_PROVINCIAL:
                #         item["locked"] = False
                #         continue

                response = {
                    "results": list_tab,
                    "rank": student.school.rank,
                    "point": student.school.point
                }
                return Response(response)

        elif user_type == "teacher":
            # متناسب با نقش در لیگ تب ها را نشان می دهیم

            # if has_perm_both_gender(request.user):
            #     gender = "both"
            # else:
            #     gender = request.user.baseuser.gender
            role = request.GET.get('role', [])
            gender = request.GET.get('gender', False)
            camp_id, county_id, province_id = get_user_location_role(
                request.user, role)
            if role in ["county", "camp", "coach"]:
                list_tab = copy.deepcopy(list_column_league_teacher)
            elif role in ["province", "province_f", "province_m"]:
                list_tab = copy.deepcopy(list_column_league_province)
            elif role == "country":
                list_tab = copy.deepcopy(list_column_league_country)
            else:
                list_tab = copy.deepcopy(list_column_league_country)

            type_query = request.query_params.get("query_type", None)

            if type_query == "top_school":
                return self.get_top_school(request)

            elif type_query == "citizen":
                # return self.get_citizen_school(request, user_type)
                return self.get_citizen_school_with_county_id(
                    county_id, gender)

            elif type_query == "provincial":
                return self.get_provincial_school_with_province_id(
                    province_id, gender)

            else:
                response = {"results": list_tab, "rank": 0, "point": 0}
                return Response(response)
Ejemplo n.º 16
0
    def list(self, request, *args, **kwargs):
        res = []
        user_type = get_user_type(request.user)
        has_perm = has_perm_both_gender(request.user)

        if has_perm:
            gender_user = GENDER.get(
                request.query_params.get('gender',
                                         request.user.baseuser.gender),
                request.user.baseuser.gender)

        else:
            gender_user = request.user.baseuser.gender

        if user_type == "student":
            self.newest_resanesh_festival(res, gender_user)

            self.newest_revolution_school(res, gender_user)

            self.newest_activity(res, gender_user)

            self.most_point_activity(res, gender_user)

            student = Student.objects.filter(
                id=request.user.id).select_related('school')
            if student.exists():
                student = student.get()

                province_id = student.school.province_id
                self.newest_province_activity(res, province_id, gender_user)

                county_id = student.school.county_id
                self.newest_county_activity(res, county_id, gender_user)

                camp_id = student.school.camp_id
                self.newest_camp_activity(res, camp_id, gender_user)

        elif user_type == "teacher":
            self.newest_resanesh_festival(res, gender_user)

            self.newest_revolution_school(res, gender_user)

            self.newest_activity(res, gender_user)

            self.most_point_activity(res, gender_user)

            levels = get_user_level(request.user, "teacher")
            camp_id, county_id, province_id = get_user_location(
                request.user, levels)

            if camp_id:
                self.newest_camp_activity(res, camp_id, gender_user)

            if county_id:
                self.newest_county_activity(res, county_id, gender_user)

            if province_id:
                self.newest_province_activity(res, province_id, gender_user)

        return Response({
            "next": None,
            "previous": None,
            "count": len(res),
            "results": res
        })