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…
Reference in a new issue