Code Monkey home page Code Monkey logo

finances's People

Contributors

jonestimd avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

finances's Issues

Add global find

Add an action for searching all accounts for transactions that match some criteria and displaying the results.

Error updating UI when adding a transfer detail to a transaction

Error when saving a transaction with an added transfer detail. The detail is saved but the UI doesn't update.

java.lang.NullPointerException: element cannot be mapped to a null key
	at java.util.Objects.requireNonNull(Objects.java:228)
	at java.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:907)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
	at io.github.jonestimd.finance.domain.event.DomainEvent.index(DomainEvent.java:45)
	at io.github.jonestimd.finance.domain.event.DomainEvent.<init>(DomainEvent.java:64)
	at io.github.jonestimd.finance.domain.event.TransactionEvent.<init>(TransactionEvent.java:31)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.removeStaleEntities(CommitAction.java:109)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.updateUI(CommitAction.java:91)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.updateUI(CommitAction.java:45)
	at io.github.jonestimd.swing.BackgroundTask$1.updateUI(BackgroundTask.java:122)
	at io.github.jonestimd.swing.BackgroundTask.lambda$run$0(BackgroundTask.java:161)
	at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
	at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:456)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Support tags on accounts and categories

Allow custom reporting tags for accounts and categories.
For example:

  • tax exempt, tax deferred account (or additional account types)
  • assign tax form/line to categories

File import

Need a UI for creating/modifying file import configurations

Security Lot allocation

  • Show all lots (include lots with no available shares)
  • Show basis for allocated lots
    • per lot
    • total
  • Add sales lot dialog for purchase

Reduce basis for "Return of Capital"

"Return of Capital" on a security reduces the cost basis for that security.

  • need to assign lots?
  • update cost basis calculation for securities views

Error editing filtered transactions

When transactions are filtered changing the matching field on a transaction causes the following exception.
Example: filter on payee name and modify the payee to a value that doesn't match the filter.

java.lang.IllegalArgumentException: Row index out of range
	at javax.swing.JTable.boundRow(JTable.java:2146)
	at javax.swing.JTable.setRowSelectionInterval(JTable.java:2169)
	at io.github.jonestimd.swing.table.DecoratedTable.selectViewRow(DecoratedTable.java:223)
	at io.github.jonestimd.swing.table.DecoratedTable.processKeyBinding(DecoratedTable.java:217)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2943)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
	at java.awt.Component.processEvent(Component.java:6316)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:835)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1103)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:974)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:800)
	at java.awt.Component.dispatchEventImpl(Component.java:4760)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Error updating multiple details in a transaction

Change the category of multiple details and save:

java.lang.reflect.UndeclaredThrowableException
	at com.sun.proxy.$Proxy55.merge(Unknown Source)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.saveTransaction(TransactionOperationsImpl.java:117)
	at java.util.ArrayList.forEach(ArrayList.java:1249)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.updateTransactions(TransactionOperationsImpl.java:107)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:50)
	at com.sun.proxy.$Proxy66.updateTransactions(Unknown Source)
	at io.github.jonestimd.finance.service.TransactionServiceImpl.updateTransactions(TransactionServiceImpl.java:64)
	at io.github.jonestimd.finance.swing.transaction.action.SaveAllAction.performTask(SaveAllAction.java:80)
	at io.github.jonestimd.finance.swing.transaction.action.SaveAllAction.performTask(SaveAllAction.java:44)
	at io.github.jonestimd.swing.BackgroundTask$1.performTask(BackgroundTask.java:117)
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
	at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1582)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:70)
	... 20 more
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [io.github.jonestimd.finance.domain.transaction.TransactionDetail#34222]
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:338)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:186)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:886)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:868)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:277)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
	at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:379)
	at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:319)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:296)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:474)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:343)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:186)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:85)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:876)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:858)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:863)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356)
	at com.sun.proxy.$Proxy68.merge(Unknown Source)
	at io.github.jonestimd.finance.dao.hibernate.HibernateDao.merge(HibernateDao.java:98)
	... 25 more

Error converting category to a transfer

