Met deze android app kan elke ZZP'er eenvoudig zelf zijn boekhouding doen. De ZZP'er houdt zijn projecten bij. Werk wat hij heeft gedaan voegt hij toe aan het project. Wanneer de tijd rijp is, klikt hij eenvoudigweg op 'afrekenen' en de app maakt een PDF met zijn factuur. Volledig volgens de standaarden van de belastingdienst.
Na het inloggen via de LoginActivity wordt een gebruiker naar de MainActivity gebracht. Wanneer de gebruiker nieuw is, opent dan de SettingsActivity automatisch: daar kan de gebruiker zijn basisinstellingen direct invoeren.
Dit bestaat uit 3 tabbladen: Overzicht, BTW, Bedrijven.
- Overzicht geeft een lijst met projecten van de gebruiker en zijn gemaakte kosten. (
OverviewFragment) - BTW is een tool waarmee de gebruiker de informatie voor zijn BTW-aangifte kan opvragen. (
TaxFragment) - Bedrijven is een pagina met de relaties van de ondernemer, inclusief zijn eigen bedrijf. (
CompaniesFragment)
Dit bestaat uit 3 tabbladen: Werk, Facturen, Informatie.
- Werk geeft een lijst met het werk wat voor dit project is uitgevoerd. De gebruiker kan hier werk toevoegen óf het nog onbetaalde werk afrekenen. De app genereert de PDF van een factuur die de gebruiker kan delen. (
ProjectWorkFragment) - Facturen geeft een lijst met de gemaakte facturen voor dit project. De gebruiker kan de facturen vanuit hier als PDF openen. (
ProjectInvoiceFragment) - Informatie geeft informatie over dit project, zoals startdatum en uurtarief. (
ProjectInfoFragment)
Dit bestaat uit 3 tabbladen: Bedrijf, Nummers, Account.
- Op de pagina Bedrijf kan de gebruiker gegevens van zijn bedrijf wijzigen zoals adres, bedrijfsnaam, etc. (
SettingsCompanyFragment) - Op de pagina Nummers kan de gebruiker numerieke gegevens wijzigen zoals kvk, btw, betaaltermmijn, etc. (
SettingsNumbersFragment) - Op de pagina Account kan de gebruiker zijn accountgegevens aanpassen. (
SettingsUserFragment)
Er zijn 4 soorten data die de gebruiker kan invoeren: Projecten, Werk, Aankopen, Relaties
- Project. De gebruiker kiest een omschrijving, een opdrachtgever en een uurtarief. (
AddProjectFragment) - Werk. De gebruiker kiest het bijbehorende project waarvoor is gewerkt. Daarna voert de gebruiker manuren (
AddWorkHoursFragment) óf een product (AddWorkProductFragment) in. De totaalprijs wordt berekend en het werk wordt toegevoegd aan het project. (AddWorkFragment) - Aankopen De gebruiker kan hier onkosten van zijn onderneming invoeren. Benzine, software, bureaustoelen, etc. Deze worden vervolgens weergegeven in het Overzicht. (
AddCostFragment) - Relatie De gebruiker kan relaties toevoegen. Dit kan zowel een opdrachtgever als een leverancier zijn. (
AddCompanyFragment)
Om de pagina's van de app te ondersteunen, waren een aantal globale classes nodig.
Useris een class voor gebruikersCompanyis een class voor relaties (gekoppeld aan eenUser)Costis een class voor aankopen / onkosten (gekoppeld aan eenUseren eenCompany)Projectis een class voor projecten (gekoppeld aan eenUseren eenCompany)Workis een class voor werkzaamheden (gekoppeld aan eenUser, eenProjecten eenInvoice)Invoiceis een class voor facturen (gekoppeld aan eenUser, eenProjecten eenCompany)
GeneratePdfgenereert op basis van eeninvoiceeen PDFPersistentDatabasegeeft een singleton instantie terug van Firebase Database. Dit is nodig om offline bewerkingen mogelijk te maken.
- Verkleinen van de functionaliteiten tot behapbare grote voor een project van 4 weken.
- Daardoor is de pagina 'BTW' niet gekoppeld aan het belastingsysteem van de overheid.
- Daardoor worden straatnamen en woonplaatsen niet automatisch ingeladen d.m.v. een API.
- Daardoor heeft de app geen pincode beveiliging
- Daardoor heeft de app geen iDeal-koppeling
- Daardoor kan de gebruiker niet zijn bankrekeningstatus bijhouden
- Daardoor heeft de app geen overzicht van 'te betalen' en 'te ontvangen' facturen
- Daardoor zijn geëxporteerde PDF's niet aanpasbaar
- De casing van variabelen en methods is nu consistenter dan ik voorheen zou doen.
- Het opknippen van methods in meerdere kleine methods heb ik nu consistenter doorgevoerd dan ik voorheen zou doen.
- Er moest meer focus komen op usability in de app (ivm het concept van de app: veel gebruikersinvoer).
- Daardoor is er veel tijd gaan zitten in steeds (opnieuw) vormgeven van schermen en invulvelden.
- ListViews bleken te beperkt voor mijn wensen.
- Ik moest me verdiepen in RecyclerViews
- De spinners bleken veel werk om te vullen, uit te lezen en vorm te geven.
- Ik moest gebruikmaken van een third party library: BetterSpinner
- Er bestond geen native menu voor de floating action button.
- Ik moest gebruikmaken van een third party library: Floating Action Menu.
- De eerste databasestructuur was niet bruikbaar. Je kunt geen queries maken met Firebase.
- De web lesson van Jeff Daleney hielp om een betere structuur te vinden. Alles moest worden omgegooid.
- De bedrijfsgegevens toegevoegd aan het user-object.
- De 'instellingen-pagina' is nu niet een tabblad, maar een onderdeel van 'Mijn bedrijf' in de
CompaniesFragment
De genomen beslissingen sta ik allemaal achter. De meeste features die anders zijn geworden (of niet zijn gebouwd) zijn leuke extra's die bij verdere uitbreiding ontwikkeld kunnen worden. Opvallend is dat ik door het proces heen een betere en haalbaardere MVP heb gevonden: het product wat nu is opgeleverd.
De app moest extra oog hebben voor usability. Veel features die zijn komen te vervallen, zijn mede daardoor op de 'backlog' gekomen. Een voorbeeld van doordachte usability is bijvoorbeeld dat het invoeren van data altijd via dialogs gebeurd. Daarnaast zijn de velden voorzien van een verklarend icoon en denkt op veel plekkem het systeem voor de gebruiker (bijv. btw percentages, data, gemiddeldes, rekensommen en verbanden). Dit scheelt de gebruiker invulwerk.
