rekeningsysteem-bouwbedrijf-mackloet's People
rekeningsysteem-bouwbedrijf-mackloet's Issues
Last saved location does not exist anymore
In the case the folder that is indicated by the settings as 'last-saved' does not exist anymore, an exception occurs. Probably a default location needs to be set!
Merge ParticulierFactuur and AangenomenFactuur into one new type
Header stays the same, but the invoice's items can be merged.
An EsselinkArtikel
does not necessarily need to be in the invoice's list: it can also be used to create a description for the actual ListItem
, as well as to transfer data from the database to the application.
Other types of ListItem
s can possible be merged as well. Also the LoonList
can maybe be merged with the normal items.
BTW verlegd
When BTW 0.0% put the text "BTW verlegd naar " in case there is a btwnummer included in the debiteur.
Let's make this an option in the UI if that's possible.
Offerte PDF pagecount
Copy from #21
It appears as if there is something going wrong with the page count at the Offerte pdf. Results in ?? on the pdf.
Couldn't replicate this bug yet. More testing needs to be done.
Auto-update the application
Look into the possibilities of automatically updating the application when a newer version is released/available. (ask Mike for suggestions on this topic)
Incorrect header in the offerte
Factuurnummer formattering als <jaar><kenmerk><nummer>
In verband met de boekhouding van het bouwbedrijf en de imkerij is het nodig onderscheid te kunnen maken in de factuurnummers van beide bedrijven. In plaats van de huidige formattering (<nummer><jaar>
) wordt overgeschakeld op <jaar><kenmerk><nummer>
, met kenmerk 0
voor het bouwbedrijf en 1
voor de imkerij. Deze kenmerken generiek maken middels de config files. Opt-in/out voor offerte met de oude formattering als fallback. Houd ook rekening met automatische overgang van de ene naar de andere formattering.
In ParticulierFactuur BTW 0.0% is shown
Move properties to database?
Once #29 is completed (i.e. the properties are editable from within the application), we should consider moving the properties into the database. Maybe the Metadata
table is useful for that?
Full screen mode
In full screen mode the windows bar should still be visible. At the moment, full screen does not show this bar.
Small improvements/bugs
- A standard text is desirable at the
Offerte
text area
Improve the(see #31)Offerte
text area (layout and such)It appears as if there is something going wrong with the page count at the(see #30)Offerte
pdf. Results in??
on the pdf- Saving the
Offerte
in a different folder is maybe not the best thing to do?Suggest option to save all in 1 folder- Choose an extra default save location for
Offerte
(not sure if possible in the current state of the code)
Save invoices in database
The plan is to change the saving of invoices from XML-files to the database.
Error while building
Look up how this can be fixed. Appeared since we started using Java8, I think...
[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building RekeningSysteem Bouwbedrijf Mackloet v0.4-alpha
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Rekeningsysteem ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 42 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ Rekeningsysteem ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 232 source files to G:\Richard van Heest\Rekeningsysteem-Bouwbedrijf-Mackloet\Rekeningsysteem\target\classes
[INFO] Some messages have been simplified; recompile with -Xdiags:verbose to get full output
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /G:/Richard van Heest/Rekeningsysteem-Bouwbedrijf-Mackloet/Rekeningsysteem/src/main/java/org/rekeningsysteem/ui/textfields/PercentageFieldSkin.java:[30,25] variable control might not have been initialized
[ERROR] /G:/Richard van Heest/Rekeningsysteem-Bouwbedrijf-Mackloet/Rekeningsysteem/src/main/java/org/rekeningsysteem/ui/textfields/PercentageFieldSkin.java:[40,53] variable control might not have been initialized
[ERROR] /G:/Richard van Heest/Rekeningsysteem-Bouwbedrijf-Mackloet/Rekeningsysteem/src/main/java/org/rekeningsysteem/application/working/IOWorker.java:[57,77] incompatible types: bad return type in lambda expression
rx.Observable<capture#1 of ? extends org.rekeningsysteem.data.util.AbstractRekening> cannot be converted to rx.Observable<? extends capture#2 of ? extends org.rekeningsysteem.data.util.AbstractRekening>
[INFO] 3 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.027 s
[INFO] Finished at: 2015-08-19T09:03:06+01:00
[INFO] Final Memory: 16M/203M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project Rekeningsysteem: Compilation failure: Compilation failure:
[ERROR] /G:/Richard van Heest/Rekeningsysteem-Bouwbedrijf-Mackloet/Rekeningsysteem/src/main/java/org/rekeningsysteem/ui/textfields/PercentageFieldSkin.java:[30,25] variable control might not have been initialized
[ERROR] /G:/Richard van Heest/Rekeningsysteem-Bouwbedrijf-Mackloet/Rekeningsysteem/src/main/java/org/rekeningsysteem/ui/textfields/PercentageFieldSkin.java:[40,53] variable control might not have been initialized
[ERROR] /G:/Richard van Heest/Rekeningsysteem-Bouwbedrijf-Mackloet/Rekeningsysteem/src/main/java/org/rekeningsysteem/application/working/IOWorker.java:[57,77] incompatible types: bad return type in lambda expression
[ERROR] rx.Observable<capture#1 of ? extends org.rekeningsysteem.data.util.AbstractRekening> cannot be converted to rx.Observable<? extends capture#2 of ? extends org.rekeningsysteem.data.util.AbstractRekening>
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Searchbox default text
The default text in the EsselinkArtikel's is still in English. This needs to be translated in Dutch.
Open pdf in application
The open button should also be able to open pdf files. This should open the file in the default pdf reader.
Invoice number in the filename of the invoice
Add the invoice number to the filename of the invoice. So, when, in the dialog window, the user types file123.xml
, and the invoice number generator returns 32018
, the final name will be 32018 - file123.xml
.
Make this an opt-in/out in the user interface: in the invoice number section, add a checkbox if the invoice number is not yet set.
Improved error reporting
Use the logging more often than it is now and make the error messages more specific. Also consider implementing an email service that notifies when an error has occurred. (maybe ask Mike for suggestions on the latter half?)
Remove line in invoice header
Remove the line "Tel/Fax..." from the header in all types of invoices.
Make the Omschrijving textarea in the ParticulierFactuur larger
Omschrijving textarea needs to be larger vertically. It's too small right now!
PDF vs Save
When a new invoice is created and a PDF is created without first saving, the invoice number is not allocated and it is no longer possible to create an XML document afterwards.
Clicking on the PDF button should first invoke the save action and then invoke the pdf action.
BTW
Changes in the BTW:
- Mutaties should only have one percentage, rather than the current two
- Aangenomen and Particulier should have a percentage per
ListItem
with default set by the settings
Fullscreen does not work when initial size too big
When the size of the ui is bigger than the screen, a ArrayIndexOutOfBoundsException
is thrown. This is based on Root.java:68 (.get(0)
).
Money interface
Testing
Found some interesting articles about testing with both JUnit (Rules) and TestFX (for JavaFX) in the JavaMagazine of September/October 2015. See also this tutorial and this article about anti-patterns.
Standard Debiteur for Mutaties/Reparaties
In the Mutaties/Reparaties invoices, add the Woongoed GO as default Debiteur
Intellegence update
Auto completion on Debiteur
based on given information. For example when street
and number
are entered, suggest the zip code
and place
. Not sure yet what this can be based upon. Probably an external source?
Also try to predict the EsselinkArtikel
based on previously selected items and the search query entered so far. After that we can limit the number of suggested items to a certain number n
.
Database initialisation from old version does not work
Offerte text with styling
Instead of plain text, the offerte text area needs to include styling. For this we can use the JavaFx HTMLEditor
or maybe something similar to this with less styling options.
The HTMLEditor
has an HTML String
as its output. Since the Offerte PDFs are generated using LaTeX either a parser needs to be written to generate LaTeX code from the HTML or the new implementation of the editor returns a LaTeX String
instead.
Styling the might be supported:
- Bold/italic/underline
- Font size
- Font type (header 1..n, paragraph, etc.)
- Font color
- Background color
- Horizontal rule
- Lists (bullets and numbers) + nesting
Styling that will no be supported:
- Font family
Layout of pdf
For an invoice with one item and no tax, the pdf looks a bit silly. To avoid that, let's lower the cumulatives to the bottom of the page. Presumably this only needs a change in the LaTeX files or LaTeX layout file.
Also, if an invoice has only has items with no tax, we can remove the "subtotaal" line.
VersionControl line 58 does not work
Implementation version does not seem to be gotten from the maven version
XML and CSV parser
Look into parser combinators using the Parsec paper by Daan Leijen to re-implement the XML and CSV parsers. Also the parser needed for #31 could be implemented this way.
Either write our own parser from scratch (based on the Parsec paper) or maybe try to use RxParsec for this?
Rename 'bonnummer' to 'inkooporder'
Since special customer 'woningbouw' changed 'bonnummer' to 'inkooporder', we have to do this as well. First change this in the PDF and UI, then also in the backend. Keep the 'bonnummer' in the XML though, it's not worth introducing a new version of the (schemaless) schema for this.
BTW lines in invoice
Change the text in the BTW lines to
Omschrijving | Bedrag | BTW |
---|---|---|
BTW percentage % over valuta netto bedrag |
btw bedrag |
Unknown bug in pdf creation
The following is a bug that is seen a lot in the client's errorlog. Not sure yet how this is caused and what is going wrong here.
[ERROR|org.rekeningsysteem.io.pdf.PdfExporter.export(PdfExporter.java:39)] Errors occurred while executing pdfLaTeX! Exit value of the process: 1
org.rekeningsysteem.exception.PdfException: Errors occurred while executing pdfLaTeX! Exit value of the process: 1
at org.rekeningsysteem.io.pdf.PdfExporterVisitor.generate(PdfExporterVisitor.java:219)
at org.rekeningsysteem.io.pdf.PdfExporterVisitor.general(PdfExporterVisitor.java:76)
at org.rekeningsysteem.io.pdf.PdfExporterVisitor.visit(PdfExporterVisitor.java:105)
at org.rekeningsysteem.data.offerte.Offerte.accept(Offerte.java:38)
at org.rekeningsysteem.io.pdf.PdfExporter.export(PdfExporter.java:36)
at org.rekeningsysteem.application.working.IOWorker.export(IOWorker.java:40)
at org.rekeningsysteem.application.working.RekeningTab.lambda$export$150(RekeningTab.java:131)
at org.rekeningsysteem.application.working.RekeningTab$$Lambda$448/2026413.call(Unknown Source)
at rx.Observable$32.onNext(Observable.java:7187)
at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)
at rx.internal.operators.OperatorSingle$1.onCompleted(OperatorSingle.java:75)
at rx.internal.operators.OperatorTake$1.onNext(OperatorTake.java:69)
at rx.internal.operators.NotificationLite.accept(NotificationLite.java:150)
at rx.internal.util.RxRingBuffer.accept(RxRingBuffer.java:432)
at rx.internal.operators.OnSubscribeCombineLatest$MultiSourceProducer.tick(OnSubscribeCombineLatest.java:152)
at rx.internal.operators.OnSubscribeCombineLatest$MultiSourceProducer.onNext(OnSubscribeCombineLatest.java:209)
at rx.internal.operators.OnSubscribeCombineLatest$MultiSourceRequestableSubscriber.onNext(OnSubscribeCombineLatest.java:252)
at org.rekeningsysteem.rxjavafx.Observables.lambda$3(Observables.java:56)
at org.rekeningsysteem.rxjavafx.Observables$$Lambda$251/33396634.call(Unknown Source)
at rx.Observable.unsafeSubscribe(Observable.java:7304)
at rx.internal.operators.OnSubscribeCombineLatest$MultiSourceProducer.request(OnSubscribeCombineLatest.java:131)
at rx.internal.operators.OperatorTake$1$1.request(OperatorTake.java:89)
at rx.Subscriber.setProducer(Subscriber.java:137)
at rx.Subscriber.setProducer(Subscriber.java:133)
at rx.Subscriber.setProducer(Subscriber.java:133)
at rx.internal.operators.OperatorTake$1.setProducer(OperatorTake.java:80)
at rx.internal.operators.OnSubscribeCombineLatest.call(OnSubscribeCombineLatest.java:68)
at rx.internal.operators.OnSubscribeCombineLatest.call(OnSubscribeCombineLatest.java:45)
at rx.Observable$1.call(Observable.java:145)
at rx.Observable$1.call(Observable.java:137)
at rx.Observable$1.call(Observable.java:145)
at rx.Observable$1.call(Observable.java:137)
at rx.Observable.subscribe(Observable.java:7393)
at rx.Observable.subscribe(Observable.java:7173)
at org.rekeningsysteem.application.working.RekeningTab.export(RekeningTab.java:131)
at org.rekeningsysteem.application.working.MainPane.lambda$19(MainPane.java:155)
at org.rekeningsysteem.application.working.MainPane$$Lambda$447/21493206.accept(Unknown Source)
at java.util.Optional.ifPresent(Unknown Source)
at org.rekeningsysteem.application.working.MainPane.lambda$4(MainPane.java:153)
at org.rekeningsysteem.application.working.MainPane$$Lambda$97/36929.call(Unknown Source)
at rx.Observable$31.onNext(Observable.java:7139)
at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)
at rx.internal.operators.OperatorDoOnEach$1.onNext(OperatorDoOnEach.java:84)
at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:54)
at rx.internal.operators.OperatorSubscribeOn$1$1$1.onNext(OperatorSubscribeOn.java:76)
at org.rekeningsysteem.rxjavafx.Observables$$Lambda$230/26636394.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at javafx.event.Event.fireEvent(Unknown Source)
at javafx.scene.Node.fireEvent(Unknown Source)
at javafx.scene.control.Button.fire(Unknown Source)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at javafx.event.Event.fireEvent(Unknown Source)
at javafx.scene.Scene$MouseHandler.process(Unknown Source)
at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source)
at javafx.scene.Scene.impl_processMouseEvent(Unknown Source)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
at com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
at com.sun.glass.ui.View.notifyMouse(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/29531133.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
OutOfMemoryException while loading Esselink data from CSV
OutOfMemoryException when loading data from CSV into Database
Caused by org.reken....Database.lambda$1(Database.java:72)
Probably this is due to a bug in the threading with the IOScheduler
This does not happen on my own pc, only on the client's pc.
Observables are subscribed multiple times
Some Observable
s are subscribed multiple times, causing the dataflow to be doubled, presumably as well as all computations
Found:
-
AbstractListController
model
Remember open/save location
Remember the last open/save location for both the XML and PDF and open next open/save window on that location.
Debiteur management is buggy
Update queries are not processed properly. When an update is done in the settings screen, the update is applied. However, when the application is restarted, the updates seem to be undone.
Presumably these changed are applied locally but are not properly executed in the database.
Debiteur admin
Debiteur admin needs to be added.
Features:
- search for existing ones (suggestions)
- add new one by using same format as the online banking "add to addressbook" feature
- debiteur management via settings
Settings for the properties
Make a settings tab to view or edit the properties that are used for running the program. However, not all properties should be displayed there! Only the following ones should be displayed in there:
- date-format
- uurloon
- valuta
- valuta - ISO 4217
- loon btw percentage
- materiaal btw percentage
- factuurnummer
- offertenummer
- pdf templates
- Aangenomen
- Mutaties
- Reparaties
- Particulier
- Offerte
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.