Bug 22563: (QA follow-up) Catch LOST maninvoice cases
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Sat, 15 Jun 2019 06:17:46 +0000 (07:17 +0100)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 15 Jul 2019 10:28:03 +0000 (11:28 +0100)
One could add a manual invoice of type LOST but we would not associate
it with an issue_id. This patch tries to catch such cases and
extrapolate an issue_id to add to the accountline.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

C4/Accounts.pm
koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt

index 5601291..3049116 100644 (file)
@@ -87,9 +87,7 @@ sub chargelostitem {
     my $issue_id = $checkout ? $checkout->issue_id : undef;
 
     my $account = Koha::Account->new({ patron_id => $borrowernumber });
-    # first make sure the borrower hasn't already been charged for this item
-    # FIXME this should be more exact
-    #       there is no reason a user can't lose an item, find and return it, and lost it again
+    # first make sure the borrower hasn't already been charged for this item (for this issuance)
     my $existing_charges = $account->lines->search(
         {
             itemnumber     => $itemnumber,
@@ -156,6 +154,20 @@ sub manualinvoice {
 
     my $branchcode = C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef;
 
+    my $issue_id;
+    if ( $type eq 'LOST' && $itemnum ) {
+        my $checkouts = Koha::Checkouts->search(
+            { itemnumber => $itemnum, borrowernumber => $borrowernumber } );
+        my $checkout =
+            $checkouts->count
+          ? $checkouts->next
+          : Koha::Old::Checkouts->search(
+            { itemnumber => $itemnum, borrowernumber => $borrowernumber },
+            { order_by   => { 'DESC' => 'returndate' }, rows => 1 }
+        )->next;
+        $issue_id = $checkout ? $checkout->issue_id : undef;
+    }
+
     my $accountline = Koha::Account::Line->new(
         {
             borrowernumber    => $borrowernumber,
@@ -165,6 +177,7 @@ sub manualinvoice {
             accounttype       => $type,
             amountoutstanding => $amountleft,
             itemnumber        => $itemnum || undef,
+            issue_id          => $issue_id,
             note              => $note,
             manager_id        => $manager_id,
             interface         => C4::Context->interface,
index 7ce2a42..4772da3 100644 (file)
@@ -44,7 +44,7 @@
       <li>
         <label for="type">Type: </label>
         <select name="type" id="invoice_type">
-          <option value="L">Lost item</option>
+          <option value="LOST">Lost item</option>
           <option value="F">Fine</option>
           <option value="A">Account management fee</option>
           <option value="N">New card</option>