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:
		
							parent
							
								
									e4dcfd11d5
								
							
						
					
					
						commit
						1760f60759
					
				
					 2 changed files with 47 additions and 17 deletions
				
			
		| 
						 | 
					@ -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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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;
 | 
					    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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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.");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue