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

(-)a/C4/Letters.pm (-3 / +33 lines)
Lines 691-697 sub GetPreparedLetter { Link Here
691
691
692
sub _substitute_tables {
692
sub _substitute_tables {
693
    my ( $letter, $tables ) = @_;
693
    my ( $letter, $tables ) = @_;
694
    while ( my ($table, $param) = each %$tables ) {
694
695
    foreach my $table (keys %$tables) {
696
        my $param = $tables->{$table};
695
        next unless $param;
697
        next unless $param;
696
698
697
        my $ref = ref $param;
699
        my $ref = ref $param;
Lines 699-706 sub _substitute_tables { Link Here
699
        my $values;
701
        my $values;
700
        if ($ref && $ref eq 'HASH') {
702
        if ($ref && $ref eq 'HASH') {
701
            $values = $param;
703
            $values = $param;
702
        }
704
        } elsif ($ref && $ref eq 'ARRAY') {
703
        else {
705
            my $tag = $table;
706
707
            my $hash_ref = pop($param);
708
            foreach my $table (keys %$hash_ref) {
709
                my $param = $hash_ref->{$table};
710
                if ( $letter->{content} =~ m!<$tag>(.*)</$tag>!s ) {
711
                    my $subcontent = $1;
712
713
                    my $sth = _parseletter_sth($table);
714
                    unless ($sth) {
715
                        warn "_parseletter_sth('$table') failed to return a valid sth.  No substitution will be done for that table.";
716
                        return;
717
                    }
718
719
                    $sth->execute( $param );
720
                    my @lines;
721
                    while( $values = $sth->fetchrow_hashref)
722
                    {
723
                        my %subletter = ( title => '', content => $subcontent );
724
                        my $line = _parseletter ( \%subletter, $table, $values );
725
                        push @lines, $line->{content};
726
                    }
727
                    $letter->{content} =~ s!<$tag>.*</$tag>!join( "\n", @lines )!se;
728
                    my $temp;
729
                }
730
            }
731
        }else {
732
            my @pk;
704
            my $sth = _parseletter_sth($table);
733
            my $sth = _parseletter_sth($table);
705
            unless ($sth) {
734
            unless ($sth) {
706
                warn "_parseletter_sth('$table') failed to return a valid sth.  No substitution will be done for that table.";
735
                warn "_parseletter_sth('$table') failed to return a valid sth.  No substitution will be done for that table.";
Lines 732-737 sub _parseletter_sth { Link Here
732
    ($table eq 'biblioitems'  ) ? "SELECT * FROM $table WHERE   biblionumber = ?"                                  :
761
    ($table eq 'biblioitems'  ) ? "SELECT * FROM $table WHERE   biblionumber = ?"                                  :
733
    ($table eq 'items'        ) ? "SELECT * FROM $table WHERE     itemnumber = ?"                                  :
762
    ($table eq 'items'        ) ? "SELECT * FROM $table WHERE     itemnumber = ?"                                  :
734
    ($table eq 'issues'       ) ? "SELECT * FROM $table WHERE     itemnumber = ?"                                  :
763
    ($table eq 'issues'       ) ? "SELECT * FROM $table WHERE     itemnumber = ?"                                  :
764
    ($table eq 'accountlines' ) ? "SELECT * , FORMAT(amountoutstanding, 2) as amountoutstanding FROM $table WHERE date = DATE(NOW()) AND amountoutstanding > 0 AND itemnumber = ?" :
735
    ($table eq 'old_issues'   ) ? "SELECT * FROM $table WHERE     itemnumber = ? ORDER BY timestamp DESC LIMIT 1"  :
765
    ($table eq 'old_issues'   ) ? "SELECT * FROM $table WHERE     itemnumber = ? ORDER BY timestamp DESC LIMIT 1"  :
736
    ($table eq 'reserves'     ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?"             :
766
    ($table eq 'reserves'     ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?"             :
737
    ($table eq 'borrowers'    ) ? "SELECT * FROM $table WHERE borrowernumber = ?"                                  :
767
    ($table eq 'borrowers'    ) ? "SELECT * FROM $table WHERE borrowernumber = ?"                                  :
(-)a/misc/cronjobs/overdue_notices.pl (-6 / +49 lines)
Lines 541-548 END_SQL Link Here
541
                        next;
541
                        next;
542
                    }
542
                    }
543
                }
543
                }
544
                if ($borrowernumber eq $data->{'borrowernumber'}){
544
                if ($borrowernumber && $borrowernumber eq $data->{'borrowernumber'}){
545
# we have already dealt with this borrower
545
                    # we have already dealt with this borrower
546
                    $verbose and warn "already dealt with this borrower $borrowernumber";
546
                    $verbose and warn "already dealt with this borrower $borrowernumber";
547
                    next;
547
                    next;
548
                }
548
                }
Lines 642-651 END_SQL Link Here
642
                @message_transport_types = @{ GetOverdueMessageTransportTypes( q{}, $overdue_rules->{categorycode}, $i) }
642
                @message_transport_types = @{ GetOverdueMessageTransportTypes( q{}, $overdue_rules->{categorycode}, $i) }
643
                    unless @message_transport_types;
643
                    unless @message_transport_types;
644
644
645
                #calculate letter fee
646
                my $noticefee = 0;
647
                if ($letter->{'fee'}){
648
                    $noticefee = $letter->{'fee'};
649
                } else {
650
                    if (C4::Context->preference('DefaultNoticeFee')){
651
                        $noticefee = C4::Context->preference('DefaultNoticeFee');
652
                    }
653
                }
654
655
                #total of fines
656
                my $userfines = 0;
657
                my $dbh   = C4::Context->dbh();
658
                my $query = q|SELECT sum(amountoutstanding) as fineamount FROM accountlines where date = DATE(NOW()) AND itemnumber IS NOT NULL AND amountoutstanding > 0 AND borrowernumber=?|;
659
                my $sth = $dbh->prepare($query);
660
                $sth->execute( $borrowernumber );
661
                my $fine = $sth->fetchrow_hashref();
662
                if ($fine->{fineamount}) {
663
                    $userfines = $fine->{fineamount};
664
                }
665
                $userfines = $userfines + $noticefee;
645
666
646
                my $print_sent = 0; # A print notice is not yet sent for this patron
667
                my $print_sent = 0; # A print notice is not yet sent for this patron
647
                for my $mtt ( @message_transport_types ) {
668
                for my $mtt ( @message_transport_types ) {
648
649
                    my $letter = parse_letter(
669
                    my $letter = parse_letter(
650
                        {   letter_code     => $overdue_rules->{"letter$i"},
670
                        {   letter_code     => $overdue_rules->{"letter$i"},
651
                            borrowernumber  => $borrowernumber,
671
                            borrowernumber  => $borrowernumber,
Lines 655-660 END_SQL Link Here
655
                                                bib             => $branch_details->{'branchname'}, # maybe 'bib' is a typo for 'lib<rary>'?
675
                                                bib             => $branch_details->{'branchname'}, # maybe 'bib' is a typo for 'lib<rary>'?
656
                                                'items.content' => $titles,
676
                                                'items.content' => $titles,
657
                                                'count'         => $itemcount,
677
                                                'count'         => $itemcount,
678
                                                'total'         => sprintf("%.2f", $userfines),
679
                                                'noticefee'     => $noticefee,
658
                                               },
680
                                               },
659
                            message_transport_type => $mtt,
681
                            message_transport_type => $mtt,
660
                        }
682
                        }
Lines 847-853 sub parse_letter { Link Here
847
                $params->{'letter'}->{'content'} =~ m/(<item>.*<\/item>)/;
869
                $params->{'letter'}->{'content'} =~ m/(<item>.*<\/item>)/;
848
                $item_format = $1;
870
                $item_format = $1;
849
            }
871
            }
850
851
            $item->{'fine'} = currency_format($currency_format, "$fine", FMT_SYMBOL);
872
            $item->{'fine'} = currency_format($currency_format, "$fine", FMT_SYMBOL);
852
            # if active currency isn't correct ISO code fallback to sprintf
873
            # if active currency isn't correct ISO code fallback to sprintf
853
            $item->{'fine'} = sprintf('%.2f', $fine) unless $item->{'fine'};
874
            $item->{'fine'} = sprintf('%.2f', $fine) unless $item->{'fine'};
Lines 861-873 sub parse_letter { Link Here
861
        }
882
        }
862
    }
883
    }
863
884
885
    #find all fines to create invoice table
886
    my $dbh   = C4::Context->dbh();
887
    my $sth = $dbh->prepare( <<"END_SQL" );
888
SELECT items.biblionumber, items.itemnumber
889
FROM items,accountlines
890
 where date = DATE(NOW())
891
  AND accountlines.itemnumber IS NOT NULL
892
  AND amountoutstanding > 0
893
  AND items.itemnumber = accountlines.itemnumber
894
  AND borrowernumber=? group by items.itemnumber
895
END_SQL
896
897
    $sth->execute($params->{'borrowernumber'});
898
    my @account_tables;
899
    while ( my $item = $sth->fetchrow_hashref() ) {
900
        push @account_tables, {
901
            'biblio' => $item->{'biblionumber'},
902
            'items' => $item->{'itemnumber'},
903
            'accountlines' => [{'accountlines' => $item->{'itemnumber'}}],
904
        };
905
    }
906
864
    return C4::Letters::GetPreparedLetter (
907
    return C4::Letters::GetPreparedLetter (
865
        module => 'circulation',
908
        module => 'circulation',
866
        letter_code => $params->{'letter_code'},
909
        letter_code => $params->{'letter_code'},
867
        branchcode => $params->{'branchcode'},
910
        branchcode => $params->{'branchcode'},
868
        tables => \%tables,
911
        tables => \%tables,
869
        substitute => $substitute,
912
        substitute => $substitute,
870
        repeat => { item => \@item_tables },
913
        repeat => { item => \@item_tables,
914
                    itemaccountlines => \@account_tables},
871
        message_transport_type => $params->{message_transport_type},
915
        message_transport_type => $params->{message_transport_type},
872
    );
916
    );
873
}
917
}
874
- 

Return to bug 12770