Changing the category of an existing transaction detail to a transfer causes the following exception:

	at java.util.Objects.requireNonNull(Objects.java:228)
	at java.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:907)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at io.github.jonestimd.finance.domain.event.DomainEvent.index(DomainEvent.java:45)
	at io.github.jonestimd.finance.domain.event.DomainEvent.<init>(DomainEvent.java:64)
	at io.github.jonestimd.finance.domain.event.TransactionEvent.<init>(TransactionEvent.java:31)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.removeStaleEntities(CommitAction.java:109)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.updateUI(CommitAction.java:91)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.updateUI(CommitAction.java:45)
	at io.github.jonestimd.swing.BackgroundTask$1.updateUI(BackgroundTask.java:122)
	at io.github.jonestimd.swing.BackgroundTask.lambda$run$0(BackgroundTask.java:161)
	at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
	at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:442)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Error adding category on CSV import

java.lang.NullPointerException
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770)
	at com.google.common.base.Splitter.splitToList(Splitter.java:408)
	at io.github.jonestimd.finance.swing.fileimport.TransactionTypeColumnAdapter.lambda$static$0(TransactionTypeColumnAdapter.java:49)
	at io.github.jonestimd.swing.table.model.FunctionColumnAdapter.getValue(FunctionColumnAdapter.java:42)
	at io.github.jonestimd.swing.table.model.BeanTableAdapter.setValue(BeanTableAdapter.java:105)
	at io.github.jonestimd.swing.table.model.BeanListTableModel.setValue(BeanListTableModel.java:132)
	at io.github.jonestimd.swing.table.model.BufferedBeanListTableModel.setValue(BufferedBeanListTableModel.java:72)
	at io.github.jonestimd.swing.table.model.BeanListTableModel.setValueAt(BeanListTableModel.java:126)
	at javax.swing.JTable.setValueAt(JTable.java:2744)
	at javax.swing.JTable.editingStopped(JTable.java:4729)
	at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141)
	at io.github.jonestimd.swing.table.PopupTableCellEditor.fireEditingStopped(PopupTableCellEditor.java:88)
	at io.github.jonestimd.swing.table.PopupListTableCellEditor.commitEdit(PopupListTableCellEditor.java:71)
	at io.github.jonestimd.swing.component.ListField.processKeyBinding(ListField.java:154)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
	at java.awt.Component.processEvent(Component.java:6316)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:834)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1102)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:973)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:799)
	at java.awt.Component.dispatchEventImpl(Component.java:4760)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.awt.Dialog.show(Dialog.java:1084)
	at java.awt.Component.show(Component.java:1671)
	at java.awt.Component.setVisible(Component.java:1623)
	at java.awt.Window.setVisible(Window.java:1014)
	at java.awt.Dialog.setVisible(Dialog.java:1005)
	at io.github.jonestimd.swing.dialog.MessageDialog.setVisible(MessageDialog.java:73)
	at io.github.jonestimd.swing.dialog.ValidatedDialog.setVisible(ValidatedDialog.java:157)
	at io.github.jonestimd.finance.swing.fileimport.FileImportsDialog.showDialog(FileImportsDialog.java:165)
	at io.github.jonestimd.finance.swing.transaction.ImportFileMenuFactory$1.displayDialog(ImportFileMenuFactory.java:84)
	at io.github.jonestimd.swing.action.DialogAction$InitializeTask.lambda$updateUI$0(DialogAction.java:103)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Error deleting a transfer detail from a transaction

When saving the transaction:

java.lang.reflect.UndeclaredThrowableException
	at com.sun.proxy.$Proxy105.deleteSaleLots(Unknown Source)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.deleteDetail(TransactionOperationsImpl.java:151)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.deleteDetail(TransactionOperationsImpl.java:158)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.saveTransaction(TransactionOperationsImpl.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:50)
	at com.sun.proxy.$Proxy111.saveTransaction(Unknown Source)
	at io.github.jonestimd.finance.service.TransactionServiceImpl.saveTransaction(TransactionServiceImpl.java:57)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.performTask(CommitAction.java:87)
	at io.github.jonestimd.finance.swing.transaction.action.CommitAction.performTask(CommitAction.java:45)
	at io.github.jonestimd.swing.BackgroundTask$1.performTask(BackgroundTask.java:117)
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
	at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1596)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:70)
	... 20 more
