Bugzilla – Attachment 94651 Details for
Bug 22569
Add a 'Transfers to send' report
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 22569: Add a 'Transfers to send' report
Bug-22569-Add-a-Transfers-to-send-report.patch (text/plain), 14.15 KB, created by
Martin Renvoize (ashimema)
on 2019-10-24 10:22:06 UTC
(
hide
)
Description:
Bug 22569: Add a 'Transfers to send' report
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2019-10-24 10:22:06 UTC
Size:
14.15 KB
patch
obsolete
>From 0017c35ec7dfb1e9b13f62e2fb70bbb6f1eca3c4 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Mon, 10 Jun 2019 15:17:35 +0100 >Subject: [PATCH] Bug 22569: Add a 'Transfers to send' report > >This patch adds a 'Transfers to send' report to the circulation page >which displays items which have been triggered for transfer by the stock >rotation subsystem. > >Caveats: >1) It is currently limited to transfers prompted by stockrotation >2) There is no way to differentiate between a transfer that has been > requested and a transfer than has been actually sent. (but we do > filter out transfers that have been marked as received) >3) Both 'Advance' and 'Repatriate' actions will be listed and the > 'Advance' listings should have the option to set the item as 'In > demand' at the current branch and thus cancel the transfer and > make the item wait an additional stage period before being > automatically set to transfer again. > > I believe we should enhance the transfers system as a whole to > allow this report to be more meaningful and include transfer > initiated via other means (along with appropriate actions to be > taken upon them) > >Test plan >1) Setup a rotation plan and add some items to it as per the > manual >2) Run the stockrotation cronjob with the --execute flag >3) Check that the expected items appears in the new 'Transfers > to send' page. > >It does not yet catch items that are due for transfer by any other means >as at this time we do not store that sort of detail for other mechanisms. >See bug 23092 for one proposed resolution to that. > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > Koha/Item/Transfer.pm | 14 +++ > Koha/Library.pm | 14 +++ > Koha/StockRotationItem.pm | 42 +++++++ > Koha/Util/StockRotation.pm | 11 +- > circ/transferstosend.pl | 67 +++++++++++ > .../prog/en/modules/circ/circulation-home.tt | 3 + > .../prog/en/modules/circ/transferstosend.tt | 105 ++++++++++++++++++ > 7 files changed, 248 insertions(+), 8 deletions(-) > create mode 100755 circ/transferstosend.pl > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/circ/transferstosend.tt > >diff --git a/Koha/Item/Transfer.pm b/Koha/Item/Transfer.pm >index 50c381db39..e30fefa4a3 100644 >--- a/Koha/Item/Transfer.pm >+++ b/Koha/Item/Transfer.pm >@@ -33,6 +33,20 @@ Koha::Item::Transfer - Koha Item Transfer Object class > > =cut > >+=head3 item >+ >+ my $item = Koha::Library->item; >+ >+Returns the associated item for this transfer. >+ >+=cut >+ >+sub item { >+ my ( $self ) = @_; >+ my $rs = $self->_result->itemnumber; >+ return Koha::Item->_new_from_dbic( $rs ); >+} >+ > =head3 type > > =cut >diff --git a/Koha/Library.pm b/Koha/Library.pm >index dab86e7580..31480e833b 100644 >--- a/Koha/Library.pm >+++ b/Koha/Library.pm >@@ -50,6 +50,20 @@ 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 get_effective_marcorgcode > > my $marcorgcode = Koha::Libraries->find( $library_id )->get_effective_marcorgcode(); >diff --git a/Koha/StockRotationItem.pm b/Koha/StockRotationItem.pm >index e451bb08db..2b8ca0c7aa 100644 >--- a/Koha/StockRotationItem.pm >+++ b/Koha/StockRotationItem.pm >@@ -224,6 +224,48 @@ sub advance { > return $transfer->store; > } > >+=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->comments 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(DateTime->now); # Reset StockrotationAdvance >+ } >+ } >+ >+ $self->indemand($new_indemand)->store; >+} >+ > =head3 investigate > > my $report = $item->investigate; >diff --git a/Koha/Util/StockRotation.pm b/Koha/Util/StockRotation.pm >index 13c78e5675..9fb6a962fe 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/transferstosend.pl b/circ/transferstosend.pl >new file mode 100755 >index 0000000000..3283d14365 >--- /dev/null >+++ b/circ/transferstosend.pl >@@ -0,0 +1,67 @@ >+#!/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 <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+use CGI qw ( -utf8 ); >+use C4::Context; >+use C4::Auth; >+use C4::Output; >+ >+use Koha::DateUtils; >+ >+my $input = new CGI; >+my $itemnumber = $input->param('itemnumber'); >+ >+my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( >+ { >+ template_name => "circ/transferstosend.tt", >+ query => $input, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { circulate => "circulate_remaining_permissions" }, >+ debug => 1, >+ } >+); >+ >+# set the userenv branch >+my $branchcode = C4::Context->userenv->{'branch'}; >+ >+# transfers prompted by stockrotation >+my @transfers = Koha::Libraries->search( >+ { >+ 'branchtransfers_frombranches.frombranch' => $branchcode, >+ 'branchtransfers_frombranches.datesent' => { '!=' => undef }, >+ 'branchtransfers_frombranches.datearrived' => undef, >+ 'branchtransfers_frombranches.comments' => >+ [ "StockrotationAdvance", "StockrotationRepatriation" ] >+ }, >+ { >+ prefetch => 'branchtransfers_frombranches', >+ order_by => 'branchtransfers_frombranches.frombranch' >+ } >+); >+ >+$template->param( >+ branchesloop => \@transfers, >+ show_date => output_pref( >+ { dt => dt_from_string, dateformat => 'iso', dateonly => 1 } >+ ) >+); >+ >+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 b1bac4ae2b..a5f5420f3c 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 >@@ -93,6 +93,9 @@ > <a class="circ-button" href="/cgi-bin/koha/circ/branchtransfers.pl"><i class="fa fa-exchange"></i> Transfer</a> > </li> > [% END %] >+ <li> >+ <a class="circ-button" href="/cgi-bin/koha/circ/transferstosend.pl"><i class="fa fa-sign-out"></i> Transfers to send</a> >+ </li> > <li> > <a class="circ-button" href="/cgi-bin/koha/circ/transferstoreceive.pl"><i class="fa fa-sign-in"></i> Transfers to receive</a> > </li> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transferstosend.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transferstosend.tt >new file mode 100644 >index 0000000000..ed80ef5a2b >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/transferstosend.tt >@@ -0,0 +1,105 @@ >+[% USE raw %] >+[% USE Asset %] >+[% USE Koha %] >+[% USE KohaDates %] >+[% USE Branches %] >+[% SET footerjs = 1 %] >+[% INCLUDE 'doc-head-open.inc' %] >+<title>Koha › Circulation › Transfers to send</title> >+[% INCLUDE 'doc-head-close.inc' %] >+</head> >+ >+<body id="circ_transferstosend" class="circ"> >+[% INCLUDE 'header.inc' %] >+[% INCLUDE 'circ-search.inc' %] >+ >+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a> › Transfers to send</div> >+ >+<div class="main container-fluid"> >+ <div class="row"> >+ <div class="col-sm-12"> >+ <main> >+ <div class="row"> >+ >+ [% IF Koha.Preference('CircSidebar') %] >+ <div class="col-sm-10 col-sm-push-2"> >+ [% ELSE %] >+ <div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2"> >+ [% END %] >+ >+ <h1>Transfers required by your library as of [% show_date | $KohaDates %]</h1> >+ [% IF ( branchesloop ) %] >+ <p>Your library is the origin for the following transfer(s)</p> >+ <div id="resultlist"> >+ [% FOREACH branchesloo IN branchesloop %] >+ [% IF ( branchesloo.branchcode ) %] >+ <table style="width: 100%" id="transferst[% branchesloo.branchcode | html %]"> >+ <caption>Sending to [% branchesloo.branchname | html %]</caption> >+ <thead><tr> >+ <th class="title-string">Date of request</th> >+ <th class="anti-the">Title</th> >+ <th>On hold for</th> >+ <th>Home library</th> >+ <th>Call no.</th> >+ <th> </th> >+ </tr></thead> >+ <tbody>[% FOREACH transfer IN branchesloo.outgoing_transfers %] >+ <tr> >+ <td><p><span title="[% transfer.datesent | html %]">[% transfer.datesent | $KohaDates %]</span></p></td> >+ <td> >+ [% INCLUDE 'biblio-default-view.inc' biblionumber = transfer.item.biblionumber %][% transfer.item.biblio.title | html %] [% IF ( transfer.item.biblio.subtitles ) %] [% FOREACH subtitle IN transfer.item.biblio.subtitles %][% subtitle.subfield | html %][% END %][% END %]</a> [% IF ( transfer.item.biblio.author ) %]by [% transfer.item.biblio.author | html %][% END %] >+ [% IF ( transfer.item.effective_itemtype ) %] (<b>[% transfer.item.effective_itemtype | html %]</b>)[% END %] >+ <br />Barcode: [% transfer.item.barcode | html %] >+ </td> >+ <td><p>None</p></td> >+ <td></td> >+ <td>[% transfer.item.itemcallnumber | html %]</td> >+ <td class="actions"> >+ [% IF transfer.comments == 'StockrotationAdvance' %] >+ <a href="/cgi-bin/koha/catalogue/stockrotation.pl?op=toggle_in_demand&stage_id=4&item_id=[% transfer.itemnumber %]&biblionumber=[% transfer.item.biblionumber %]" class="btn btn-default btn-xs"><i class="fa fa-fire"></i> Mark "In demand"</a> >+ [% END %] >+ </td> >+ </tr> >+ [% END %]</tbody> >+ </table> >+ [% END %] >+ [% END %] >+ </div> >+ [% ELSE %] >+ <p>No transfers to send</p> >+ [% END %] >+ >+ [% IF Koha.Preference('CircSidebar') %] >+ </div> <!-- /.col-sm-10.col-sm-push-2 --> >+ <div class="col-sm-2 col-sm-pull-10"> >+ <aside> >+ [% INCLUDE 'circ-nav.inc' %] >+ </aside> >+ </div> <!-- /.col-sm-2.col-sm-pull-10 --> >+ </div> <!-- /.row --> >+ [% END %] >+ >+ </main> >+ </div> <!-- /.col-sm-12 --> >+ </div> <!-- /.row --> >+ >+[% MACRO jsinclude BLOCK %] >+ [% INCLUDE 'datatables.inc' %] >+ <script> >+ $(document).ready(function() { >+ [% FOREACH branchesloo IN branchesloop %] >+ $("#transferst[% branchesloo.branchcode | html %]").dataTable($.extend(true, {}, dataTablesDefaults, { >+ "aoColumnDefs": [ >+ { "aTargets": [ -1 ], "bSortable": false, "bSearchable": false }, >+ { "sType": "anti-the", "aTargets" : [ "anti-the" ] }, >+ { "sType": "title-string", "aTargets" : [ "title-string" ] } >+ ], >+ "sDom": 't', >+ "bPaginate": false >+ })); >+ [% END %] >+ }); >+ </script> >+[% END %] >+ >+[% INCLUDE 'intranet-bottom.inc' %] >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 22569
:
90458
|
90477
|
90486
|
90487
|
94650
|
94651
|
94658
|
94659
|
96471
|
96472
|
96473
|
96474
|
96475
|
96478
|
96479
|
96516
|
96517
|
97392
|
97393
|
107258
|
107259
|
107260
|
107306
|
107307
|
107308
|
110284
|
110285
|
110286
|
110543
|
110544
|
110545
|
116572
|
116573
|
117612
|
117613
|
117840
|
117841
|
117842
|
117843
|
117847
|
117848
|
117878
|
117879
|
117880
|
117881