Bugzilla – Attachment 7853 Details for
Bug 7175
Improve order receiving page
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[Rebased] Bug 7175: Allow to choose which items to receive
0002-Bug-7175-Allow-to-choose-which-items-to-receive.patch (text/plain), 17.78 KB, created by
Julian Maurice
on 2012-02-24 12:57:32 UTC
(
hide
)
Description:
[Rebased] Bug 7175: Allow to choose which items to receive
Filename:
MIME Type:
Creator:
Julian Maurice
Created:
2012-02-24 12:57:32 UTC
Size:
17.78 KB
patch
obsolete
>From cc2c282a76c7ef93b8d44e43fdacff485ece0256 Mon Sep 17 00:00:00 2001 >From: Julian Maurice <julian.maurice@biblibre.com> >Date: Fri, 13 Jan 2012 16:55:10 +0100 >Subject: [PATCH 2/2] Bug 7175: Allow to choose which items to receive > >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) >If quantity is set manually in the text box, the appropriate number of >checkbox are checked from top to bottom and a warning shows up if >quantity is greater than order quantity >--- > C4/Acquisition.pm | 41 ++++++- > acqui/finishreceive.pl | 9 +- > acqui/orderreceive.pl | 41 ++++++- > cataloguing/additem.pl | 1 + > .../prog/en/modules/acqui/orderreceive.tt | 122 +++++++++++++++++--- > .../prog/en/modules/cataloguing/additem.tt | 9 ++ > 6 files changed, 199 insertions(+), 24 deletions(-) > >diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm >index 0a96a02..189639e 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 >@@ -1018,6 +1018,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); >+} >+ > #------------------------------------------------------------# > > >@@ -1103,7 +1126,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; >@@ -1146,7 +1169,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 90a85fe..81e716d 100755 >--- a/acqui/finishreceive.pl >+++ b/acqui/finishreceive.pl >@@ -92,9 +92,14 @@ if ($quantityrec > $origquantityrec ) { > NewOrderItem($itemnumber, $ordernumber); > } > } >- >+ >+ my @received_items = (); >+ if(C4::Context->preference('AcqCreateItem') eq 'ordering') { >+ @received_items = $input->param('items_to_receive'); >+ } >+ > # save the quantity received. >- $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived); >+ $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived, \@received_items); > } > > update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber ); >diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl >index 9ef0545..ee9e7f7 100755 >--- a/acqui/orderreceive.pl >+++ b/acqui/orderreceive.pl >@@ -112,17 +112,47 @@ 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) { >+ my $item = GetItem($_); >+ if($item->{homebranch}) { >+ $item->{homebranchname} = GetBranchName($item->{homebranch}); >+ } >+ if($item->{holdingbranch}) { >+ $item->{holdingbranchname} = GetBranchName($item->{holdingbranch}); >+ } >+ if(my $code = GetAuthValCode("items.notforloan", "ACQ")) { >+ $item->{notforloan} = GetKohaAuthorisedValueLib($code, $item->{notforloan}); >+ } >+ if(my $code = GetAuthValCode("items.restricted", "ACQ")) { >+ $item->{restricted} = GetKohaAuthorisedValueLib($code, $item->{restricted}); >+ } >+ if(my $code = GetAuthValCode("items.location", "ACQ")) { >+ $item->{location} = GetKohaAuthorisedValueLib($code, $item->{location}); >+ } >+ if(my $code = GetAuthValCode("items.ccode", "ACQ")) { >+ $item->{collection} = GetKohaAuthorisedValueLib($code, $item->{ccode}); >+ } >+ if(my $code = GetAuthValCode("items.materials", "ACQ")) { >+ $item->{materials} = GetKohaAuthorisedValueLib($code, $item->{materials}); >+ } >+ my $itemtype = getitemtypeinfo($item->{itype}); >+ $item->{itemtype} = $itemtype->{description}; >+ push @items, $item; >+ } >+ $template->param(items => \@items); > } > > if ( $order->{'unitprice'} == 0 ) { >@@ -137,6 +167,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 4bf06b5..7039371 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -725,6 +725,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 e238278..df91cd2 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,50 @@ > <title>Koha › Acquisitions › 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); >+ } >+ >+ function CheckNItems(n) { >+ $("input[name='items_to_receive']").each(function() { >+ $(this).attr('checked', false); >+ }); >+ $("input[name='items_to_receive']:lt("+n+")").each(function () { >+ $(this).attr('checked', true); >+ }); >+ } >+[% END %] >+ >+$(document).ready(function() { >+ [% IF (AcqCreateItem == 'ordering') %] >+ $("input[name='items_to_receive']").change(function() { >+ CalcQtyToReceive(); >+ }); >+ CalcQtyToReceive(); >+ $("#quantity").keyup(function() { >+ var qty = parseInt($("#quantity").val()); >+ var qtyto = parseInt($("#quantityto").val()); >+ if(qty > qtyto) { >+ $("#qtyrecerror").show(); >+ } else { >+ $("#qtyrecerror").hide(); >+ } >+ CheckNItems($(this).val()); >+ }); >+ [% END %] >+}); >+//]]> >+</script> > </head> > <body> > [% INCLUDE 'header.inc' %] >@@ -48,17 +92,64 @@ > </fieldset> > [% END %] > >- [% IF ( items ) %] >+ [% IF (AcqCreateItem == 'ordering') %] >+ [% IF (items.size) %] >+ <h5>Items</h5> >+ <div style="width:100%;overflow:auto"> >+ <table> >+ <thead> >+ <tr> >+ <th>Receive?</th> >+ <th> </th> >+ <th>Barcode</th> >+ <th>Home branch</th> >+ <th>Holding branch</th> >+ <th>Not for loan</th> >+ <th>Restricted</th> >+ <th>Location</th> >+ <th>Call number</th> >+ <th>Copy number</th> >+ <th>Stock number</th> >+ <th>Collection</th> >+ <th>Item type</th> >+ <th>Materials</th> >+ <th>Notes</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><a style="cursor:pointer" onclick="PopupEditPage([% item.biblionumber %],[% item.itemnumber %]);">Edit</a></td> >+ <td>[% item.barcode %]</td> >+ <td>[% item.homebranchname %]</td> >+ <td>[% item.holdingbranchname %]</td> >+ <td>[% item.notforloan %]</td> >+ <td>[% item.restricted %]</td> >+ <td>[% item.location %]</td> >+ <td>[% item.itemcallnumber %]</td> >+ <td>[% item.copynumber %]</td> >+ <td>[% item.stocknumber %]</td> >+ <td>[% item.collection %]</td> >+ <td>[% item.itemtype %]</td> >+ <td>[% item.materials %]</td> >+ <td>[% item.itemnotes %]</td> >+ </tr> >+ [% END %] >+ </tbody> >+ </table> >+ </div> >+ [% 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> >@@ -75,21 +166,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 %]" /> >@@ -107,9 +197,9 @@ > <li><label for="creator">Created by: </label><span> [% IF ( memberfirstname and membersurname ) %][% IF ( memberfirstname ) %][% memberfirstname %][% END %] [% membersurname %][% ELSE %]No name[% END %]</span></li> > <li><label for="quantityto">Quantity to receive: </label><span class="label"> > [% IF ( edit ) %] >- <input type="text" name="quantity" value="[% quantity %]" /> >+ <input id="quantityto" type="text" name="quantity" value="[% quantity %]" /> > [% ELSE %] >- <input type="text" READONLY name="quantity" value="[% quantity %]" /> >+ <input id="quantityto" type="text" READONLY name="quantity" value="[% quantity %]" /> > [% END %] > </span></li> > <li><label for="quantity">Quantity received: </label> >@@ -127,12 +217,16 @@ > [% END %] > [% ELSE %] > [% IF ( items ) %] >- <input READONLY type="text" id="quantity" size="20" name="quantityrec" value="1" /> >+ <input type="text" id="quantity" size="20" name="quantityrec" value="1" /> > [% ELSE %] > <input type="text" size="20" id="quantity" name="quantityrec" value="1" /> > [% END %] > <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="0" /> > [% END %] >+ <div id="qtyrecerror" style="display:none"> >+ <p class="error">Warning, you have entered more items than expected. >+ Items will not be created.</p> >+ </div> > </li> > <li><label for="rrp">Replacement cost: </label><input type="text" size="20" name="rrp" id="rrp" value="[% rrp %]" /></li> > <li><label for="ecost">Budgeted cost: </label><input type="text" size="20" name="ecost" id="ecost" value="[% ecost %]" /></li> >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 91c2d48..4ad7581 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.9 >
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 7175
:
6232
|
7139
|
7141
|
7164
|
7278
|
7852
|
7853
|
8680
|
8681
|
8770
|
8771
|
8772
|
9145
|
9146
|
9147
|
9431
|
9432
|
9590
|
9591