Lines 437-474
sub build_patron_status {
Link Here
|
437 |
my $resp = (PATRON_STATUS_RESP); |
437 |
my $resp = (PATRON_STATUS_RESP); |
438 |
|
438 |
|
439 |
if ($patron) { |
439 |
if ($patron) { |
440 |
$resp .= patron_status_string($patron); |
440 |
$resp .= patron_status_string($patron); |
441 |
$resp .= $lang . timestamp(); |
441 |
$resp .= $lang . timestamp(); |
442 |
$resp .= add_field(FID_PERSONAL_NAME, $patron->name); |
442 |
$resp .= add_field( FID_PERSONAL_NAME, $patron->name ); |
443 |
|
443 |
|
444 |
# while the patron ID we got from the SC is valid, let's |
444 |
# while the patron ID we got from the SC is valid, let's |
445 |
# use the one returned from the ILS, just in case... |
445 |
# use the one returned from the ILS, just in case... |
446 |
$resp .= add_field(FID_PATRON_ID, $patron->id); |
446 |
$resp .= add_field( FID_PATRON_ID, $patron->id ); |
447 |
if ($protocol_version >= 2) { |
447 |
if ( $protocol_version >= 2 ) { |
448 |
$resp .= add_field(FID_VALID_PATRON, 'Y'); |
448 |
$resp .= add_field( FID_VALID_PATRON, 'Y' ); |
449 |
# Patron password is a required field. |
449 |
|
450 |
$resp .= add_field(FID_VALID_PATRON_PWD, sipbool($patron->check_password($patron_pwd))); |
450 |
# Patron password is a required field. |
451 |
$resp .= maybe_add(FID_CURRENCY, $patron->currency); |
451 |
$resp .= add_field( FID_VALID_PATRON_PWD, sipbool( $patron->check_password($patron_pwd) ) ); |
452 |
$resp .= maybe_add(FID_FEE_AMT, $patron->fee_amount); |
452 |
$resp .= maybe_add( FID_CURRENCY, $patron->currency ); |
453 |
} |
453 |
$resp .= maybe_add( FID_FEE_AMT, $patron->fee_amount ); |
|
|
454 |
} |
454 |
|
455 |
|
455 |
$resp .= maybe_add( FID_SCREEN_MSG, $patron->screen_msg, $server ); |
456 |
$resp .= maybe_add( FID_SCREEN_MSG, $patron->screen_msg, $server ); |
456 |
$resp .= maybe_add( FID_SCREEN_MSG, $patron->{branchcode}, $server ) |
457 |
$resp .= maybe_add( FID_SCREEN_MSG, $patron->{branchcode}, $server ) |
457 |
if ( $server->{account}->{send_patron_home_library_in_af} ); |
458 |
if ( $server->{account}->{send_patron_home_library_in_af} ); |
458 |
|
459 |
|
459 |
$resp .= maybe_add(FID_PRINT_LINE, $patron->print_line); |
460 |
$resp .= maybe_add( FID_PRINT_LINE, $patron->print_line ); |
460 |
} else { |
461 |
} |
461 |
# Invalid patron id. Report that the user has no privs., |
462 |
else { |
462 |
# no personal name, and is invalid (if we're using 2.00) |
463 |
# Invalid patron id. Report that the user has no privs., |
463 |
$resp .= 'YYYY' . (' ' x 10) . $lang . timestamp(); |
464 |
# no personal name, and is invalid (if we're using 2.00) |
464 |
$resp .= add_field(FID_PERSONAL_NAME, ''); |
465 |
$resp .= 'YYYY' . ( ' ' x 10 ) . $lang . timestamp(); |
|
|
466 |
$resp .= add_field( FID_PERSONAL_NAME, '' ); |
465 |
|
467 |
|
466 |
# the patron ID is invalid, but it's a required field, so |
468 |
# the patron ID is invalid, but it's a required field, so |
467 |
# just echo it back |
469 |
# just echo it back |
468 |
$resp .= add_field(FID_PATRON_ID, $fields->{(FID_PATRON_ID)}); |
470 |
$resp .= add_field( FID_PATRON_ID, $fields->{ (FID_PATRON_ID) } ); |
469 |
|
471 |
|
470 |
($protocol_version >= 2) and |
472 |
( $protocol_version >= 2 ) |
471 |
$resp .= add_field(FID_VALID_PATRON, 'N'); |
473 |
and $resp .= add_field( FID_VALID_PATRON, 'N' ); |
472 |
} |
474 |
} |
473 |
|
475 |
|
474 |
$resp .= add_field(FID_INST_ID, $fields->{(FID_INST_ID)}); |
476 |
$resp .= add_field(FID_INST_ID, $fields->{(FID_INST_ID)}); |
Lines 531-604
sub handle_checkout {
Link Here
|
531 |
$item = $status->item; |
533 |
$item = $status->item; |
532 |
$patron = $status->patron; |
534 |
$patron = $status->patron; |
533 |
|
535 |
|
534 |
if ($status->ok) { |
536 |
if ( $status->ok ) { |
535 |
# Item successfully checked out |
|
|
536 |
# Fixed fields |
537 |
$resp = CHECKOUT_RESP . '1'; |
538 |
$resp .= sipbool($status->renew_ok); |
539 |
if ($ils->supports('magnetic media')) { |
540 |
$resp .= sipbool($item->magnetic_media); |
541 |
} else { |
542 |
$resp .= 'U'; |
543 |
} |
544 |
# We never return the obsolete 'U' value for 'desensitize' |
545 |
$resp .= sipbool($status->desensitize); |
546 |
$resp .= timestamp; |
547 |
|
537 |
|
548 |
# Now for the variable fields |
538 |
# Item successfully checked out |
549 |
$resp .= add_field(FID_INST_ID, $inst); |
539 |
# Fixed fields |
550 |
$resp .= add_field(FID_PATRON_ID, $patron_id); |
540 |
$resp = CHECKOUT_RESP . '1'; |
551 |
$resp .= add_field(FID_ITEM_ID, $item_id); |
541 |
$resp .= sipbool( $status->renew_ok ); |
552 |
$resp .= add_field(FID_TITLE_ID, $item->title_id); |
542 |
if ( $ils->supports('magnetic media') ) { |
553 |
if ($item->due_date) { |
543 |
$resp .= sipbool( $item->magnetic_media ); |
554 |
$resp .= add_field(FID_DUE_DATE, timestamp($item->due_date)); |
544 |
} |
555 |
} else { |
545 |
else { |
556 |
$resp .= add_field(FID_DUE_DATE, q{}); |
546 |
$resp .= 'U'; |
557 |
} |
547 |
} |
558 |
|
548 |
|
559 |
$resp .= maybe_add(FID_SCREEN_MSG, $status->screen_msg, $server); |
549 |
# We never return the obsolete 'U' value for 'desensitize' |
560 |
$resp .= maybe_add(FID_PRINT_LINE, $status->print_line); |
550 |
$resp .= sipbool( $status->desensitize ); |
|
|
551 |
$resp .= timestamp; |
552 |
|
553 |
# Now for the variable fields |
554 |
$resp .= add_field( FID_INST_ID, $inst ); |
555 |
$resp .= add_field( FID_PATRON_ID, $patron_id ); |
556 |
$resp .= add_field( FID_ITEM_ID, $item_id ); |
557 |
$resp .= add_field( FID_TITLE_ID, $item->title_id ); |
558 |
if ( $item->due_date ) { |
559 |
$resp .= add_field( FID_DUE_DATE, timestamp( $item->due_date ) ); |
560 |
} |
561 |
else { |
562 |
$resp .= add_field( FID_DUE_DATE, q{} ); |
563 |
} |
561 |
|
564 |
|
562 |
if ($protocol_version >= 2) { |
565 |
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server ); |
563 |
if ($ils->supports('security inhibit')) { |
566 |
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line ); |
564 |
$resp .= add_field(FID_SECURITY_INHIBIT, |
|
|
565 |
$status->security_inhibit); |
566 |
} |
567 |
$resp .= maybe_add(FID_MEDIA_TYPE, $item->sip_media_type); |
568 |
$resp .= maybe_add(FID_ITEM_PROPS, $item->sip_item_properties); |
569 |
|
567 |
|
570 |
} |
568 |
if ( $protocol_version >= 2 ) { |
571 |
} |
569 |
if ( $ils->supports('security inhibit') ) { |
|
|
570 |
$resp .= add_field( FID_SECURITY_INHIBIT, $status->security_inhibit ); |
571 |
} |
572 |
$resp .= maybe_add( FID_MEDIA_TYPE, $item->sip_media_type ); |
573 |
$resp .= maybe_add( FID_ITEM_PROPS, $item->sip_item_properties ); |
572 |
|
574 |
|
|
|
575 |
} |
576 |
} |
573 |
else { |
577 |
else { |
574 |
# Checkout failed |
578 |
# Checkout failed |
575 |
# Checkout Response: not ok, no renewal, don't know mag. media, |
579 |
# Checkout Response: not ok, no renewal, don't know mag. media, |
576 |
# no desensitize |
580 |
# no desensitize |
577 |
$resp = sprintf("120NUN%s", timestamp); |
581 |
$resp = sprintf( "120NUN%s", timestamp ); |
578 |
$resp .= add_field(FID_INST_ID, $inst); |
582 |
$resp .= add_field( FID_INST_ID, $inst ); |
579 |
$resp .= add_field(FID_PATRON_ID, $patron_id); |
583 |
$resp .= add_field( FID_PATRON_ID, $patron_id ); |
580 |
$resp .= add_field(FID_ITEM_ID, $item_id); |
584 |
$resp .= add_field( FID_ITEM_ID, $item_id ); |
581 |
|
585 |
|
582 |
# If the item is valid, provide the title, otherwise |
586 |
# If the item is valid, provide the title, otherwise |
583 |
# leave it blank |
587 |
# leave it blank |
584 |
$resp .= add_field(FID_TITLE_ID, $item ? $item->title_id : ''); |
588 |
$resp .= add_field( FID_TITLE_ID, $item ? $item->title_id : '' ); |
585 |
# Due date is required. Since it didn't get checked out, |
|
|
586 |
# it's not due, so leave the date blank |
587 |
$resp .= add_field(FID_DUE_DATE, ''); |
588 |
|
589 |
|
589 |
$resp .= maybe_add(FID_SCREEN_MSG, $status->screen_msg, $server); |
590 |
# Due date is required. Since it didn't get checked out, |
590 |
$resp .= maybe_add(FID_PRINT_LINE, $status->print_line); |
591 |
# it's not due, so leave the date blank |
|
|
592 |
$resp .= add_field( FID_DUE_DATE, '' ); |
591 |
|
593 |
|
592 |
if ($protocol_version >= 2) { |
594 |
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server ); |
593 |
# Is the patron ID valid? |
595 |
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line ); |
594 |
$resp .= add_field(FID_VALID_PATRON, sipbool($patron)); |
|
|
595 |
|
596 |
|
596 |
if ($patron && exists($fields->{FID_PATRON_PWD})) { |
597 |
if ( $protocol_version >= 2 ) { |
597 |
# Password provided, so we can tell if it was valid or not |
598 |
|
598 |
$resp .= add_field(FID_VALID_PATRON_PWD, |
599 |
# Is the patron ID valid? |
599 |
sipbool($patron->check_password($fields->{(FID_PATRON_PWD)}))); |
600 |
$resp .= add_field( FID_VALID_PATRON, sipbool($patron) ); |
600 |
} |
601 |
|
601 |
} |
602 |
if ( $patron && exists( $fields->{FID_PATRON_PWD} ) ) { |
|
|
603 |
|
604 |
# Password provided, so we can tell if it was valid or not |
605 |
$resp .= |
606 |
add_field( FID_VALID_PATRON_PWD, |
607 |
sipbool( $patron->check_password( $fields->{ (FID_PATRON_PWD) } ) ) ); |
608 |
} |
609 |
} |
602 |
} |
610 |
} |
603 |
|
611 |
|
604 |
if ( $protocol_version >= 2 ) { |
612 |
if ( $protocol_version >= 2 ) { |
Lines 1210-1263
sub handle_item_status_update {
Link Here
|
1210 |
} |
1218 |
} |
1211 |
|
1219 |
|
1212 |
sub handle_patron_enable { |
1220 |
sub handle_patron_enable { |
1213 |
my ($self, $server) = @_; |
1221 |
my ( $self, $server ) = @_; |
1214 |
my $ils = $server->{ils}; |
1222 |
my $ils = $server->{ils}; |
1215 |
my $fields = $self->{fields}; |
1223 |
my $fields = $self->{fields}; |
1216 |
my ($trans_date, $patron_id, $terminal_pwd, $patron_pwd); |
1224 |
my ( $trans_date, $patron_id, $terminal_pwd, $patron_pwd ); |
1217 |
my ($status, $patron); |
1225 |
my ( $status, $patron ); |
1218 |
my $resp = PATRON_ENABLE_RESP; |
1226 |
my $resp = PATRON_ENABLE_RESP; |
1219 |
|
1227 |
|
1220 |
($trans_date) = @{$self->{fixed_fields}}; |
1228 |
($trans_date) = @{ $self->{fixed_fields} }; |
1221 |
$patron_id = $fields->{(FID_PATRON_ID)}; |
1229 |
$patron_id = $fields->{ (FID_PATRON_ID) }; |
1222 |
$patron_pwd = $fields->{(FID_PATRON_PWD)}; |
1230 |
$patron_pwd = $fields->{ (FID_PATRON_PWD) }; |
1223 |
|
1231 |
|
1224 |
syslog("LOG_DEBUG", "handle_patron_enable: patron_id: '%s', patron_pwd: '%s'", |
1232 |
syslog( "LOG_DEBUG", "handle_patron_enable: patron_id: '%s', patron_pwd: '%s'", $patron_id, $patron_pwd ); |
1225 |
$patron_id, $patron_pwd); |
|
|
1226 |
|
1233 |
|
1227 |
$patron = $ils->find_patron($patron_id); |
1234 |
$patron = $ils->find_patron($patron_id); |
1228 |
|
1235 |
|
1229 |
if (!defined($patron)) { |
1236 |
if ( !defined($patron) ) { |
1230 |
# Invalid patron ID |
|
|
1231 |
$resp .= 'YYYY' . (' ' x 10) . '000' . timestamp(); |
1232 |
$resp .= add_field(FID_PATRON_ID, $patron_id); |
1233 |
$resp .= add_field(FID_PERSONAL_NAME, ''); |
1234 |
$resp .= add_field(FID_VALID_PATRON, 'N'); |
1235 |
$resp .= add_field(FID_VALID_PATRON_PWD, 'N'); |
1236 |
} else { |
1237 |
# valid patron |
1238 |
if (!defined($patron_pwd) || $patron->check_password($patron_pwd)) { |
1239 |
# Don't enable the patron if there was an invalid password |
1240 |
$status = $patron->enable; |
1241 |
} |
1242 |
$resp .= patron_status_string($patron); |
1243 |
$resp .= $patron->language . timestamp(); |
1244 |
|
1237 |
|
1245 |
$resp .= add_field(FID_PATRON_ID, $patron->id); |
1238 |
# Invalid patron ID |
1246 |
$resp .= add_field(FID_PERSONAL_NAME, $patron->name); |
1239 |
$resp .= 'YYYY' . ( ' ' x 10 ) . '000' . timestamp(); |
1247 |
if (defined($patron_pwd)) { |
1240 |
$resp .= add_field( FID_PATRON_ID, $patron_id ); |
1248 |
$resp .= add_field(FID_VALID_PATRON_PWD, |
1241 |
$resp .= add_field( FID_PERSONAL_NAME, '' ); |
1249 |
sipbool($patron->check_password($patron_pwd))); |
1242 |
$resp .= add_field( FID_VALID_PATRON, 'N' ); |
1250 |
} |
1243 |
$resp .= add_field( FID_VALID_PATRON_PWD, 'N' ); |
1251 |
$resp .= add_field(FID_VALID_PATRON, 'Y'); |
|
|
1252 |
$resp .= maybe_add(FID_SCREEN_MSG, $patron->screen_msg, $server); |
1253 |
$resp .= maybe_add(FID_PRINT_LINE, $patron->print_line); |
1254 |
} |
1244 |
} |
|
|
1245 |
else { |
1246 |
# valid patron |
1247 |
if ( !defined($patron_pwd) || $patron->check_password($patron_pwd) ) { |
1255 |
|
1248 |
|
1256 |
$resp .= add_field(FID_INST_ID, $ils->institution); |
1249 |
# Don't enable the patron if there was an invalid password |
|
|
1250 |
$status = $patron->enable; |
1251 |
} |
1252 |
$resp .= patron_status_string($patron); |
1253 |
$resp .= $patron->language . timestamp(); |
1257 |
|
1254 |
|
1258 |
$self->write_msg($resp,undef,$server->{account}->{terminator},$server->{account}->{encoding}); |
1255 |
$resp .= add_field( FID_PATRON_ID, $patron->id ); |
|
|
1256 |
$resp .= add_field( FID_PERSONAL_NAME, $patron->name ); |
1257 |
if ( defined($patron_pwd) ) { |
1258 |
$resp .= add_field( FID_VALID_PATRON_PWD, sipbool( $patron->check_password($patron_pwd) ) ); |
1259 |
} |
1260 |
$resp .= add_field( FID_VALID_PATRON, 'Y' ); |
1261 |
$resp .= maybe_add( FID_SCREEN_MSG, $patron->screen_msg, $server ); |
1262 |
$resp .= maybe_add( FID_PRINT_LINE, $patron->print_line ); |
1263 |
} |
1264 |
|
1265 |
$resp .= add_field( FID_INST_ID, $ils->institution ); |
1266 |
|
1267 |
$self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} ); |
1259 |
|
1268 |
|
1260 |
return(PATRON_ENABLE); |
1269 |
return (PATRON_ENABLE); |
1261 |
} |
1270 |
} |
1262 |
|
1271 |
|
1263 |
sub handle_hold { |
1272 |
sub handle_hold { |
1264 |
- |
|
|