use Date::Calc qw( Add_Delta_Days );
use Encode;
use Carp;
+use Koha::Email;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
=head2 findrelatedto($type, $externalid)
- parameters :
- - $type : the type of alert
- - $externalid : the id of the "object" to query
-
- In the table alert, a "id" is stored in the externalid field. This "id" is related to another table, depending on the type of the alert.
- When type=issue, the id is related to a subscriptionid and this sub returns the name of the biblio.
+ parameters :
+ - $type : the type of alert
+ - $externalid : the id of the "object" to query
+
+ In the table alert, a "id" is stored in the externalid field. This "id" is related to another table, depending on the type of the alert.
+ When type=issue, the id is related to a subscriptionid and this sub returns the name of the biblio.
=cut
# find the list of borrowers to alert
my $alerts = getalert( '', 'issue', $externalid );
foreach (@$alerts) {
-
my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'});
my $email = $borinfo->{email} or next;
- # warn "sending issues...";
+# warn "sending issues...";
my $userenv = C4::Context->userenv;
my $branchdetails = GetBranchDetail($_->{'branchcode'});
my $letter = GetPreparedLetter (
) or return;
# ... then send mail
- my %mail = (
- To => $email,
- From => $branchdetails->{'branchemail'} || C4::Context->preference("KohaAdminEmailAddress"),
- Subject => Encode::encode( "utf8", "" . $letter->{title} ),
- Message => Encode::encode( "utf8", "" . $letter->{content} ),
- 'Content-Type' => 'text/plain; charset="utf8"',
- );
+ my $message = Koha::Email->new();
+ my %mail = $message->create_message_headers(
+ {
+ to => $email,
+ from => $branchdetails->{'branchemail'},
+ replyto => $branchdetails->{'branchreplyto'},
+ sender => $branchdetails->{'branchreturnpath'},
+ subject => Encode::encode( "utf8", "" . $letter->{title} ),
+ message =>
+ Encode::encode( "utf8", "" . $letter->{content} ),
+ contenttype => 'text/plain; charset="utf8"',
+
+ }
+ );
sendmail(%mail) or carp $Mail::Sendmail::error;
}
}
# search the biblionumber
my $strsth = $type eq 'claimacquisition'
? qq{
- SELECT aqorders.*,aqbasket.*,biblio.*,biblioitems.*,aqbooksellers.*,
- aqbooksellers.id AS booksellerid
+ SELECT aqorders.*,aqbasket.*,biblio.*,biblioitems.*
FROM aqorders
LEFT JOIN aqbasket ON aqbasket.basketno=aqorders.basketno
LEFT JOIN biblio ON aqorders.biblionumber=biblio.biblionumber
LEFT JOIN biblioitems ON aqorders.biblionumber=biblioitems.biblionumber
- LEFT JOIN aqbooksellers ON aqbasket.booksellerid=aqbooksellers.id
WHERE aqorders.ordernumber IN (
}
: qq{
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid=aqbooksellers.id
WHERE serial.serialid IN (
};
+
+ if (!@$externalid){
+ carp "No Order seleted";
+ return { error => "no_order_seleted" };
+ }
+
$strsth .= join( ",", @$externalid ) . ")";
my $sthorders = $dbh->prepare($strsth);
$sthorders->execute;
$dbh->prepare("select * from aqbooksellers where id=?");
$sthbookseller->execute( $dataorders->[0]->{booksellerid} );
my $databookseller = $sthbookseller->fetchrow_hashref;
+ my $addressee = $type eq 'claimacquisition' ? 'acqprimary' : 'serialsprimary';
+ my $sthcontact =
+ $dbh->prepare("SELECT * FROM aqcontacts WHERE booksellerid=? AND $type=1 ORDER BY $addressee DESC");
+ $sthcontact->execute( $dataorders->[0]->{booksellerid} );
+ my $datacontact = $sthcontact->fetchrow_hashref;
my @email;
+ my @cc;
push @email, $databookseller->{bookselleremail} if $databookseller->{bookselleremail};
- push @email, $databookseller->{contemail} if $databookseller->{contemail};
+ push @email, $datacontact->{email} if ( $datacontact && $datacontact->{email} );
unless (@email) {
warn "Bookseller $dataorders->[0]->{booksellerid} without emails";
return { error => "no_email" };
}
+ my $addlcontact;
+ while ($addlcontact = $sthcontact->fetchrow_hashref) {
+ push @cc, $addlcontact->{email} if ( $addlcontact && $addlcontact->{email} );
+ }
my $userenv = C4::Context->userenv;
my $letter = GetPreparedLetter (
tables => {
'branches' => $userenv->{branch},
'aqbooksellers' => $databookseller,
+ 'aqcontacts' => $datacontact,
},
repeat => $dataorders,
want_librarian => 1,
# ... then send mail
my %mail = (
To => join( ',', @email),
+ Cc => join( ',', @cc),
From => $userenv->{emailaddress},
Subject => Encode::encode( "utf8", "" . $letter->{title} ),
Message => Encode::encode( "utf8", "" . $letter->{content} ),
'Content-Type' => 'text/plain; charset="utf8"',
);
- sendmail(%mail) or carp $Mail::Sendmail::error;
+
+ $mail{'Reply-to'} = C4::Context->preference('ReplytoDefault')
+ if C4::Context->preference('ReplytoDefault');
+ $mail{'Sender'} = C4::Context->preference('ReturnpathDefault')
+ if C4::Context->preference('ReturnpathDefault');
+
+ unless ( sendmail(%mail) ) {
+ carp $Mail::Sendmail::error;
+ return { error => $Mail::Sendmail::error };
+ }
logaction(
"ACQUISITION",
$type eq 'claimissues' ? "CLAIM ISSUE" : "ACQUISITION CLAIM",
undef,
"To="
- . $databookseller->{contemail}
+ . join( ',', @email )
. " Title="
. $letter->{title}
. " Content="
substitute => { 'borrowers.password' => $externalid->{'password'} },
want_librarian => 1,
) or return;
-
return { error => "no_email" } unless $externalid->{'emailaddr'};
- my %mail = (
- To => $externalid->{'emailaddr'},
- From => $branchdetails->{'branchemail'} || C4::Context->preference("KohaAdminEmailAddress"),
- Subject => Encode::encode( "utf8", $letter->{'title'} ),
- Message => Encode::encode( "utf8", $letter->{'content'} ),
- 'Content-Type' => 'text/plain; charset="utf8"',
+ my $email = Koha::Email->new();
+ my %mail = $email->create_message_headers(
+ {
+ to => $externalid->{'emailaddr'},
+ from => $branchdetails->{'branchemail'},
+ replyto => $branchdetails->{'branchreplyto'},
+ sender => $branchdetails->{'branchreturnpath'},
+ subject => Encode::encode( "utf8", "" . $letter->{'title'} ),
+ message => Encode::encode( "utf8", "" . $letter->{'content'} ),
+ contenttype => 'text/plain; charset="utf8"'
+ }
);
sendmail(%mail) or carp $Mail::Sendmail::error;
}
$values = $param;
}
else {
- my @pk;
my $sth = _parseletter_sth($table);
unless ($sth) {
warn "_parseletter_sth('$table') failed to return a valid sth. No substitution will be done for that table.";
($table eq 'aqbooksellers') ? "SELECT * FROM $table WHERE id = ?" :
($table eq 'aqorders' ) ? "SELECT * FROM $table WHERE ordernumber = ?" :
($table eq 'opac_news' ) ? "SELECT * FROM $table WHERE idnew = ?" :
- ($table eq 'borrower_modifications') ? "SELECT * FROM $table WHERE ( borrowernumber = 0 OR borrowernumber = ? ) AND ( verification_token = '' OR verification_token = ? ) AND ( verification_token != '' OR borrowernumber != 0 )" :
+ ($table eq 'borrower_modifications') ? "SELECT * FROM $table WHERE verification_token = ?" :
undef ;
unless ($query) {
warn "ERROR: No _parseletter_sth query for table '$table'";
$val = GetAuthorisedValueByCode ('ROADTYPE', $val, 0) if $table=~/^borrowers$/ && $field=~/^streettype$/;
my $replacedby = defined ($val) ? $val : '';
- if ( $replacedby and $replacedby =~ m|^\d{4}-\d{2}-\d{2}( \d{2}:\d{2}:\d{2})?$| ) {
+ if ( $replacedby
+ and not $replacedby =~ m|0000-00-00|
+ and not $replacedby =~ m|9999-12-31|
+ and $replacedby =~ m|^\d{4}-\d{2}-\d{2}( \d{2}:\d{2}:\d{2})?$| )
+ {
# If the value is XXXX-YY-ZZ[ AA:BB:CC] we assume it is a date
my $dateonly = defined $1 ? 0 : 1; #$1 refers to the capture group wrapped in parentheses. In this case, that's the hours, minutes, seconds.
eval {
my $content = encode('utf8', $message->{'content'});
my $content_type = $message->{'content_type'} || 'text/plain; charset="UTF-8"';
my $is_html = $content_type =~ m/html/io;
-
- my $branch_email = ( $member ) ? GetBranchDetail( $member->{'branchcode'} )->{'branchemail'} : undef;
-
- my %sendmail_params = (
- To => $to_address,
- From => $message->{'from_address'} || $branch_email || C4::Context->preference('KohaAdminEmailAddress'),
- Subject => $subject,
- charset => 'utf8',
- Message => $is_html ? _wrap_html($content, $subject) : $content,
- 'content-type' => $content_type,
+ my $branch_email = undef;
+ my $branch_replyto = undef;
+ my $branch_returnpath = undef;
+ if ($member){
+ my $branchdetail = GetBranchDetail( $member->{'branchcode'} );
+ $branch_email = $branchdetail->{'branchemail'};
+ $branch_replyto = $branchdetail->{'branchreplyto'};
+ $branch_returnpath = $branchdetail->{'branchreturnpath'};
+ }
+ my $email = Koha::Email->new();
+ my %sendmail_params = $email->create_message_headers(
+ {
+ to => $to_address,
+ from => $message->{'from_address'} || $branch_email,
+ replyto => $branch_replyto,
+ sender => $branch_returnpath,
+ subject => $subject,
+ message => $is_html ? _wrap_html( $content, $subject ) : $content,
+ contenttype => $content_type
+ }
);
+
$sendmail_params{'Auth'} = {user => $username, pass => $password, method => $method} if $username;
if ( my $bcc = C4::Context->preference('OverdueNoticeBcc') ) {
$sendmail_params{ Bcc } = $bcc;