Implement {set,get}PreferredPostalAddress

This commit is contained in:
Bradley M. Kuhn 2016-03-11 12:29:20 -08:00
parent fd6b55e7be
commit ae7b876647
2 changed files with 109 additions and 1 deletions

View file

@ -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) = @_;

View file

@ -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)) {