View | Details | Raw Unified | Return to bug 3203
Collapse All | Expand All

(-)a/C4/Circulation.pm (+1 lines)
Lines 2523-2528 sub SendCirculationAlert { Link Here
2523
    C4::Letters::parseletter($letter, 'biblioitems', $item->{biblionumber});
2523
    C4::Letters::parseletter($letter, 'biblioitems', $item->{biblionumber});
2524
    C4::Letters::parseletter($letter, 'borrowers',   $borrower->{borrowernumber});
2524
    C4::Letters::parseletter($letter, 'borrowers',   $borrower->{borrowernumber});
2525
    C4::Letters::parseletter($letter, 'branches',    $branch);
2525
    C4::Letters::parseletter($letter, 'branches',    $branch);
2526
    C4::Letters::parseletter($letter, 'items', $item->{itemnumber}, $type);
2526
    my @transports = @{ $borrower_preferences->{transports} };
2527
    my @transports = @{ $borrower_preferences->{transports} };
2527
    # warn "no transports" unless @transports;
2528
    # warn "no transports" unless @transports;
2528
    for (@transports) {
2529
    for (@transports) {
(-)a/C4/Letters.pm (-11 / +46 lines)
Lines 30-35 use C4::Log; Link Here
30
use C4::SMS;
30
use C4::SMS;
31
use C4::Debug;
31
use C4::Debug;
32
use Date::Calc qw( Add_Delta_Days );
32
use Date::Calc qw( Add_Delta_Days );
33
use C4::Dates qw/format_date/;
33
use Encode;
34
use Encode;
34
use Carp;
35
use Carp;
35
36
Lines 477-488 sub parseletter_sth { Link Here
477
        carp "ERROR: parseletter_sth() called without argument (table)";
478
        carp "ERROR: parseletter_sth() called without argument (table)";
478
        return;
479
        return;
479
    }
480
    }
480
    # check cache first
481
    my $itemselect =
482
    'SELECT barcode, itemcallnumber, location, holdingbranch, date_due, issuedate, author, title from items '
483
    . 'left join issues on issues.itemnumber = items.itemnumber '
484
    . 'LEFT JOIN biblio on items.biblionumber = biblio.biblionumber '
485
    . 'WHERE items.itemnumber = ? ';
486
# check cache first
481
    (defined $handles{$table}) and return $handles{$table};
487
    (defined $handles{$table}) and return $handles{$table};
482
    my $query = 
488
    my $query = 
483
    ($table eq 'biblio'       ) ? "SELECT * FROM $table WHERE   biblionumber = ?"                      :
489
    ($table eq 'biblio'       ) ? "SELECT * FROM $table WHERE   biblionumber = ?"                      :
484
    ($table eq 'biblioitems'  ) ? "SELECT * FROM $table WHERE   biblionumber = ?"                      :
490
    ($table eq 'biblioitems'  ) ? "SELECT * FROM $table WHERE   biblionumber = ?"                      :
485
    ($table eq 'items'        ) ? "SELECT * FROM $table WHERE     itemnumber = ?"                      :
491
    ($table eq 'items'        ) ? $itemselect :
486
    ($table eq 'reserves'     ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
492
    ($table eq 'reserves'     ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
487
    ($table eq 'borrowers'    ) ? "SELECT * FROM $table WHERE borrowernumber = ?"                      :
493
    ($table eq 'borrowers'    ) ? "SELECT * FROM $table WHERE borrowernumber = ?"                      :
488
    ($table eq 'branches'     ) ? "SELECT * FROM $table WHERE     branchcode = ?"                      :
494
    ($table eq 'branches'     ) ? "SELECT * FROM $table WHERE     branchcode = ?"                      :
Lines 510-515 sub parseletter { Link Here
510
        warn "parseletter_sth('$table') failed to return a valid sth.  No substitution will be done for that table.";
516
        warn "parseletter_sth('$table') failed to return a valid sth.  No substitution will be done for that table.";
511
        return;
517
        return;
512
    }
518
    }
519
    my $check_in_notice;
520
    if ($table eq 'items') {
521
        if ($pk2 && $pk2 eq 'CHECKIN') {
522
            $check_in_notice = 1;
523
        }
524
        $pk2 = undef;
525
    }
513
    if ( $pk2 ) {
526
    if ( $pk2 ) {
514
        $sth->execute($pk, $pk2);
527
        $sth->execute($pk, $pk2);
515
    } else {
528
    } else {
Lines 531-547 sub parseletter { Link Here
531
        )->output();
544
        )->output();
532
    }
545
    }
533
546
534
535
    # and get all fields from the table
547
    # and get all fields from the table
536
    my $columns = C4::Context->dbh->prepare("SHOW COLUMNS FROM $table");
548
    if ($table ne 'items' ) {
537
    $columns->execute;
549
        my $columns = C4::Context->dbh->prepare("SHOW COLUMNS FROM $table");
538
    while ( ( my $field ) = $columns->fetchrow_array ) {
550
        $columns->execute;
539
        my $replacefield = "<<$table.$field>>";
551
        while ( ( my $field ) = $columns->fetchrow_array ) {
540
        $values->{$field} =~ s/\p{P}(?=$)//g if $values->{$field};
552
            my $replacefield = "<<$table.$field>>";
541
        my $replacedby   = $values->{$field} || '';
553
            $values->{$field} =~ s/\p{P}(?=$)//g if $values->{$field};
542
        ($letter->{title}  ) and $letter->{title}   =~ s/$replacefield/$replacedby/g;
554
            my $replacedby   = $values->{$field} || '';
543
        ($letter->{content}) and $letter->{content} =~ s/$replacefield/$replacedby/g;
555
            ($letter->{title}  ) and $letter->{title}   =~ s/$replacefield/$replacedby/g;
556
            ($letter->{content}) and $letter->{content} =~ s/$replacefield/$replacedby/g;
557
        }
544
    }
558
    }
559
560
    if ($table eq 'items') {
561
        if ($check_in_notice) {
562
            # need to get dates from old_issues
563
            my $dates = C4::Context->dbh->selectrow_arrayref(
564
'SELECT issuedate, date_due FROM old_issues where itemnumber = ? AND DATE(timestamp) = CURDATE() ORDER BY timestamp DESC LIMIT 1',
565
                {}, $pk);
566
            $values->{issuedate} = ${ $dates}[0];
567
            $values->{date_due}  = ${ $dates}[1];
568
        }
569
        $values->{issuedate} = format_date($values->{issuedate});
570
        $values->{date_due}  = format_date($values->{date_due});
571
        $values->{content} = join "\t", $values->{issuedate}, $values->{title}, $values->{barcode}, $values->{author};
572
        for my $field ( qw( issuedate date_due barcode holdingbranch location itemcallnumber content)) {
573
            my $replacefield = "<<$table.$field>>";
574
            my $replacedby   = $values->{$field} || '';
575
            ($letter->{title}  ) and $letter->{title}   =~ s/$replacefield/$replacedby/g;
576
            ($letter->{content}) and $letter->{content} =~ s/$replacefield/$replacedby/g;
577
        }
578
    }
579
545
    return $letter;
580
    return $letter;
546
}
581
}
547
582
(-)a/misc/cronjobs/advance_notices.pl (-4 / +9 lines)
Lines 55-60 use C4::Members; Link Here
55
use C4::Members::Messaging;
55
use C4::Members::Messaging;
56
use C4::Overdues;
56
use C4::Overdues;
57
use C4::Dates qw/format_date/;
57
use C4::Dates qw/format_date/;
58
use DBI;
58
59
59
60
60
# These are defaults for command line options.
61
# These are defaults for command line options.
Lines 150-156 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
150
        
