assetgrid / assetgridapp Goto Github PK
View Code? Open in Web Editor NEW๐ A selfhosted data-driven personal finance manager ๐ธ
Home Page: https://assetgrid.app
License: GNU Affero General Public License v3.0
๐ A selfhosted data-driven personal finance manager ๐ธ
Home Page: https://assetgrid.app
License: GNU Affero General Public License v3.0
Make it so the profile name field when saving import profiles, suggests names of previous import profiles
Is your feature request related to a problem? Please describe.
It should be possible to save search filters, so they can be reused later
Our goal is for Assetgrid's CSV importer to be flexible enough to import any CSV file, but we know that some banks aren't exactly keen on following standards.
Describe the issue
What is the problem when importing the CSV file?
Describe what is needed to resolve the issue
What do you think it would take to be able to import the CSV file. How can it be integrated into the existing process?
Upload a sample
test.csv
I am using accounts in the suggested way, that MY accounts are included in the net worth.
Now, when I transfer money between such accounts, on the Dashboard, such transactions are shown as Expense / Revenue.
In my opinion it makes confusion, as such transaction is not an expense at all, I do not own less money because of transaction between my account.
I think filtering transactions when transfer is between accounts, which are included (both) in net worth would make Dashboard more closer to the reality.
Currently updating transactions will trigger a fetch of accounts and duplicates. Afterwards the auto identifiers will be updated, triggering a new refetch.
Describe the bug
When I use the "standard"/example docker compose found in the docs, I get an error which continuously makes the container exit/stop.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Assetgrid container starts
Desktop (please complete the following information):
Server (please complete the following information):
Additional context
Logs attatched
_assetgrid_logs.txt
After deploying the docker container the below enter showed up on the logs.
warn: Microsoft.EntityFrameworkCore.Model.Validation[10620]
The property 'TransactionAutomation.Actions' is a collection or enumeration type with a value converter but with no value comparer. Set a value comparer to ensure the collection/enumeration elements are compared correctly.
Architecture used : ARM (Raspberry Pi 4)
docker compose used:
version: "3.1"
services:
db:
image: mariadb:latest
container_name: mariadb
volumes:
- ./mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
assetgrid:
image: assetgrid/assetgrid
container_name: assetgrid
links:
- db:db
environment:
CONNECTION_STRING: "Server=db;Database=assetgrid;Uid=assetgrid;Pwd=secret"
ports:
- 80:8080
Hi,
1st of all - even if the app is not yet fully usable in my case, I like very much its clean view and simplicity!
I have just installed Assetgrid in the container with MariaDB as DB engine.
I have noticed, that when I put any new (or edit, doesn't matter) transaction, I can't put numbers like 123,45. When I just type . or , character, value in the field is cleared to 0.
I am not sure if it is related, but in DB structure I can see amount value is bigint:
In Preferences I have changed decimal separator to ",", and thousands separator to ".". However, even if I rollback this to defaults, behavior is still the same.
Sลawek
Only refetch on significant changes. And consider debouncing.
Similar as to how a transaction can have multiple identifiers, accounts should too.
When importing the user has the choice between selecting accounts based on identifiers or selecting the same account for all transactions.
In the transaction page they will be shown a dropdown to select account for transactions with no accounts matching the column. New accounts can also be created. Selecting an account adds the identifier to that account. Similarly there will be an X to remove an identifier from an account.
Assetgrid should support the creation of custom metadata fields like notes, links between transactions, files, and more.
Custom metadata will be integrated into other Assetgrid features such as search, automation and import.
I tried updating the account for a transaction and received the following error:
Connection id "0HML6UQ8KCRKE", Request id "0HML6UQ8KCRKE:00000002": An unhandled exception was thrown by the application.
assetgrid | System.ArgumentNullException: Value cannot be null. (Parameter 'source')
assetgrid | at System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
assetgrid | at System.Linq.Enumerable.Select[TSource,TResult](IEnumerable1 source, Func
2 selector)
assetgrid | at assetgrid_backend.Controllers.TransactionController.UpdateTransaction(Transaction dbObject, User user, ViewUpdateTransaction model) in /home/runner/work/assetgridapp/assetgridapp/backend/Controllers/TransactionController.cs:line 434
assetgrid | at assetgrid_backend.Controllers.TransactionController.Update(Int32 id, ViewUpdateTransaction model) in /home/runner/work/assetgridapp/assetgridapp/backend/Controllers/TransactionController.cs:line 212
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) assetgrid | at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) assetgrid | at assetgrid_backend.Helpers.JwtMiddleware.Invoke(HttpContext context, IUserService userService) in /home/runner/work/assetgridapp/assetgridapp/backend/Helpers/JwtMiddleware.cs:line 29 assetgrid | at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication
1 application)
Is your feature request related to a problem? Please describe.
There is no arm64 or arm32 docker image.
Describe the solution you'd like
Add the following in GitHub workflow.
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
.
.
.
- name: Build and push Docker images
uses: docker/build-push-action@v2
with:
platforms: linux/amd64,linux/arm64 #,linux/arm/v7,linux/arm/v6, linux/386, linux/ppc64le,linux/s390x
.
.
You also might have to change some stuff in the backend and frontend buildings
Describe alternatives you've considered
No other alternatives
Is your feature request related to a problem? Please describe.
no problem here
Describe the solution you'd like
have version information (and maybe release date) listed somewhere?
maybe a little watermark area in the Preferences page, or an about button
Otherwise they might get clipped by parent elements
When adding a transaction, I would like to have possibility to choose 'contractor', so I can see in which shop, to whom, I've spent my money.
If you do not plan to implement it, then maybe as workaround tags can be used... just thinking.
Or - maybe destination field, when I transfer money between my accounts I can put my other account here, but when I spent money, I can choose where I have paid.
Under the version nr in the sidebar, add a link to the github release page (https://github.com/assetgrid/assetgridapp/releases), and/or the docker registry page (https://registry.hub.docker.com/r/assetgrid/assetgrid/tags) so we can quickly compare the running version to the latest version.
Even better would be a notification (An update is available. Click here to see release notes.)
Not sure how this would work for installations not using the docker container.
Would be nice to sort by date (ascending) instead of being locked into descending. Also, sort by amount would be useful when trying to find a specific transaction.
Describe the bug
When saving a profile, the dialog title shows "Merge Transaction" (or something simlar; forgot to get a screenshot).
Assetgrid should attempt to detect the date format by default, rather than making the user import it, since most date formats can probably be detected automatically.
Suggested in #39
What is the default email and password to log in for the first time?
Describe the bug
I imported 2 years of data from an account (2021, 2022). The balance in the account is correct.
But if I only show data from 2022 (or from Oct 2022), the starting balance is essentially 0, so the running balance is off.
Strangely enough, the graph seems to show the correct starting balance, so the hard work is probably done.
I was playing around with a docker instance, and created an import, pulling in account data from several sources.
Each transaction is assigned a time (either 10PM or 11PM) despite no time being present in the CSV file. And in the span of a single import, I received both times on the imported transactions.
Connection id "0HML70B2EVKT5", Request id "0HML70B2EVKT5:00000002": An unhandled exception was thrown by the application.
assetgrid | System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultForbidScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action configureOptions).
assetgrid | at Microsoft.AspNetCore.Authentication.AuthenticationService.ForbidAsync(HttpContext context, String scheme, AuthenticationProperties properties)
assetgrid | at Microsoft.AspNetCore.Mvc.ForbidResult.ExecuteResultAsync(ActionContext context)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|30_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
assetgrid | --- End of stack trace from previous location ---
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
assetgrid | at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
assetgrid | at assetgrid_backend.Helpers.JwtMiddleware.Invoke(HttpContext context, IUserService userService) in /home/runner/work/assetgridapp/assetgridapp/backend/Helpers/JwtMiddleware.
If the user changes the amount to be negative, source and destination should be swapped.
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Smartphone (please complete the following information):
Additional context
Add any other context about the problem here.
Many bank exports provide a column with account balance.
This information could be used to double check that the transaction amounts are correct during import, or perhaps even as an alternative way to calculate amounts.
These options should be looked into.
suggested in #39
System.Exception: Operator 'GreaterThan' expects value of type 'System.Int64' but received type System.String
assetgrid | at assetgrid_backend.Data.DataExtensionMethods.SearchGroupToExpression(ViewSearchGroup group, ValueTuple3[] columns, Expression parameter) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 220 assetgrid | at assetgrid_backend.Data.DataExtensionMethods.SearchGroupToExpression(ViewSearchGroup group, ValueTuple
3[] columns, Expression parameter) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 262
assetgrid | at assetgrid_backend.Data.DataExtensionMethods.ApplySearch(IQueryable1 items, ViewSearch query, Boolean applyOrder) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 71 assetgrid | at assetgrid_backend.Data.DataExtensionMethods.ApplySearch(IQueryable
1 items, ViewSearchGroup query) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 98
assetgrid | at assetgrid_backend.Controllers.TransactionController.UpdateMultiple(ViewUpdateMultipleTransactions request)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
assetgrid | at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
assetgrid | at assetgrid_backend.Helpers.JwtMiddleware.Invoke(HttpContext context, IUserService userService) in /home/runner/work/assetgridapp/assetgridapp/backend/Helpers/JwtMiddleware.cs:line 29
Our goal is for Assetgrid's CSV importer to be flexible enough to import any CSV file, but we know that some banks aren't exactly keen on following standards.
Describe the issue
What is the problem when importing the CSV file?
Describe what is needed to resolve the issue
What do you think it would take to be able to import the CSV file. How can it be integrated into the existing process?
Upload a sample
Please attach a sample CSV file that illustrates the issue. You can open CSV files in Excel and remove rows or sensitive information.
Connection id "0HML70B2EVCPT", Request id "0HML70B2EVCPT:00000002": An unhandled exception was thrown by the application.
assetgrid | System.ArgumentException: Instance property 'NormalizedName' is not defined for type 'System.String' (Parameter 'propertyName')
assetgrid | at System.Linq.Expressions.Expression.Property(Expression expression, String propertyName)
assetgrid | at assetgrid_backend.Data.DataExtensionMethods.SearchGroupToExpression(ViewSearchGroup group, ValueTuple3[] columns, Expression parameter) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 126 assetgrid | at assetgrid_backend.Data.DataExtensionMethods.SearchGroupToExpression(ViewSearchGroup group, ValueTuple
3[] columns, Expression parameter) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 262
assetgrid | at assetgrid_backend.Data.DataExtensionMethods.ApplySearch(IQueryable1 items, ViewSearch query, Boolean applyOrder) in /home/runner/work/assetgridapp/assetgridapp/backend/Data/DataExtensionMethods.cs:line 71 assetgrid | at assetgrid_backend.Controllers.TransactionController.Search(ViewSearch query) in /home/runner/work/assetgridapp/assetgridapp/backend/Controllers/TransactionController.cs:line 538 assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask
1 actionResultValueTask)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
assetgrid | --- End of stack trace from previous location ---
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
assetgrid | at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker)
assetgrid | at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
assetgrid | at assetgrid_backend.Helpers.JwtMiddleware.Invoke(HttpContext context, IUserService userService) in /home/runner/work/assetgridapp/assetgridapp/backend/Helpers/JwtMiddleware.cs:line 29
assetgrid | at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
Instead of having a page for reviewing each of invalid/duplicate transactions or missing accounts, it should be possible to filter the results to show only problematic accounts.
If trying to continue with unresolved issues, the user should be prompted to confirm that they acknowledge that not all transactions will be imported.
I just did an import of a BofA-generated CSV files. While I recognize that it won't work for all banks/languages, in many cases, you can probably assign a column name.
These were the csv-provided header names:
Date | Description | Amount | Running Bal.
Describe the bug
If a search filter is changed to something that returns fewer pages, the application will stay on a page that doesn't exist
I am adding transaction and select some time for them, let's imagine 16:00.
But later on, when I look at transactions list, such transaction is shown as which took place at 14:00, and when I go to edit such transaction, it has also time set to 14:00.
My computer is set to use CEST timezone.
I would like to translate it into Spanish, my mother languaje. Just drop me a message to start, I am a newbie here contributing in GitHub.
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is.
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
Is your feature request related to a problem? Please describe.
No problem, looks great, love the dashboard.
Describe the solution you'd like
I was confused at first about the Description field. I wanted to put in there, "Breakfast with the kids" because we went to Waffle House this morning. If I import from my bank, Description is where I spent the money so that makes sense for searching for transactions by where you spent your money.
I guess I'm just looking for a possible blank field where I can add some context.
Like if I had a car expense, it would look like this:
Describe alternatives you've considered
I thought about adding a lot of data to the description field but I think its messy that way
Additional context
N/A
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.