예제 #1
0
    def create(self, request, **kwargs):
        serializer = AddMemberSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        id = request.user
        adder = User.objects.get(username=id)
        semester = get_semester_of_date(datetime.datetime.now())
        lifetime = serializer.data['lifetime']
        try:
            user = User.objects.get(email=serializer.data['email'])
        except:
            user = None
        member = Member(
            seller=adder,
            last_edited_by=adder,
            semester=semester,
            name=serializer.data['name'],
            lifetime=serializer.data['lifetime'],
            email=serializer.data['email'],
            honorary=False,
        )
        if 'uio_username' in serializer.data:
            member.uio_username = serializer.data['uio_username']
        if user is not None:
            member.user = user
        if lifetime:
            member.date_lifetime = timezone.now()

        member.save()

        return Response(MemberSerializer(member).data,
                        status=status.HTTP_201_CREATED)
예제 #2
0
파일: rest.py 프로젝트: thor/internsystem
    def create(self, request, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        username = serializer.data['user'].strip().lower()
        user = User.objects.get_or_create(username=username)[0]
        if not user:
            raise ValidationError(detail=_('User %(user)s not found') %
                                  {'user': serializer.data['user']})

        date = serializer.validated_data['date_worked']
        wallet = VoucherWallet.objects.get_or_create(
            user=user, semester=get_semester_of_date(date))[0]

        worklog = WorkLog(wallet=wallet,
                          date_worked=serializer.data['date_worked'],
                          work_group=serializer.data['work_group'],
                          hours=Decimal(serializer.data['hours']),
                          issuing_user=request.user,
                          comment=serializer.data['comment'])

        worklog.clean()
        worklog.save()
        return Response(WorkLogSerializer(worklog,
                                          context={
                                              'request': self.request
                                          }).data,
                        status=status.HTTP_201_CREATED)
예제 #3
0
    def create(self, request, **kwargs):
        serializer = AddMemberSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        id = request.user
        adder = User.objects.get(username=id)
        semester = get_semester_of_date(datetime.datetime.now())
        lifetime = serializer.data['lifetime']
        try:
            user = User.objects.get(email=serializer.data['email'])
        except:
            user = None
        member = Member(
            seller=adder,
            last_edited_by=adder,
            semester=semester,
            name=serializer.data['name'],
            lifetime=serializer.data['lifetime'],
            email=serializer.data['email'],
            honorary=False,
        )
        if 'uio_username' in serializer.data:
            member.uio_username = serializer.data['uio_username']
        if user is not None:
            member.user = user
        if lifetime:
            member.date_lifetime = timezone.now()

        member.save()

        return Response(MemberSerializer(member).data, status=status.HTTP_201_CREATED)
예제 #4
0
파일: rest.py 프로젝트: thor/internsystem
    def create(self, request, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        card_uid = serializer.data['card'].strip().lower()
        card = NfcCard.objects.get_or_create(card_uid=card_uid)[0]
        if not card:
            raise ValidationError(detail=_('Card %(card)s not found') %
                                  {'card': serializer.data['card_uid']})

        wallet = CoffeeWallet.objects.get_or_create(
            card=card, semester=get_semester_of_date(datetime.now().date()))[0]

        registerlog = CoffeeRegisterLog(wallet=wallet,
                                        vouchers=Decimal(
                                            serializer.data['vouchers']),
                                        issuing_user=request.user,
                                        comment=serializer.data['comment'])

        registerlog.clean()
        registerlog.save()
        return Response(RegisterLogSerializer(registerlog,
                                              context={
                                                  'request': self.request
                                              }).data,
                        status=status.HTTP_201_CREATED)
예제 #5
0
 def test_voucher_balance(self):
     user = User.objects.get(username="******")
     semester = get_semester_of_date(date(year=2016, month=7, day=10))
     wallet = VoucherWallet.objects.get(user=user, semester=semester)
     self.assertEqual(
         wallet.cached_balance, 2.5, "Cached balance of voucher wallet is 2.5"
     )
예제 #6
0
 def test_coffee_balance(self):
     card = NfcCard.objects.get(card_uid="3b2be5a2")
     semester = get_semester_of_date(date(year=2016, month=7, day=10))
     wallet = CoffeeWallet.objects.get(card=card, semester=semester)
     self.assertEqual(
         wallet.cached_balance, 4, "Cached balance of coffee wallet is 4"
     )
예제 #7
0
def get_valid_semesters():
    semesters = []
    now = datetime.datetime.now()
    if now.month == 7 or now.month == 8 or now.month == 1:
        semesters.append(get_semester(-1))
    # Corona-exception in 2020.
    if now.year == 2020 and now.month == 9:
        semesters.append(get_semester(-1))

    # Corona-exception in 2021
    if now.year == 2021 and now.month in [6, 7]:
        semesters.append(get_semester_of_date(datetime.date(2020, 12, 1)))

    semesters.append(get_semester())
    return semesters
예제 #8
0
    def update(self, instance, validated_data):
        if 'hours' in validated_data and validated_data['hours'] != instance.hours and \
                ('vouchers' not in validated_data or validated_data['vouchers'] == instance.vouchers):
            instance.vouchers = instance.calculate_vouchers(
                validated_data['hours'])
            validated_data.pop('vouchers', None)

        if 'date_worked' in validated_data:
            date = validated_data['date_worked']
            wallet = VoucherWallet.objects.get_or_create(
                user=instance.wallet.user,
                semester=get_semester_of_date(date))[0]
            instance.wallet = wallet

        return super().update(instance, validated_data)
예제 #9
0
    def update(self, instance, validated_data):
        if ("hours" in validated_data
                and validated_data["hours"] != instance.hours
                and ("vouchers" not in validated_data
                     or validated_data["vouchers"] == instance.vouchers)):
            instance.vouchers = instance.calculate_vouchers(
                validated_data["hours"])
            validated_data.pop("vouchers", None)

        if "date_worked" in validated_data:
            date = validated_data["date_worked"]
            wallet = VoucherWallet.objects.get_or_create(
                user=instance.wallet.user,
                semester=get_semester_of_date(date))[0]
            instance.wallet = wallet

        return super().update(instance, validated_data)
예제 #10
0
 def filter_valid(self, queryset, name, value):
     return queryset.filter(
         Q(semester=get_semester_of_date(datetime.datetime.now()))
         | Q(lifetime=True)
         | Q(honorary=True))
예제 #11
0
 def filter_valid(self, queryset, name, value):
     return queryset.filter(Q(semester=get_semester_of_date(datetime.datetime.now())) |
                           Q(lifetime=True) | Q(honorary=True))
예제 #12
0
    def update(self, instance, validated_data):
        if 'hours' in validated_data and validated_data['hours'] != instance.hours and \
                ('vouchers' not in validated_data or validated_data['vouchers'] == instance.vouchers):
            instance.vouchers = instance.calculate_vouchers(validated_data['hours'])
            validated_data.pop('vouchers', None)

        if 'date_worked' in validated_data:
            date = validated_data['date_worked']
            wallet = VoucherWallet.objects.get_or_create(user=instance.wallet.user, semester=get_semester_of_date(date))[0]
            instance.wallet = wallet

        return super().update(instance, validated_data)