151
        
151
        if ( $borrower_preferences->{'wants_digest'} ) {
152
        if ( $borrower_preferences->{'wants_digest'} ) {
152
            # cache this one to process after we've run through all of the items.
153
            # cache this one to process after we've run through all of the items.
153
            $due_digest->{$upcoming->{'borrowernumber'}}++;
154
            push @{$due_digest->{$upcoming->{borrowernumber}}}, $upcoming->{itemnumber};
154
        } else {
155
        } else {
155
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
156
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
156
            my $letter_type = 'DUE';
157
            my $letter_type = 'DUE';
Lines 179-185 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
179
180
180
        if ( $borrower_preferences->{'wants_digest'} ) {
181
        if ( $borrower_preferences->{'wants_digest'} ) {
181
            # cache this one to process after we've run through all of the items.
182
            # cache this one to process after we've run through all of the items.
182
            $upcoming_digest->{$upcoming->{'borrowernumber'}}++;
183
            push @{$due_digest->{$upcoming->{borrowernumber}}}, $upcoming->{itemnumber};
183
        } else {
184
        } else {
184
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
185
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
185
            my $letter_type = 'PREDUE';
186
            my $letter_type = 'PREDUE';
Lines 231-237 SELECT biblio.*, items.*, issues.* Link Here
231
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
232
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
232
END_SQL
233
END_SQL
233
234
234
PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) {
235
PATRON: for my $borrowernumber ( keys %{ $upcoming_digest} ) {
236
    my @items = @{$upcoming_digest->{$borrowernumber}};
237
    my $count = scalar @items;
235
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
238
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
236
                                                                                  message_name   => 'advance notice' } );
239
                                                                                  message_name   => 'advance notice' } );
237
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
240
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
Lines 267-273 PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) { Link Here
267
}
270
}
268
271
269
# Now, run through all the people that want digests and send them
272
# Now, run through all the people that want digests and send them
270
PATRON: while ( my ( $borrowernumber, $count ) = each %$due_digest ) {
273
PATRON: for my $borrowernumber ( keys %{ $upcoming_digest} ) {
274
    my @items = @{$upcoming_digest->{$borrowernumber}};
275
    my $count = scalar @items;
271
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
276
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
272
                                                                                  message_name   => 'item due' } );
