Recent Posts

Pages: 1 2 [3] 4 5 ... 10
21
Welcome, again!  :D

It's been a little quiet lately, but Financier is still a solid option to replace YNAB4. I have been putting a lot of effort into wrapping up the mobile web app revamp. It's nearly there, although development has stalled over the last couple of weeks due to some work and family issues. I should be back on track after a short vacation this weekend.

I really want to take a crack at implementing scheduled transactions and file import at some point, which may require a main app rewrite using the same technologies that I used in the mobile web app. The flurry of summer activity is starting to subside, so it should be a little easier to find time to work on side projects in the next couple of months.
22
Hello again, Financier community --

I didn't manage to grab a screenshot before it disappeared, unfortunately, but I just opened YNAB4 and a popup message from YNAB appeared, stating that YNAB4 support is going away (in October?) and that YNAB4 won't work with Apple's Catalina.

So, I guess it's time for me to start getting serious about Financier and set up my budget.

Ah, well. Change is inevitable and I'm glad Financier is here.



23
Other / Re: Mobile App Beta 2.0.0-beta.10 (Minor Updates & Bug Fixes)
« Last post by ottyacat on August 07, 2019, 05:25:52 PM »
You're fired. :P

Early weekend for me then.  :parrot:
24
Other / Re: Mobile App Beta 2.0.0-beta.10 (Minor Updates & Bug Fixes)
« Last post by asromzek on August 07, 2019, 08:50:46 AM »
25
Other / Re: Mobile App Beta 2.0.0-beta.10 (Minor Updates & Bug Fixes)
« Last post by ottyacat on August 06, 2019, 06:00:21 PM »
(other than you, @ottyacat).

I have another 'complaint', its only Wednesday... But the glass should always be half full I guess, its Tuesday in other places.   ::)

And because I know how much you enjoy trying to solve the Android issues I keep finding, I have sent you another bug/idiosyncrasy. Your welcome! :D
26
Other / Re: Mobile App Beta 2.0.0-beta.10 (Minor Updates & Bug Fixes)
« Last post by asromzek on August 06, 2019, 12:37:37 PM »
The last week has been a little bit of a mess. Work has been crazy, the small human inhabiting our living space has required some special attention, and a strong offer we made on a house over the weekend was crushed by two other offers that were $20k+ higher than the asking price (yikes). With all of that piling up, I have not had much time to work on the mobile app or the core library. There are a few small updates that are ready to deploy, but I want to finish a minor geo-location UI revamp first. If things calm down, I'm aiming to have that out by the end of the week. And since I haven't heard many complaints about beta app (other than you, @ottyacat), I think the app is nearly ready to push to stable.
28
Bug Reports / Re: Bug with "undeletable" split transaction
« Last post by jat255 on July 25, 2019, 04:50:37 PM »
I didn't originally write it (it's a fork of https://github.com/higoramp/python-financier), but I added some capabilities with regards to splits and transfers. I structure my bi-weekly paycheck as a split transaction with subtractions for all the deductions (healthcare, insurance, etc.) so I have a record of the gross wages. Since that doesn't typically change from week to week, I wrote a method that automates paycheck entry, including two transfers into a retirement account. It is not on the github (since it has private information), but I've been using it for about a year now without issues (until this issue popped up... not sure where it came from...).

Here's a sanitized version of what I'm using (this method goes in pythonfinancier/financier.py):

