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

(-)a/C4/SIP/ILS/Patron.pm (-2 / +74 lines)
Lines 130-136 sub new { Link Here
130
130
131
    # FIXME: populate fine_items recall_items
131
    # FIXME: populate fine_items recall_items
132
    $ilspatron{unavail_holds} = _get_outstanding_holds($kp->{borrowernumber});
132
    $ilspatron{unavail_holds} = _get_outstanding_holds($kp->{borrowernumber});
133
    $ilspatron{items} = $patron->pending_checkouts->unblessed;
133
    $ilspatron{items} = _get_pending_issues($kp->{borrowernumber});
134
    $self = \%ilspatron;
134
    $self = \%ilspatron;
135
    $debug and warn Dumper($self);
135
    $debug and warn Dumper($self);
136
    syslog("LOG_DEBUG", "new ILS::Patron(%s): found patron '%s'", $patron_id,$self->{id});
136
    syslog("LOG_DEBUG", "new ILS::Patron(%s): found patron '%s'", $patron_id,$self->{id});
Lines 501-506 sub _get_outstanding_holds { Link Here
501
    return \@holds;
501
    return \@holds;
502
}
502
}
503
503
504
sub _get_pending_issues {
505
        my @borrowernumbers = @_;
506
        unless (@borrowernumbers ) { # return a ref_to_array
507
            return \@borrowernumbers; # to not cause surprise to caller
508
        }
509
        # Borrowers part of the query
510
        my $bquery = '';
511
        for (my $i = 0; $i < @borrowernumbers; $i++) {
512
             $bquery .= ' issues.borrowernumber = ?';
513
             if ($i < $#borrowernumbers ) {
514
                  $bquery .= ' OR';
515
             }
516
        }
517
518
        # must avoid biblioitems.* to prevent large marc and marcxml fields from killing performance
519
        # FIXME: namespace collision: each table has "timestamp" fields.  Which one is "timestamp" ?
520
        # FIXME: circ/ciculation.pl tries to sort by timestamp!
521
        # FIXME: namespace collision: other collisions possible.
522
        # FIXME: most of this data isn't really being used by callers.
523
        my $query =
524
           "SELECT issues.*,
525
            items.*,
526
            biblio.*,
527
            biblioitems.volume,
528
            biblioitems.number,
529
            biblioitems.itemtype,
530
            biblioitems.isbn,
531
            biblioitems.issn,
532
            biblioitems.publicationyear,
533
            biblioitems.publishercode,
534
            biblioitems.volumedate,
535
            biblioitems.volumedesc,
536
            biblioitems.lccn,
537
            biblioitems.url,
538
            borrowers.firstname,
539
            borrowers.surname,
540
            borrowers.cardnumber,
541
            issues.timestamp AS timestamp,
542
            issues.renewals  AS renewals,
543
            issues.borrowernumber AS borrowernumber,
544
            items.renewals  AS totalrenewals
545
        FROM   issues
546
        LEFT JOIN items       ON items.itemnumber       =      issues.itemnumber
547
        LEFT JOIN biblio      ON items.biblionumber     =      biblio.biblionumber
548
        LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
549
        LEFT JOIN borrowers ON issues.borrowernumber = borrowers.borrowernumber
550
        WHERE
551
            $bquery
552
        ORDER BY issues.issuedate"
553
        ;
554
555
        my $sth = C4::Context->dbh->prepare($query);
556
        $sth->execute(@borrowernumbers);
557
        my $data = $sth->fetchall_arrayref({});
558
        my $today = dt_from_string;
559
        foreach (@{$data}) {
560
            if ($_->{issuedate}) {
561
                $_->{issuedate} = dt_from_string($_->{issuedate}, 'sql');
562
            }
563
            $_->{date_due_sql} = $_->{date_due};
564
            # FIXME no need to have this value
565
            $_->{date_due} or next;
566
            $_->{date_due_sql} = $_->{date_due};
567
            # FIXME no need to have this value
568
            $_->{date_due} = dt_from_string($_->{date_due}, 'sql');
569
            if ( DateTime->compare($_->{date_due}, $today) == -1 ) {
570
                $_->{overdue} = 1;
571
            }
572
        }
573
        return $data;
574
}
575
576
504
=head2 build_patron_attributes_string
577
=head2 build_patron_attributes_string
505
578
506
This method builds the part of the sip message for extended patron
579
This method builds the part of the sip message for extended patron
507
- 

Return to bug 21486