accounting's People
accounting's Issues
Konten Kategorien
Ich als Kassenwart möchte Konten Kategorien zuweisen können um bspw. zwischen Personen, Sachkonten oder Zulieferern unterscheiden zu können.
Akzeptanzkriterium:
- Visuelle Darstellung der Kategorien
- Konto der Kategorie A darf nicht Unter-/Oberkonto der Kategorie B sein
Notizen:
Für später kann man sich noch überlegen ob man Kategorien Regeln zuordnen kann wie bspw. Warnung wenn Kontostände der Kategorie A über einen bestimmten Betrag sind.
Budget Zusammenfassung
Ich als Kassenwart möchte einzelne Budgetpläne zusammengefasst angezeigt bekommen um zu wissen wie korrekt die Planung war.
Akzeptanzkriterium:
- Übersichtliche Anzeige der Budgets
- Bugetplan herunterladbar
When should the DbContext be saved
- I added a context.SaveChanges() call after every repository method. however it should probably only be saved once for every request?
Cleanup Account Model
Current Account Model is a bit bloated with Id-like properties.
We have Meta.Id
, Account.Number
and Account.ShortName
. As I see, both, Number and ShortName have the same intention, so we should remove one soon, to avoid confusion.
Make Public
Hi, I would like to make this project public. So I can use appveyor.
Is there a reason to keep it private except schame?
Open Account View
The fronted needs a create account view
- using a directive with service would be advisable
- The account name should be validated before creating it(display an error if the name is taken)
- same for accoutn number
- account list should be displayed when selecting parent account
- account category list shoudl be display for selecting category.
Account.Children null?
It seems for an empty list of children, the property is currently null
instead of empty list.
Is this the intended behavior? It means a lot of extra checking in other application layers, so I would prefer an empty list behavior if possible.
Konten schließen
Ich als Kassenwart möchte Konten schließen können um sie bei Suchen oder Anzeigen zu verbergen und Buchungen auf sie zu verbieten.
Akzeptanzkriterium:
- Nur ausgeglichene Konten dürfen geschlossen werden
- Seperate Anzeigeoption für geschlossene/alle Konten
Create Integration Test Example
We need a comprehensive example that uses the whole of the accounting System
It should contain realistic Actions and execution orders
Revert Transaction
Story
- A user has created a Transaction which he wants to cancel
- The transaction has to be copied and the amounts inverted
- a cancelled transaction cannot be cancelled again.
Create Testing Base class for End to end Application Testing
Story:
- dev wants to test functionality of website through a browser
- dev wants access to database before, during and after browsing the website
- dev wants to test website on different browsers
- dev wants to look at internal state of web app during a browser request
Using Selenium (PhantomJS,Chrome,IE,FireFox) and Owin SelfHost it should be possible to allow for real End to end testing of the web frontend and the backend. TO create simple unit tests a base class is necessary which incorporates all the functionality fives the dev access to a Browser object (IWebDriver)
Budget erstellen und zuweisen
Ich als Kassenwart möchte Konten Budgets zuweisen um erarbeitete Budgetpläne direkt abbilden zu können und zu sehen wie weit ein Budgetposten ausgeschöpft ist.
Akzeptanzkriterium:
- Anzeige bei Konten die Budget haben mit Betrag
- Budgetpläne mit Gültigkeitszeitraum (z.B. Jahresbudget, Semesterbudget, ...)
Bill a Transaction
Story
- User wants to create a Transaction
- He should be able to create an arbitrary amount of partialtransaction which
- the transaction has to be balanced when inserted into the database
- A Receipt is necessary for to perform a transaction
- A Receipt Date is necessary
- The Transaction Date of the partial transactions should be stored
- A Transaction needs to consist of at least 2 partial trasnactions
Command Handler
Die aktuelle Lösung, in der eine einzige Klasse (z.B. AccountingFacade) die Implementierung mehrerer Commands enthält, führt aus meiner Sicht zu vermeidbaren Designproblemen.
Folgender Plan für ein CommandHandler Interface:
public interface ICommandValidator<TCommand>
{
bool Validate(TCommand command, out IEnumerable<ValidationException> ValidationErrors);
}
public interface ICommandHandler<TCommand> : ICommandValidator<TCommand>
{
void Handle(TCommand command);
}
Jedes Command lässt sich so unabhängig implementieren, die Validierung wird vom Handling getrennt.
Anstelle von AccountingFacade könnte eine Factory Klasse stehen, die die einzelnen CommandHandler Implementierungen zurückgibt und sich um Dinge kümmern kann wie z.B., dass Validate immer vor Handle aufgerufen wird.
public class AccountingFactory
{
protected ICommandHandler<TCommand> DecorateHandler<TCommand>(ICommandHandler<TCommand> handler)
{
return new ValidatingHandlerDecorator<TCommand>(handler);
}
public ICommandHandler<OpenAccountCommand> OpenAccountCommandHandler()
{
return DecorateHandler(new OpenAccountCommandHandler());
}
}
Hierbei ist OpenAccountCommandHandler
die eigentliche Implementierung und ValidatingHandlerDecorator
ein Wrapper, der dafür sorgt, dass Validate IMMER vor Handle aufgerufen wird. Auf ähnliche Weise lassen sich dann auch andere Querschnittaufgaben per Decorator einpflegen - z.B. die UnitOfWork Injection.
Update Account
Story
- user has an existing account which he wants to modify
- user should only be able to modify select fields
- afterwards the account should exist in the modified version in the database
Aufgaben erstellen
Ich als Kassenwart möchte Aufgaben erstellen um wichtige Aufgaben (z.B. Aktivenbeitrag) nicht zu vergessen und sie direkt im Kassenprogramm zu sehen.
Akzeptanzkriterium:
- Anzeige aller Aufgaben
- Optionales Fälligkeitsdatum
- Wiederholungsrythmus einstellbar (z.B. alle 3 Monate)
Create model relationships in DataLayer
The Model is created, However the EntityFramework model has to be created via the OnModelCreating method .
Authorization Layer
I thought of an easy way to implement authorization logic.
Create a injected service (ISecurityService) which has a method IsAuthorizedFor(object)
at the beginning of every command handler you call securityService.IsAuthorizedFor(cmd)
. it throws a security exception if not. The first implementation just lets it pass through (dummy implementation)
Discuss!
Create a Testing Base for ease of Testing
Story
- the developer wants to create a test easily for an interface
- the database should be initialized accordingly (empty database)
- sensible utility and helper functions should be added
List Accounts Command
Instead of accessing the Repositories (datalayer) directly the frontend should also use a command to query the business layer which queries the data layer
this allows implementing privileges for views / not showing inactive accounts, etc
Account Overview View
- The accounts should be listed
- selecting an account should display its details
- in Details view an edit action should be possible
Buchungen durchführen
Ich als Kassenwart möchte Buchungen zwischen mehreren Konten durchführen um Rechnungen und Zahlungswege abzubilden.
Akzeptanzkriterium:
- Warnung bei gleicher Buchungsnummer
- Nur ausgeglichene Buchungen werden zugelassen (Soll = Haben)
- Buchungen können angezeigt werden
- Kontostand wird korrekt angezeigt
Notizen:
Attribute: ReceiptNumber, ReceiptDate, Text
Konten anlegen
Ich als Kassenwart möchte Konten anlegen um Buchungen zwischen Konten durchführen zu können.
Akzeptanzkriterium:
- Keine Konten mit gleichen Nummern
- Erstellte Konten können angezeigt werden
Notizen:
Attribute: Name, Number, ShortName
Use Db Transactions
I think IUnitOfWork should use Db transactions to work. The problem did not occur yet but while developing I noticed that I often query and then modify&delete entities however these entities could already be deleted. therefore the concurrency management would have to be implemented(probably once per unit of work)
thoughts?
Konten suchen
Ich als Kassenwart möchte nach Konten suchen können um nicht die komplette Liste durchgehen zu müssen.
Akzeptanzkriterium:
- Perfomante Suche
- Suche nach verschiedenen Attributen
Buchungen durchsuchen
Ich als Kassenwart möchte nach Buchungen suchen können um nicht die komplette Liste durchgehen zu müssen.
Akzeptanzkriterium:
- Perfomante Suche
- Suche nach verschiedenen Attributen
remove old api with new api. (old api did nothing up to now and was setup wrong)
Rechnung verschicken
Ich als Kassenwart möchte Rechnungen verschicken an Kunden um zu Zahlungen auffordern zu können.
Akzeptanzkriterium:
- Rechnung enthält alle Buchungen ab eingestellten Datum
- Buchungen vor eingestellten Datum werden als Saldovortrag zusammengefasst
- Rechnung über E-Mail mit Template Text (Konto worauf man es überweist usw) und Rechnung als PDF Anhang
Notizen:
Wenn Kunden ihren Kontostand online selber nachschauen können, kann man auf die Rechnung noch einen Link zum Konto einfügen.
Buchungen stornieren
Ich als Kassenwart möchte Buchungen stornieren um Fehlbuchungen zu korrigieren.
Akzeptanzkriterium:
- Buchungstext der Stornierung macht klar welche Buchung storniert wurde
- Stornierung hebt Fehlbuchung korrekt auf
Close Account
Story
- User has an existing (open) Account
- User wants to close account
- account can only be closed if it is balanced
- account should only be marked as closed and not removed
- the closure date should be marked
Should Error messages be returned by command Handlers?
Is it more usefull to throw an exception if a command is invalid or would it be better if the command gets a list of messages (info, warning, error) which the gui can then display
example.
when creating a transaction many things can go wrong, from argument null to invalid transaction balance.
I think it would be usefull if the command would get all information about why it is wrong so this could be displayed in the user interface?
A solution would be creating a command base class which contains a list of validation messages, possibly using a validation framework.
Kontostand abrufen als Kunde
Ich als Kunde möchte meinen Kontostand abrufen um zu wissen ob ich Guthaben/Schulden habe.
Akzeptanzkriterium:
- Authentifizierung um Kontostand zu sehen
- Anzeige aller Buchungen auf meinem Konto
- Herunterladen der Rechnung als PDF
Notizen:
Eventuell für später Interessant, da wir eh eine Web-App Architektur haben. Die reine App um Kontostand anzuschauen kann auch eine seperate Web-App sein.
Create a Web Application
I would suggest creating a single page web application (from scratch)
using OWIN / WepApi or SignalR / angularjs
Account Categories
Story
- Necessary Account Categories should be created by business layer on intialization
- It needs to be clear wether the end user may create categories or not.
Konten bearbeiten
Ich als Kassenwart möchte Konten bearbeiten um Informationen zu korrigieren und zu aktualisieren.
Akzeptanzkriterium:
- Geänderte Informationen werden angezeigt
- Kontonummer muss die selbe bleiben
- LastModified muss übereinstimmen mit Änderungsdatum
Konten Baumstrukturen
Ich als Kassenwart möchte Konten in Baumstrukturen (ein Konto mit mehreren Kindern) anordnen können um Familien an Konten zu schaffen welche logisch zusammen gehören und Überkonten alle Buchungen der Unterkonten zusammenfässt.
Akzeptanzkriterium:
- Gesamtübersicht aller Konten in Baumstruktur
- Detailansicht des Kontos zeigt Oberkonto und alle Unterkonten an
- Buchungen/Kontostand wird korrekt zusammengefasst
Create WebDeploy
- Webdeployment for single click publishing
- accounting.greenno.de
Account System (Kontorahmen)
Story
- A user initializes the Accounting System and wants to Create the standard Accounts
- The Facade should provide a method to initialize the Account System if the database is Empty
Open Account
Story
- user needs a new account
- user at least enters account name and number
- name and number must be unique
- name and number may not be empty
- category is optional - default category is used
- account parent is optional - possibly a default is used
Create CI Server which builds and tests new commits
To facilitate test driven developement and correct versions every commit to master should be automatically tested.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.