getRequest: re-implement to take hash argument

Instead of a bunch of serial arguments, reimplement getRequest() to take
a hash of parameters.

In the process, add support for requestTypeId to be included.
This commit is contained in:
Bradley M. Kuhn 2015-12-30 03:58:48 -08:00
parent e4dcfd11d5
commit 1760f60759
2 changed files with 47 additions and 17 deletions

View file

@ -564,18 +564,30 @@ sub addRequestConfigurations($$$) {
Arguments: Arguments:
=item $parmas
A hash reference, the following keys are considered:
=over =over
=item $donorId =item donorId
Valid donor_id number currently in the database. die() will occur if Valid donor_id number currently in the database. die() will occur if
the id number is not in the database already as a supporter id. the id number is not in the database already as a supporter id.
=item $requestType =item requestTypeId
String for the requestType sought. Numeric id of a request_type entry. This must be a valid id in the
request_type table, otherwise the method L<die>()s.
=item $ignoreFulfilledRequests requestType is ignored if this parameter is set.
=item requestType
If requestTypeId is not given, requestType will be used. The type is
added to the request_type table if it is not present, so be careful.
=item ignoreFulfilledRequests
Optional boolean argument. If true, a request that is found will not be Optional boolean argument. If true, a request that is found will not be
returned if the request has already been fulfilled. In other words, it returned if the request has already been fulfilled. In other words, it
@ -583,6 +595,8 @@ Arguments:
=back =back
=back
Returns: Returns:
=over =over
@ -645,21 +659,37 @@ If the request has been fufilled, the following keys will also ahve values.
=cut =cut
sub getRequest($$;$) { sub getRequest($$;$) {
my($self, $donorId, $requestType, $ignoreFulfilledRequests) = @_; my($self, $params) = @_;
my($donorId, $requestType, $requestTypeId, $ignoreFulfilledRequests) =
($params->{donorId}, $params->{requestType}, $params->{requestTypeId}, $params->{ignoreFulfilledRequests});
die "getRequest: undefined donorId" unless defined $donorId; die "getRequest: undefined donorId" unless defined $donorId;
die "getRequest: donorId, \"$donorId\" not found in supporter database" die "getRequest: donorId, \"$donorId\" not found in supporter database"
unless $self->_verifyId($donorId); unless $self->_verifyId($donorId);
die "getRequest: undefined requestType" unless defined $requestType; my $requestTypeClause = "";
if (defined $requestTypeId) {
$requestType = $self->_lookupRequestTypeById($requestTypeId);
die "getRequest: invalid requestTypeId, \"$requestTypeId\"" unless defined $requestType;
$requestTypeClause = " AND rt.id = " . $self->dbh->quote($requestTypeId, 'SQL_INTEGER');
} elsif (defined $requestType) {
$requestTypeClause = " AND rt.type = " . $self->dbh->quote($requestType);
} else {
die "getRequest: undefined requestType" unless defined $requestType;
}
my $req = $self->dbh()->selectall_hashref("SELECT r.id, r.request_type_id, r.request_configuration_id, r.date_requested, r.notes, rt.type " . my $req = $self->dbh()->selectall_hashref("SELECT r.id, r.request_type_id, r.request_configuration_id, r.date_requested, r.notes, rt.type " .
"FROM request r, request_type rt WHERE r.request_type_id = rt.id AND " . "FROM request r, request_type rt WHERE r.request_type_id = rt.id AND " .
"r.donor_id = " . $self->dbh->quote($donorId, 'SQL_INTEGER') . "r.donor_id = " . $self->dbh->quote($donorId, 'SQL_INTEGER') .
" AND rt.type = " . $self->dbh->quote($requestType), $requestTypeClause,
'type'); 'type');
if (defined $requestTypeId) {
die "getRequest: given requestTypeId, \"$requestTypeId\" was not the one found in the database $req->{$requestType}{'request_type_id'}"
unless $req->{$requestType}{'request_type_id'} == $requestTypeId;
} else {
$requestTypeId = $req->{$requestType}{'request_type_id'};
}
return undef unless (defined $req and defined $req->{$requestType} and defined $req->{$requestType}{'id'}); return undef unless (defined $req and defined $req->{$requestType} and defined $req->{$requestType}{'id'});
my $requestTypeId = $req->{$requestType}{'request_type_id'};
my $requestId = $req->{$requestType}{'id'}; my $requestId = $req->{$requestType}{'id'};
my $rsp = { requestType => $requestType, my $rsp = { requestType => $requestType,
@ -822,7 +852,7 @@ sub fulfillRequest($$) {
die "fulfillRequest: undefined who" unless defined $params->{who}; die "fulfillRequest: undefined who" unless defined $params->{who};
die "fulfillRequest: undefined requestType" unless defined $params->{requestType}; die "fulfillRequest: undefined requestType" unless defined $params->{requestType};
my $req = $self->getRequest($donorId, $params->{requestType}); my $req = $self->getRequest($params);
return undef if not defined $req; return undef if not defined $req;
my $requestId = $req->{requestId}; my $requestId = $req->{requestId};
return undef if not defined $requestId; return undef if not defined $requestId;

View file

@ -364,20 +364,20 @@ is($lookedUpFulfillmentId, $fulfillRequestId,
=cut =cut
dies_ok { $sp->getRequest(undef, undef); } "getRequest: dies if donorId not specified."; dies_ok { $sp->getRequest({} ); } "getRequest: dies if donorId not specified.";
dies_ok { $sp->getRequest(0, "t-shirt-small-only"); } "getRequest: dies if donorId invalid."; dies_ok { $sp->getRequest({ donorId => 0, requestType => "t-shirt-small-only" }); } "getRequest: dies if donorId invalid.";
dies_ok { $sp->getRequest($drapperId, undef); } dies_ok { $sp->getRequest({ donorId => $drapperId, requestType => undef}); }
"getRequest: dies if requestType not specified."; "getRequest: dies if requestType not specified.";
my $tt; my $tt;
lives_ok { $tt = $sp->getRequest($drapperId, 'this-one-is-not-there'); } lives_ok { $tt = $sp->getRequest({ donorId => $drapperId, requestType => 'this-one-is-not-there' }); }
"getRequest: returns normally with non-existent request."; "getRequest: returns normally with non-existent request.";
is($tt, undef, "getRequest: returns undef for valid supporter and on-existent request."); is($tt, undef, "getRequest: returns undef for valid supporter and on-existent request.");
lives_ok { $tt = $sp->getRequest($drapperId, 't-shirt-small-only'); } lives_ok { $tt = $sp->getRequest({donorId => $drapperId, requestType => 't-shirt-small-only' }); }
"getRequest: succeeds with valid parameters."; "getRequest: succeeds with valid parameters.";
is($tt->{requestType}, 't-shirt-small-only', "getRequest: requestType is correct."); is($tt->{requestType}, 't-shirt-small-only', "getRequest: requestType is correct.");
@ -387,7 +387,7 @@ is($tt->{requestConfiguration}, 'Small', "getRequest: configuration is correct."
is($tt->{notes}, 'he probably needs a larger size but this shirt has none', is($tt->{notes}, 'he probably needs a larger size but this shirt has none',
"getRequest: notes are correct."); "getRequest: notes are correct.");
lives_ok { $tt = $sp->getRequest($drapperId, 't-shirt-0'); } lives_ok { $tt = $sp->getRequest({donorId => $drapperId, requestType => 't-shirt-0' } ); }
"getRequest: succeeds with valid parameters."; "getRequest: succeeds with valid parameters.";
is($tt->{requestType}, 't-shirt-0', "getRequest: requestType is correct."); is($tt->{requestType}, 't-shirt-0', "getRequest: requestType is correct.");
@ -395,7 +395,7 @@ is($tt->{requestDate}, $today, "getRequest: request date is today.");
is($tt->{requestConfiguration}, 'MenL', "getRequest: configuration is correct."); is($tt->{requestConfiguration}, 'MenL', "getRequest: configuration is correct.");
is($tt->{notes}, undef, "getRequest: notes are undef when null in database."); is($tt->{notes}, undef, "getRequest: notes are undef when null in database.");
lives_ok { $tt = $sp->getRequest($drapperId, "join-announce-email-list"); } lives_ok { $tt = $sp->getRequest({ donorId => $drapperId, requestType => "join-announce-email-list" }); }
"getRequest: succeeds with valid parameters."; "getRequest: succeeds with valid parameters.";
is($tt->{requestType}, "join-announce-email-list", "getRequest: requestType is correct."); is($tt->{requestType}, "join-announce-email-list", "getRequest: requestType is correct.");