|
Lines 243-248
sub findrelatedto ($$) {
Link Here
|
| 243 |
sub SendAlerts { |
243 |
sub SendAlerts { |
| 244 |
my ( $type, $externalid, $letter ) = @_; |
244 |
my ( $type, $externalid, $letter ) = @_; |
| 245 |
my $dbh = C4::Context->dbh; |
245 |
my $dbh = C4::Context->dbh; |
|
|
246 |
my $strsth; |
| 246 |
if ( $type eq 'issue' ) { |
247 |
if ( $type eq 'issue' ) { |
| 247 |
|
248 |
|
| 248 |
# warn "sending issues..."; |
249 |
# warn "sending issues..."; |
|
Lines 290-388
sub SendAlerts {
Link Here
|
| 290 |
); |
291 |
); |
| 291 |
sendmail(%mail) or carp $Mail::Sendmail::error; |
292 |
sendmail(%mail) or carp $Mail::Sendmail::error; |
| 292 |
|
293 |
|
| 293 |
# warn "sending to $mail{To} From $mail{From} subj $mail{Subject} Mess $mail{Message}"; |
|
|
| 294 |
} |
294 |
} |
| 295 |
} |
295 |
} |
| 296 |
} |
296 |
} |
| 297 |
elsif ( $type eq 'claimacquisition' ) { |
297 |
elsif ( $type eq 'claimacquisition' ) { |
| 298 |
|
298 |
|
| 299 |
# warn "sending issues..."; |
299 |
$letter = getletter( 'claimacquisition', $letter ); |
| 300 |
my $letter = getletter( 'claimacquisition', $letter ); |
|
|
| 301 |
|
300 |
|
| 302 |
# prepare the letter... |
301 |
# prepare the letter... |
| 303 |
# search the biblionumber |
302 |
# search the biblionumber |
| 304 |
my $strsth = |
303 |
$strsth = qq{ |
| 305 |
"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.biblioitemnumber=biblioitems.biblioitemnumber where aqorders.ordernumber IN (" |
304 |
SELECT aqorders.*,aqbasket.*,biblio.*,biblioitems.*,aqbooksellers.* |
| 306 |
. join( ",", @$externalid ) . ")"; |
305 |
FROM aqorders |
| 307 |
my $sthorders = $dbh->prepare($strsth); |
306 |
LEFT JOIN aqbasket ON aqbasket.basketno=aqorders.basketno |
| 308 |
$sthorders->execute; |
307 |
LEFT JOIN biblio ON aqorders.biblionumber=biblio.biblionumber |
| 309 |
my $dataorders = $sthorders->fetchall_arrayref( {} ); |
308 |
LEFT JOIN biblioitems ON aqorders.biblioitemnumber=biblioitems.biblioitemnumber |
| 310 |
parseletter( $letter, 'aqbooksellers', |
309 |
LEFT JOIN aqbooksellers ON aqbasket.booksellerid=aqbooksellers.id |
| 311 |
$dataorders->[0]->{booksellerid} ); |
310 |
WHERE aqorders.ordernumber IN ( |
| 312 |
my $sthbookseller = |
|
|
| 313 |
$dbh->prepare("select * from aqbooksellers where id=?"); |
| 314 |
$sthbookseller->execute( $dataorders->[0]->{booksellerid} ); |
| 315 |
my $databookseller = $sthbookseller->fetchrow_hashref; |
| 316 |
|
| 317 |
# parsing branch info |
| 318 |
my $userenv = C4::Context->userenv; |
| 319 |
parseletter( $letter, 'branches', $userenv->{branch} ); |
| 320 |
|
| 321 |
# parsing librarian name |
| 322 |
$letter->{content} =~ s/<<LibrarianFirstname>>/$userenv->{firstname}/g; |
| 323 |
$letter->{content} =~ s/<<LibrarianSurname>>/$userenv->{surname}/g; |
| 324 |
$letter->{content} =~ |
| 325 |
s/<<LibrarianEmailaddress>>/$userenv->{emailaddress}/g; |
| 326 |
foreach my $data ( @{$dataorders} ) { |
| 327 |
if ( $letter->{content} =~ m/(<<.*>>)/ ) { |
| 328 |
my $line = $1; |
| 329 |
foreach my $field ( keys %{$data} ) { |
| 330 |
$line =~ s/(<<[^\.]+.$field>>)/$data->{$field}/; |
| 331 |
} |
| 332 |
$letter->{content} =~ s/(<<.*>>)/$line\n$1/; |
| 333 |
} |
| 334 |
} |
| 335 |
$letter->{content} =~ s/<<[^>]*>>//g; |
| 336 |
my $innerletter = $letter; |
| 337 |
|
| 338 |
# ... then send mail |
| 339 |
if ( $databookseller->{bookselleremail} |
| 340 |
|| $databookseller->{contemail} ) |
| 341 |
{ |
| 342 |
my %mail = ( |
| 343 |
To => $databookseller->{bookselleremail} |
| 344 |
. ( |
| 345 |
$databookseller->{contemail} |
| 346 |
? "," . $databookseller->{contemail} |
| 347 |
: "" |
| 348 |
), |
| 349 |
From => $userenv->{emailaddress}, |
| 350 |
Subject => "" . $innerletter->{title}, |
| 351 |
Message => "" . $innerletter->{content}, |
| 352 |
'Content-Type' => 'text/plain; charset="utf8"', |
| 353 |
); |
| 354 |
sendmail(%mail) or carp $Mail::Sendmail::error; |
| 355 |
} |
| 356 |
if ( C4::Context->preference("LetterLog") ) { |
| 357 |
logaction( |
| 358 |
"ACQUISITION", |
| 359 |
"Send Acquisition claim letter", |
| 360 |
"", |
| 361 |
"order list : " |
| 362 |
. join( ",", @$externalid ) |
| 363 |
. "\n$innerletter->{title}\n$innerletter->{content}" |
| 364 |
); |
| 365 |
} |
311 |
} |
|
|
312 |
. join( ",", @$externalid ) . ")"; |
| 366 |
} |
313 |
} |
| 367 |
elsif ( $type eq 'claimissues' ) { |
314 |
elsif ( $type eq 'claimissues' ) { |
| 368 |
|
315 |
|
| 369 |
# warn "sending issues..."; |
316 |
$letter = getletter( 'claimissues', $letter ); |
| 370 |
my $letter = getletter( 'claimissues', $letter ); |
|
|
| 371 |
|
317 |
|
| 372 |
# prepare the letter... |
318 |
# prepare the letter... |
| 373 |
# search the biblionumber |
319 |
# search the biblionumber |
| 374 |
my $strsth = |
320 |
$strsth = qq{ |
| 375 |
"select serial.*,subscription.*, biblio.* from serial LEFT JOIN subscription on serial.subscriptionid=subscription.subscriptionid LEFT JOIN biblio on serial.biblionumber=biblio.biblionumber where serial.serialid IN (" |
321 |
SELECT serial.*,subscription.*, biblio.*, aqbooksellers.* |
|
|
322 |
FROM serial |
| 323 |
LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid |
| 324 |
LEFT JOIN biblio ON serial.biblionumber=biblio.biblionumber |
| 325 |
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid=aqbooksellers.id |
| 326 |
WHERE serial.serialid IN ( |
| 327 |
} |
| 376 |
. join( ",", @$externalid ) . ")"; |
328 |
. join( ",", @$externalid ) . ")"; |
|
|
329 |
} |
| 330 |
|
| 331 |
if ( $type eq 'claimacquisition' or $type eq 'claimissues' ) { |
| 377 |
my $sthorders = $dbh->prepare($strsth); |
332 |
my $sthorders = $dbh->prepare($strsth); |
| 378 |
$sthorders->execute; |
333 |
$sthorders->execute; |
| 379 |
my $dataorders = $sthorders->fetchall_arrayref( {} ); |
334 |
my @fields = map { |
| 380 |
parseletter( $letter, 'aqbooksellers', |
335 |
$sthorders->{mysql_table}[$_] . "." . $sthorders->{NAME}[$_] } |
| 381 |
$dataorders->[0]->{aqbooksellerid} ); |
336 |
(0 .. $#{$sthorders->{NAME}} ) ; |
| 382 |
my $sthbookseller = |
337 |
|
| 383 |
$dbh->prepare("select * from aqbooksellers where id=?"); |
338 |
my @orders_infos; |
| 384 |
$sthbookseller->execute( $dataorders->[0]->{aqbooksellerid} ); |
339 |
while ( my $row = $sthorders->fetchrow_arrayref() ) { |
| 385 |
my $databookseller = $sthbookseller->fetchrow_hashref; |
340 |
my %rec = (); |
|
|
341 |
@rec{@fields} = @$row; |
| 342 |
push @orders_infos, \%rec; |
| 343 |
} |
| 386 |
|
344 |
|
| 387 |
# parsing branch info |
345 |
# parsing branch info |
| 388 |
my $userenv = C4::Context->userenv; |
346 |
my $userenv = C4::Context->userenv; |
|
Lines 391-449
sub SendAlerts {
Link Here
|
| 391 |
# parsing librarian name |
349 |
# parsing librarian name |
| 392 |
$letter->{content} =~ s/<<LibrarianFirstname>>/$userenv->{firstname}/g; |
350 |
$letter->{content} =~ s/<<LibrarianFirstname>>/$userenv->{firstname}/g; |
| 393 |
$letter->{content} =~ s/<<LibrarianSurname>>/$userenv->{surname}/g; |
351 |
$letter->{content} =~ s/<<LibrarianSurname>>/$userenv->{surname}/g; |
| 394 |
$letter->{content} =~ |
352 |
$letter->{content} =~ s/<<LibrarianEmailaddress>>/$userenv->{emailaddress}/g; |
| 395 |
s/<<LibrarianEmailaddress>>/$userenv->{emailaddress}/g; |
353 |
|
| 396 |
foreach my $data ( @{$dataorders} ) { |
354 |
# Get Fields remplacement |
| 397 |
if ( $letter->{content} =~ m/(<<.*>>)/ ) { |
355 |
my $item_format = $1 if ( $letter->{content} =~ m/(<item>.*<\/item>)/xms ); |
| 398 |
my $line = $1; |
356 |
|
| 399 |
foreach my $field ( keys %{$data} ) { |
357 |
# Foreach field to remplace |
| 400 |
$line =~ s/(<<[^\.]+.$field>>)/$data->{$field}/; |
358 |
while ( $letter->{content} =~ m/<<([^>]*)>>/g ) { |
|
|
359 |
my $field = $1; |
| 360 |
my $value = $orders_infos[0]->{$field} || ""; |
| 361 |
$value = sprintf("%.2f", $value) if $field =~ /price/; |
| 362 |
$letter->{content} =~ s/<<$field>>/$value/g; |
| 363 |
} |
| 364 |
|
| 365 |
if ( $item_format ) { |
| 366 |
# For each order |
| 367 |
foreach my $infos ( @orders_infos ) { |
| 368 |
my $order_content = $item_format; |
| 369 |
# We replace by value |
| 370 |
while ( $order_content =~ m/<<([^>]*)>>/g ) { |
| 371 |
my $field = $1; |
| 372 |
my $value = $infos->{$field} || ""; |
| 373 |
$value = sprintf("%.2f", $value) if $field =~ /price/; |
| 374 |
$order_content =~ s/(<<$field>>)/$value/g; |
| 401 |
} |
375 |
} |
| 402 |
$letter->{content} =~ s/(<<.*>>)/$line\n$1/; |
376 |
$order_content =~ s/<\/{0,1}?item>//g; |
|
|
377 |
$letter->{content} =~ s/<item>.*<\/item>/$order_content\n$item_format/xms; |
| 403 |
} |
378 |
} |
|
|
379 |
$letter->{content} =~ s/<item>.*<\/item>//xms; |
| 404 |
} |
380 |
} |
| 405 |
$letter->{content} =~ s/<<[^>]*>>//g; |
381 |
|
| 406 |
my $innerletter = $letter; |
382 |
my $innerletter = $letter; |
| 407 |
|
383 |
|
| 408 |
# ... then send mail |
384 |
# ... then send mail |
| 409 |
if ( $databookseller->{bookselleremail} |
385 |
if ( $orders_infos[0]->{'aqbooksellers.bookselleremail'} |
| 410 |
|| $databookseller->{contemail} ) { |
386 |
|| $orders_infos[0]->{'aqbooksellers.contemail'} ) { |
| 411 |
my $mail_to = $databookseller->{bookselleremail}; |
387 |
my $to = $orders_infos[0]->{'aqbooksellers.bookselleremail'}; |
| 412 |
if ($databookseller->{contemail}) { |
388 |
$to .= ", " if $to; |
| 413 |
if (!$mail_to) { |
389 |
$to .= $orders_infos[0]->{'aqbooksellers.contemail'} || ""; |
| 414 |
$mail_to = $databookseller->{contemail}; |
|
|
| 415 |
} else { |
| 416 |
$mail_to .= q|,|; |
| 417 |
$mail_to .= $databookseller->{contemail}; |
| 418 |
} |
| 419 |
} |
| 420 |
my $mail_subj = $innerletter->{title}; |
| 421 |
my $mail_msg = $innerletter->{content}; |
| 422 |
$mail_msg ||= q{}; |
| 423 |
$mail_subj ||= q{}; |
| 424 |
|
| 425 |
my %mail = ( |
390 |
my %mail = ( |
| 426 |
To => $mail_to, |
391 |
To => $to, |
| 427 |
From => $userenv->{emailaddress}, |
392 |
From => $userenv->{emailaddress}, |
| 428 |
Subject => $mail_subj, |
393 |
Subject => "" . $innerletter->{title}, |
| 429 |
Message => $mail_msg, |
394 |
Message => "" . $innerletter->{content}, |
| 430 |
'Content-Type' => 'text/plain; charset="utf8"', |
395 |
'Content-Type' => 'text/plain; charset="utf8"', |
| 431 |
); |
396 |
); |
| 432 |
sendmail(%mail) or carp $Mail::Sendmail::error; |
397 |
sendmail(%mail) or carp $Mail::Sendmail::error; |
| 433 |
logaction( |
398 |
warn "sending to $mail{To} From $mail{From} subj $mail{Subject} Mess $mail{Message}"; |
| 434 |
"ACQUISITION", |
399 |
if ( C4::Context->preference("LetterLog") ) { |
| 435 |
"CLAIM ISSUE", |
400 |
logaction( "ACQUISITION", "Send Acquisition claim letter", "", "order list : " . join( ",", @$externalid ) . "\n$innerletter->{title}\n$innerletter->{content}" ) if $type eq 'claimacquisition'; |
| 436 |
undef, |
401 |
logaction( "ACQUISITION", "CLAIM ISSUE", undef, "To=" . $mail{To} . " Title=" . $innerletter->{title} . " Content=" . $innerletter->{content} ) if $type eq 'claimissues'; |
| 437 |
"To=" |
402 |
} |
| 438 |
. $databookseller->{contemail} |
403 |
} else { |
| 439 |
. " Title=" |
404 |
die "This bookseller have no email\n"; |
| 440 |
. $innerletter->{title} |
|
|
| 441 |
. " Content=" |
| 442 |
. $innerletter->{content} |
| 443 |
) if C4::Context->preference("LetterLog"); |
| 444 |
} |
405 |
} |
| 445 |
} |
406 |
|
| 446 |
# send an "account details" notice to a newly created user |
407 |
warn "sending to From $userenv->{emailaddress} subj $innerletter->{title} Mess $innerletter->{content}"; |
|
|
408 |
} |
| 409 |
|
| 410 |
# send an "account details" notice to a newly created user |
| 447 |
elsif ( $type eq 'members' ) { |
411 |
elsif ( $type eq 'members' ) { |
| 448 |
# must parse the password special, before it's hashed. |
412 |
# must parse the password special, before it's hashed. |
| 449 |
$letter->{content} =~ s/<<borrowers.password>>/$externalid->{'password'}/g; |
413 |
$letter->{content} =~ s/<<borrowers.password>>/$externalid->{'password'}/g; |