Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
    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,
        )
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
    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)
Пример #11
0
    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)
Пример #12
0
    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)
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
    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,
        )
Пример #16
0
    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,
            )