Code: [Select]
    def add_paycheck(self, account_name):
            """
            Add an instance of a paycheck to an account.

            Parameters
            ----------
            account_name : str
                Name of the account to use

            Returns
            -------
                JSON response of the database upon inserting the transaction
            """
            from datetime import datetime

            this_id = str(uuid.uuid4())
            memo = "2019 pay period ## paycheck"
            date = datetime.now().strftime('%Y-%m-%d')
            this_retire1_uuid = str(uuid.uuid4())
            this_retire2_uuid = str(uuid.uuid4())

            other_retire1_uuid = str(uuid.uuid4())
            other_retire2_uuid = str(uuid.uuid4())

            # getting account from either map or database
            account_id = self.find_account(account_name)['_id']
            retire_name = 'retirement account name'

            # getting payee or creating a new one
            payee_id = self.get_or_create_payee("my workplace")['_id']

            id_transaction = self.get_id_transaction(this_id)
            tr = self.get_transaction(id_transaction)

            net_value = 9999.99 * 100
            retire1_val = 888.88 * 100
            retire2_val = 777.77 * 100

            transactions = [{'value': -111.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split1',
                             'id': str(uuid.uuid4())},
                            {'value': -1 * retire1_val,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split2',
                             'transfer': other_retire1_uuid,
                             'id': this_retire1_uuid},
                            {'value': -1 * retire2_val,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'transfer': other_retire2_uuid,
                             'memo': '#split3',
                             'id': this_retire2_uuid},
                            {'value': -111.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split4',
                             'id': str(uuid.uuid4())},
                            {'value': -111.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split5',
                             'id': str(uuid.uuid4())},
                            {'value': -111.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split6',
                             'id': str(uuid.uuid4())},
                            {'value': -11.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split7',
                             'id': str(uuid.uuid4())},
                            {'value': -11.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split8',
                             'id': str(uuid.uuid4())},
                            {'value': -11.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split9',
                             'id': str(uuid.uuid4())},
                            {'value': -11.11 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#split10',
                             'id': str(uuid.uuid4())},
                            {'value': 99999 * 100,
                             'payee_name': '',
                             'category_name': 'incomeNextMonth',
                             'memo': '#gross_wages',
                             'id': str(uuid.uuid4())}]

            for i, t in enumerate(transactions):
                t['category'] = self.find_category(t.pop('category_name'))['_id']
                if t['payee_name'] is not '':
                    t['payee'] = self.get_or_create_payee(t.pop('payee_name'))['_id']
                else:
                    # null payee
                    pass
                transactions\[i\] = t

            if not tr or '_id' not in tr:
                # category is "split"
                doc = {'_id': id_transaction, 'value': value,
                       'account': account_id,
                       'payee': payee_id, 'date': date,
                       'category': 'split', 'memo': memo,
                       'splits': transactions}
                self.logger.debug('Adding', doc)

                if '_rev' in tr:
                    doc['_rev'] = tr['_rev']
                self.logger.debug(
                    'importing transaction {0}'.format(doc['_id']))

                added_doc =  self.cdb.save(self.user_db, doc)

                inserted = self.find_transaction(memo=memo, date=date)[0][
                    'splits']

                self.save_transaction(account_name=retire_name,
                                      category_name=None,
                                      value=retire1_val,
                                      date=date,
                                      payee_name=None,
                                      memo='#retirement',
                                      id=other_retire1_uuid,
                                      transfer_id=this_retire1_uuid)

                self.save_transaction(account_name=retire_name,
                                      category_name=None,
                                      value=retire2_val,
                                      date=date,
                                      payee_name=None,
                                      memo='#retirement2',
                                      id=other_retire2_uuid,
                                      transfer_id=this_retire2_uuid)

                return added_doc
            else:
                self.logger.warning(
                    'transaction {0} has already been imported '.format(
                        tr['_id']))

So I suppose it's mostly manual still, but it would not be too much work to write a small extension to take the output of a ofx file or something and batch upload transactions.
29
Bug Reports / Re: Bug with "undeletable" split transaction
« Last post by asromzek on July 25, 2019, 04:18:35 PM »
Awesome, I'll have to check out that python code. Are you automating transaction import, or using for quick manual entries?
30
Bug Reports / Re: Bug with "undeletable" split transaction
« Last post by jat255 on July 25, 2019, 04:13:57 PM »
It worked! My savior :)
Pages: 1 2 [3] 4 5 ... 10