Пример #1
0
def main():
    # set option
    parser = argparse.ArgumentParser(
        description=
        "Visualize household accounts in zaim.net as graphs and lists.")
    parser.add_argument('-p',
                        '--place',
                        action='store_true',
                        help='search for KEYWORD in place',
                        default=False)
    parser.add_argument('-i',
                        '--input',
                        action='store_true',
                        help='Input data',
                        default=False)
    parser.add_argument(
        '-d',
        '--display',
        action='store',
        nargs='?',
        type=int,
        help='Display latest household accounts(NUM is the number of data)',
        const=10,
        metavar='NUM')
    parser.add_argument('-m',
                        '--mode',
                        action='store',
                        choices=['payment', 'income', 'transfer'],
                        help='choice kind of movement of money',
                        default='payment')
    parser.add_argument('-g',
                        '--graph',
                        metavar='YYYY-MM',
                        action='store',
                        nargs='?',
                        type=str,
                        help='select category and draw graph in a month',
                        const=datetime.now().strftime("%Y-%m"))
    parser.add_argument(
        '-b',
        '--balance-make',
        action='store_true',
        help='make balance difference between actual and calculated balance',
        default=False)
    # graph option (type(int))
    args = parser.parse_args()

    # variable
    Mdata = GetData("money", "money")
    Mdata['data'] = pd.to_datetime(Mdata['date'])
    Cdata = GetData("category", "categories")
    Gdata = GetData("genre", "genres")
    # Vdata = verify()
    Adata = GetData("account", "accounts")
    PayStr = "payment"
    IncStr = "income"

    # constructor
    graph = Graph(Mdata, Cdata)

    # check option
    # input data
    if args.input:
        post = Post(Cdata, Gdata, Adata)
        post.MakeInputData()
        post.PostData(auth)
        sys.exit(1)

    # draw relative payment graph
    graph.RelativePayment()

    # draw monthly category graph
    graph.MonthlyCategoryGraph()

    # draw category graph
    if args.graph is not None:
        # write category list
        print("CATEGORY LIST")
        print(PayStr)
        print(' '.join(list(Cdata[Cdata["mode"] == PayStr]["name"])))
        print(IncStr)
        print(' '.join(list(Cdata[Cdata["mode"] == IncStr]["name"])))
        print()
        keyword = input(
            "What is CATEGORY? or If you want to Payment all , CATEGORY is \"all\"\n"
        )

        # check category exist
        if keyword == "all":
            # draw graph
            graph.DrawGraph(args.graph, None)
            sys.exit(1)
        try:
            CategoryId = Cdata[Cdata["name"] == keyword]["id"].values[0]
        except IndexError:
            print("ERROR: category don't exist")
            sys.exit(1)

        # draw graph
        graph.DrawGraph(args.graph, CategoryId)
        sys.exit(1)

    # display household accounts
    if (args.display is not None) or args.place:
        # search for keyword in place
        if args.place:
            args.display = 10
            keyword = input("What is location KEYWORD?\n")
            Mdata = Mdata[Mdata["place"].str.contains(keyword)]

        # set movement of money
        Mdata = Mdata[Mdata["mode"].str.contains(
            args.mode)].reset_index(drop=True)
        Mdata = Mdata.replace('\ 00:00:00$', '')

        # replace category_id with category_name
        Mdata = Mdata.loc[:, [
            'amount', 'date', 'mode', 'place', 'category_id', 'genre_id'
        ]]
        Ctmp = Mdata['category_id']
        Gtmp = Mdata['genre_id']
        Mdata = Mdata.drop(['category_id', 'genre_id'], axis=1)
        for i in range(0, len(Cdata.index)):
            Ctmp = Ctmp.replace(Cdata.loc[i, "id"], Cdata.loc[i, "name"])
        for i in range(0, len(Gdata.index)):
            Gtmp = Gtmp.replace(Gdata.loc[i, "id"], Gdata.loc[i, "name"])
        Mdata = pd.concat([Mdata, Ctmp, Gtmp],
                          axis=1).rename(columns={
                              "category_id": "category",
                              "genre_id": "genre"
                          })

        # output
        display(Mdata.loc[:(args.display - 1), :])

        sys.exit(1)

    # constructor
    balance = Balance(Mdata, Adata)

    # make balance difference
    if args.balance_make:
        balance.MakeBalanceDiff()
        sys.exit(1)

    # calc balance
    balance.CalcBalance()