Browse Source

Bug 9807 : Make it possible to view a basket group without reopening it

This patch make possible to view an individual closed basket group

without reopening it.
- It adds a new "View" button on closed basket group list
- It creates a view for closed basket groups, with 3 buttons (reopen,
  print, export)
- It adds a "delete" button on standard "edit" view (for open
  basket groups)

To test :
1/ regression test :
- create some empty basket groups
- create some basket groups by closing baskets
- in the list of basket groups closed and opened, check you can use
  the buttons that existed before the patch (close and print, delete,
  export, print, reopen)
- click on "Edit" to edit a opened basket group : check everything is
  like before :
-- change the billing and delivery places,
-- add a note,
-- put some new baskets  in the bg,
-- remove baskets from it
-- save it without checking "close" box => it should be saved but kept
   open
-- edit it again, and make other some changes (define a freetext
   delivery place for example)
-- save it with checking "close" => it should be saved but closed

2/ new feature test
- click on "view" button on top right column of some closed basket group
- check all the displayed informations are correct (places, free place,
  note, list of baskets)
- check you can not change anything
- click on "print" button => check a pdf is created
- click on "export" button => check a csv is created
- click on "reopen" button => you should stay on the same basket group, but
  it is now open and you can make some changes
- go back to the basket group list of the vendor. Check the reopened bg
   is in "open" tab
- click on "edit"
- click on new "delete" button => the bg should be deleted, and you are
  redirected to the bg list of the vendor.

Signed-off-by: cedric.vita@dracenie.com <cedric.vita@dracenie.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Passes koha-qa.pl, t and xt. Works as advertised.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
3.16.x
Mathieu Saby 11 years ago
committed by Galen Charlton
parent
commit
fc250be538
  1. 92
      acqui/basketgroup.pl
  2. 92
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt

92
acqui/basketgroup.pl

