diff --git a/Koha/Library.pm b/Koha/Library.pm index c1ebd2f3ca..676c9e8da2 100644 --- a/Koha/Library.pm +++ b/Koha/Library.pm @@ -51,6 +51,34 @@ sub stockrotationstages { return Koha::StockRotationStages->_new_from_dbic( $rs ); } +=head3 outgoing_transfers + + my $outgoing_transfers = Koha::Library->outgoing_transfers; + +Returns the outgoing item transfers associated with this Library. + +=cut + +sub outgoing_transfers { + my ( $self ) = @_; + my $rs = $self->_result->branchtransfers_frombranches; + return Koha::Item::Transfers->_new_from_dbic( $rs ); +} + +=head3 inbound_transfers + + my $inbound_transfers = Koha::Library->inbound_transfers; + +Returns the inbound item transfers associated with this Library. + +=cut + +sub inbound_transfers { + my ( $self ) = @_; + my $rs = $self->_result->branchtransfers_tobranches; + return Koha::Item::Transfers->_new_from_dbic( $rs ); +} + =head3 get_effective_marcorgcode my $marcorgcode = Koha::Libraries->find( $library_id )->get_effective_marcorgcode(); diff --git a/Koha/StockRotationItem.pm b/Koha/StockRotationItem.pm index d2e91e828b..9ee92c10e6 100644 --- a/Koha/StockRotationItem.pm +++ b/Koha/StockRotationItem.pm @@ -277,6 +277,49 @@ sub advance { return $transfer; } +=head3 toggle_indemand + + $sritem->toggle_indemand; + +Toggle this items in_demand status. + +If the item is in the process of being advanced to the next stage then we cancel +the transfer, revert the advancement and reset the 'StockrotationAdvance' counter, +as though 'in_demand' had been set prior to the call to advance, by updating the +in progress transfer. + +=cut + +sub toggle_indemand { + my ( $self ) = @_; + + # Toggle the item's indemand flag + my $new_indemand = ($self->indemand == 1) ? 0 : 1; + + # Cancel 'StockrotationAdvance' transfer if one is in progress + if ($new_indemand) { + my $item = $self->itemnumber; + my $transfer = $item->get_transfer; + if ($transfer && $transfer->reason eq 'StockrotationAdvance') { + my $stage = $self->stage; + my $new_stage; + if ( $stage->rota->cyclical && !$stage->first_sibling ) { # First stage + $new_stage = $stage->last_sibling; + } else { + $new_stage = $stage->previous_sibling; + } + $self->stage_id($new_stage->stage_id)->store; # Revert stage change + $item->homebranch($new_stage->branchcode_id)->store; # Revert update homebranch + $new_indemand = 0; # Reset indemand + $transfer->tobranch($new_stage->branchcode_id); # Reset StockrotationAdvance + $transfer->datearrived(dt_from_string); # Reset StockrotationAdvance + $transfer->store; + } + } + + $self->indemand($new_indemand)->store; +} + =head3 investigate my $report = $item->investigate; diff --git a/Koha/Util/StockRotation.pm b/Koha/Util/StockRotation.pm index 858d2cb2d3..b26e63972e 100644 --- a/Koha/Util/StockRotation.pm +++ b/Koha/Util/StockRotation.pm @@ -97,21 +97,16 @@ sub get_stages { sub toggle_indemand { - my ($item_id, $stage_id) = @_; + my ($item_id) = @_; # Get the item object - my $item = Koha::StockRotationItems->find( + my $sr_item = Koha::StockRotationItems->find( { itemnumber_id => $item_id, - stage_id => $stage_id } ); - # Toggle the item's indemand flag - my $new_indemand = ($item->indemand == 1) ? 0 : 1; - - $item->indemand($new_indemand)->store; - + $sr_item->toggle_indemand; } =head2 move_to_next_stage diff --git a/circ/transfers_to_send.pl b/circ/transfers_to_send.pl new file mode 100755 index 0000000000..a12b5103d4 --- /dev/null +++ b/circ/transfers_to_send.pl @@ -0,0 +1,64 @@ +#!/usr/bin/perl + +# Copyright 2019 PTFS-Europe Ltd. +# +# 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 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. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; +use CGI qw ( -utf8 ); +use C4::Context; +use C4::Auth; +use C4::Output; + +use Koha::DateUtils; + +my $input = CGI->new; +my $itemnumber = $input->param('itemnumber'); + +my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( + { + template_name => "circ/transfers_to_send.tt", + query => $input, + type => "intranet", + flagsrequired => { circulate => "circulate_remaining_permissions" }, + debug => 1, + } +); + +# set the userenv branch +my $branchcode = C4::Context->userenv->{'branch'}; + +# transfers requested but not yet sent +my @transfers = Koha::Libraries->search( + { + 'branchtransfers_tobranches.frombranch' => $branchcode, + 'branchtransfers_tobranches.daterequested' => { '!=' => undef }, + 'branchtransfers_tobranches.datesent' => undef, + 'branchtransfers_tobranches.datearrived' => undef, + 'branchtransfers_tobranches.datecancelled' => undef, + }, + { + prefetch => 'branchtransfers_tobranches', + order_by => 'branchtransfers_tobranches.tobranch' + } +); + +$template->param( + libraries => \@transfers, + show_date => dt_from_string +); + +output_html_with_http_headers $input, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt index 2c5a6c666b..57eaad8178 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt @@ -97,6 +97,9 @@ Transfer [% END %] +
  • + Transfers to send +
  • Transfers to receive
  • diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transfers_to_send.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transfers_to_send.tt new file mode 100644 index 0000000000..69c988fc80 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transfers_to_send.tt @@ -0,0 +1,115 @@ +[% USE raw %] +[% USE Asset %] +[% USE Koha %] +[% USE KohaDates %] +[% USE Branches %] +[% SET footerjs = 1 %] +[% INCLUDE 'doc-head-open.inc' %] +Koha › Circulation › Transfers to send +[% INCLUDE 'doc-head-close.inc' %] + + + +[% INCLUDE 'header.inc' %] +[% INCLUDE 'circ-search.inc' %] + + + +
    +
    +
    +
    +
    + + [% IF Koha.Preference('CircSidebar') %] +
    + [% ELSE %] +
    + [% END %] + +

    Transfers requested of your library as of [% show_date | $KohaDates %]

    + + [% IF ( libraries ) %] +

    Your library is the origin for the following transfer(s)

    +
    + [% FOREACH library IN libraries %] + [% IF ( library.branchcode ) %] + + + + + + + + + + + + + + + [% FOREACH transfer IN library.inbound_transfers %] + [% UNLESS transfer.datesent %] + + + + + + + + + + [% END %] + [% END %] + +
    Sending to [% library.branchname | html %]
    Date of requestTitleReasonOn loanHome libraryCall no.Actions

    [% transfer.daterequested | $KohaDates %]

    + [% INCLUDE 'biblio-title.inc' biblio = transfer.item.biblio link = 1 %][% IF ( transfer.item.biblio.author ) %] by [% transfer.item.biblio.author | html %][% END %] + [% IF ( transfer.item.effective_itemtype ) %] ([% transfer.item.effective_itemtype | html %])[% END %] +
    Barcode: [% transfer.item.barcode | html %] +

    [% transfer.reason | html %]

    [% IF transfer.item.onloan %]Due [% transfer.item.onloan | $KohaDates %][% ELSE %]On shelf[% END %][% Branches.GetName( transfer.item.homebranch ) | html %][% transfer.item.itemcallnumber | html %] + [% IF transfer.reason == 'StockrotationAdvance' %] + Mark "In demand" + [% END %] +
    + [% END %] + [% END %] +
    + [% ELSE %] +

    No transfers to send

    + [% END %] + +
    + + [% IF Koha.Preference('CircSidebar') %] +
    + +
    + [% END %] + +
    +
    +
    +
    + +[% MACRO jsinclude BLOCK %] + [% INCLUDE 'datatables.inc' %] + +[% END %] + +[% INCLUDE 'intranet-bottom.inc' %]