| 
      
            Lines 1-26
          
      
      
        Link Here
      
     | 
  
        
          | 1 | 
          #!/usr/bin/perl  | 
          1 | 
          #!/usr/bin/perl  | 
        
        
          | 2 | 
           | 
          2 | 
           | 
        
            
              | 3 | 
              #script to administer the aqbudget table  | 
               | 
               | 
            
            
              | 4 | 
              #written 20/02/2002 by paul.poulain@free.fr  | 
            
            
              | 5 | 
              # This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html)  | 
            
            
              | 6 | 
               | 
            
            
              | 7 | 
              # ALGO :  | 
            
            
              | 8 | 
              # this script use an $op to know what to do.  | 
            
            
              | 9 | 
              # if $op is empty or none of the above values,  | 
            
            
              | 10 | 
              #	- the default screen is build (with all records, or filtered datas).  | 
            
            
              | 11 | 
              #	- the   user can clic on add, modify or delete record.  | 
            
            
              | 12 | 
              # if $op=add_form  | 
            
            
              | 13 | 
              #	- if primkey exists, this is a modification,so we read the $primkey record  | 
            
            
              | 14 | 
              #	- builds the add/modify form  | 
            
            
              | 15 | 
              # if $op=add_validate  | 
            
            
              | 16 | 
              #	- the user has just send datas, so we create/modify the record  | 
            
            
              | 17 | 
              # if $op=delete_form  | 
            
            
              | 18 | 
              #	- we show the record having primkey=$primkey and ask for deletion validation form  | 
            
            
              | 19 | 
              # if $op=delete_confirm  | 
            
            
              | 20 | 
              #	- we delete the record having primkey=$primkey  | 
            
            
              | 21 | 
               | 
            
            
              | 22 | 
               | 
            
        
          | 23 | 
          # Copyright 2000-2002 Katipo Communications  | 
          3 | 
          # Copyright 2000-2002 Katipo Communications  | 
        
            
               | 
               | 
              4 | 
              # Copyright 2002 Paul Poulain  | 
            
            
              | 5 | 
              # Copyright Koha Development Team  | 
            
        
          | 24 | 
          #  | 
          6 | 
          #  | 
        
        
          | 25 | 
          # This file is part of Koha.  | 
          7 | 
          # This file is part of Koha.  | 
        
        
          | 26 | 
          #  | 
          8 | 
          #  | 
        
  
    | 
      
            Lines 37-216
          
      
      
        Link Here
      
     | 
  
        
          | 37 | 
          # You should have received a copy of the GNU General Public License  | 
          19 | 
          # You should have received a copy of the GNU General Public License  | 
        
        
          | 38 | 
          # along with Koha; if not, see <http://www.gnu.org/licenses>.  | 
          20 | 
          # along with Koha; if not, see <http://www.gnu.org/licenses>.  | 
        
        
          | 39 | 
           | 
          21 | 
           | 
        
          
            
              | 40 | 
              use strict;  | 
              22 | 
              use Modern::Perl;  | 
            
            
              | 41 | 
              use warnings;  | 
               | 
               | 
            
        
          | 42 | 
          use CGI qw ( -utf8 );  | 
          23 | 
          use CGI qw ( -utf8 );  | 
        
            
              | 43 | 
              use C4::Context;  | 
               | 
               | 
            
        
          | 44 | 
          use C4::Auth;  | 
          24 | 
          use C4::Auth;  | 
        
            
               | 
               | 
              25 | 
              use C4::Context;  | 
            
        
          | 45 | 
          use C4::Output;  | 
          26 | 
          use C4::Output;  | 
        
            
              | 46 | 
              use C4::Budgets qw/GetCurrency GetCurrencies/;  | 
               | 
               | 
            
            
              | 47 | 
               | 
            
            
              | 48 | 
              our $input = CGI->new;  | 
            
            
              | 49 | 
              my $searchfield = $input->param('searchfield') || $input->param('description') || q{}; | 
            
            
              | 50 | 
              our $offset      = $input->param('offset') || 0; | 
            
            
              | 51 | 
              my $op          = $input->param('op')     || q{}; | 
            
            
              | 52 | 
              my $script_name = '/cgi-bin/koha/admin/currency.pl';  | 
            
            
              | 53 | 
              our $pagesize = 20;  | 
            
        
          | 54 | 
           | 
          27 | 
           | 
        
          
            
              | 55 | 
              our ($template, $loggedinuser, $cookie) = get_template_and_user({ | 
              28 | 
              use Koha::Acquisition::Currency;  | 
            
            
              | 56 | 
                  template_name => 'admin/currency.tt',  | 
              29 | 
              use Koha::Acquisition::Currencies;  | 
            
            
              | 57 | 
                  query => $input,  | 
              30 | 
               | 
            
            
              | 58 | 
                  type => 'intranet',  | 
              31 | 
              my $input         = CGI->new;  | 
            
            
              | 59 | 
                  flagsrequired => {parameters => 'parameters_remaining_permissions'}, | 
              32 | 
              my $searchfield   = $input->param('searchfield') || $input->param('description') || q{}; | 
            
            
              | 60 | 
                  authnotrequired => 0,  | 
              33 | 
              my $currency_code = $input->param('currency_code'); | 
            
            
              | 61 | 
              });  | 
              34 | 
              my $op            = $input->param('op') || 'list'; | 
            
            
              | 62 | 
               | 
              35 | 
              my @messages;  | 
            
            
              | 63 | 
              $searchfield=~ s/\,//g;  | 
              36 | 
               | 
            
            
              | 64 | 
               | 
              37 | 
              our ( $template, $loggedinuser, $cookie ) = get_template_and_user(  | 
            
            
              | 65 | 
               | 
              38 | 
                  {   template_name   => 'admin/currency.tt', | 
            
            
              | 66 | 
              $template->param(searchfield => $searchfield,  | 
              39 | 
                      query           => $input,  | 
            
            
              | 67 | 
                      script_name => $script_name);  | 
              40 | 
                      type            => 'intranet',  | 
            
            
              | 68 | 
               | 
              41 | 
                      authnotrequired => 0,  | 
            
            
              | 69 | 
              our $dbh = C4::Context->dbh;  | 
              42 | 
                      flagsrequired   => { parameters => 'parameters_remaining_permissions' }, | 
            
            
               | 
               | 
              43 | 
                  }  | 
            
            
              | 44 | 
              );  | 
            
        
          | 70 | 
           | 
          45 | 
           | 
        
        
          | 71 | 
          if ( $op eq 'add_form' ) { | 
          46 | 
          if ( $op eq 'add_form' ) { | 
        
          
            
              | 72 | 
                  add_form($searchfield);  | 
              47 | 
                  my $currency;  | 
            
            
              | 73 | 
              } elsif ( $op eq 'save' ) { | 
              48 | 
                  if ($currency_code) { | 
            
            
              | 74 | 
                  add_validate();  | 
              49 | 
                      $currency = Koha::Acquisition::Currencies->find($currency_code);  | 
            
            
              | 75 | 
                  print $input->redirect('/cgi-bin/koha/admin/currency.pl'); | 
               | 
               | 
            
            
              | 76 | 
              } elsif ( $op eq 'delete_confirm' ) { | 
            
            
              | 77 | 
                  delete_confirm($searchfield);  | 
            
            
              | 78 | 
              } elsif ( $op eq 'delete_confirmed' ) { | 
            
            
              | 79 | 
                  delete_currency($searchfield);  | 
            
            
              | 80 | 
              } else { | 
            
            
              | 81 | 
                  default_path($searchfield);  | 
            
            
              | 82 | 
              }  | 
            
            
              | 83 | 
               | 
            
            
              | 84 | 
              output_html_with_http_headers $input, $cookie, $template->output;  | 
            
            
              | 85 | 
               | 
            
            
              | 86 | 
              sub default_path { | 
            
            
              | 87 | 
                  my $searchfield = shift;  | 
            
            
              | 88 | 
                  $template->param( else => 1 );  | 
            
            
              | 89 | 
               | 
            
            
              | 90 | 
                  my @currencies = GetCurrencies();  | 
            
            
              | 91 | 
                  if ($searchfield) { | 
            
            
              | 92 | 
                      @currencies = grep { $_->{currency} =~ m/^$searchfield/o } @currencies; | 
            
        
          | 93 | 
              }  | 
          50 | 
              }  | 
        
          
            
              | 94 | 
                  my $end_of_page = $offset + $pagesize;  | 
              51 | 
               | 
            
            
              | 95 | 
                  if ( $end_of_page > @currencies ) { | 
              52 | 
                  $template->param( currency => $currency, );  | 
            
            
              | 96 | 
                      $end_of_page = @currencies;  | 
              53 | 
              } elsif ( $op eq 'add_validate' ) { | 
            
            
               | 
               | 
              54 | 
                  my $currency_code = $input->param('currency_code'); | 
            
            
              | 55 | 
                  my $symbol        = $input->param('symbol'); | 
            
            
              | 56 | 
                  my $isocode       = $input->param('isocode'); | 
            
            
              | 57 | 
                  my $rate          = $input->param('rate'); | 
            
            
              | 58 | 
                  my $active        = $input->param('active'); | 
            
            
              | 59 | 
                  my $is_a_modif    = $input->param('is_a_modif'); | 
            
            
              | 60 | 
               | 
            
            
              | 61 | 
                  if ($is_a_modif) { | 
            
            
              | 62 | 
                      my $currency = Koha::Acquisition::Currencies->find($currency_code);  | 
            
            
              | 63 | 
                      $currency->symbol($symbol);  | 
            
            
              | 64 | 
                      $currency->isocode($isocode);  | 
            
            
              | 65 | 
                      $currency->rate($rate);  | 
            
            
              | 66 | 
                      $currency->active($active);  | 
            
            
              | 67 | 
                      eval { $currency->store; }; | 
            
            
              | 68 | 
                      if ($@) { | 
            
            
              | 69 | 
                          push @messages, { type => 'error', code => 'error_on_update' }; | 
            
            
              | 70 | 
                      } else { | 
            
            
              | 71 | 
                          push @messages, { type => 'message', code => 'success_on_update' }; | 
            
            
              | 72 | 
                      }  | 
            
        
          | 97 | 
              } else { | 
          73 | 
              } else { | 
        
          
            
              | 98 | 
                      $template->param(  | 
              74 | 
                      my $currency = Koha::Acquisition::Currency->new(  | 
            
            
              | 99 | 
                          ltcount  => 1,  | 
              75 | 
                          {   currency => $currency_code, | 
            
            
              | 100 | 
                          nextpage => $end_of_page  | 
              76 | 
                              symbol   => $symbol,  | 
            
            
               | 
               | 
              77 | 
                              isocode  => $isocode,  | 
            
            
              | 78 | 
                              rate     => $rate,  | 
            
            
              | 79 | 
                              active   => $active,  | 
            
            
              | 80 | 
                          }  | 
            
        
          | 101 | 
                  );  | 
          81 | 
                  );  | 
        
            
               | 
               | 
              82 | 
                      eval { $currency->store; }; | 
            
            
              | 83 | 
                      if ($@) { | 
            
            
              | 84 | 
                          push @messages, { type => 'error', code => 'error_on_insert' }; | 
            
            
              | 85 | 
                      } else { | 
            
            
              | 86 | 
                          push @messages, { type => 'message', code => 'success_on_insert' }; | 
            
            
              | 87 | 
                      }  | 
            
        
          | 102 | 
              }  | 
          88 | 
              }  | 
        
          
            
              | 103 | 
                  $end_of_page--;  | 
              89 | 
                  $searchfield = q||;  | 
            
            
              | 104 | 
                  my @display_curr = @currencies[ $offset .. $end_of_page ];  | 
              90 | 
                  $op          = 'list';  | 
            
            
              | 105 | 
                  my $activecurrency = GetCurrency();  | 
              91 | 
              } elsif ( $op eq 'delete_confirm' ) { | 
            
            
               | 
               | 
              92 | 
                  my $currency = Koha::Acquisition::Currencies->find($currency_code);  | 
            
        
          | 106 | 
           | 
          93 | 
           | 
        
            
               | 
               | 
              94 | 
                  # TODO rewrite the following when Koha::Acquisition::Orders will use Koha::Objects  | 
            
            
              | 95 | 
                  my $schema = Koha::Database->schema;  | 
            
            
              | 96 | 
                  my $nb_of_orders = $schema->resultset('Aqorder')->search( { currency => $currency->currency } )->count; | 
            
        
          | 107 | 
              $template->param(  | 
          97 | 
              $template->param(  | 
        
          
            
              | 108 | 
                      loop           => \@display_curr,  | 
              98 | 
                      currency     => $currency,  | 
            
            
              | 109 | 
                      activecurrency => defined $activecurrency,  | 
              99 | 
                      nb_of_orders => $nb_of_orders,  | 
            
        
          | 110 | 
              );  | 
          100 | 
              );  | 
        
            
               | 
               | 
              101 | 
              } elsif ( $op eq 'delete' ) { | 
            
            
              | 102 | 
                  my $currency = Koha::Acquisition::Currencies->find($currency_code);  | 
            
            
              | 103 | 
                  my $deleted = eval { $currency->delete; }; | 
            
        
          | 111 | 
           | 
          104 | 
           | 
        
          
            
              | 112 | 
                  if ( $offset > 0 ) { | 
              105 | 
                  if ( $@ or not $deleted ) { | 
            
            
              | 113 | 
                      $template->param(  | 
              106 | 
                      push @messages, { type => 'error', code => 'error_on_delete' }; | 
            
            
              | 114 | 
                          offsetgtzero => 1,  | 
              107 | 
                  } else { | 
            
            
              | 115 | 
                          prevpage     => $offset - $pagesize  | 
              108 | 
                      push @messages, { type => 'message', code => 'success_on_delete' }; | 
            
            
              | 116 | 
                      );  | 
               | 
               | 
            
        
          | 117 | 
              }  | 
          109 | 
              }  | 
        
          
            
              | 118 | 
                  return;  | 
              110 | 
                  $op = 'list';  | 
            
            
              | 119 | 
              }  | 
               | 
               | 
            
            
              | 120 | 
               | 
            
            
              | 121 | 
              sub delete_currency { | 
            
            
              | 122 | 
                  my $curr = shift;  | 
            
            
              | 123 | 
               | 
            
            
              | 124 | 
                  # TODO This should be a method of Currency  | 
            
            
              | 125 | 
                  # also what about any orders using this currency  | 
            
            
              | 126 | 
                  $template->param( delete_confirmed => 1 );  | 
            
            
              | 127 | 
                  $dbh->do( 'delete from currency where currency=?', {}, $curr ); | 
            
            
              | 128 | 
                  return;  | 
            
        
          | 129 | 
          }  | 
          111 | 
          }  | 
        
        
          | 130 | 
           | 
          112 | 
           | 
        
          
            
              | 131 | 
              sub delete_confirm { | 
              113 | 
              if ( $op eq 'list' ) { | 
            
            
              | 132 | 
                  my $curr = shift;  | 
              114 | 
                  $searchfield =~ s/\,//g;  | 
            
            
              | 133 | 
               | 
              115 | 
                  my $currencies = Koha::Acquisition::Currencies->search( { currency => { -like => "$searchfield%" } } ); | 
            
            
              | 134 | 
                  $template->param( delete_confirm => 1 );  | 
               | 
               | 
            
            
              | 135 | 
                  my $total_row = $dbh->selectrow_hashref(  | 
            
            
              | 136 | 
                      'select count(*) as total from aqbooksellers where currency=?',  | 
            
            
              | 137 | 
                      {}, $curr ); | 
            
            
              | 138 | 
               | 
            
            
              | 139 | 
                  my $curr_ref = $dbh->selectrow_hashref(  | 
            
            
              | 140 | 
                      'select currency,rate from currency where currency=?',  | 
            
            
              | 141 | 
                      {}, $curr ); | 
            
            
              | 142 | 
               | 
            
            
              | 143 | 
                  if ( $total_row->{total} ) { | 
            
            
              | 144 | 
                      $template->param( totalgtzero => 1 );  | 
            
            
              | 145 | 
                  }  | 
            
        
          | 146 | 
           | 
          116 | 
           | 
        
            
               | 
               | 
              117 | 
                  my $no_active_currency = not Koha::Acquisition::Currencies->search( { active => 1 } )->count; | 
            
        
          | 147 | 
              $template->param(  | 
          118 | 
              $template->param(  | 
        
          
            
              | 148 | 
                      rate  => $curr_ref->{rate}, | 
              119 | 
                      currencies         => $currencies,  | 
            
            
              | 149 | 
                      total => $total_row->{total} | 
              120 | 
                      no_active_currency => $no_active_currency,  | 
            
        
          | 150 | 
              );  | 
          121 | 
              );  | 
        
            
              | 151 | 
               | 
               | 
               | 
            
            
              | 152 | 
                  return;  | 
            
            
              | 153 | 
              }  | 
            
            
              | 154 | 
               | 
            
            
              | 155 | 
              sub add_form { | 
            
            
              | 156 | 
                  my $curr = shift;  | 
            
            
              | 157 | 
               | 
            
            
              | 158 | 
                  $template->param( add_form => 1 );  | 
            
            
              | 159 | 
               | 
            
            
              | 160 | 
                  #---- if primkey exists, it's a modify action, so read values to modify...  | 
            
            
              | 161 | 
                  my $date;  | 
            
            
              | 162 | 
                  if ($curr) { | 
            
            
              | 163 | 
                      my $curr_rec =  | 
            
            
              | 164 | 
                        $dbh->selectrow_hashref( 'select * from currency where currency=?',  | 
            
            
              | 165 | 
                          {}, $curr ); | 
            
            
              | 166 | 
                      for ( keys %{$curr_rec} ) { | 
            
            
              | 167 | 
                          if($_ eq "timestamp"){ $date = $curr_rec->{$_}; } | 
            
            
              | 168 | 
                          $template->param( $_ => $curr_rec->{$_} ); | 
            
            
              | 169 | 
                      }  | 
            
            
              | 170 | 
                  }  | 
            
            
              | 171 | 
               | 
            
            
              | 172 | 
                  return;  | 
            
        
          | 173 | 
          }  | 
          122 | 
          }  | 
        
        
          | 174 | 
           | 
          123 | 
           | 
        
          
            
              | 175 | 
              sub add_validate { | 
              124 | 
              $template->param(  | 
            
            
              | 176 | 
                  $template->param( add_validate => 1 );  | 
              125 | 
                  searchfield => $searchfield,  | 
            
            
              | 177 | 
               | 
              126 | 
                  messages    => \@messages,  | 
            
            
              | 178 | 
                  my $rec = { | 
              127 | 
                  op          => $op,  | 
            
            
              | 179 | 
                      rate     => $input->param('rate'), | 
              128 | 
              );  | 
            
            
              | 180 | 
                      symbol   => $input->param('symbol') || q{}, | 
               | 
               | 
            
            
              | 181 | 
                      isocode  => $input->param('isocode') || q{}, | 
            
            
              | 182 | 
                      active   => $input->param('active') || 0, | 
            
            
              | 183 | 
                      currency => $input->param('currency'), | 
            
            
              | 184 | 
                  };  | 
            
            
              | 185 | 
               | 
            
            
              | 186 | 
                  if ( $rec->{active} == 1 ) { | 
            
            
              | 187 | 
                      $dbh->do('UPDATE currency SET active = 0'); | 
            
            
              | 188 | 
                  }  | 
            
            
              | 189 | 
               | 
            
            
              | 190 | 
                  my ($row_count) = $dbh->selectrow_array(  | 
            
            
              | 191 | 
                      'select count(*) as count from currency where currency = ?',  | 
            
            
              | 192 | 
                      {}, $input->param('currency') ); | 
            
            
              | 193 | 
                  if ($row_count) { | 
            
            
              | 194 | 
                      $dbh->do(  | 
            
            
              | 195 | 
              q|UPDATE currency SET rate = ?, symbol = ?, isocode = ?, active = ? WHERE currency = ? |,  | 
            
            
              | 196 | 
                          {}, | 
            
            
              | 197 | 
                          $rec->{rate}, | 
            
            
              | 198 | 
                          $rec->{symbol}, | 
            
            
              | 199 | 
                          $rec->{isocode}, | 
            
            
              | 200 | 
                          $rec->{active}, | 
            
            
              | 201 | 
                          $rec->{currency} | 
            
            
              | 202 | 
                      );  | 
            
            
              | 203 | 
                  } else { | 
            
            
              | 204 | 
                      $dbh->do(  | 
            
            
              | 205 | 
              q|INSERT INTO currency (currency, rate, symbol, isocode, active) VALUES (?,?,?,?,?) |,  | 
            
            
              | 206 | 
                          {}, | 
            
            
              | 207 | 
                          $rec->{currency}, | 
            
            
              | 208 | 
                          $rec->{rate}, | 
            
            
              | 209 | 
                          $rec->{symbol}, | 
            
            
              | 210 | 
                          $rec->{isocode}, | 
            
            
              | 211 | 
                          $rec->{active} | 
            
            
              | 212 | 
                      );  | 
            
        
          | 213 | 
           | 
          129 | 
           | 
        
          
            
              | 214 | 
                  }  | 
              130 | 
              output_html_with_http_headers $input, $cookie, $template->output;  | 
            
            
              | 215 | 
                  return;  | 
               | 
               | 
            
            
              | 216 | 
              }  |