Nach Löschen in ar/ap/gl via DB-Trigger in acc_trans aufräumen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 15 Jan 2013 13:46:30 +0000 (14:46 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 15 Jan 2013 14:06:04 +0000 (15:06 +0100)
SL/AP.pm
SL/AR.pm
SL/GL.pm
sql/Pg-upgrade2/ar_ap_gl_delete_triggers_deletion_from_acc_trans.sql [new file with mode: 0644]

index 95bde38..3c8e240 100644 (file)
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -395,13 +395,10 @@ sub delete_transaction {
   # connect to database
   my $dbh = $form->dbconnect_noauto($myconfig);
 
+  # acc_trans entries are deleted by database triggers.
   my $query = qq|DELETE FROM ap WHERE id = ?|;
   do_query($form, $dbh, $query, $form->{id});
 
-  $query = qq|DELETE FROM acc_trans WHERE trans_id = ?|;
-  do_query($form, $dbh, $query, $form->{id});
-
-  # commit and redirect
   my $rc = $dbh->commit;
   $dbh->disconnect;
 
index 5773918..26c0bca 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -417,12 +417,10 @@ sub delete_transaction {
   # connect to database, turn AutoCommit off
   my $dbh = $form->dbconnect_noauto($myconfig);
 
+  # acc_trans entries are deleted by database triggers.
   my $query = qq|DELETE FROM ar WHERE id = ?|;
   do_query($form, $dbh, $query, $form->{id});
 
-  $query = qq|DELETE FROM acc_trans WHERE trans_id = ?|;
-  do_query($form, $dbh, $query, $form->{id});
-
   # commit
   my $rc = $dbh->commit;
   $dbh->disconnect;
index c9fcd9c..7bcb475 100644 (file)
--- a/SL/GL.pm
+++ b/SL/GL.pm
@@ -51,9 +51,8 @@ sub delete_transaction {
   # connect to database
   my $dbh = $form->dbconnect_noauto($myconfig);
 
-  my @values = (conv_i($form->{id}));
-  do_query($form, $dbh, qq|DELETE FROM acc_trans WHERE trans_id = ?|, @values);
-  do_query($form, $dbh, qq|DELETE FROM gl WHERE id = ?|, @values);
+  # acc_trans entries are deleted by database triggers.
+  do_query($form, $dbh, qq|DELETE FROM gl WHERE id = ?|, conv_i($form->{id}));
 
   # commit and redirect
   my $rc = $dbh->commit;
diff --git a/sql/Pg-upgrade2/ar_ap_gl_delete_triggers_deletion_from_acc_trans.sql b/sql/Pg-upgrade2/ar_ap_gl_delete_triggers_deletion_from_acc_trans.sql
new file mode 100644 (file)
index 0000000..e38e58c
--- /dev/null
@@ -0,0 +1,22 @@
+-- @tag: ar_ap_gl_delete_triggers_deletion_from_acc_trans
+-- @description: Beim Löschen aus ar, ap, gl per Trigger auch dazugehörige Einträge aus acc_trans löschen
+-- @depends: release_3_0_0
+-- @charset: utf-8
+CREATE OR REPLACE FUNCTION clean_up_acc_trans_after_ar_ap_gl_delete() RETURNS trigger AS $$
+  BEGIN
+    DELETE FROM acc_trans WHERE trans_id = OLD.id;
+    RETURN OLD;
+  END;
+$$ LANGUAGE plpgsql;
+
+CREATE TRIGGER after_delete_ar_trigger
+AFTER DELETE ON ar FOR EACH ROW EXECUTE
+PROCEDURE clean_up_acc_trans_after_ar_ap_gl_delete();
+
+CREATE TRIGGER after_delete_ap_trigger
+AFTER DELETE ON ap FOR EACH ROW EXECUTE
+PROCEDURE clean_up_acc_trans_after_ar_ap_gl_delete();
+
+CREATE TRIGGER after_delete_gl_trigger
+AFTER DELETE ON gl FOR EACH ROW EXECUTE
+PROCEDURE clean_up_acc_trans_after_ar_ap_gl_delete();