282c547afe5f9eada08aa68591bb048935b130fd
[srvgit] / admin / branches.pl
1 #!/usr/bin/perl
2
3 # Copyright 2000-2002 Katipo Communications
4 # Copyright 2015 Koha Development Team
5 #
6 # This file is part of Koha.
7 #
8 # Koha is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # Koha is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20
21 use Modern::Perl;
22
23 use CGI qw ( -utf8 );
24 use Try::Tiny;
25
26 use C4::Auth;
27 use C4::Context;
28 use C4::Output;
29 use C4::Koha;
30
31 use Koha::Database;
32 use Koha::Patrons;
33 use Koha::Items;
34 use Koha::Libraries;
35 use Koha::SMTP::Servers;
36
37 my $input        = CGI->new;
38 my $branchcode   = $input->param('branchcode');
39 my $categorycode = $input->param('categorycode');
40 my $op           = $input->param('op') || 'list';
41 my @messages;
42
43 my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
44     {   template_name   => "admin/branches.tt",
45         query           => $input,
46         type            => "intranet",
47         flagsrequired   => { parameters => 'manage_libraries' },
48     }
49 );
50
51 if ( $op eq 'add_form' ) {
52     my $library;
53     if ($branchcode) {
54         $library = Koha::Libraries->find($branchcode);
55         $template->param( selected_smtp_server => $library->smtp_server );
56     }
57
58     my @smtp_servers = Koha::SMTP::Servers->search;
59
60     $template->param(
61         library      => $library,
62         smtp_servers => \@smtp_servers
63     );
64 } elsif ( $op eq 'add_validate' ) {
65     my @fields = qw(
66       branchname
67       branchaddress1
68       branchaddress2
69       branchaddress3
70       branchzip
71       branchcity
72       branchstate
73       branchcountry
74       branchphone
75       branchfax
76       branchemail
77       branchillemail
78       branchreplyto
79       branchreturnpath
80       branchurl
81       issuing
82       branchip
83       branchnotes
84       opac_info
85       marcorgcode
86       pickup_location
87     );
88     my $is_a_modif = $input->param('is_a_modif');
89
90     if ($is_a_modif) {
91         my $library = Koha::Libraries->find($branchcode);
92         for my $field (@fields) {
93             $library->$field( scalar $input->param($field) );
94         }
95
96         try {
97             Koha::Database->new->schema->txn_do(
98                 sub {
99                     $library->store->discard_changes;
100                     # Deal with SMTP server
101                     my $smtp_server_id = $input->param('smtp_server');
102
103                     if ( $smtp_server_id ) {
104                         if ( $smtp_server_id eq '*' ) {
105                             $library->smtp_server({ smtp_server => undef });
106                         }
107                         else {
108                             my $smtp_server = Koha::SMTP::Servers->find( $smtp_server_id );
109                             Koha::Exceptions::BadParameter->throw( parameter => 'smtp_server' )
110                                 unless $smtp_server;
111                             $library->smtp_server({ smtp_server => $smtp_server });
112                         }
113                     }
114
115                     push @messages, { type => 'message', code => 'success_on_update' };
116                 }
117             );
118         }
119         catch {
120             push @messages, { type => 'alert', code => 'error_on_update' };
121         }
122     } else {
123         $branchcode =~ s|\s||g;
124         my $library = Koha::Library->new(
125             {   branchcode => $branchcode,
126                 ( map { $_ => scalar $input->param($_) || undef } @fields )
127             }
128         );
129
130         try {
131             Koha::Database->new->schema->txn_do(
132                 sub {
133                     $library->store->discard_changes;
134
135                     my $smtp_server_id = $input->param('smtp_server');
136
137                     if ( $smtp_server_id ) {
138                         if ( $smtp_server_id ne '*' ) {
139                             my $smtp_server = Koha::SMTP::Servers->find( $smtp_server_id );
140                             Koha::Exceptions::BadParameter->throw( parameter => 'smtp_server' )
141                                 unless $smtp_server;
142                             $library->smtp_server({ smtp_server => $smtp_server });
143                         }
144                     }
145
146                     push @messages, { type => 'message', code => 'success_on_insert' };
147                 }
148             );
149         }
150         catch {
151             push @messages, { type => 'alert', code => 'error_on_insert' };
152         };
153     }
154     $op = 'list';
155 } elsif ( $op eq 'delete_confirm' ) {
156     my $library       = Koha::Libraries->find($branchcode);
157     my $items_count = Koha::Items->search(
158         {   -or => {
159                 holdingbranch => $branchcode,
160                 homebranch    => $branchcode
161             },
162         }
163     )->count;
164     my $patrons_count = Koha::Patrons->search( { branchcode => $branchcode, } )->count;
165
166     if ( $items_count or $patrons_count ) {
167         push @messages,
168           { type => 'alert',
169             code => 'cannot_delete_library',
170             data => {
171                 items_count   => $items_count,
172                 patrons_count => $patrons_count,
173             },
174           };
175         $op = 'list';
176     } else {
177         $template->param(
178             library       => $library,
179             items_count   => $items_count,
180             patrons_count => $patrons_count,
181         );
182     }
183 } elsif ( $op eq 'delete_confirmed' ) {
184     my $library = Koha::Libraries->find($branchcode);
185
186     my $deleted = eval { $library->delete; };
187
188     if ( $@ or not $deleted ) {
189         push @messages, { type => 'alert', code => 'error_on_delete' };
190     } else {
191         push @messages, { type => 'message', code => 'success_on_delete' };
192     }
193     $op = 'list';
194 } else {
195     $op = 'list';
196 }
197
198 $template->param( libraries_count => Koha::Libraries->search->count )
199     if $op eq 'list';
200
201 $template->param(
202     messages => \@messages,
203     op       => $op,
204 );
205
206 output_html_with_http_headers $input, $cookie, $template->output;