Пример #1
0
    def get(self):
        details_fields = {
            'id': fields.Integer(),
            'patient_id': fields.Integer(),
            'service_id': fields.Integer(),
            'amountDue': fields.Integer(),
            'totalPrice': fields.Integer(),
            'discount': fields.Integer(default=None),
            'totalPayments': fields.Integer(),
            'numberOfSessions': fields.Integer(),
            'issueDateTime': fields.DateTime(dt_format='iso8601'),
        }

        idName_fields = {
            'id': fields.Integer(default=None),
            'name': fields.String
        }

        patient_fields = {
            'id': fields.Integer(default=None),
            'name': fields.String(),
            'mobileNumber': fields.String()
        }

        details_fields['service'] = fields.Nested(idName_fields)
        details_fields['createdBy'] = fields.Nested(idName_fields)
        details_fields['patient'] = fields.Nested(patient_fields)
        details_fields['serviceOffer'] = fields.Nested(idName_fields)
        details_fields['leadedBy'] = fields.Nested(idName_fields)

        result_fields = {
            'details': fields.Nested(details_fields),
            'ordersCount': fields.Integer(),
            'totalDiscount': fields.Integer(),
            'totalPrice': fields.Integer(),
            'totalPayments': fields.Integer(),
            'totalAmountDue': fields.Integer(),
        }

        qParser = reqparse.RequestParser()

        qParser.add_argument('fromDate', type=dateInput, default=None)
        qParser.add_argument('toDate', type=dateInput, default=None)
        qParser.add_argument('service_id', type=int, default=None)
        qParser.add_argument('patient_id', type=int, default=None)
        qParser.add_argument('employee_id', type=int, default=None)
        qParser.add_argument('serviceOffer_id', type=int, default=None)
        qParser.add_argument('patient_mobile', type=str, default=None)

        args = qParser.parse_args()

        fromDate = args.get('fromDate')
        toDate = args.get('toDate')

        service_id = args.get('service_id')
        employee_id = args.get('employee_id')
        patient_id = args.get('patient_id')
        serviceOffer_id = args.get('serviceOffer_id')
        patient_mobile = args.get('patient_mobile')

        if patient_mobile is not None:
            patient = Patient.query.filter_by(mobileNumber=patient_mobile).first()
            patient_id = patient.id if patient else None

        report = OrdersDetailsReport()
        report.filterDateRange(fromDate, toDate)
        report.filterByService(service_id)
        report.filterByPatient(patient_id)
        report.filterByUser(employee_id)
        report.filterByServiceOffer(serviceOffer_id)

        result = report.result()
        return marshal(result, result_fields)