コード例 #1
0
ファイル: netIncome.py プロジェクト: yehiaa/clinic
class NetIncomeReport(object):
    def __init__(self):
        self.incomReport = IncomeReport()
        self.refundsReport = RefundsReport()
        self.category_id = None

    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)

        self.incomReport.filterDateRange(self.startDate, self.endDate)
        self.refundsReport.filterDateRange(self.startDate, self.endDate)

    def filterByCategory(self, category_id=None):
        self.category_id = category_id
        self.incomReport.filterByCategory(category_id)
        self.refundsReport.filterByCategory(category_id)

    def result(self):
        incomeResult = self.incomReport.result()
        refundsResult = self.refundsReport.result()

        netIncome = incomeResult["total"] - refundsResult["refundamount"]
        result = {'refunds': refundsResult, 'income': incomeResult, 'netIncome': netIncome}
        return result
コード例 #2
0
ファイル: patientSummaries.py プロジェクト: yehiaa/clinic
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()}
コード例 #3
0
ファイル: incomeByUsers.py プロジェクト: yehiaa/clinic
class IncomeByUsersReport(object):
    """income by users report using payment dateTime"""

    def __init__(self):
        self.user_id = None
        self.accountTransactions = AccountTransactionsReport()
        self.refunds = 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 filterByUser(self, user_id=None):
        self.user_id = user_id

    def result(self):

        self.accountTransactions.filterDateRange(self.startDate, self.endDate)
        self.refunds.filterDateRange(self.startDate , self.endDate)

        subQueryUser = select([User.name], ServicePayment.createdBy_id == User.id).label('receivedBy')
        paymentTypeNameCol = case([
            (ServicePayment.paymentType == PaymentTypes.CASH, PaymentTypes.name(PaymentTypes.CASH)), 
            (ServicePayment.paymentType == PaymentTypes.VISA, PaymentTypes.name(PaymentTypes.VISA)),
            (ServicePayment.paymentType == PaymentTypes.ACCOUNT, PaymentTypes.name(PaymentTypes.ACCOUNT))], else_="unknown")

        q = db.session.query(

            ServicePayment.paymentType.label("paymentType"), paymentTypeNameCol.label("paymentTypeName"),
            subQueryUser,
            func.sum(ServicePayment.amount).label("amount")
        ).filter(ServicePayment.paymentDateTime.between(self.startDate, self.endDate)).group_by(
            ServicePayment.paymentType, ServicePayment.createdBy_id).order_by(ServicePayment.createdBy_id)
        # return(str(q))
        if self.user_id is not None:
            q = q.filter(ServicePayment.createdBy_id == self.user_id)
            self.accountTransactions.filterByUser(self.user_id)
            self.refunds.filterByUser(self.user_id)

        accountTransactionsResult = self.accountTransactions.result()
        refundsResult = self.refunds.result()

        dbResult = q.all()
        paymentsListByUser = [dict(zip(row.keys(), row)) for row in dbResult]

        totalCash = sum([row["amount"] for row in paymentsListByUser if row['paymentType'] == PaymentTypes.CASH])
        totalVisa = sum([row["amount"] for row in paymentsListByUser if row['paymentType'] == PaymentTypes.VISA])
        totalAccount = sum([row["amount"] for row in paymentsListByUser if row['paymentType'] == PaymentTypes.ACCOUNT])

        totalPayments = totalCash + totalVisa + totalAccount
        result = {'details': paymentsListByUser,
                    'totals': {'CASH': totalCash, 'VISA': totalVisa, 'ACCOUNT':totalAccount, 'grandTotal': totalPayments}, 
                    "accountTransactions": accountTransactionsResult, 'refunds': refundsResult}
        return result
コード例 #4
0
ファイル: testRefundReports.py プロジェクト: yehiaa/clinic
 def test_withDefaultDate_report(self):
     refundsReport = RefundsReport()
     # datetime.date(2016, 3, 12)
     refundsReport.filterDateRange()
     result = refundsReport.result()
     # print(result)
     expected = {"refundamount": 1300, "refundfee": 600}
     self.assertEquals(expected, result)
コード例 #5
0
ファイル: testRefundReports.py プロジェクト: yehiaa/clinic
 def test_income_report(self):
     refundsReport = RefundsReport()
     # datetime.date(2016, 3, 12)
     refundsReport.filterDateRange(datetime.date.today(), datetime.datetime.now())
     result = refundsReport.result()
     # print(result)
     expected = {"refundamount": 1300, "refundfee": 600}
     self.assertEquals(expected, result)
コード例 #6
0
ファイル: reports.py プロジェクト: yehiaa/clinic
    def get(self):

        qParser = reqparse.RequestParser()

        qParser.add_argument("fromDate", type=dateInput, default=None)
        qParser.add_argument("toDate", type=dateInput, default=None)

        args = qParser.parse_args()

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

        refundsReport = RefundsReport()
        refundsReport.filterDateRange(fromDate, toDate)

        return refundsReport.result()
コード例 #7
0
ファイル: income.py プロジェクト: yehiaa/clinic
    def get(self):
        qParser = reqparse.RequestParser()

        qParser.add_argument('fromDate', type=dateInput, default=None)
        qParser.add_argument('toDate', type=dateInput, default=None)
        qParser.add_argument('category_id', type=int, default=None)

        args = qParser.parse_args()

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

        refundsReport = RefundsReport()
        refundsReport.filterDateRange(fromDate, toDate)

        return refundsReport.result()
コード例 #8
0
ファイル: netIncome.py プロジェクト: yehiaa/clinic
 def __init__(self):
     self.incomReport = IncomeReport()
     self.refundsReport = RefundsReport()
     self.category_id = None
コード例 #9
0
ファイル: patientSummaries.py プロジェクト: yehiaa/clinic
 def __init__(self):
     self.patient_id = None
     self.ordersDetailsReport = OrdersDetailsReport()
     self.incomeReport = IncomeReport()
     self.refundsReport = RefundsReport()
コード例 #10
0
ファイル: incomeByUsers.py プロジェクト: yehiaa/clinic
 def __init__(self):
     self.user_id = None
     self.accountTransactions = AccountTransactionsReport()
     self.refunds = RefundsReport()
コード例 #11
0
 def __init__(self):
     self.incomReport = IncomeReport()
     self.refundsReport = RefundsReport()