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)