From 1c24a6c3d22fb00ea98d8fa00d04aed3f5e96c27 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Wed, 28 Mar 2012 17:01:07 +0200 Subject: [PATCH] Bug 7178: Follow-up Improve order item creation Move SQL code from Perl script to Perl module Replace SHOW COLUMNS by $dbh->column_info() --- C4/Items.pm | 38 ++++++++++++++++++++++++++++++++++++++ acqui/check_uniqueness.pl | 27 ++++++--------------------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index facd91f..e9fdcd7 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -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 diff --git a/acqui/check_uniqueness.pl b/acqui/check_uniqueness.pl index 95b1992..6260048 100755 --- a/acqui/check_uniqueness.pl +++ b/acqui/check_uniqueness.pl @@ -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'; -- 1.7.9.1