Esempio n. 1
0
 def getBusinessEntry(self, businessName):
     business = BusinessEntry.selectBy(
         businessName=businessName, userId=session.getUserId()).getOne(None)
     if (business == None):
         business = BusinessEntry(businessName=businessName,
                                  marketingName=businessName,
                                  category="",
                                  userId=session.getUserId())
     return business
Esempio n. 2
0
    def markByBusiness(self):
        # params = [
        #     {'name': 'tracker', 'value': [str(self.id)]},
        #     {'name': 'business', 'value': [str(self.businessId)]}
        # ]
        #db.runUpdate(self.Q_MARKBANKENTRYBYBUSINESS, params)
        #db.runUpdate(self.Q_MARKCREDITENTRYBYBUSINESS, params)

        bankEntries = BankEntry.selectBy(business=self.businessId,
                                         userId=session.getUserId())
        for e in bankEntries:
            e.trackerId = self.id

        creditEntries = CreditEntry.selectBy(business=self.businessId,
                                             userId=session.getUserId())
        for c in creditEntries:
            c.trackerId = self.id
Esempio n. 3
0
 def processSummary(self):
     for card in self.cards.getAll():
         entry = FileEntry(userId=session.getUserId(),
                           source=self.type,
                           reportDate=card.reportDate,
                           total=card.total,
                           refId=card.cardNumber,
                           flagged=card.flagged)
Esempio n. 4
0
 def processSummary(self):
     reportDate = self.start + ' to ' + self.end
     entry = FileEntry(userId=session.getUserId(),
                       source=self.type,
                       reportDate=reportDate,
                       total=None,
                       refId=self.account,
                       flagged=True)
Esempio n. 5
0
 def hideCreditCardReports():
     fList = FileEntry.select(
         AND(FileEntry.q.userId == session.getUserId(), FileEntry.total
             is not None, FileEntry.q.flagged == False))
     #Bank entries are flagged on creation so they will not appear here
     for f in fList:
         if BankEntriesPostProcessor.hideCreditCardReport(
                 f.reportDate, f.total):
             f.flagged = True
Esempio n. 6
0
    def markByAmount(self):
        # params = [
        #     {'name': 'tracker', 'value': [str(self.id)]},
        #     {'name': 'amount', 'value': [str(self.amount)]}
        # ]
        #db.runUpdateFromFile(self.F_MARKBYAMOUNT, params)

        businesses = BusinessEntry.select(
            AND(LIKE(BusinessEntry.q.marketingName, "%check%"),
                BusinessEntry.q.userId == session.getUserId()))
        businessIds = []
        for b in businesses:
            businessIds.append(b.id)

        bankEntries = BankEntry.select(
            AND(BankEntry.q.debit == self.amount,
                IN(BankEntry.q.business, businessIds),
                BusinessEntry.q.userId == session.getUserId()))
        for e in bankEntries:
            e.trackerId = self.id
Esempio n. 7
0
def generateMonthlyReport(month, categories):
    params = [{
        'name': 'month',
        'value': [month]
    }, {
        'name': 'filter',
        'value': categories
    }, {
        'name': 'userid',
        'value': [session.getUserId()]
    }]
    return db.runQueryFromFile(F_MONTHLY, params)
Esempio n. 8
0
def generatePieChartData(month, categories):
    params = [{
        'name': 'month',
        'value': [month]
    }, {
        'name': 'filter',
        'value': categories
    }, {
        'name': 'userid',
        'value': [session.getUserId()]
    }]
    return db.runQueryFromFile(F_MONTHLYBYCATEGORY, params)
Esempio n. 9
0
    def queryByAmount(self):
        # params = [
        #     {'name': 'mincount', 'value': [self.minOccurrences]}
        # ]
        dataSet = db.runQueryFromFile(self.F_RECURRINGBYAMOUNT,
                                      session.getUserIdParam())
        for row in dataSet.values:
            # debit, COUNT(*), min(date) as first, max(date) as last
            amount = row[0]  # CurrencyCol()
            count = row[1]  # IntCol()
            startDate = row[2]  # DateCol()
            lastDate = row[3]  # DateCol()
            businessId = 0
            name = 'Check'
            type = RecurrentExpense.TYPE_FIXED  # StringCol()
            avgAmount = 0  # CurrencyCol()
            maxAmount = 0  # CurrencyCol()
            minAmount = 0  # CurrencyCol()

            # If recurring expense is already tracked by business, skip it
            # This is no longer relevant because we only track checks here
            # tracker = self.getExpenseTrackerByBusiness(businessId)
            # if (tracker != None):
            #     print('Recurring expense already tracked by business ' + str(businessId))
            #     continue

            if math.isnan(amount):
                continue

            tracker = self.getExpenseTrackerByAmount(amount)
            if (tracker == None):
                tracker = RecurrentExpense(businessId=0,
                                           name=name,
                                           type=type,
                                           amount=amount,
                                           count=count,
                                           startDate=startDate,
                                           lastDate=lastDate,
                                           avgAmount=avgAmount,
                                           minAmount=minAmount,
                                           maxAmount=maxAmount,
                                           userId=session.getUserId())
                print('New expense tracked by amount ' + str(amount))
            else:
                tracker.update(0, name, type, amount, count, startDate,
                               lastDate, avgAmount, minAmount, maxAmount)
                print('Update expense tracked by amount ' + str(amount))

            self.trackers.append(tracker)
            print(tracker.id)
        return
Esempio n. 10
0
def generateTrackersReport(dateRange):
    if dateRange is None:
        return None

    params = [{
        'name': 'start',
        'value': [dateRange[0]]
    }, {
        'name': 'stop',
        'value': [dateRange[1]]
    }, {
        'name': 'userid',
        'value': [session.getUserId()]
    }]
    return db.runQueryFromFile(F_TRACKERS, params)
Esempio n. 11
0
 def hideCreditCardReport(inputDate, inputTotal):
     reportDate = datetime.strptime(inputDate, '%Y-%m-%d').date()
     start = datetime(reportDate.year, reportDate.month, 1).date()
     end = datetime(reportDate.year, reportDate.month, 28).date()
     # delta = timedelta(days=3)
     # start = reportDate - delta
     # end = reportDate + delta
     bList = BankEntry.select(
         AND(BankEntry.q.userId == session.getUserId(),
             BankEntry.q.date >= start, BankEntry.q.date <= end,
             BankEntry.q.debit == inputTotal))
     found = False
     for b in bList:
         b.hide = 1
         found = True
     return found
Esempio n. 12
0
    def addCreditEntry(self, row):
        reportDate = self.extractReportDate(row)
        purchaseDate = self.extractPurchaseDate(row)
        businessName = self.extractBusinessName(row)
        amount = self.extractAmount(row)
        cardNumber = self.getCardNumber(row)

        business = self.getBusinessEntry(businessName)
        entry = CreditEntry(reportDate=reportDate,
                            purchaseDate=purchaseDate,
                            business=business.id,
                            cardNumber=cardNumber,
                            bankId="0",
                            credit=self.credit(amount),
                            debit=self.debit(amount),
                            balance=0,
                            trackerId=0,
                            userId=session.getUserId())
        return entry
Esempio n. 13
0
    def queryByBusiness(self):
        # params = [
        #     {'name': 'mincount', 'value': [self.minOccurrences]}
        # ]

        dataSet = db.runQueryFromFile(self.F_RECURRINGBYBUSINESS,
                                      session.getUserIdParam())
        for row in dataSet.values:
            name = row[2]  #StringCol()
            businessId = row[0]  #IntCol()
            amount = 0  #CurrencyCol()
            type = RecurrentExpense.TYPE_VARIABLE  #StringCol()
            count = row[1]  #IntCol()
            startDate = row[6]  #DateCol()
            lastDate = row[7]  #DateCol()
            avgAmount = row[3]  #CurrencyCol()
            maxAmount = row[5]  #CurrencyCol()
            minAmount = row[4]  #CurrencyCol()

            tracker = self.getExpenseTrackerByBusiness(businessId)
            if (tracker == None):
                tracker = RecurrentExpense(businessId=businessId,
                                           name=name,
                                           type=type,
                                           amount=amount,
                                           count=count,
                                           startDate=startDate,
                                           lastDate=lastDate,
                                           avgAmount=avgAmount,
                                           minAmount=minAmount,
                                           maxAmount=maxAmount,
                                           userId=session.getUserId())
                print('New expense tracked by business ' + str(businessId))
            else:
                tracker.update(businessId, name, type, amount, count,
                               startDate, lastDate, avgAmount, minAmount,
                               maxAmount)
                print('Update expense tracked by business ' + str(businessId))

            self.trackers.append(tracker)
            print(tracker.id)
        return
Esempio n. 14
0
    def processRow(self, row):
        date = self.extractDate(row)
        businessName = self.extractBusiness(row)
        refId = self.extractRefId(row)
        credit = self.extractCredit(row)
        debit = self.extractDebit(row)
        balance = self.extractBalance(row)
        if (myString.isEmpty(date)):
            return None

        business = self.getBusinessEntry(businessName)
        entry = BankEntry(date=date,
                          business=business.id,
                          hide=0,
                          refId=refId,
                          credit=credit,
                          debit=debit,
                          balance=balance,
                          trackerId=0,
                          userId=session.getUserId())
        entry.toCSV(
        )  # for debugging, find a better way to log only when in debug mode
        return entry
Esempio n. 15
0
def updateBusinessEntry(businessId, newName, newCategory):
    business = BusinessEntry.selectBy(id=businessId,
                                      userId=session.getUserId()).getOne(None)
    if (business != None):
        business.set(marketingName=newName, category=newCategory)
Esempio n. 16
0
def updateTrackerEntry(trackerId, newName):
    tracker = RecurrentExpense.selectBy(
        id=trackerId, userId=session.getUserId()).getOne(None)
    if (tracker != None):
        tracker.set(name=newName)
Esempio n. 17
0
 def getExpenseTrackerByBusiness(self, businessId):
     tracker = RecurrentExpense.selectBy(
         businessId=businessId, userId=session.getUserId()).getOne(None)
     return tracker
Esempio n. 18
0
 def getExpenseTrackerByAmount(self, amount):
     tracker = RecurrentExpense.selectBy(
         amount=amount, userId=session.getUserId()).getOne(None)
     return tracker