class EnrollmentSerializer(serializers.ModelSerializer): subject = SubjectsSerializer(read_only=True) group = GroupSerailizer(read_only=True) lecturer = StaffSerializer(read_only=True) tutor = StaffSerializer(read_only=True) class Meta: model = Enrollment fields = ('id', 'subject', 'group', 'lecturer', 'tutor', 'semester')
def test_retrieve_staffs(self, mock_jwt_auth): """Test retrieving the tags""" data = { "token_type": "access", "exp": 1582703472, "jti": "fcbaabbc963542429db9e93fd0aa158d", "user_id": 2 } mock_jwt_auth.return_value = (data, None) Staff.objects.create(name='Topan', address='Pondok Pinang', contact='087739991234', NIP='123456789') Staff.objects.create(name='Rizki', address='Parung Panjang', contact='087739991234', NIP='432112345678') res = self.client.get(STAFFS_URL) staffs = Staff.objects.all().order_by('-name') serializer = StaffSerializer(staffs, many=True) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(res.data, serializer.data)
def put(self, request, args): staff_id = args.pop("staff_id") shop_id = self.current_shop.id staff = get_staff_by_id_and_shop_id(staff_id, shop_id) if not staff: return self.send_fail(error_text="员工不存在") # 超管仅自己可以编辑,而且权限不可编辑 elif staff.roles == StaffRole.SHOP_SUPER_ADMIN: if self.current_user.id != staff.user_id: return self.send_fail(error_text="超管信息仅自己可以编辑") serializer = StaffSerializer(staff, data=args) if not serializer.is_valid(): return self.send_error(error_message=serializer.errors, status_code=status.HTTP_400_BAD_REQUEST) serializer.save() return self.send_success()
class BillSerializer(serializers.ModelSerializer): items = BillItemSerializer(many=True, required=False) buyer = CustomerSerializer() seller = StaffSerializer() branch = BranchSerializer(read_only=True) payments = CustomerPaymentSerializer(many=True, required=False) price = serializers.ReadOnlyField() total_discount = serializers.ReadOnlyField() buyer_special_discount = serializers.ReadOnlyField() items_discount = serializers.ReadOnlyField() final_price = serializers.ReadOnlyField() paid = serializers.ReadOnlyField() cheque_paid = serializers.ReadOnlyField() card_paid = serializers.ReadOnlyField() cash_paid = serializers.ReadOnlyField() remaining_payment = serializers.ReadOnlyField() items_count = serializers.ReadOnlyField() profit = serializers.ReadOnlyField() class Meta: model = Bill fields = ('pk', 'bill_code', 'create_date', 'status', 'close_date', 'buyer', 'seller', 'discount', 'used_points', 'branch', 'payments', 'items', 'bill_image', 'price', 'total_discount', 'buyer_special_discount', 'items_discount', 'final_price', 'paid', 'cheque_paid', 'cash_paid', 'card_paid', 'remaining_payment', 'items_count', 'profit')
def get(self, request, args): staff_id = args.get("staff_id") shop_id = self.current_shop staff = get_staff_by_id_and_shop_id(staff_id, shop_id) if not staff: return self.send_fail(error_text="员工不存在") serializer = StaffSerializer(staff) return self.send_success(data=serializer.data)
def put(self, request, args): shop_id = self.current_shop.id staff_apply_id = args.pop("staff_apply_id") staff_apply = get_staff_apply_by_shop_id_and_id( shop_id, staff_apply_id) if not staff_apply: return self.send_fail(error_text='员工申请记录不存在') staff_apply_serializer = StaffApplySerializer(staff_apply, args) # 此处无需验证,仅为了save的执行 staff_apply_serializer.is_valid() staff_apply_serializer.save() # 申请通过,创建员工 staff_info = {"shop_id": shop_id, "user_id": staff_apply.user.id} staff_info.update(args) # 校验员工是否存在 staff = get_staff_by_user_id_and_shop_id(staff_apply.user.id, shop_id, filter_delete=False) if not staff: staff_serializer = StaffSerializer(data=staff_info) if not staff_serializer.is_valid(): return self.send_error(error_message=staff_serializer.errors, status_code=status.HTTP_400_BAD_REQUEST) staff = staff_serializer.save() elif staff.status == StaffStatus.NORMAL: return self.send_fail(error_text="已经为该店铺的员工") else: # 员工状态为被删除,则将状态修改为正常 staff_info["status"] = StaffStatus.NORMAL for k, v in staff_info.items(): setattr(staff, k, v) staff.save() # 创建操作日志 log_info = { "shop_id": shop_id, "operator_id": self.current_user.id, "operate_type": StaffLogType.ADD_STAFF, "staff_id": staff.id, } create_staff_log_interface(log_info) return self.send_success(staff_id=staff.id)
def test_retrieve_staff(self): """Test retrieving staff by user school""" sample_objects.get_staff(sample_objects.get_school()) sample_objects.get_staff(self.staff_user.school) res = self.client1.get(STAFF_URL) staff = Staff.objects.filter(school=self.staff_user.school) serializer = StaffSerializer(staff, many=True) self.assertEquals(res.status_code, status.HTTP_200_OK) self.assertEquals(len(res.data), 1) self.assertEquals(res.data, serializer.data)
def get(self, request, args): page = args.get("page") shop_id = self.current_shop.id staff_list = list_staff_by_shop_id(shop_id, args.get("keyword")) # page为-1时,不分页 if page > 0: staff_list = self._get_paginated_data(staff_list, StaffSerializer) else: # 适配前端参数要求 staff_list = { 'results': StaffSerializer(staff_list, many=True).data } return self.send_success(data_list=staff_list)
def get_staff_profile(request): user = request.user if is_staff(user): staff = Staff.objects.get(user=user) staff_profile = StaffProfile.objects.get(staff=staff) staff_serializer = StaffSerializer(staff) profile_serializer = StaffProfileSerializer(staff_profile) if profile_serializer.data['avatar']: return Response({ "staff": staff_serializer.data, "avatar": profile_serializer.data['avatar'] }) else: return Response({"staff": staff_serializer.data, "avatar": None}) else: return Response({"You don't have permissions for this action"})
def test_retrieve_staff_detail(self, mock_jwt_auth): """Test viewing staff detail""" data = { "token_type": "access", "exp": 1582703472, "jti": "fcbaabbc963542429db9e93fd0aa158d", "user_id": 2 } mock_jwt_auth.return_value = (data, None) staff = sample_staff() url = detail_url(staff.id) res = self.client.get(url) serializer = StaffSerializer(staff) self.assertEqual(res.data, serializer.data)
def get(self, request): user = self.current_user shop = self.current_shop staff = self.current_staff for _ in USER_OUTPUT_CONSTANT: setattr(staff, _, getattr(user, _)) some_config = get_some_config_by_shop_id_interface(shop.id) some_config = SomeConfigSerializer(some_config).data baidu_token = Baidu.get_baidu_token() some_token = {"baidu_token": baidu_token} shop_serializer = AdminShopSerializer(shop) staff_serializer = StaffSerializer(staff) return self.send_success( shop_data=shop_serializer.data, user_data=staff_serializer.data, some_config=some_config, some_token=some_token, )
def post(self, request, *args, **kwargs): username = request.data.get('username', '') password = request.data.get('password', '') try: member = Staff.objects.get(username=username) except Staff.DoesNotExist: raise ValidationError( {'non_field_errors': ['Member does not exist.']}) if authenticate(request=request, username=member.username, password=password): login(request, member) if request.user.is_authenticated: token, created = Token.objects.get_or_create(user=member) return Response({ 'token': token.key, 'is_admin': getattr(member, 'is_admin', False), 'user': StaffSerializer(member).data }) raise ValidationError({ 'non_field_errors': ['Unable to login with provided credentials.'] })
class AdviserSerialaizer(serializers.ModelSerializer): staff = StaffSerializer(read_only=True) class Meta: model = Adviser fields = ('id', 'staff')