X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=serials%2Fsubscription-detail.pl;h=6e8204810fbdfaa8a96cb5b1c6d5429f51b1dccd;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=8a829ed0af47534b06fa5bc1b05863ffc4dce3c9;hpb=3cd9293b6a89faf4cd4308ea0f411770e779ce34;p=srvgit diff --git a/serials/subscription-detail.pl b/serials/subscription-detail.pl index 8a829ed0af..6e8204810f 100755 --- a/serials/subscription-detail.pl +++ b/serials/subscription-detail.pl @@ -2,39 +2,41 @@ # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . use Modern::Perl; -use CGI; -use C4::Acquisition; -use C4::Auth; -use C4::Bookseller qw/GetBookSellerFromId/; -use C4::Budgets; -use C4::Koha; -use C4::Dates qw/format_date/; -use C4::Serials; -use C4::Output; +use CGI qw ( -utf8 ); +use C4::Auth qw( get_template_and_user checkauth ); +use C4::Serials qw( CloseSubscription ReopenSubscription GetSubscription GetExpirationDate GetSerials HasSubscriptionStrictlyExpired CountIssues HasItems DelSubscription check_routing abouttoexpire can_edit_subscription ); +use C4::Output qw( output_and_exit output_html_with_http_headers ); use C4::Context; -use C4::Search qw/enabled_staff_search_views/; -use Date::Calc qw/Today Day_of_Year Week_of_Year Add_Delta_Days/; -use Carp; +use C4::Search qw( enabled_staff_search_views ); -my $query = new CGI; +use Koha::AdditionalFields; +use Koha::AuthorisedValues; +use Koha::DateUtils qw( output_pref ); +use Koha::Acquisition::Bookseller; +use Koha::Subscriptions; + +use Carp qw( carp ); + +use Koha::SharedContent; + +my $query = CGI->new; my $op = $query->param('op') || q{}; my $issueconfirmed = $query->param('issueconfirmed'); my $dbh = C4::Context->dbh; -my ($template, $loggedinuser, $cookie, $hemisphere); my $subscriptionid = $query->param('subscriptionid'); if ( $op and $op eq "close" ) { @@ -43,65 +45,62 @@ if ( $op and $op eq "close" ) { C4::Serials::ReopenSubscription( $subscriptionid ); } -my $subs = GetSubscription($subscriptionid); - -$subs->{enddate} = GetExpirationDate($subscriptionid); - -if ($op && $op eq 'del') { - if ($subs->{'cannotedit'}){ - carp "Attempt to delete subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed"; - print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); - } - DelSubscription($subscriptionid); - print "Content-Type: text/html\n\n"; - exit; -} - -my ($totalissues,@serialslist) = GetSerials($subscriptionid); -$totalissues-- if $totalissues; # the -1 is to have 0 if this is a new subscription (only 1 issue) -# the subscription must be deletable if there is NO issues for a reason or another (should not happend, but...) +# the subscription must be deletable if there is NO issues for a reason or another (should not happened, but...) # Permission needed if it is a deletion (del) : delete_subscription # Permission needed otherwise : * my $permission = ($op eq "del") ? "delete_subscription" : "*"; -($template, $loggedinuser, $cookie) -= get_template_and_user({template_name => "serials/subscription-detail.tmpl", +my ($template, $loggedinuser, $cookie) += get_template_and_user({template_name => "serials/subscription-detail.tt", query => $query, type => "intranet", - authnotrequired => 0, flagsrequired => {serials => $permission}, - debug => 1, }); -$$subs{enddate} ||= GetExpirationDate($subscriptionid); +my $subs = GetSubscription($subscriptionid); + +output_and_exit( $query, $cookie, $template, 'unknown_subscription') + unless $subs; + +$subs->{enddate} ||= GetExpirationDate($subscriptionid); + +my ($totalissues,@serialslist) = GetSerials($subscriptionid); +$totalissues-- if $totalissues; # the -1 is to have 0 if this is a new subscription (only 1 issue) if ($op eq 'del') { - if ($$subs{'cannotedit'}){ - carp "Attempt to delete subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed"; - print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); - exit; - } - + if ($$subs{'cannotedit'}){ + carp "Attempt to delete subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed"; + print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); + exit; + } + # Asking for confirmation if the subscription has not strictly expired yet or if it has linked issues my $strictlyexpired = HasSubscriptionStrictlyExpired($subscriptionid); my $linkedissues = CountIssues($subscriptionid); my $countitems = HasItems($subscriptionid); if ($strictlyexpired == 0 || $linkedissues > 0 || $countitems>0) { - $template->param(NEEDSCONFIRMATION => 1); - if ($strictlyexpired == 0) { $template->param("NOTEXPIRED" => 1); } - if ($linkedissues > 0) { $template->param("LINKEDISSUES" => 1); } - if ($countitems > 0) { $template->param("LINKEDITEMS" => 1); } + $template->param(NEEDSCONFIRMATION => 1); + if ($strictlyexpired == 0) { $template->param("NOTEXPIRED" => 1); } + if ($linkedissues > 0) { $template->param("LINKEDISSUES" => 1); } + if ($countitems > 0) { $template->param("LINKEDITEMS" => 1); } } else { - $issueconfirmed = "1"; + $issueconfirmed = "1"; } # If it's ok to delete the subscription, we do so if ($issueconfirmed eq "1") { - &DelSubscription($subscriptionid); - print "Content-Type: text/html\n\n"; - exit; + &DelSubscription($subscriptionid); + print $query->redirect("/cgi-bin/koha/serials/serials-home.pl"); + exit; } } +elsif ( $op and $op eq "share" ) { + my $mana_language = $query->param('mana_language'); + my $result = Koha::SharedContent::send_entity($mana_language, $loggedinuser, $subscriptionid, 'subscription'); + $template->param( mana_code => $result->{msg} ); + $subs->{mana_id} = $result->{id}; +} + my $hasRouting = check_routing($subscriptionid); (undef, $cookie, undef, undef) @@ -110,43 +109,45 @@ my $hasRouting = check_routing($subscriptionid); # COMMENT hdl : IMHO, we should think about passing more and more data hash to template->param rather than duplicating code a new coding Guideline ? for my $date ( qw(startdate enddate firstacquidate histstartdate histenddate) ) { - $$subs{$date} = format_date($$subs{$date}) if $date && $$subs{$date}; + $subs->{$date} = output_pref( { str => $subs->{$date}, dateonly => 1 } ) + if $subs->{$date}; } -$subs->{location} = GetKohaAuthorisedValueLib("LOC",$subs->{location}); +my $av = Koha::AuthorisedValues->search({ category => 'LOC', authorised_value => $subs->{location} }); +$subs->{location} = $av->count ? $av->next->lib : ''; $subs->{abouttoexpire} = abouttoexpire($subs->{subscriptionid}); $template->param(%{ $subs }); $template->param(biblionumber_for_new_subscription => $subs->{bibnum}); -my @irregular_issues = split /,/, $subs->{irregularity}; +my @irregular_issues = split /;/, $subs->{irregularity}; my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subs->{periodicity}); my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subs->{numberpattern}); my $default_bib_view = get_default_view(); -my ( $order, $bookseller, $tmpl_infos ); -if ( defined $subscriptionid ) { - my $lastOrderNotReceived = GetLastOrderNotReceivedFromSubscriptionid $subscriptionid; - my $lastOrderReceived = GetLastOrderReceivedFromSubscriptionid $subscriptionid; - if ( defined $lastOrderNotReceived ) { - my $basket = GetBasket $lastOrderNotReceived->{basketno}; - my $bookseller = GetBookSellerFromId $basket->{booksellerid}; - ( $tmpl_infos->{valuegsti_ordered}, $tmpl_infos->{valuegste_ordered} ) = get_value_with_gst_params ( $lastOrderNotReceived->{ecost}, $lastOrderNotReceived->{gstrate}, $bookseller ); - $tmpl_infos->{valuegsti_ordered} = sprintf( "%.2f", $tmpl_infos->{valuegsti_ordered} ); - $tmpl_infos->{valuegste_ordered} = sprintf( "%.2f", $tmpl_infos->{valuegste_ordered} ); - $tmpl_infos->{budget_name_ordered} = GetBudgetName $lastOrderNotReceived->{budget_id}; - $tmpl_infos->{basketno} = $lastOrderNotReceived->{basketno}; - $tmpl_infos->{ordered_exists} = 1; - } - if ( defined $lastOrderReceived ) { - my $basket = GetBasket $lastOrderReceived->{basketno}; - my $bookseller = GetBookSellerFromId $basket->{booksellerid}; - ( $tmpl_infos->{valuegsti_spent}, $tmpl_infos->{valuegste_spent} ) = get_value_with_gst_params ( $lastOrderReceived->{unitprice}, $lastOrderReceived->{gstrate}, $bookseller ); - $tmpl_infos->{valuegsti_spent} = sprintf( "%.2f", $tmpl_infos->{valuegsti_spent} ); - $tmpl_infos->{valuegste_spent} = sprintf( "%.2f", $tmpl_infos->{valuegste_spent} ); - $tmpl_infos->{budget_name_spent} = GetBudgetName $lastOrderReceived->{budget_id}; - $tmpl_infos->{invoiceid} = $lastOrderReceived->{invoiceid}; - $tmpl_infos->{spent_exists} = 1; +my $subscription_object = Koha::Subscriptions->find( $subscriptionid ); +$template->param( + available_additional_fields => [ Koha::AdditionalFields->search( { tablename => 'subscription' } ) ], + additional_field_values => { + map { $_->field->name => $_->value } + $subscription_object->additional_field_values->as_list + }, +); + +# FIXME Do we want to hide canceled orders? +my $orders = Koha::Acquisition::Orders->search( { subscriptionid => $subscriptionid }, { order_by => [ { -desc => 'timestamp' }, \[ "field(orderstatus, 'ordered', 'partial', 'complete')" ] ] } ); +my $orders_grouped; +while ( my $o = $orders->next ) { + if ( $o->ordernumber == $o->parent_ordernumber ) { + $orders_grouped->{$o->parent_ordernumber}->{datereceived} = $o->datereceived; + $orders_grouped->{$o->parent_ordernumber}->{orderstatus} = $o->orderstatus; + $orders_grouped->{$o->parent_ordernumber}->{basket} = $o->basket; } + $orders_grouped->{$o->parent_ordernumber}->{quantity} += $o->quantity; + $orders_grouped->{$o->parent_ordernumber}->{ecost_tax_excluded} += sprintf('%.2f', $o->ecost_tax_excluded * $o->quantity); + $orders_grouped->{$o->parent_ordernumber}->{ecost_tax_included} += sprintf('%.2f', $o->ecost_tax_included * $o->quantity); + $orders_grouped->{$o->parent_ordernumber}->{unitprice_tax_excluded} += sprintf('%.2f', $o->unitprice_tax_excluded * $o->quantity); + $orders_grouped->{$o->parent_ordernumber}->{unitprice_tax_included} += sprintf('%.2f', $o->unitprice_tax_included * $o->quantity); + push @{$orders_grouped->{$o->parent_ordernumber}->{orders}}, $o; } $template->param( @@ -155,12 +156,7 @@ $template->param( hasRouting => $hasRouting, routing => C4::Context->preference("RoutingSerials"), totalissues => $totalissues, - hemisphere => $hemisphere, - cannotedit =>(C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{flags} % 2 !=1 && - C4::Context->userenv->{branch} && $subs->{branchcode} && - (C4::Context->userenv->{branch} ne $subs->{branchcode})), + cannotedit => (not C4::Serials::can_edit_subscription( $subs )), frequency => $frequency, numberpattern => $numberpattern, has_X => ($numberpattern->{'numberingmethod'} =~ /{X}/) ? 1 : 0, @@ -170,10 +166,9 @@ $template->param( intranetcolorstylesheet => C4::Context->preference('intranetcolorstylesheet'), irregular_issues => scalar @irregular_issues, default_bib_view => $default_bib_view, + orders_grouped => $orders_grouped, (uc(C4::Context->preference("marcflavour"))) => 1, - show_acquisition_details => defined $tmpl_infos->{ordered_exists} || defined $tmpl_infos->{spent_exists} ? 1 : 0, - basketno => $order->{basketno}, - %$tmpl_infos, + mana_comments => $subs->{comments}, ); output_html_with_http_headers $query, $cookie, $template->output; @@ -192,36 +187,3 @@ sub get_default_view { } return 'detail'; } - -sub get_value_with_gst_params { - my $value = shift; - my $gstrate = shift; - my $bookseller = shift; - if ( $bookseller->{listincgst} ) { - return ( $value, $value / ( 1 + $gstrate ) ); - } else { - return ( $value * ( 1 + $gstrate ), $value ); - } -} - -sub get_gste { - my $value = shift; - my $gstrate = shift; - my $bookseller = shift; - if ( $bookseller->{invoiceincgst} ) { - return $value / ( 1 + $gstrate ); - } else { - return $value; - } -} - -sub get_gst { - my $value = shift; - my $gstrate = shift; - my $bookseller = shift; - if ( $bookseller->{invoiceincgst} ) { - return $value / ( 1 + $gstrate ) * $gstrate; - } else { - return $value * ( 1 + $gstrate ) - $value; - } -}