[Koha-patches] [PATCH 2/2] Bug 7175: Allow to choose which items to receive

julian.maurice at biblibre.com julian.maurice at biblibre.com
Fri Jan 13 17:13:35 CET 2012


From: Julian Maurice <julian.maurice at biblibre.com>

If AcqCreateItem=ordering, when you receive an order, you now have a
list of all created items and checkboxes that permit you to choose which
items you want to receive.
A 'Edit' link open additem.pl page in a popup to allow you edit the
items before receiving them (popup is automatically closed after
modification, and orderreceive.pl page is reloaded to show
modifications)
---
 C4/Acquisition.pm                                  |   41 ++++++++++-
 acqui/finishreceive.pl                             |   13 +++-
 acqui/orderreceive.pl                              |   15 +++-
 cataloguing/additem.pl                             |    1 +
 .../prog/en/modules/acqui/orderreceive.tt          |   75 +++++++++++++++++---
 .../prog/en/modules/cataloguing/additem.tt         |    9 +++
 6 files changed, 132 insertions(+), 22 deletions(-)

diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm
index 2814977..ac0bde0 100644
--- a/C4/Acquisition.pm
+++ b/C4/Acquisition.pm
@@ -56,7 +56,7 @@ BEGIN {
         &ModReceiveOrder &ModOrderBiblioitemNumber
         &GetCancelledOrders
 
-        &NewOrderItem &ModOrderItem
+        &NewOrderItem &ModOrderItem &ModItemOrder
 
         &GetParcels &GetParcel
         &GetContracts &GetContract
@@ -1017,6 +1017,29 @@ sub ModOrderItem {
     return 0;
 }
 
+=head3 ModItemOrder
+
+    ModItemOrder($itemnumber, $ordernumber);
+
+Modifies the ordernumber of an item in aqorders_items.
+
+=cut
+
+sub ModItemOrder {
+    my ($itemnumber, $ordernumber) = @_;
+
+    return unless ($itemnumber and $ordernumber);
+
+    my $dbh = C4::Context->dbh;
+    my $query = qq{
+        UPDATE aqorders_items
+        SET ordernumber = ?
+        WHERE itemnumber = ?
+    };
+    my $sth = $dbh->prepare($query);
+    return $sth->execute($ordernumber, $itemnumber);
+}
+
 #------------------------------------------------------------#
 
 
@@ -1102,7 +1125,7 @@ C<$ordernumber>.
 sub ModReceiveOrder {
     my (
         $biblionumber,    $ordernumber,  $quantrec, $user, $cost,
-        $invoiceno, $freight, $rrp, $budget_id, $datereceived
+        $invoiceno, $freight, $rrp, $budget_id, $datereceived, $received_items
     )
     = @_;
     my $dbh = C4::Context->dbh;
@@ -1148,7 +1171,19 @@ sub ModReceiveOrder {
         $order->{'quantity'} -= $quantrec;
         $order->{'quantityreceived'} = 0;
         my $newOrder = NewOrder($order);
-} else {
+        # Change ordernumber in aqorders_items for items not received
+        my @orderitems = GetItemnumbersFromOrder( $order->{'ordernumber'} );
+        my $count = scalar @orderitems;
+
+        for (my $i=0; $i<$count; $i++){
+            foreach (@$received_items){
+                splice (@orderitems, $i, 1) if ($orderitems[$i] == $_);
+            }
+        }
+        foreach (@orderitems) {
+            ModItemOrder($_, $newOrder);
+        }
+    } else {
         $sth=$dbh->prepare("update aqorders
                             set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?,
                                 unitprice=?,freight=?,rrp=?
diff --git a/acqui/finishreceive.pl b/acqui/finishreceive.pl
index 71b13d6..25e6e63 100755
--- a/acqui/finishreceive.pl
+++ b/acqui/finishreceive.pl
@@ -108,10 +108,15 @@ if ($quantityrec > $origquantityrec ) {
             my ($biblionumber,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber);
         }
     }
-    
+
+    my @received_items = ();
+    if(C4::Context->preference('AcqCreateItem') eq 'ordering') {
+        @received_items = $input->param('items_to_receive');
+    }
+
     # save the quantity received.
-	if( $quantityrec > 0 ) {
-    	$datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived);
-	}
+    if( $quantityrec > 0 ) {
+        $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived, \@received_items);
+    }
 }
     print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst&datereceived=$datereceived$error_url_str");
diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl
index dc03a1d..c4bab7f 100755
--- a/acqui/orderreceive.pl
+++ b/acqui/orderreceive.pl
@@ -111,17 +111,23 @@ my $count = scalar @$results;
 # prepare the form for receiving
 if ( $count == 1 ) {
     my $order = $results->[0];
-    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
+    my $AcqCreateItem = C4::Context->preference('AcqCreateItem');
+    if ($AcqCreateItem eq 'receiving') {
         # prepare empty item form
         my $cell = PrepareItemrecordDisplay('','','','ACQ');
         unless ($cell) {
             $cell = PrepareItemrecordDisplay('','','','');
             $template->param('NoACQframework' => 1);
         }
-        my @itemloop;
-        push @itemloop,$cell;
         
-        $template->param(items => \@itemloop);
+        $template->param(itemform => $cell);
+    } elsif ($AcqCreateItem eq 'ordering') {
+        my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber});
+        my @items;
+        foreach (@itemnumbers) {
+            push @items, GetItem($_);
+        }
+        $template->param(items => \@items);
     }
 
     if ( $order->{'unitprice'} == 0 ) {
@@ -134,6 +140,7 @@ if ( $count == 1 ) {
     my $budget = GetBudget( $order->{'budget_id'} );
 
     $template->param(
+        AcqCreateItem         => $AcqCreateItem,
         count                 => 1,
         biblionumber          => $order->{'biblionumber'},
         ordernumber           => $order->{'ordernumber'},
diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl
index a734d0f..089550b 100755
--- a/cataloguing/additem.pl
+++ b/cataloguing/additem.pl
@@ -729,6 +729,7 @@ $template->param(
     itemtagsubfield  => $itemtagsubfield,
     op      => $nextop,
     opisadd => ($nextop eq "saveitem") ? 0 : 1,
+    popup => $input->param('popup') ? 1: 0,
     C4::Search::enabled_staff_search_views,
 );
 
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
index ea422c8..aac58ea 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
@@ -2,6 +2,31 @@
 <title>Koha &rsaquo; Acquisitions &rsaquo; Receipt summary for : [% name %] [% IF ( invoice ) %]invoice, [% invoice %][% END %]</title>
 [% INCLUDE 'doc-head-close.inc' %]
 <script type="text/javascript" src="[% themelang %]/js/additem.js"> </script>
+<script type="text/javascript">
+//<![CDATA[
+[% IF (AcqCreateItem == 'ordering') %]
+    function PopupEditPage(biblionumber, itemnumber) {
+        var url = "/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber="
+            + biblionumber + "&itemnumber=" + itemnumber + "&popup=1#edititem";
+        window.open(url);
+    }
+
+    function CalcQtyToReceive() {
+        var qty = $("input[name='items_to_receive']:checked").length;
+        $("#quantity").val(qty);
+    }
+[% END %]
+
+$(document).ready(function() {
+    [% IF (AcqCreateItem == 'ordering') %]
+        $("input[name='items_to_receive']").change(function() {
+            CalcQtyToReceive();
+        });
+        CalcQtyToReceive();
+    [% END %]
+});
+//]]>
+</script>
 </head>
 <body>
 [% INCLUDE 'header.inc' %]
@@ -35,17 +60,46 @@
         [% seriestitle %]</li>
     </ol>
 	</fieldset>
-    [% IF ( items ) %]
+    [% IF (AcqCreateItem == 'ordering') %]
+        [% IF (items.size) %]
+            <fieldset class="rows">
+                <legend>Items</legend>
+                <table>
+                    <thead>
+                        <tr>
+                            <th>Receive?</th>
+                            <th>Barcode</th>
+                            <th>Home branch</th>
+                            <th>Location</th>
+                            <th>Call number</th>
+                            <th>&nbsp;</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        [% FOREACH item IN items %]
+                            <tr>
+                                <td style="text-align:center"><input type="checkbox" name="items_to_receive" value="[% item.itemnumber %]" /></td>
+                                <td>[% item.barcode %]</td>
+                                <td>[% item.homebranch %]</td>
+                                <td>[% item.location %]</td>
+                                <td>[% item.itemcallnumber %]</td>
+                                <td><a style="cursor:pointer" onclick="PopupEditPage([% item.biblionumber %],[% item.itemnumber %]);">Edit</a></td>
+                            </tr>
+                        [% END %]
+                    </tbody>
+                </table>
+            </fieldset>
+        [% END %]
+    [% ELSIF (AcqCreateItem == 'receiving') %]
     <fieldset class="rows">
         <legend>Item</legend>
         [% IF ( NoACQframework ) %]
             <p class="required">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</p>
         [% END %]
 
-        [% FOREACH item IN items %]
         <div id="outeritemblock">
         <div id="itemblock">
-            <ol>[% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];">
+            <ol>[% FOREACH iteminformatio IN itemform.iteminformation %]<li style="[% iteminformatio.hidden %];">
                 <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]">
                                 
                     <label>[% iteminformatio.subfield %] - [% IF ( iteminformatio.mandatory ) %]<b>[% END %][% iteminformatio.marc_lib %][% IF ( iteminformatio.mandatory ) %] *</b>[% END %]</label>
@@ -62,21 +116,20 @@
                 </div></li>
             [% END %]
             </ol>
-            <a class="addItem" onclick="cloneItemBlock('itemblock[% item.itemBlockIndex %]')">Add</a>
-            <a class="delItem" style="display:none;" onclick="deleteItemBlock('itemblock[% item.itemBlockIndex %]')">Delete</a>
+            <a class="addItem" onclick="cloneItemBlock('itemblock[% itemform.itemBlockIndex %]')">Add</a>
+            <a class="delItem" style="display:none;" onclick="deleteItemBlock('itemblock[% itemform.itemBlockIndex %]')">Delete</a>
         </div><!-- /iteminformation -->
         </div>
         
         <input type="hidden" name="moditem" value="" /> 
-        <input type="hidden" name="tag" value="[% item.itemtagfield %]" />
-        <input type="hidden" name="subfield" value="[% item.itemtagsubfield %]" />
-        <input type="hidden" name="serial" value="[% item.serialid %]" />
-        <input type="hidden" name="bibnum" value="[% item.biblionumber %]" />
+        <input type="hidden" name="tag" value="[% itemform.itemtagfield %]" />
+        <input type="hidden" name="subfield" value="[% itemform.itemtagsubfield %]" />
+        <input type="hidden" name="serial" value="[% itemform.serialid %]" />
+        <input type="hidden" name="bibnum" value="[% itemform.biblionumber %]" />
         <input type="hidden" name="itemid" value="1" />
-        <input type="hidden" name="field_value" value="[% item.itemnumber %]" />
+        <input type="hidden" name="field_value" value="[% itemform.itemnumber %]" />
         [% END %] <!-- /items -->
     </fieldset>
-    [% END %] <!-- items -->
     <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
     <input type="hidden" name="ordernumber" value="[% ordernumber %]" />
     <input type="hidden" name="biblioitemnumber" value="[% biblioitemnumber %]" />
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt
index 673b08b..7454129 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt
@@ -4,6 +4,12 @@
 <script type="text/javascript">
 //<![CDATA[
 $(document).ready(function(){
+    [% IF (popup) %]
+        [% IF (opisadd) %]
+            window.opener.location.reload(true);
+            window.close();
+        [% END %]
+    [% END %]
 		$("fieldset.rows input").keydown(function(e){ return checkEnter(e); });
 		/* Inline edit/delete links */
 		var biblionumber = $("input[name='biblionumber']").attr("value");
@@ -227,6 +233,9 @@ function set_to_today(id, force) {
 <div id="cataloguing_additem_newitem">
     <form method="post" action="/cgi-bin/koha/cataloguing/additem.pl" name="f">
     <input type="hidden" name="op" value="[% op %]" />
+    [% IF (popup) %]
+        <input type="hidden" name="popup" value="1" />
+    [% END %]
     <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
     [% IF ( opisadd ) %]
         <h2 id="additema">Add Item</h2>
-- 
1.7.8.3



More information about the Koha-patches mailing list