Esempio n. 1
0
    def update(self, request, *args, **kwargs):
        token = request.data.get('token')
        home_show_current = request.data.get('home_show_current', False)
        home_show_this_month = request.data.get('home_show_this_month', False)
        home_show_this_year = request.data.get('home_show_this_year', False)
        monthly_fund = request.data.get('monthly_fund', 0)
        yearly_fund = request.data.get('yearly_fund', 0)

        try:
            auth_user = get_user_by_token(token)
            if auth_user:
                user = User.objects.get(auth_user=auth_user)
                if Setting.objects.filter(user_id=user.id):
                    setting = Setting.objects.get(user_id=user.id)
                else:
                    setting = Setting()

                setting.home_show_current = home_show_current
                setting.home_show_this_month = home_show_this_month
                setting.home_show_this_year = home_show_this_year
                setting.monthly_fund = monthly_fund
                setting.yearly_fund = yearly_fund
                setting.user = user
                setting.save()

                return json_response(
                    SettingSerializer(setting).data, CODE_SUCCESS,
                    MSG_UPDATE_SETTING_SUCCESS)
            else:
                return invalid_token_response()
        except Exception as e:
            return save_error_log(request, e)
Esempio n. 2
0
    def form_valid(self, form):
        if form.is_valid():
            try:
                category = form.cleaned_data['category']
                if category == '收入':
                    money = form.cleaned_data['money']
                else:
                    money = 0 - form.cleaned_data['money']
                remark = form.cleaned_data['remark']
                token = self.request.session['token']
                user = get_user_by_token(token)

                if user:
                    iaer = form.save(commit=False)
                    iaer.user = User.objects.get(auth_user=user)
                    iaer.money = money
                    iaer.category = category
                    iaer.remark = remark
                    iaer.created = timezone.now()
                    iaer.save()
                    self.object = iaer

                    return super().form_valid(form)
                else:
                    return invalid_token_response()
            except Exception as e:
                return save_error_log(self.request, e)
Esempio n. 3
0
    def create(self, request, *args, **kwargs):
        try:
            category = request.data.get('category')
            money = request.data.get('money')
            remark = request.data.get('remark')
            token = request.data.get('token')
            date = request.data.get('date')
            auth_user = get_user_by_token(token)

            if auth_user:
                iaer = Iaer()
                iaer.user = User.objects.get(auth_user=auth_user)
                iaer.money = money
                iaer.category = category
                iaer.remark = remark
                iaer.created = timezone.now()
                if int(money) > 0:
                    iaer.money_type = 1
                else:
                    iaer.money_type = 0
                try:
                    iaer.date = datetime.strptime(date, '%Y-%m-%d').date()
                except ValueError:
                    print("date format error: %s" % date)
                iaer.save()
                response = IaerSerializer(iaer).data
                return json_response(response, CODE_SUCCESS,
                                     MSG_ADD_IAER_SUCCESS)
            else:
                return invalid_token_response()
        except Exception as e:
            return save_error_log(request, e)
Esempio n. 4
0
    def list(self, request, *args, **kwargs):
        response_data = super(StatisticsCategoryViewSet,
                              self).list(request, *args, **kwargs).data
        token = request.GET.get('token', '')
        user = get_user_by_token(token)
        response_data['year'] = int(request.GET.get(
            'year', 0))  # if year = 0, get all category
        response_data['month'] = int(request.GET.get(
            'month',
            0))  # if month = 0, get current year else get current month

        for result in response_data['results']:
            money = 0
            if response_data['year'] == 0:
                iaers = Iaer.objects.filter(Q(category = result['name']) & \
                        Q(user__id = user.id))
            elif response_data['month'] == 0:
                iaers = Iaer.objects.filter(Q(category = result['name']) & \
                        Q(user__id = user.id) & \
                        Q(created__year = response_data['year']))
            else:
                iaers = Iaer.objects.filter(Q(category = result['name']) & \
                        Q(user__id = user.id) & \
                        Q(created__year = response_data['year']) & \
                        Q(created__month = response_data['month']))

            for iaer in iaers:
                money += iaer.money
            result['money'] = money

        return json_response(response_data, CODE_SUCCESS,
                             MSG_GET_CATEGORIES_SUCCESS)
Esempio n. 5
0
 def destroy(self, request, *args, **kwargs):
     try:
         token = request.data.get('token')
         auth_user = get_user_by_token(token)
         if auth_user:
             iaer = self.get_object()
             if iaer:
                 try:
                     response = super(IaerViewSet,
                                      self).destroy(request, *args,
                                                    **kwargs)
                     print("168: " + str(response.status_code))
                     if response.status_code != status.HTTP_204_NO_CONTENT:
                         iaer.id = -1
                 except Exception as e:
                     iaer.id = -1
                     save_error_log(request, e)
                 event_json = IaerSerializer(iaer).data
                 return json_response(event_json, CODE_SUCCESS,
                                      MSG_DELETE_IAER_SUCCESS)
             else:
                 return simple_json_response(CODE_NO_CONTENT, MSG_204)
         else:
             return invalid_token_response()
     except Exception as e:
         return save_error_log(request, e)
