Implement {set,get}PreferredPostalAddress
This commit is contained in:
		
							parent
							
								
									fd6b55e7be
								
							
						
					
					
						commit
						ae7b876647
					
				
					 2 changed files with 109 additions and 1 deletions
				
			
		|  | @ -372,6 +372,68 @@ sub setPreferredEmailAddress($$$) { | ||||||
|   $self->_commit; |   $self->_commit; | ||||||
|   return $emailAddressId; |   return $emailAddressId; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | ###################################################################### | ||||||
|  | 
 | ||||||
|  | =begin setPreferredPostalAddress | ||||||
|  | 
 | ||||||
|  | Arguments: | ||||||
|  | 
 | ||||||
|  | =over | ||||||
|  | 
 | ||||||
|  | =item $donorId | ||||||
|  | 
 | ||||||
|  |    Valid supporter id number currently in the database.  die() will occur if | ||||||
|  |    the id number is not in the database already as a supporter id. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | =item $postalAddress | ||||||
|  | 
 | ||||||
|  |    Scalar string that contains an postal Address.  undef is returned if the | ||||||
|  |    email address is not already in the database for this supporter. | ||||||
|  | 
 | ||||||
|  | =back | ||||||
|  | 
 | ||||||
|  | Returns the email_address_id of the preferred email address.  undef can be | ||||||
|  | returned; it means the preferred email address wasn't selected for some reason. | ||||||
|  | 
 | ||||||
|  | =cut | ||||||
|  | 
 | ||||||
|  | sub setPreferredPostalAddress($$$) { | ||||||
|  |   my($self, $donorId, $postalAddress) = @_; | ||||||
|  | 
 | ||||||
|  |   die "setPreferredPostalAddress: invalid supporter id, $donorId" unless $self->_verifyId($donorId); | ||||||
|  |   die "setPreferredPostalAddress: email address not defined" unless defined $postalAddress; | ||||||
|  | 
 | ||||||
|  |   my $ems = $self->dbh()->selectall_hashref("SELECT ea.formatted_address, ea.id, sem.preferred " . | ||||||
|  |                                             "FROM postal_address ea, donor_postal_address_mapping sem " . | ||||||
|  |                                             "WHERE ea.id = sem.postal_address_id AND ". | ||||||
|  |                                             "sem.donor_id = " . $self->dbh->quote($donorId, 'SQL_INTEGER'), | ||||||
|  |                                             'formatted_address'); | ||||||
|  |   # Shortcut: it was already set | ||||||
|  |   return $ems->{$postalAddress}{id} if (defined $ems->{$postalAddress} and $ems->{$postalAddress}{preferred}); | ||||||
|  | 
 | ||||||
|  |   my $anotherPreferred = 0; | ||||||
|  |   my $postalAddressId; | ||||||
|  |   # Iterate over email addresses, finding if any were preferred before, and finding outs too. | ||||||
|  |   foreach my $em (keys %{$ems}) { | ||||||
|  |     $anotherPreferred = 1 if $ems->{$em}{preferred}; | ||||||
|  |     $postalAddressId = $ems->{$em}{id} if $em eq $postalAddress; | ||||||
|  |   } | ||||||
|  |   return undef if not defined $postalAddressId; | ||||||
|  | 
 | ||||||
|  |   $self->_beginWork(); | ||||||
|  |   if ($anotherPreferred) { | ||||||
|  |     $self->dbh->do("UPDATE donor_postal_address_mapping " . | ||||||
|  |                      "SET preferred = " . $self->dbh->quote(0, 'SQL_BOOLEAN') . " " . | ||||||
|  |                      "WHERE donor_id = " . $self->dbh->quote($donorId, 'SQL_INTEGER')); | ||||||
|  |   } | ||||||
|  |   $self->dbh->do("UPDATE donor_postal_address_mapping " . | ||||||
|  |                  "SET preferred = " . $self->dbh->quote(1, 'SQL_BOOLEAN') . " " . | ||||||
|  |                  "WHERE postal_address_id = " . $self->dbh->quote($postalAddressId, 'SQL_INTEGER')); | ||||||
|  |   $self->_commit; | ||||||
|  |   return $postalAddressId; | ||||||
|  | } | ||||||
| ###################################################################### | ###################################################################### | ||||||
| 
 | 
 | ||||||
| =begin getPreferredEmailAddress | =begin getPreferredEmailAddress | ||||||
|  | @ -419,6 +481,52 @@ sub getPreferredEmailAddress($$) { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| ###################################################################### | ###################################################################### | ||||||
|  | 
 | ||||||
|  | =begin getPreferredPostalAddress | ||||||
|  | 
 | ||||||
|  | Arguments: | ||||||
|  | 
 | ||||||
|  | =over | ||||||
|  | 
 | ||||||
|  | =item $donorId | ||||||
|  | 
 | ||||||
|  |    Valid supporter id number currently in the database.  die() will occur if | ||||||
|  |    the id number is not in the database already as a supporter id. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | =item $postalAddress | ||||||
|  | 
 | ||||||
|  |    Scalar string that contains an postalAddress.  undef is returned if the | ||||||
|  |    postal address is not already in the database for this supporter. | ||||||
|  | 
 | ||||||
|  | =back | ||||||
|  | 
 | ||||||
|  | Returns the postal_address_id of the preferred postal address.  undef can be | ||||||
|  | returned; it means the preferred postal address wasn't selected for some reason. | ||||||
|  | 
 | ||||||
|  | =cut | ||||||
|  | 
 | ||||||
|  | sub getPreferredPostalAddress($$) { | ||||||
|  |   my($self, $donorId) = @_; | ||||||
|  | 
 | ||||||
|  |   die "setPreferredPostalAddress: invalid supporter id, $donorId" unless $self->_verifyId($donorId); | ||||||
|  | 
 | ||||||
|  |   my $ems = $self->dbh()->selectall_hashref("SELECT formatted_address FROM postal_address em, donor_postal_address_mapping sem " . | ||||||
|  |                                             "WHERE preferred AND sem.postal_address_id = em.id AND " . | ||||||
|  |                                             "sem.donor_id = " . $self->dbh->quote($donorId, 'SQL_INTEGER'), | ||||||
|  |                                             'formatted_address'); | ||||||
|  |   my $rowCount = scalar keys %{$ems}; | ||||||
|  |   die "setPreferredPostalAddress: DATABASE INTEGRITY ERROR: more than one postal address is preferred for supporter, \"$donorId\"" | ||||||
|  |     if $rowCount > 1; | ||||||
|  | 
 | ||||||
|  |   if ($rowCount != 1) { | ||||||
|  |     return undef; | ||||||
|  |   } else { | ||||||
|  |     my ($postalAddress) = keys %$ems; | ||||||
|  |     return $postalAddress; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | ###################################################################### | ||||||
| sub _getDonorField($$$) { | sub _getDonorField($$$) { | ||||||
|   my($self, $field, $donorId) = @_; |   my($self, $field, $donorId) = @_; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ my @requestTypes = $sp->getRequestType(); | ||||||
| foreach my $id (@supporterIds) { | foreach my $id (@supporterIds) { | ||||||
|   $found = 1; |   $found = 1; | ||||||
|   my $preferredEmail = $sp->getPreferredEmailAddress($id); |   my $preferredEmail = $sp->getPreferredEmailAddress($id); | ||||||
|   my $preferredPostal = undef; # $sp->getPreferredPostalAddress($id); |   my $preferredPostal = $sp->getPreferredPostalAddress($id); | ||||||
|   print "Found:  $id, ", $sp->getLedgerEntityId($id), "\n"; |   print "Found:  $id, ", $sp->getLedgerEntityId($id), "\n"; | ||||||
|   print "     Public Ack: "; |   print "     Public Ack: "; | ||||||
|   if (not defined $sp->getPublicAck($id)) { |   if (not defined $sp->getPublicAck($id)) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bradley M. Kuhn
						Bradley M. Kuhn