class PatientSummariesReport(object): """total income, total refunds, discounts, ordered price, amount due by certain patient """ def __init__(self): self.patient_id = None self.ordersDetailsReport = OrdersDetailsReport() self.incomeReport = IncomeReport() self.refundsReport = RefundsReport() def filterDateRange(self, startDate=None, endDate=None): startTime = datetime.time(00, 00) endTime = datetime.time(23, 59) self.startDate = startDate if startDate else datetime.date.today() self.endDate = endDate if endDate else datetime.date.today() self.startDate = datetime.datetime.combine(self.startDate, startTime) self.endDate = datetime.datetime.combine(self.endDate, endTime) def filterByPatient(self, patient_id=None): self.patient_id = patient_id def result(self): self.ordersDetailsReport.filterDateRange(self.startDate, self.endDate) self.incomeReport.filterDateRange(self.startDate, self.endDate) self.refundsReport.filterDateRange(self.startDate, self.endDate) self.ordersDetailsReport.filterByPatient(self.patient_id) self.incomeReport.filterByPatient(self.patient_id) self.refundsReport.filterByPatient(self.patient_id) return {"totalPayments": self.incomeReport.result(), "totalRefunds": self.refundsReport.result(), "ordersSummary": self.ordersDetailsReport.result()}
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)
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(), "serviceName": fields.String, "serviceOfferName": fields.String, "patientName": fields.String, "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["patient"] = fields.Nested(patient_fields) details_fields["serviceOffer"] = fields.Nested(idName_fields) result_fields = { "details": fields.Nested(details_fields), "ordersCount": fields.Integer(), "totalDiscount": fields.Integer(), "totalPrice": 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("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") 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.filterByServiceOffer(serviceOffer_id) result = report.result() return marshal(result, result_fields)