Revision 39278d1a
Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt
sql/Pg-upgrade2/auto_delete_reconciliation_links_on_acc_trans_deletion.pl | ||
---|---|---|
1 |
# @tag: auto_delete_reconciliation_links_on_acc_trans_deletion |
|
2 |
# @description: Automatisch Einträge aus reconciliation_links entfernen, wenn referenzierte Einträge gelöscht werden |
|
3 |
# @depends: automatic_reconciliation |
|
4 |
package SL::DBUpgrade2::auto_delete_reconciliation_links_on_acc_trans_deletion; |
|
5 |
|
|
6 |
use utf8; |
|
7 |
use strict; |
|
8 |
|
|
9 |
use parent qw(SL::DBUpgrade2::Base); |
|
10 |
|
|
11 |
sub run { |
|
12 |
my ($self) = @_; |
|
13 |
|
|
14 |
$self->drop_constraints(table => $_) for qw(reconciliation_links); |
|
15 |
|
|
16 |
my @queries = ( |
|
17 |
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|, |
|
18 |
q|ALTER TABLE reconciliation_links ADD CONSTRAINT reconciliation_links_bank_transaction_id FOREIGN KEY (bank_transaction_id) REFERENCES bank_transactions (id) ON DELETE CASCADE|, |
|
19 |
); |
|
20 |
|
|
21 |
$self->db_query($_) for @queries; |
|
22 |
|
|
23 |
return 1; |
|
24 |
} |
|
25 |
|
|
26 |
1; |
Auch abrufbar als: Unified diff
reconciliation_links automatisch mit Abhängigkeiten löschen
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.