Example #1
0
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()}
Example #2
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)
Example #3
0
 def __init__(self):
     self.patient_id = None
     self.ordersDetailsReport = OrdersDetailsReport()
     self.incomeReport = IncomeReport()
     self.refundsReport = RefundsReport()
Example #4
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(),
            "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)