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()}