def retrieve(self, request, *args, **kwargs): res = Reservation.objects.all().filter(id=self.kwargs.get("pk", 0)) if not res: return return_not_find("预约不存在!") res = res[0] # 如果请求的用户不是该预约的病人、医生或者不是管理员时无权限 if ( not res.patient == request.user and not res.doctor == request.user and not request.user.is_staff ): return return_forbiden() if not res.pay_id: return return_not_find("缴费记录不存在!") data = ReservationSerializer(res).data data["pay"] = get_data_nested( res.pay, PayRecordSerializer, PayItemSerializer, "items", "items", True, ) return Response(data=data, status=status.HTTP_200_OK)
def get_refund_records(self, request, pk=None): if not pk: return return_param_error() user = User.objects.filter(id=pk) if not user: return return_not_find("用户不存在!") user = user[0] data = [] inss = None if hasattr(user, "created_refund_records"): inss = user.created_refund_records.all() inss = filter_date( inss, start=request.data.get("start", None), end=request.data.get("end", None), format="%Y-%m-%d", kind=1, attr="create_time", ) if inss: for ins in inss: data.append( get_data_nested( ins, RefundRecordSerializer, RefundRecordItemSerializer, many=True, )) return Response(data=data, status=status.HTTP_200_OK)
def get_pay_records(self, request, pk=None): if not pk: return return_param_error() user = User.objects.filter(id=pk) if not user: return return_not_find("用户不存在!") user = user[0] pg = Group.objects.get(name="病人") data = [] prs = None if pg in user.groups.all(): if hasattr(user, "paid_records"): prs = user.paid_records.all().filter( Q(receive__isnull=False) & Q(refund__isnull=False)) else: if hasattr(user, "created_pay_records"): prs = user.created_pay_records.all().filter( Q(receive__isnull=False) & Q(refund__isnull=False)) if prs: for pr in prs: data.append( get_data_nested(pr, PayRecordSerializer, PayItemSerializer, many=True)) return Response(data=data, status=status.HTTP_200_OK)
def list(self, request, *args, **kwargs): inss = AuditRecord.objects.all() data = [] for ins in inss: data.append( get_data_nested(ins, AuditRecordSerializer, AuditItemSerializer, many=True)) return Response(data=data, status=status.HTTP_200_OK)
def list(self, request, *args, **kwargs): mhrs = MedicineHandoutRecord.objects.all() data = [] for mhr in mhrs: d = MedicineHandoutRecordSerializer(mhr).data d["prescription"] = get_data_nested( mhr.prescription, PrescriptionSerializer, PrescriptionItemSerializer, many=True, ) data.append(d) return Response(data=data, status=status.HTTP_200_OK)
def retrieve(self, request, *args, **kwargs): ins = AuditRecord.objects.all().filter(id=self.kwargs.get("pk", 0)) if not ins: return return_not_find("审核记录不存在!") ins = ins[0] return Response( get_data_nested(ins, AuditRecordSerializer, AuditItemSerializer, many=True), status=status.HTTP_200_OK, )
def retrieve(self, request, *args, **kwargs): record = RefundRecord.objects.all().filter(id=self.kwargs.get("pk", 0)) if not record: return return_not_find() record = record[0] data = get_data_nested( record, RefundRecordSerializer, RefundRecordItemSerializer, many=True, ) return Response(data=data, status=status.HTTP_200_OK)
def list(self, request, *args, **kwargs): records = RefundRecord.objects.all() data = [] for record in records: data.append( get_data_nested( record, RefundRecordSerializer, RefundRecordItemSerializer, many=True, )) return Response(data=data, status=status.HTTP_200_OK)
def retrieve(self, request, *args, **kwargs): mhr = MedicineHandoutRecord.objects.all().filter( id=self.kwargs.get("pk", 0) ) if not mhr: return return_not_find("药物发放记录不存在!") mhr = mhr[0] data = MedicineHandoutRecordSerializer(mhr).data data["prescription"] = get_data_nested( mhr.prescription, PrescriptionSerializer, PrescriptionItemSerializer, many=True, ) return Response(data=data, status=status.HTTP_200_OK)
def list(self, request, *args, **kwargs): records = PayRecord.objects.all().filter( Q(receive__isnull=False) & Q(refund__isnull=False)) data = [] for record in records: d = get_data_nested( record, PayRecordSerializer, PayItemSerializer, "items", "items", True, ) data.append(d) return Response(data=data, status=status.HTTP_200_OK)
def retrieve(self, request, *args, **kwargs): record = PayRecord.objects.all().filter(id=self.kwargs.get("pk", 0)) # record = record.filter( # Q(receive__isnull=False) & Q(refund__isnull=False) # ) if not record: return return_not_find("缴费记录不存在!") record = record[0] data = get_data_nested( record, PayRecordSerializer, PayItemSerializer, "items", "items", True, ) return Response(data=data, status=status.HTTP_200_OK)
def list(self, request, *args, **kwargs): ress = Reservation.objects.all() data = [] for res in ress: # 无效数据 if not res.pay: continue d = ReservationSerializer(res).data d["pay"] = get_data_nested( res.pay, PayRecordSerializer, PayItemSerializer, "items", "items", True, ) data.append(d) return Response(data=data, status=status.HTTP_200_OK)
def get_pay_records(self, request, pk=None): if not pk: return return_param_error() ins = PayType.objects.all().filter(id=pk) if not ins: return return_not_find("缴费类型不存在!") ins = ins[0] data = [] if hasattr(ins, "records"): records = ins.records.all().filter( Q(receive__isnull=False) & Q(refund__isnull=False)) for rec in records: data.append( get_data_nested(rec, PayRecordSerializer, PayItemSerializer, many=True)) return Response(data=data, status=status.HTTP_200_OK)
def update(self, request, *args, **kwargs): mhr = MedicineHandoutRecord.objects.all().filter( id=self.kwargs.get("pk", 0) ) if not mhr: return return_not_find("药物发放记录不存在!") mhr = mhr[0] # if mhr.handout_status: # return return_param_error("药物已发放,不可更改!") data = {"handout_status": request.data.get("handout_status", None)} if not data["handout_status"]: return return_param_error() data["modifier"] = request.user.id ser = MedicineHandoutRecordSerializer( instance=mhr, data=data, partial=True ) if not ser.is_valid(): print(ser.errors) return return_param_error() mhr = ser.save() # 更改药物库存 if mhr.handout_status == 4: for item in mhr.prescription.items.all(): item.medicine.count -= item.count item.medicine.modifier = request.user item.medicine.save() data = MedicineHandoutRecordSerializer(mhr).data data["prescription"] = get_data_nested( mhr.prescription, PrescriptionSerializer, PrescriptionItemSerializer, many=True, ) return Response(data=data, status=status.HTTP_200_OK)
def update(self, request, *args, **kwargs): record = PayRecord.objects.all().filter(id=self.kwargs.get("pk", 0)) if not record: return return_not_find("缴费记录不存在!") record = record[0] receive = request.data.get("receive", None) refund = request.data.get("refund", None) method = request.data.get("method", None) if not all((receive, method)): return return_param_error() data = { "receive": receive, "method": method, "refund": refund if refund else 0, } ser = PayRecordSerializer(instance=record, data=data, partial=True) if not ser.is_valid(): print(ser.errors) return return_param_error() ser.save() if hasattr(record, "reservation"): record.reservation.is_paid = True record.reservation.save() if hasattr(record, "prescription"): record.prescription.is_paid = True record.prescription.save() return Response( data=get_data_nested(record, PayRecordSerializer, PayItemSerializer, many=True), status=status.HTTP_200_OK, )
def create(self, request, *args, **kwargs): pay_type_id = request.data.get("type", None) re_id = request.data.get("id", None) if not all((pay_type_id, re_id)): return return_param_error() pay_type = PayType.objects.all().filter(id=pay_type_id) if not pay_type: return return_not_find("缴费类型不存在!") pay_type = pay_type[0] data = {} # 默认为预约费用,此时的病人为请求者 data["patient"] = request.user.id data["creator"] = request.user.id data["pay_type"] = pay_type_id # 更改patient obj = None if pay_type.name == "化验单费用": obj = Laboratory.objects.all().filter(id=re_id) elif pay_type.name == "处方签费用": obj = Prescription.objects.all().filter(id=re_id) else: obj = User.objects.all().filter(id=re_id) if not obj: return return_param_error() obj = obj[0] if not isinstance(obj, User): # 此单号已经缴费过了 if obj.pay: return Response( get_data_nested( obj.pay, PayRecordSerializer, PayItemSerializer, many=True, )) data["patient"] = obj.patient_id else: pg = Group.objects.get(name="病人") if pg not in obj.groups.all(): return return_param_error("此用户不是病人!") data["patient"] = re_id # 创建记录 ser = PayRecordSerializer(data=data) if not ser.is_valid(): print(ser.errors) return return_param_error() record = ser.save() # 创建对应item if isinstance(obj, User): data = { "record": record.id, "name": pay_type.name, "count": 1, "price": pay_type.price, } ser = PayItemSerializer(data=data) if not ser.is_valid(): print(ser.errors) return return_param_error() ser.save() return Response( data=get_data_nested(record, PayRecordSerializer, PayItemSerializer, many=True), status=status.HTTP_201_CREATED, ) else: # 如果对应处方、化验单没有对应的条目(不允许这种情况出现) if not hasattr(obj, "items"): return return_param_error() data = [] items = obj.items.all() # 如果是化验单 if isinstance(obj, Laboratory): for item in items: d = { "record": record.id, "name": item.laboratory_type.name, "count": 1, "price": item.laboratory_type.price, } data.append(d) # 如果是处方签 else: for item in items: d = { "record": record.id, "name": item.medicine.name, "count": item.count, "price": item.medicine.price * item.count, } data.append(d) ser = PayItemSerializer(data=data, many=True) if not ser.is_valid(): print(ser.errors) return return_param_error() ser.save() obj.pay = record obj.save() return Response( data=get_data_nested(record, PayRecordSerializer, PayItemSerializer, many=True), status=status.HTTP_201_CREATED, )