277
                                                                                  message_name   => 'item due' } );
273
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
278
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
(-)a/misc/cronjobs/overdue_notices.pl (-1 / +3 lines)
Lines 320-326 if (@branchcodes) { Link Here
320
}
320
}
321
321
322
# these are the fields that will be substituted into <<item.content>>
322
# these are the fields that will be substituted into <<item.content>>
323
my @item_content_fields = split( /,/, $itemscontent );
323
$itemscontent=~s/^\s*//;
324
$itemscontent=~s/\s*$//;
325
my @item_content_fields = split( /\s*,\s*/, $itemscontent );
324
326
325
binmode( STDOUT, ":utf8" );
327
binmode( STDOUT, ":utf8" );
326
328
(-)a/tools/letter.pl (-1 / +6 lines)
Lines 169-177 sub add_form { Link Here
169
        push @{$field_selection}, add_fields('suggestions', 'borrowers', 'biblio');
169
        push @{$field_selection}, add_fields('suggestions', 'borrowers', 'biblio');
170
    }
170
    }
171
    else {
171
    else {
172
        my @item_field_names = qw(barcode itemcallnumber date_due issuedate);
173
172
        push @{$field_selection}, add_fields('biblio','biblioitems'),
174
        push @{$field_selection}, add_fields('biblio','biblioitems'),
173
            {value => q{},             text => '---ITEMS---'  },
175
            {value => q{},             text => '---ITEMS---'  },
174
            {value => 'items.content', text => 'items.content'},
176
            {value => 'items.content', text => 'items.content'},
177
            {value => 'items.barcode', text => 'items.barcode'},
178
            {value => 'items.itemcallnumber', text => 'items.itemcallnumber'},
179
            {value => 'items.date_due', text => 'items.date_due'},
180
            {value => 'items.issuedate', text => 'items.issuedate'},
175
            add_fields('borrowers');
181
            add_fields('borrowers');
176
    }
182
    }
177
183
178
- 

Return to bug 3203