@@ -, +, @@ manual page. option to mark the item as 'In demand' (Which will cancel the transfer and mark the item as in demand such that it will wait at the current branch for an additional stage period before being automatically picke for transfer again) page'. --- Koha/Library.pm | 28 +++++ Koha/StockRotationItem.pm | 43 +++++++ Koha/Util/StockRotation.pm | 11 +- circ/transfers_to_send.pl | 64 ++++++++++ .../prog/en/modules/circ/circulation-home.tt | 3 + .../prog/en/modules/circ/transfers_to_send.tt | 115 ++++++++++++++++++ 6 files changed, 256 insertions(+), 8 deletions(-) create mode 100755 circ/transfers_to_send.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/circ/transfers_to_send.tt --- a/Koha/Library.pm +++ a/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(); --- a/Koha/StockRotationItem.pm +++ a/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; --- a/Koha/Util/StockRotation.pm +++ a/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 --- a/circ/transfers_to_send.pl +++ a/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; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation-home.tt @@ -97,6 +97,9 @@ Transfer [% END %] +
  • + Transfers to send +
  • Transfers to receive
  • --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transfers_to_send.tt +++ a/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' %] --