blob: 9339dcc2d5aa458d3af3c0367a82ade56719e9ee (
plain)
- package LedgerSMB::RESTXML::Document::Part_Search;
- use strict;
- use warnings;
- use base qw(LedgerSMB::RESTXML::Document::Base);
- use LedgerSMB::Log;
- sub handle_get {
- my ( $self, $args ) = @_;
- my $user = $args->{user};
- my $dbh = $args->{dbh};
- my $handler = $args->{handler};
- my $query = $handler->read_query();
- my %terms;
- for my $field ( $query->param() ) {
- # TODO: BIG GAPING HOLE HERE.
- $terms{$field} = $query->param($field);
- }
- if ( $terms{_keyword} ) {
- %terms = (
- description => $terms{_keyword},
- partnumber => $terms{_keyword},
- );
- }
- my $sql =
- 'SELECT id,description,partnumber FROM parts WHERE '
- . join( ' OR ', map { "$_ like ?" } sort keys %terms );
- my $res = $dbh->prepare($sql);
- $res->execute( map { "$terms{$_}\%" } sort keys %terms )
- or return $handler->error( $dbh->errstr );
- my @rows;
- my $row;
- push @rows, $row while $row = $res->fetchrow_hashref();
- $res->finish();
- $handler->respond(
- XML::Twig::Elt->new(
- 'Part_Search_Response',
- { 'xmlns:xlink' => "http://www.w3.org/1999/xlink" },
- map {
- $self->hash_to_twig(
- {
- name => 'Part',
- root_attr => { 'xlink:href' => "Part/$_->{id}" },
- hash => $_
- }
- );
- } @rows
- )
- );
- }
- 1;
|