Bug 37014: Fix after-modal-POST to transmit "not_returned" message

The bug report addresses an issue where the message "Item was not checked in" erroneously appears during the second POST after a manual or modal check-in process.

1. In circ/returns.pl:
   - Introduced a new hash `%rinot_returned` to track items not returned across pages.
   - Updated the logic to capture the "not returned" status from the query parameters.
   - Adjusted the input processing loop to include `not_returned` status.
   - Modified the section handling barcode check-ins to appropriately initialize and update the `not_returned` status.

2. returns.tt:
   - Added hidden input fields in the template to include `not_returned` status in the form submissions.

The changes ensure that the "not_returned" status is correctly tracked and displayed, preventing the erroneous message from appearing on subsequent POST requests.

1. Perform a manual check-in of an item, but make some warning modal appear: for ex., transfer: check-in the item in not home library.
2. Press OK on the modal. There will be a POST transition again to redraw the checked-in items list.
3. Verify that the "Item was not checked in" message appears erroneously near the item's row.
4. Apply the patch.
5. Repeat steps 1-3 and check that there will be no erroneous "Item was not checked in" message.

Signed-off-by: Tadeusz „tadzik” Sośnierz <tadeusz@sosnierz.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit f567d41b91)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Andrii Nugged 2024-06-03 03:50:24 +03:00 committed by Lucas Gass
parent 87d1a6aabc
commit 12edba3773
2 changed files with 14 additions and 1 deletions

View File

@ -103,6 +103,7 @@ my $returned_counter = C4::Context->preference('numReturnedItemsToShow') || 8;
my %returneditems;
my %riduedate;
my %riborrowernumber;
my %rinot_returned;
my @inputloop;
foreach ( $query->param ) {
my $counter;
@ -120,6 +121,7 @@ foreach ( $query->param ) {
my $barcode = $query->param("ri-$counter");
my $duedate = $query->param("dd-$counter");
my $borrowernumber = $query->param("bn-$counter");
my $not_returned = $query->param("nr-$counter");
$counter++;
# decode barcode ## Didn't we already decode them before passing them back last time??
@ -130,12 +132,14 @@ foreach ( $query->param ) {
$returneditems{$counter} = $barcode;
$riduedate{$counter} = $duedate;
$riborrowernumber{$counter} = $borrowernumber;
$rinot_returned{$counter} = $not_returned;
#######################
$input{counter} = $counter;
$input{barcode} = $barcode;
$input{duedate} = $duedate;
$input{borrowernumber} = $borrowernumber;
$input{not_returned} = $not_returned;
push( @inputloop, \%input );
}
@ -386,6 +390,7 @@ if ($barcode && $op eq 'cud-checkin') {
$returneditems{0} = $barcode;
$riborrowernumber{0} = $borrower->{'borrowernumber'};
$riduedate{0} = $duedate;
$rinot_returned{0} = 0;
$input{borrowernumber} = $borrower->{'borrowernumber'};
$input{duedate} = $duedate;
unless ( $dropboxmode ) {
@ -429,6 +434,7 @@ if ($barcode && $op eq 'cud-checkin') {
}
$input{duedate} = $duedate;
$input{not_returned} = 1;
$rinot_returned{0} = 1;
$returneditems{0} = $barcode;
$riduedate{0} = $duedate;
push( @inputloop, \%input );
@ -811,7 +817,7 @@ foreach ( sort { $a <=> $b } keys %returneditems ) {
# we could handle that better displaying a message in the template
$ri{not_returned} = 1 unless $returned;
$ri{not_returned} = $rinot_returned{$_};
my $biblio = $item->biblio;
# FIXME pass $item to the template and we are done here...
$ri{itembiblionumber} = $biblio->biblionumber;

View File

@ -436,6 +436,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
<button type="submit" class="approve" accesskey="y"><i class="fa fa-check"></i> Yes, checkin (Y)</button>
</form>
@ -519,6 +520,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
[% IF item.onloan %]
<button type="submit" class="btn btn-default"><i class="fa fa-check"></i> Confirm checkin and mark missing items as lost</button>
@ -591,6 +593,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
<div class="modal-header">
@ -679,6 +682,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
<input type="hidden" name="op" value="cud-affect_reserve" />
@ -789,6 +793,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
</div> <!-- /.modal-footer -->
</form> <!-- /#mainform -->
@ -873,6 +878,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
<input type="hidden" name="op" value="cud-affect_reserve" />
@ -1142,6 +1148,7 @@
<input type="hidden" name="ri-[% inputloo.counter | html %]" value="[% inputloo.barcode | html %]" />
<input type="hidden" name="dd-[% inputloo.counter | html %]" value="[% inputloo.duedate | html %]" />
<input type="hidden" name="bn-[% inputloo.counter | html %]" value="[% inputloo.borrowernumber | html %]" />
<input type="hidden" name="nr-[% inputloo.counter | html %]" value="[% inputloo.not_returned | html %]" />
[% END %]
</div>
</div>