Esempio n. 6
0
 def destroy(self, request, *args, **kwargs):
     try:
         token = request.data.get('token')
         user = get_user_by_token(token)
         if user:
             red_envelope = self.get_object()
             if red_envelope:
                 try:
                     response = super(RedEnvelopeViewSet,
                                      self).destroy(request, *args,
                                                    **kwargs)
                     if response.status_code != status.HTTP_204_NO_CONTENT:
                         red_envelope.id = -1
                 except Exception as e:
                     red_envelope.id = -1
                     save_error_log(request, e)
                 event_json = RedEnvelopeSerializer(red_envelope).data
                 return json_response(event_json, CODE_SUCCESS,
                                      MSG_DELETE_RED_ENVELOPE_SUCCESS)
             else:
                 return simple_json_response(CODE_NO_CONTENT, MSG_204)
         else:
             return invalid_token_response()
     except Exception as e:
         return save_error_log(request, e)
Esempio n. 7
0
 def get_queryset(self):
     token = self.request.query_params.get('token')
     user = get_user_by_token(token)
     user_id = self.request.query_params.get('user_id', -1)
     if int(user_id) < 0:
         return super(RedEnvelopeViewSet, self).get_queryset()
     else:
         user_id = User.objects.get(auth_user=user).id
         return super(RedEnvelopeViewSet,
                      self).get_queryset().filter(user_id=user_id)
Esempio n. 8
0
 def retrieve(self, request, *args, **kwargs):
     token = request.query_params.get('token')
     try:
         auth_user = get_user_by_token(token)
         if auth_user:
             response = super(UserViewSet, self).retrieve(request, *args, **kwargs).data
             return json_response(response, CODE_SUCCESS, MSG_GET_USER_DETAIL_SUCCESS)
         else:
             return invalid_token_response()
     except Exception as e:
         return save_error_log(request, e)
Esempio n. 9
0
    def update(self, request, *args, **kwargs):
        token = request.data.get('token')
        user_name = request.data.get('user_name')
        phone = request.data.get('phone')
        email = request.data.get('email')
        gender = request.data.get('gender')
        birthday = request.data.get('birthday')
        hobbies = request.data.get('hobbies')
        base64 = request.data.get('base64')

        try:
            user = get_user_by_token(token)
            if user:
                if AuthUser.objects.filter(user=user):
                    user = AuthUser.objects.get(user=user)

                    if email:
                        if AuthUser.objects.filter(
                                username__iexact=email
                        ) or AuthUser.objects.filter(email__iexact=email):
                            return simple_json_response(
                                CODE_DUPLICATE_USER, MSG_DUPLICATE_EMAIL)
                        else:
                            user.email = email
                            user.save()
                    if user_name:
                        user.user_name = user_name
                    if phone:
                        if AuthUser.objects.filter(phone=phone):
                            return simple_json_response(
                                CODE_DUPLICATE_PHONE, MSG_DUPLICATE_PHONE)
                        else:
                            user.phone = phone
                    if gender:
                        user.gender = gender
                    if birthday:
                        user.birthday = birthday
                    if hobbies:
                        user.hobbies = hobbies
                    if base64:
                        image_name = user.username + time.strftime(
                            '%Y%m%d%H%M%S') + PROFILE_FOOTER_IMAGE
                    user.save()

                    response_data = UserSerializer(user).data
                    response_data['token'] = Token.objects.get(user=user).key

                    return json_response(response_data, CODE_SUCCESS,
                                         MSG_UPDATE_USER_INFO_SUCCESS)

            return invalid_token_response()
        except Exception as e:
            return save_error_log(request, e)
