From 8d7ae5e8c554ceade24bb2f50ca659077d595fb4 Mon Sep 17 00:00:00 2001
From: Charles Farmer <charles.farmer@inLibro.com>
Date: Wed, 4 Mar 2020 16:04:05 -0500
Subject: [PATCH] Bug 17015: Automatically update calendar when creating or
 deleting a branch

Signed-off-by: Michal Denar <black23@gmail.com>
---
 Koha/DiscreteCalendar.pm | 41 ++++++++++++++++++++++++++++++++++++++++
 admin/branches.pl        |  3 +++
 2 files changed, 44 insertions(+)

diff --git a/Koha/DiscreteCalendar.pm b/Koha/DiscreteCalendar.pm
index 4875e7c189..f80916305b 100644
--- a/Koha/DiscreteCalendar.pm
+++ b/Koha/DiscreteCalendar.pm
@@ -175,6 +175,16 @@ sub add_new_branch {
             branchcode => $copyBranch
     });
 
+    unless ($branch_rs->count) {
+        $copyBranch = Koha::Libraries->next->branchcode;
+        $branch_rs = $schema->resultset('DiscreteCalendar')->search({
+            branchcode => $copyBranch
+        });
+    }
+
+    $schema->{AutoCommit} = 0;
+    $schema->storage->txn_begin;
+
     while (my $row = $branch_rs->next()) {
         $schema->resultset('DiscreteCalendar')->create({
             date         => $row->date(),
@@ -186,8 +196,39 @@ sub add_new_branch {
         });
     }
 
+    eval { $schema->storage->txn_commit; };
+
+    if ($@) {
+        $schema->storage->rollback;
+    }
+
+    $schema->{AutoCommit} = 1;
 }
 
+=head2 delete_branch
+
+    Koha::DiscreteCalendar->delete_branch($branchcode)
+
+This method will delete every discrete_calendar entry for a given branch
+C<$branchcode> is the code of the branch we want to remove from the table
+
+=cut
+
+sub delete_branch {
+    my ( $classname, $branchcode ) = @_;
+
+    my $schema = Koha::Database->new->schema;
+
+    my $branch_rs = $schema->resultset('DiscreteCalendar')->search({
+            branchcode => $branchcode
+    });
+
+    if ($branch_rs->count) {
+        $branch_rs->delete;
+    }
+}
+
+
 =head2 get_date_info
 
     my $date = $calendar->get_date_info;
diff --git a/admin/branches.pl b/admin/branches.pl
index 08a73f6571..34f6d2b594 100755
--- a/admin/branches.pl
+++ b/admin/branches.pl
@@ -148,6 +148,8 @@ if ( $op eq 'add_form' ) {
                         }
                     }
 
+                    Koha::DiscreteCalendar->add_new_branch(undef, $branchcode);
+
                     push @messages, { type => 'message', code => 'success_on_insert' };
                 }
             );
@@ -193,6 +195,7 @@ if ( $op eq 'add_form' ) {
     if ( $@ or not $deleted ) {
         push @messages, { type => 'alert', code => 'error_on_delete' };
     } else {
+        Koha::DiscreteCalendar->delete_branch($branchcode);
         push @messages, { type => 'message', code => 'success_on_delete' };
     }
     $op = 'list';
-- 
2.30.2