Caused by: java.lang.NullPointerException
	at io.github.jonestimd.finance.dao.hibernate.SecuritySummaryEventHandler.changed(SecuritySummaryEventHandler.java:90)
	at io.github.jonestimd.finance.dao.hibernate.CompositeEventHandler.changed(CompositeEventHandler.java:56)
	at io.github.jonestimd.finance.dao.hibernate.DomainEventInterceptor.onFlushDirty(DomainEventInterceptor.java:50)
	at io.github.jonestimd.hibernate.InterceptorChain.onFlushDirty(InterceptorChain.java:46)
	at org.hibernate.event.internal.DefaultFlushEntityEventListener.invokeInterceptor(DefaultFlushEntityEventListener.java:374)
	at org.hibernate.event.internal.DefaultFlushEntityEventListener.handleInterception(DefaultFlushEntityEventListener.java:351)
	at org.hibernate.event.internal.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:302)
	at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:171)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
	at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:229)
	at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:93)
	at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:50)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
	at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1356)
	at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1460)
	at org.hibernate.query.internal.AbstractProducedQuery.doExecuteUpdate(AbstractProducedQuery.java:1714)
	at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1696)
	at io.github.jonestimd.finance.dao.hibernate.SecurityLotDaoImpl.deleteSaleLots(SecurityLotDaoImpl.java:56)
	... 25 more

Error setting category on an import column

  • edit PDF import
  • add column
  • set label
  • set type
  • set format
  • try to set category
java.lang.ClassCastException: io.github.jonestimd.finance.swing.fileimport.ImportFieldTableModel cannot be cast to io.github.jonestimd.swing.table.model.BeanListTableModel
	at io.github.jonestimd.finance.swing.fileimport.ImportFieldsPanel$TransactionTypeCellEditor.getTableCellEditorComponent(ImportFieldsPanel.java:168)
	at javax.swing.JTable.prepareEditor(JTable.java:5784)
	at javax.swing.JTable.editCellAt(JTable.java:3518)
	at io.github.jonestimd.swing.table.DecoratedTable.editCellAt(DecoratedTable.java:259)
	at javax.swing.JTable.processKeyBinding(JTable.java:5290)
	at io.github.jonestimd.swing.table.DecoratedTable.processKeyBinding(DecoratedTable.java:224)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2943)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
	at java.awt.Component.processEvent(Component.java:6316)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:834)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1102)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:973)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:799)
	at java.awt.Component.dispatchEventImpl(Component.java:4760)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.awt.Dialog.show(Dialog.java:1084)
	at java.awt.Component.show(Component.java:1671)
	at java.awt.Component.setVisible(Component.java:1623)
	at java.awt.Window.setVisible(Window.java:1014)
	at java.awt.Dialog.setVisible(Dialog.java:1005)
	at io.github.jonestimd.swing.dialog.MessageDialog.setVisible(MessageDialog.java:73)
	at io.github.jonestimd.swing.dialog.ValidatedDialog.setVisible(ValidatedDialog.java:157)
	at io.github.jonestimd.finance.swing.fileimport.FileImportsDialog.showDialog(FileImportsDialog.java:165)
	at io.github.jonestimd.finance.swing.transaction.ImportFileMenuFactory$1.displayDialog(ImportFileMenuFactory.java:84)
	at io.github.jonestimd.swing.action.DialogAction$InitializeTask.lambda$updateUI$0(DialogAction.java:103)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Optimistic lock error updating multiple related transactions

If a transaction contains 2 transfers to the same account, updating the 2 transfers from the other account (e.g. marking them both cleared) causes an optimistic lock error.