Esempio n. 10
0
    def list(self, request, *args, **kwargs):
        try:
            token = request.query_params.get('token')
            user = get_user_by_token(token)
            if user:
                year = datetime.now().year
                month = datetime.now().month
                response_data = super(IaerViewSet,
                                      self).list(request, *args, **kwargs).data

                income = 0
                expenditure = 0
                for iaer in self.get_queryset():
                    if iaer.money > 0:
                        income += iaer.money
                    else:
                        expenditure -= iaer.money
                response_data['current_income'] = income
                response_data['current_expenditure'] = expenditure

                if int(self.request.query_params.get('top_list_size', 0)) == 0:
                    this_month_income = 0
                    this_month_expenditure = 0
                    for iaer in self.get_queryset().filter(
                            Q(date__year=year) & Q(date__month=month)):
                        if iaer.money > 0:
                            this_month_income += iaer.money
                        else:
                            this_month_expenditure -= iaer.money
                    response_data['this_month_income'] = this_month_income
                    response_data[
                        'this_month_expenditure'] = this_month_expenditure

                    this_year_income = 0
                    this_year_expenditure = 0
                    for iaer in self.get_queryset().filter(date__year=year):
                        if iaer.money > 0:
                            this_year_income += iaer.money
                        else:
                            this_year_expenditure -= iaer.money
                    response_data['this_year_income'] = this_year_income
                    response_data[
                        'this_year_expenditure'] = this_year_expenditure

                return json_response(response_data, CODE_SUCCESS,
                                     MSG_GET_IAERS_SUCCESS)
            else:
                return invalid_token_response()
        except Exception as e:
            return save_error_log(request, e)
Esempio n. 11
0
    def list(self, request, *args, **kwargs):
        try:
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid()
            token = request.data.get('token')
            auth_user = get_user_by_token(token)

            if auth_user:
                return json_response(super(UserViewSet, self).list(request, *args, **kwargs).data,
                                     CODE_SUCCESS, MSG_GET_USERS_SUCCESS)
            else:
                return invalid_token_response()
        except Exception as e:
            return save_error_log(request, e)
Esempio n. 12
0
 def list(self, request, *args, **kwargs):
     try:
         token = request.query_params.get('token')
         user = get_user_by_token(token)
         if user:
             total = 0
             queryset = self.get_queryset()
             for rer in queryset:
                 total += int(rer.money)
             response_data = super(RedEnvelopeViewSet,
                                   self).list(request, *args, **kwargs).data
             response_data['total'] = total
             return json_response(response_data, CODE_SUCCESS,
                                  MSG_GET_RED_ENVELOPES_SUCCESS)
         else:
             return invalid_token_response()
     except Exception as e:
         return save_error_log(request, e)
Esempio n. 13
0
 def retrieve(self, request, *args, **kwargs):
     token = request.query_params.get('token')
     try:
         auth_user = get_user_by_token(token)
         if auth_user:
             user = User.objects.get(auth_user=auth_user)
             if Setting.objects.filter(user_id=user.id):
                 setting = Setting.objects.get(user_id=user.id)
             else:
                 setting = Setting()
                 setting.created = timezone.now()
             setting.user = user
             setting.save()
             return json_response(
                 SettingSerializer(setting).data, CODE_SUCCESS,
                 MSG_GET_SETTING_SUCCESS)
         else:
             return invalid_token_response()
     except Exception as e:
         return save_error_log(request, e)
Esempio n. 14
0
    def create(self, request, *args, **kwargs):
        try:
            money_from = request.data.get('money_from')
            money = request.data.get('money')
            remark = request.data.get('remark')
            token = request.data.get('token')
            user = get_user_by_token(token)

            if user:
                red_envelope = RedEnvelope()
                red_envelope.user = User.objects.get(auth_user=user)
                red_envelope.money = money
                red_envelope.money_from = money_from
                red_envelope.remark = remark
                red_envelope.created = timezone.now()
                red_envelope.save()
                response = RedEnvelopeSerializer(red_envelope).data
                return json_response(response, CODE_SUCCESS,
                                     MSG_ADD_RED_ENVELOPE_SUCCESS)
            else:
                return invalid_token_response()
        except Exception as e:
            return save_error_log(request, e)
Esempio n. 15
0
    def list(self, request, *args, **kwargs):
        response_data = super(StatisticsDateViewSet,
                              self).list(request, *args, **kwargs).data
        token = request.GET.get('token', '')
        user = get_user_by_token(token)
        request_type = int(self.request.GET.get(
            'type', 1))  # 1 for monthly, 2 for yearly
        data_list = []
        year = datetime.now().year
        month = datetime.now().month

        if user:
            iaers = Iaer.objects.filter(user__id=user.id).order_by('created')
        else:
            iaers = Iaer.objects.filter(user__id=-1)

        if request_type == 1:
            for y in range(2017, year + 1):  # get data from year 2017
                for m in range(1, 12 + 1):
                    iaer_list = iaers.filter(
                        Q(created__year=y) & Q(created__month=m))
                    if len(iaer_list) > 0:
                        in_money = 0
                        out_money = 0
                        for iaer in iaer_list:
                            if iaer.money > 0:
                                in_money += iaer.money
                            else:
                                out_money += iaer.money
                        if in_money != 0:
                            data = OrderedDict([('year', y), ('month', m),
                                                ('money', in_money)])
                            data_list.append(data)
                        if out_money != 0:
                            data = OrderedDict([('year', y), ('month', m),
                                                ('money', out_money)])
                            data_list.append(data)
        else:
            for y in range(2017, year + 1):  # get data from year 2017
                iaer_list = iaers.filter(created__year=y)
                if len(iaer_list) > 0:
                    in_money = 0
                    out_money = 0
                    for iaer in iaer_list:
                        if iaer.money > 0:
                            in_money += iaer.money
                        else:
                            out_money += iaer.money
                    if in_money != 0:
                        data = OrderedDict([('year', y), ('month', 0),
                                            ('money', in_money)])
                        data_list.append(data)
                    if out_money != 0:
                        data = OrderedDict([('year', y), ('month', 0),
                                            ('money', out_money)])
                        data_list.append(data)

        response_data['results'] = data_list
        response_data['count'] = len(data_list)

        return json_response(response_data, CODE_SUCCESS,
                             MSG_GET_CATEGORIES_SUCCESS)
