Bug 7178: Follow-up Improve order item creation

Move SQL code from Perl script to Perl module
Replace SHOW COLUMNS by $dbh->column_info()
Update total on neworderempty.pl when adding or deleting items

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Tested ok for ordering and receiving items.
Total updated correctly.

Note: There are lots of errors in the logs before and after applying
the patch. A follow up is needed.
This commit is contained in:
Julian Maurice 2012-03-28 17:01:07 +02:00 committed by Paul Poulain
parent 1d882495c2
commit 7a81b89357
4 changed files with 53 additions and 25 deletions

View file

@ -80,6 +80,7 @@ BEGIN {
GetAnalyticsCount
GetItemHolds
SearchItems
PrepareItemrecordDisplay
@ -2493,6 +2494,43 @@ sub GetItemHolds {
$holds = $sth->fetchrow;
return $holds;
}
# Return the list of the column names of items table
sub _get_items_columns {
my $dbh = C4::Context->dbh;
my $sth = $dbh->column_info(undef, undef, 'items', '%');
$sth->execute;
my $results = $sth->fetchall_hashref('COLUMN_NAME');
return keys %$results;
}
=head2 SearchItems
my $items = SearchItems($field, $value);
SearchItems will search for items on a specific given field.
For instance you can search all items with a specific stocknumber like this:
my $items = SearchItems('stocknumber', $stocknumber);
=cut
sub SearchItems {
my ($field, $value) = @_;
my $dbh = C4::Context->dbh;
my @columns = _get_items_columns;
my $results = [];
if(0 < grep /^$field$/, @columns) {
my $query = "SELECT $field FROM items WHERE $field = ?";
my $sth = $dbh->prepare( $query );
$sth->execute( $value );
$results = $sth->fetchall_arrayref({});
}
return $results;
}
=head1 OTHER FUNCTIONS
=head2 _find_value

View file

@ -33,36 +33,21 @@ use Modern::Perl;
use CGI;
use JSON;
use C4::Context;
use C4::Output;
use C4::Auth;
use C4::Items;
my $input = new CGI;
my @field = $input->param('field');
my @value = $input->param('value');
my $dbh = C4::Context->dbh;
my $query = "SHOW COLUMNS FROM items";
my $sth = $dbh->prepare($query);
$sth->execute;
my $results = $sth->fetchall_hashref('Field');
my @columns = keys %$results;
my $r = {};
my $index = 0;
for my $f ( @field ) {
if(0 < grep /^$f$/, @columns) {
$query = "SELECT $f FROM items WHERE $f = ?";
$sth = $dbh->prepare( $query );
$sth->execute( $value[$index] );
my @values = $sth->fetchrow_array;
my $i = 0;
for ( my $i=0; $i<@field; $i++ ) {
my $items = C4::Items::SearchItems($field[$i], $value[$i]);
if ( @values ) {
push @{ $r->{$f} }, $values[0];
if ( @$items ) {
push @{ $r->{$field[$i]} }, $value[$i];
}
}
$index++;
}
output_with_http_headers $input, undef, to_json($r), 'json';

View file

@ -13,7 +13,7 @@ function addItem( node, unique_item_fields ) {
cloneItemBlock(index, unique_item_fields);
addItemInList(index, unique_item_fields);
$("#" + index).find("a[name='buttonPlus']").text("Update");
$("#quantity").val(current_qty + 1);
$("#quantity").val(current_qty + 1).change();
} else if ( current_qty >= max_qty ) {
alert(window.MSG_ADDITEM_JS_CANT_RECEIVE_MORE_ITEMS
|| "You can't receive any more items.");
@ -87,7 +87,7 @@ function deleteItemBlock(node_a, index, unique_item_fields) {
} else {
max_qty = 99999;
}
$("#quantity").val(current_qty - 1);
$("#quantity").val(current_qty - 1).change();
$(node_a).parents('tr').remove();
if(current_qty - 1 == 0)
$("#items_list").hide();

View file

@ -104,6 +104,11 @@ $(document).ready(function()
[% IF (AcqCreateItemOrdering) %]
cloneItemBlock(0, '[% UniqueItemFields %]');
[% END %]
$("#quantity").change(function() {
calcNeworderTotal();
});
//We apply the fonction only for modify option
[% IF ( quantityrec ) %]
$('#quantity').blur(function()
@ -376,9 +381,9 @@ $(document).ready(function()
[% ELSE %]
<label class="required" for="quantity">Quantity: </label>
[% IF (AcqCreateItemOrdering) %]
<input type="text" readonly="readonly" size="20" id="quantity" name="quantity" value="0" onchange="updateCosts();" />
<input type="text" readonly="readonly" size="20" id="quantity" name="quantity" value="0" />
[% ELSE %]
<input type="text" size="20" id="quantity" name="quantity" value="[% quantityrec %]" onchange="calcNeworderTotal();" />
<input type="text" size="20" id="quantity" name="quantity" value="[% quantityrec %]" />
[% END %]
[% END %]
<!-- origquantityrec only here for javascript compatibility (additem.js needs it, useless here, usefull when receiveing an order -->