java.lang.reflect.UndeclaredThrowableException
	at com.sun.proxy.$Proxy100.merge(Unknown Source)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.saveTransaction(TransactionOperationsImpl.java:122)
	at java.util.ArrayList.forEach(ArrayList.java:1259)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.updateTransactions(TransactionOperationsImpl.java:112)
	at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:50)
	at com.sun.proxy.$Proxy111.updateTransactions(Unknown Source)
	at io.github.jonestimd.finance.service.TransactionServiceImpl.updateTransactions(TransactionServiceImpl.java:64)
	at io.github.jonestimd.finance.swing.transaction.action.SaveAllAction.performTask(SaveAllAction.java:80)
	at io.github.jonestimd.finance.swing.transaction.action.SaveAllAction.performTask(SaveAllAction.java:44)
	at io.github.jonestimd.swing.BackgroundTask$1.performTask(BackgroundTask.java:117)
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
	at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1596)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:70)
	... 19 more
Caused by: javax.persistence.OptimisticLockException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [io.github.jonestimd.finance.domain.transaction.Transaction#33090]
	at org.hibernate.internal.ExceptionConverterImpl.wrapStaleStateException(ExceptionConverterImpl.java:223)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:93)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:852)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:815)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:518)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:346)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:842)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:815)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:518)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:346)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:842)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:815)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:543)
	at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:474)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:437)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:518)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:346)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:842)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:815)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:518)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:346)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:842)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:815)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:518)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:346)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:842)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:815)
	at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
	at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:510)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:434)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:543)
	at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:474)
	at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:437)
	at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:220)
	at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:518)
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:346)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:70)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:822)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:809)
	at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:351)
	at com.sun.proxy.$Proxy114.merge(Unknown Source)
	at io.github.jonestimd.finance.dao.hibernate.HibernateDao.merge(HibernateDao.java:98)
	... 23 more
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [io.github.jonestimd.finance.domain.transaction.Transaction#33090]
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:341)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:842)
	... 105 more

Error saving transaction with multiple changes

  • mark transaction cleared
  • modify detail
  • save
java.lang.reflect.UndeclaredThrowableException
	at com.sun.proxy.$Proxy100.merge(Unknown Source)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.saveTransaction(TransactionOperationsImpl.java:125)
	at java.util.ArrayList.forEach(ArrayList.java:1259)
	at io.github.jonestimd.finance.operations.TransactionOperationsImpl.updateTransactions(TransactionOperationsImpl.java:115)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:50)
	at com.sun.proxy.$Proxy111.updateTransactions(Unknown Source)
	at io.github.jonestimd.finance.service.TransactionServiceImpl.updateTransactions(TransactionServiceImpl.java:64)
	at io.github.jonestimd.finance.swing.transaction.action.SaveAllAction.performTask(SaveAllAction.java:80)
	at io.github.jonestimd.finance.swing.transaction.action.SaveAllAction.performTask(SaveAllAction.java:44)
	at io.github.jonestimd.swing.BackgroundTask$1.performTask(BackgroundTask.java:117)
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
	at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1596)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.github.jonestimd.hibernate.TransactionInterceptor.invoke(TransactionInterceptor.java:70)
	... 20 more
Caused by: javax.persistence.OptimisticLockException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [io.github.jonestimd.finance.domain.transaction.Transaction#29698]
	at org.hibernate.internal.ExceptionConverterImpl.wrapStaleStateException(ExceptionConverterImpl.java:223)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:93)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:833)
	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:809)
	at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:351)
	at com.sun.proxy.$Proxy114.merge(Unknown Source)
	at io.github.jonestimd.finance.dao.hibernate.HibernateDao.merge(HibernateDao.java:98)
	... 24 more
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [io.github.jonestimd.finance.domain.transaction.Transaction#29698]
	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:341)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:172)
	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:70)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:822)
	... 31 more

Support transfering security shares between accounts

Need to retain original purchase date and cost basis

  • Support related detail for security transfer
    • allow non-zero asset quantity
    • negative shares on transfer out
  • All security lots link to purchase (or shares in) in original account
    • lots for transfer out (shares < 0)
    • lots for sale
    • lots for shares out
  • Update calculation of remaining shares on purchase to account for transfers
    • original account: purchase shares - sum(sales/transfers from the account)
    • transfer account: sum(shares transferred to the account) - sum(sales/transfers from the account)

security transfer

Can't add a new account

The account type should be editable for a new account but it is not. Can't save the account because the type is required and can't be set.

Import uses old configuration

After editing an import (change to/from single payee) the import still uses the old setting until the app is restarted.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.