Esempio n. 16
0
    def get_queryset(self):
        token = self.request.query_params.get('token')
        auth_user = get_user_by_token(token)
        user_id = self.request.query_params.get('user_id', -1)
        years = self.request.query_params.get('years', '')
        months = self.request.query_params.get('months', '')
        categories = self.request.query_params.get('categories', '')
        min_money = int(self.request.query_params.get('min_money', 0))
        max_money = int(self.request.query_params.get('max_money', 0))
        top_list_size = int(self.request.query_params.get('top_list_size', 0))

        flag = 0
        if not years or years == '0':
            flag += 1
        if not months or months == '0':
            flag += 2
        if not categories:
            flag += 4

        if int(user_id) < 0:
            # filter delete queryset
            token = self.request.data.get('token')
            auth_user = get_user_by_token(token)
            if auth_user:
                return Iaer.objects.filter(user=User.objects.get(
                    auth_user=auth_user))
            else:
                return Iaer.objects.filter(pk=-1)
        else:
            if not auth_user:
                return Iaer.objects.filter(pk=-1)
            user_id = User.objects.get(auth_user=auth_user).id
            category_names = []

            if top_list_size == 0:
                if categories:
                    category_list = Category.objects.filter(
                        pk__in=ast.literal_eval(
                            categories))  # covert list string to list
                    for category in category_list:
                        category_names.append(category.name)
                # years not filter
                if flag == 1:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__month__in = ast.literal_eval(months)) & \
                                        Q(category__in = category_names))
                # months not filter
                elif flag == 2:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year__in = ast.literal_eval(years)) & \
                                        Q(category__in = category_names))
                # years and months not filter
                elif flag == 3:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(category__in = category_names))
                # categories not filter
                elif flag == 4:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year__in = ast.literal_eval(years)) & \
                                        Q(date__month__in = ast.literal_eval(months)))
                # years and categories not filter
                elif flag == 5:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__month__in = ast.literal_eval(months)))
                # months and categories not filter
                elif flag == 6:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year__in = ast.literal_eval(years)))
                # years, months and categories not filter
                elif flag == 7:
                    queryset = Iaer.objects.filter(user_id=user_id)
                # falg == 0, filter years, months and categories
                else:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year__in = ast.literal_eval(years)) & \
                                        Q(date__month__in = ast.literal_eval(months)) & \
                                        Q(category__in = category_names))

                if min_money != 0 or max_money != 0:
                    queryset = queryset.annotate(abs_money = Func(F('money'), function='ABS')) \
                            .filter(Q(abs_money__lte = max_money) & Q(abs_money__gte = min_money))
            else:
                # years not filter
                if flag == 1:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__month = months) & \
                                        Q(category = categories))
                # months not filter
                elif flag == 2:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year = years) & \
                                        Q(category = categories))
                # years and months not filter
                elif flag == 3:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(category = categories))
                # categories not filter
                elif flag == 4:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year = years) & \
                                        Q(date__month = months))
                # years and categories not filter
                elif flag == 5:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__month = months))
                # months and categories not filter
                elif flag == 6:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year = years))
                # years, months and categories not filter
                elif flag == 7:
                    queryset = Iaer.objects.filter(user_id=user_id)
                # flag == 0, filter years, months and categories
                else:
                    queryset = Iaer.objects.filter(Q(user_id = user_id) & \
                                        Q(date__year = years) & \
                                        Q(date__month = months) & \
                                        Q(category = categories))

                if min_money != 0:
                    queryset = queryset.annotate(abs_money = Func(F('money'), function='ABS')) \
                            .filter(Q(abs_money__gte = min_money) & Q(money_type = 0)).order_by('money')
                else:
                    queryset = queryset.order_by('money')[:top_list_size]

            return queryset