From 39278d1afe3bba08addcb80af6beee580b55d7e9 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 26 Sep 2016 10:46:10 +0200 Subject: [PATCH] =?utf8?q?reconciliation=5Flinks=20automatisch=20mit=20Abh?= =?utf8?q?=C3=A4ngigkeiten=20l=C3=B6schen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Wenn man einen Eintrag aus acc_trans löschen möchte (z.B. beim Löschen einer gebuchten Einkaufs- oder Verkaufsrechnung, zu der bereits Zahlungen verbucht wurden, für die wiederum ein Bankabgleich stattgefunden hat), so wird bisher nur der Eintrag aus ar/ap entfernt. Datenbanktrigger entfernen dann die Einträge aus »acc_trans« — doch diese sind in dem Moment noch über »reconciliation_links« referenziert. Die »reconciliation_links« verknüpft allerdings ausschließlich die Einträge aus »acc_trans« bzw. »bank_transactions« ohne weitere Nebenwirkungen. Daher genügt es, wenn die Einträge über ein »ON DELETE CASCADE« auf ihren Fremschlüssel mit gelöscht werden. Diese Änderung betrifft auch #193 (»Kontenabgleich mit Bank« verhindert nachträgliches Hinzufügen von Zahlungen). Durch die Änderung passiert jetzt beim nachträglichen Buchen von Zahlungen Folgendes: • Einträge aus »acc_trans« werden gelöscht • Einträge aus »reconciliation_links« fliegen durch »ON DELETE CASCADE« automatisch mit raus • Einträge in »acc_trans« werden wieder neu eingefügt, nicht aber Einträge in »reconciliation_links« Sprich diese Änderung versteckt den Bug, dass das nachträgliche Verändern von Zahlungen bereits abgeglichene Zahlungen falsch behandelt. Das muss weiterhin gefixt werden, das Fehlverhalten ist schlicht nicht mehr so offensichtlich. --- ...onciliation_links_on_acc_trans_deletion.pl | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 sql/Pg-upgrade2/auto_delete_reconciliation_links_on_acc_trans_deletion.pl diff --git a/sql/Pg-upgrade2/auto_delete_reconciliation_links_on_acc_trans_deletion.pl b/sql/Pg-upgrade2/auto_delete_reconciliation_links_on_acc_trans_deletion.pl new file mode 100644 index 000000000..70e76f76f --- /dev/null +++ b/sql/Pg-upgrade2/auto_delete_reconciliation_links_on_acc_trans_deletion.pl @@ -0,0 +1,26 @@ +# @tag: auto_delete_reconciliation_links_on_acc_trans_deletion +# @description: Automatisch Einträge aus reconciliation_links entfernen, wenn referenzierte Einträge gelöscht werden +# @depends: automatic_reconciliation +package SL::DBUpgrade2::auto_delete_reconciliation_links_on_acc_trans_deletion; + +use utf8; +use strict; + +use parent qw(SL::DBUpgrade2::Base); + +sub run { + my ($self) = @_; + + $self->drop_constraints(table => $_) for qw(reconciliation_links); + + my @queries = ( + q|ALTER TABLE reconciliation_links ADD CONSTRAINT reconciliation_links_acc_trans_id_fkey FOREIGN KEY (acc_trans_id) REFERENCES acc_trans (acc_trans_id) ON DELETE CASCADE|, + q|ALTER TABLE reconciliation_links ADD CONSTRAINT reconciliation_links_bank_transaction_id FOREIGN KEY (bank_transaction_id) REFERENCES bank_transactions (id) ON DELETE CASCADE|, + ); + + $self->db_query($_) for @queries; + + return 1; +} + +1; -- 2.20.1