@ -29,7 +29,7 @@ basketgroup.pl
=head1 DESCRIPTION
This script lets the user group (closed) baskets into basket groups for easier order management. Note that the grouped baskets have to be from the same bookseller and
have to be closed.
have to be closed to be printed or exported.
=head1 CGI PARAMETERS
@ -294,11 +294,29 @@ sub printbasketgrouppdf{
}
my $op = $input->param('op') || 'display';
# possible values of $op :
# - add : adds a new basketgroup, or edit an open basketgroup, or display a closed basketgroup
# - mod_basket : modify an individual basket of the basketgroup
# - validate : FIXME dead code
# - closeandprint : close and print an closed basketgroup in pdf. called by clicking on "Close and print" button in closed basketgroups list
# - print : print a closed basketgroup. called by clicking on "Print" button in closed basketgroups list
# - export : export in CSV a closed basketgroup. called by clicking on "Export" button in closed basketgroups list
# - delete : delete an open basketgroup. called by clicking on "Delete" button in open basketgroups list
# - reopen : reopen a closed basketgroup. called by clicking on "Reopen" button in closed basketgroup list
# - attachbasket : save a modified basketgroup, or creates a new basketgroup when a basket is closed. called from basket page
# - display : display the list of all basketgroups for a vendor
my $booksellerid = $input->param('booksellerid');
$template->param(booksellerid => $booksellerid);
if ( $op eq "add" ) {
#
# if no param('basketgroupid') is not defined, adds a new basketgroup
# else, edit (if it is open) or display (if it is close) the basketgroup basketgroupid
# the template will know if basketgroup must be displayed or edited, depending on the value of closed key
#
if(! $booksellerid){
# Unknown bookseller
# FIXME : ungroupedlist does not seem to be used in this file nor in template
$template->param( ungroupedlist => 1);
my @booksellers = GetBookSeller('');
for (my $i=0; $i < scalar @booksellers; $i++) {
@ -315,6 +333,7 @@ if ( $op eq "add" ) {
}
}
} else {
# Known bookseller
my $basketgroupid = $input->param('basketgroupid');
my $billingplace;
my $deliveryplace;
@ -338,8 +357,10 @@ if ( $op eq "add" ) {
$billingplace = $basketgroup->{billingplace};
$deliveryplace = $basketgroup->{deliveryplace};
$freedeliveryplace = $basketgroup->{freedeliveryplace};
$template->param( closedbg => ($basketgroup ->{'closed'}) ? 1 : 0);
} else {
$template->param( closedbg => 0);
}
# determine default billing and delivery places depending on librarian homebranch and existing basketgroup data
my $borrower = GetMember( ( 'borrowernumber' => $loggedinuser ) );
$billingplace = $billingplace || $borrower->{'branchcode'};
@ -349,23 +370,27 @@ if ( $op eq "add" ) {
$template->param( billingplaceloop => $branches );
$branches = C4::Branch::GetBranchesLoop( $deliveryplace );
$template->param( deliveryplaceloop => $branches );
$template->param( booksellerid => $booksellerid );
}
# the template will display a unique basketgroup
$template->param(grouping => 1);
my $basketgroups = &GetBasketgroups($booksellerid);
my $bookseller = &GetBookSellerFromId($booksellerid);
my $baskets = &GetBasketsByBookseller($booksellerid);
displaybasketgroups($basketgroups, $bookseller, $baskets);
} elsif ($op eq 'mod_basket') {
#we want to modify an individual basket's group
#
# edit an individual basket contained in this basketgroup
#
my $basketno=$input->param('basketno');
my $basketgroupid=$input->param('basketgroupid');
ModBasket( { basketno => $basketno,
basketgroupid => $basketgroupid } );
print $input->redirect("basket.pl?basketno=" . $basketno);
} elsif ($op eq 'validate') {
#
# FIXME dead code
#
if(! $booksellerid){
$template->param( booksellererror => 1);
} else {
@ -374,7 +399,7 @@ if ( $op eq "add" ) {
my $baskets = parseinputbaskets($booksellerid);
my ($basketgroups, $newbasketgroups) = parseinputbasketgroups($booksellerid, $baskets);
foreach my $nbgid (keys %$newbasketgroups){
#javascript just picks an ID that's higher than anything else, the ID might not be correct..chenge it and change all the basket's basketgroupid as well
#javascript just picks an ID that's higher than anything else, the ID might not be correct..change it and change all the basket's basketgroupid as well
my $bgid = NewBasketgroup($newbasketgroups->{$nbgid});
${$newbasketgroups->{$nbgid}}->{'id'} = $bgid;
${$newbasketgroups->{$nbgid}}->{'oldid'} = $nbgid;
@ -400,21 +425,28 @@ if ( $op eq "add" ) {
$basketgroups = &GetBasketgroups($booksellerid);
my $bookseller = &GetBookSellerFromId($booksellerid);
$baskets = &GetBasketsByBookseller($booksellerid);
# keep ungroupedbaskets
displaybasketgroups($basketgroups, $bookseller, $baskets);
} elsif ( $op eq 'closeandprint') {
#
# close an open basketgroup and generates a pdf
#
my $basketgroupid = $input->param('basketgroupid');
CloseBasketgroup($basketgroupid);
printbasketgrouppdf($basketgroupid);
exit;
}elsif ($op eq 'print'){
#
# print a closed basketgroup
#
my $basketgroupid = $input->param('basketgroupid');
printbasketgrouppdf($basketgroupid);
exit;
}elsif ( $op eq "export" ) {
#
# export a closed basketgroup in csv
#
my $basketgroupid = $input->param('basketgroupid');
print $input->header(
-type => 'text/csv',
@ -423,20 +455,25 @@ if ( $op eq "add" ) {
print GetBasketGroupAsCSV( $basketgroupid, $input );
exit;
}elsif( $op eq "delete"){
#
# delete an closed basketgroup
#
my $basketgroupid = $input->param('basketgroupid');
DelBasketgroup($basketgroupid);
print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid);
print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid.'&amp;listclosed=1');
}elsif ( $op eq 'reopen'){
#
# reopen a closed basketgroup
#
my $basketgroupid = $input->param('basketgroupid');
my $booksellerid = $input->param('booksellerid');
ReOpenBasketgroup($basketgroupid);
print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid . '#closed');
my $redirectpath = ((defined $input->param('mode'))&& ($input->param('mode') eq 'singlebg')) ?'/cgi-bin/koha/acqui/basketgroup.pl?op=add&amp;basketgroupid='.$basketgroupid.'&amp;booksellerid='.$booksellerid : '/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' .$booksellerid.'&amp;listclosed=1';
print $input->redirect($redirectpath);
} elsif ( $op eq 'attachbasket') {
#
# save a modified basketgroup, or creates a new basketgroup when a basket is closed. called from basket page
#
# Getting parameters
my $basketgroup = {};
my @baskets = $input->param('basket');
@ -447,9 +484,9 @@ if ( $op eq "add" ) {
my $deliveryplace = $input->param('deliveryplace');
my $freedeliveryplace = $input->param('freedeliveryplace');
my $deliverycomment = $input->param('deliverycomment');
my $close = $input->param('close') ? 1 : 0;
# If we got a basketgroupname, we create a basketgroup
my $closedbg = $input->param('closedbg') ? 1 : 0;
if ($basketgroupid) {
# If we have a basketgroupid we edit the basketgroup
$basketgroup = {
name => $basketgroupname,
id => $basketgroupid,
@ -458,13 +495,14 @@ if ( $op eq "add" ) {
deliveryplace => $deliveryplace,
freedeliveryplace => $freedeliveryplace,
deliverycomment => $deliverycomment,
closed => $close,
closed => $closedbg,
};
ModBasketgroup($basketgroup);
if($close){
if($closedbg){
# FIXME
}
}else{
# we create a new basketgroup (whith a closed basket)
$basketgroup = {
name => $basketgroupname,
booksellerid => $booksellerid,
@ -473,22 +511,22 @@ if ( $op eq "add" ) {
deliveryplace => $deliveryplace,
freedeliveryplace => $freedeliveryplace,
deliverycomment => $deliverycomment,
closed => $close,
closed => $closedbg,
};
$basketgroupid = NewBasketgroup($basketgroup);
}
my $url = '/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid;
$url .= "&closed=1" if ($input->param("closed"));
print $input->redirect($url);
my $redirectpath = ((defined $input->param('mode')) && ($input->param('mode') eq 'singlebg')) ?'/cgi-bin/koha/acqui/basketgroup.pl?op=add&amp;basketgroupid='.$basketgroupid.'&amp;booksellerid='.$booksellerid : '/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid;
$redirectpath .= "&amp;listclosed=1" if $closedbg ;
print $input->redirect($redirectpath );
}else{
# no param : display the list of all basketgroups for a given vendor
my $basketgroups = &GetBasketgroups($booksellerid);
my $bookseller = &GetBookSellerFromId($booksellerid);
my $baskets = &GetBasketsByBookseller($booksellerid);
displaybasketgroups($basketgroups, $bookseller, $baskets);
}
$template->param(closed => $input->param("closed"));
$template->param(listclosed => ((defined $input->param('listclosed')) && ($input->param('listclosed') eq '1'))? 1:0 );
#prolly won't use all these, maybe just use print, the rest can be done inside validate
output_html_with_http_headers $input, $cookie, $template->output;

92
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt

@ -140,10 +140,25 @@ function submitForm(form) {
<div class="yui-b">
[% IF ( grouping ) %]
[% IF (closedbg) %]
<div id="toolbar" class="btn-toolbar">
<div class="btn-group"><a href="[% script_name %]?op=reopen&amp;basketgroupid=[% basketgroupid %]&amp;booksellerid=[% booksellerid %]&amp;mode=singlebg" class="btn btn-small" id="reopenbutton"><i class="icon-download"></i> Reopen this basket group</a></div>
<div class="btn-group"><a href="[% script_name %]?op=export&amp;basketgroupid=[% basketgroupid %]&amp;booksellerid=[% booksellerid %]" class="btn btn-small" id="exportbutton"><i class="icon-download"></i> Export this basket group as CSV</a></div>
<div class="btn-group"><a href="[% script_name %]?op=print&amp;basketgroupid=[% basketgroupid %]&amp;booksellerid=[% booksellerid %]" class="btn btn-small" id="printbutton"><i class="icon-download"></i> Print this basket group in PDF</a></div>
</div>
[% ELSE %]
<div class="btn-group"><a href="[% script_name %]?op=delete&amp;basketgroupid=[% basketgroupid %]&amp;booksellerid=[% booksellerid %]" class="btn btn-small" id="delbutton"><i class="icon-remove"></i> Delete basket group</a></div>
[% END %]
[% IF (name && closedgb) %]
<h1>Basket group [% name %] ([% basketgroupid %]) for <a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% booksellerid %]">[% booksellername |html %]</a></h1>
[% ELSIF (name) %]
<h1>Edit basket group [% name %] ([% basketgroupid %]) for <a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% booksellerid %]">[% booksellername |html %]</a></h1>
[% ELSE %]
<h1>Add basket group for <a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% booksellerid %]">[% booksellername |html %]</a></h1>
[% END %]
<div id="basketgroupcolumns" class="yui-g">
[% UNLESS (closedbg) %]
<div class="yui-u">
<form action="[% scriptname %]" method="post" name="basketgroups" id="basketgroups">
<div id="groups">
<fieldset class="brief">
@ -170,39 +185,82 @@ function submitForm(form) {
</fieldset>
</div>
</form>
</div>
[% END %]
<div class="yui-u first">
<form action="" method="post" id="groupingform" onsubmit="return submitForm(this)">
<fieldset id="various" class="brief">
<ol>
[% UNLESS (closedbg) %]
<li><label for="basketgroupname">Basket group name:</label>
<input type="text" name="basketgroupname" id="basketgroupname" value="[% name %]" class="focus" /></li>
<li><label for="billingplace">Billing place:</label>
[% ELSE %]
<input type="hidden" name="basketgroupname" id="basketgroupname" value="[% name %]" />
[% END %]
<li>
[% UNLESS (closedbg) %]
<label for="billingplace">Billing place:</label>
<select name="billingplace" id="billingplace" style="width:13em;">
<option value="">--</option>
[% FOREACH billingplaceloo IN billingplaceloop %]
[% IF ( billingplaceloo.selected ) %]<option value="[% billingplaceloo.value %]" selected="selected">[% billingplaceloo.branchname %]</option>
[% ELSE %]<option value="[% billingplaceloo.value %]">[% billingplaceloo.branchname %]</option>[% END%]
[% END %]
</select></li>
<li><label for="deliveryplace">Delivery place:</label>
</select>
[% ELSE %]
<span class="label">Billing place:</span>
[% FOREACH billingplaceloo IN billingplaceloop %]
[% IF ( billingplaceloo.selected ) %]
<input name="billingplace" id="billingplace" type ="hidden" value="[% billingplaceloo.value %]" />[% billingplaceloo.branchname %]
[% END %]
[% END %]
[% END %]
</li>
[% UNLESS (closedbg) %]
<li>
<label for="deliveryplace">Delivery place:</label>
<select name="deliveryplace" id="deliveryplace" style="width:13em;">
<option value="">--</option>
[% FOREACH deliveryplaceloo IN deliveryplaceloop %]
[% IF ( deliveryplaceloo.selected ) %]<option value="[% deliveryplaceloo.value %]" selected="selected">[% deliveryplaceloo.branchname %]</option>
[% ELSE %]<option value="[% deliveryplaceloo.value %]">[% deliveryplaceloo.branchname %]</option>[% END %]
[% END %]
</select></li>
<select>
</li>
<li><p>or</p></li>
<li><label for="freedeliveryplace">Delivery place:</label>
<textarea cols="26" rows="3" name="freedeliveryplace" id="freedeliveryplace">[% freedeliveryplace %]</textarea></li>
<li><label for="deliverycomment">Delivery comment:</label>
<textarea cols="26" rows="3" name="deliverycomment" id="deliverycomment">[% deliverycomment %]</textarea>
[% ELSE %]
<li>
<span class="label">Delivery place:</span>
[% IF (freedeliveryplace) %]
<input name="freedeliveryplace" id="freedeliveryplace" type ="hidden" value="[% freedeliveryplace %]" />[% freedeliveryplace %]
<input name="deliveryplace" id="deliveryplace" type ="hidden" value="" />
[% ELSE %]
[% FOREACH deliveryplaceloo IN deliveryplaceloop %]
[% IF ( deliveryplaceloo.selected ) %]
<input name="deliveryplace" id="deliveryplace" type ="hidden" value="[% deliveryplaceloo.value %]" />[% deliveryplaceloo.branchname %]
[% END %]
[% END %]
<input name="freedeliveryplace" id="freedeliveryplace" type ="hidden" value="" />
[% END %]
</li>
[% END %]
<li>
[% UNLESS (closedbg) %]
<label for="deliverycomment">Delivery comment:</label>
<textarea cols="26" rows="3" name="deliverycomment" id="deliverycomment">[% deliverycomment %]</textarea>
[% ELSE %]
<span class="label">Delivery comment:</span>[% deliverycomment %]
<input name="deliverycomment" id="deliverycomment" type="hidden" value = "[% deliverycomment %]" />
[% END %]
</li>
<li><span class="label">Baskets in this group:</span>
[% UNLESS (closedbg) %]
<ul class="draglist" id="bg">
[% ELSE %]
<ul>
[% END %]
[% FOREACH selectedbasket IN selectedbaskets %]
<li class="grouped" id="b-[% selectedbasket.basketno %]" >
<a href="basket.pl?basketno=[% selectedbasket.basketno %]">
@ -218,10 +276,14 @@ function submitForm(form) {
[% END %]
</ul>
</li>
<li><label><input type="checkbox" id="close" name="close" /> Close basket group</label></li>
[% UNLESS (closedbg) %]
<li><label><input type="checkbox" id="closedbg" name="closedbg" />Close basket group</label></li>
[% ELSE %]
<input type="hidden" id="closedbg" name="closedbg" value ="1"/>
[% END %]
</ol>
</fieldset>
[% UNLESS (closedbg) %]
<fieldset class="action"><input type="hidden" name="booksellerid" value="[% booksellerid %]" />
[% IF ( basketgroupid ) %]
<input type="hidden" name="basketgroupid" value="[% basketgroupid %]" />
@ -229,6 +291,7 @@ function submitForm(form) {
<input type="hidden" name="op" value="attachbasket" />
<input type="submit" value="Save" /> <a href="/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=[% booksellerid %]" class="cancel">Cancel</a>
</fieldset>
[% END %]
</form>
</div>
</div>
@ -241,9 +304,9 @@ function submitForm(form) {
<div id="basket_groups" class="toptabs">
<ul class="ui-tabs-nav">
[% UNLESS ( closed ) %]<li class="ui-tabs-selected"><a href="#opened">Open</a></li>
[% UNLESS ( listclosed) %]<li class="ui-tabs-selected"><a href="#opened">Open</a></li>
[% ELSE%]<li><a href="#opened">Open</a></li>[% END %]
[% IF ( closed ) %]<li class="ui-tabs-selected"><a href="#closed">Closed</a></li>
[% IF ( listclosed) %]<li class="ui-tabs-selected"><a href="#closed">Closed</a></li>
[% ELSE %]<li><a href="#closed">Closed</a></li>[% END %]
</ul>
<div id="opened">
@ -273,7 +336,7 @@ function submitForm(form) {
<td>[% IF (basketgroup.freedeliveryplace) %]Free delivery place[% ELSE %][% Branches.GetName( basketgroup.deliveryplace ) %][% END %]</td>
<td>[% basketgroup.basketsqty %]</td>
<td>
<input type="button" onclick="closeandprint([% basketgroup.id %])" value="Close and print" />
<input type="button" onclick="closeandprint('[% basketgroup.id %]');" value="Close and print" />
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="add" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Edit" /></form>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="delete" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Delete" /></form>
</td>
@ -311,6 +374,7 @@ function submitForm(form) {
<td>[% IF (basketgroup.freedeliveryplace) %]Free delivery place[% ELSE %][% Branches.GetName( basketgroup.deliveryplace ) %][% END %]</td>
<td>[% basketgroup.basketsqty %]</td>
<td>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="add" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="View" /></form>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="reopen" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Reopen" /></form>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="print" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Print" /></form>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="export" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Export as CSV" /></form>

Loading…
Cancel
Save