handler => \&handle_fee_paid,
protocol => {
2 => {
- template => "A18A2A3",
- template_len => 0,
+ template => "A18A2A2A3",
+ template_len => 25,
fields => [(FID_FEE_AMT), (FID_INST_ID),
(FID_PATRON_ID), (FID_TERMINAL_PWD),
(FID_PATRON_PWD), (FID_FEE_ID),
- (FID_TRANSACTION_ID)],
- }
+ (FID_TRANSACTION_ID)],
+ }
}
},
(ITEM_INFORMATION) => {
my ($self, $server) = @_;
my $account = $server->{account};
my $ils = $server->{ils};
+ my $my_branch = $ils->institution;
my ($current_loc, $inst_id, $item_id, $terminal_pwd, $item_props, $cancel);
my ($patron, $item, $status);
my $resp = CHECKIN_RESP;
$item_id = $fields->{(FID_ITEM_ID)};
$item_props = $fields->{(FID_ITEM_PROPS)};
$cancel = $fields->{(FID_CANCEL)};
+ if ($current_loc) {
+ $my_branch = $current_loc;# most scm do not set $current_loc
+ }
$ils->check_inst_id($inst_id, "handle_checkin");
syslog("LOG_WARNING", "received no-block checkin from terminal '%s'", $account->{id});
$status = $ils->checkin_no_block($item_id, $trans_date, $return_date, $item_props, $cancel);
} else {
- $status = $ils->checkin($item_id, $trans_date, $return_date, $current_loc, $item_props, $cancel);
+ $status = $ils->checkin($item_id, $trans_date, $return_date, $my_branch, $item_props, $cancel);
}
$patron = $status->patron;
# apparently we can't trust the returns from Checkin yet (because C4::Circulation::AddReturn is faulty)
# So we reproduce the alert logic here.
if (not $status->alert) {
- if ($item->hold_patron_id) {
- $status->alert(1);
- if ($item->destination_loc and $item->destination_loc ne $current_loc) {
- $status->alert_type('02'); # hold at other library
- } else {
- $status->alert_type('01'); # hold at this library
- }
- } elsif ($item->destination_loc and $item->destination_loc ne $current_loc) {
+ if ($item->destination_loc and $item->destination_loc ne $my_branch) {
$status->alert(1);
$status->alert_type('04'); # no hold, just send it
}
$server->{sip_username} = $uid;
$server->{sip_password} = $pwd;
- my $auth_status = api_auth($uid,$pwd);
+ my $auth_status = api_auth($uid,$pwd,$inst);
if (!$auth_status or $auth_status !~ /^ok$/i) {
syslog("LOG_WARNING", "api_auth failed for SIP terminal '%s' of '%s': %s",
$uid, $inst, ($auth_status||'unknown'));
$resp = (PATRON_INFO_RESP);
if ($patron) {
- $resp .= patron_status_string($patron);
- $resp .= (defined($lang) and length($lang) ==3) ? $lang : $patron->language;
- $resp .= Sip::timestamp();
-
- $resp .= add_count('patron_info/hold_items',
- scalar @{$patron->hold_items});
- $resp .= add_count('patron_info/overdue_items',
- scalar @{$patron->overdue_items});
- $resp .= add_count('patron_info/charged_items',
- scalar @{$patron->charged_items});
- $resp .= add_count('patron_info/fine_items',
- scalar @{$patron->fine_items});
- $resp .= add_count('patron_info/recall_items',
- scalar @{$patron->recall_items});
- $resp .= add_count('patron_info/unavail_holds',
- scalar @{$patron->unavail_holds});
-
- # FID_INST_ID added last (order irrelevant for fields w/ identifiers)
-
- # while the patron ID we got from the SC is valid, let's
- # use the one returned from the ILS, just in case...
- $resp .= add_field(FID_PATRON_ID, $patron->id);
- $resp .= add_field(FID_PERSONAL_NAME, $patron->name);
-
- # TODO: add code for the fields
- # hold items limit
- # overdue items limit
- # charged items limit
-
- $resp .= add_field(FID_VALID_PATRON, 'Y');
- if (defined($patron_pwd)) {
- # If patron password was provided, report whether it was right or not.
- $resp .= add_field(FID_VALID_PATRON_PWD,
- sipbool($patron->check_password($patron_pwd)));
- }
+ $resp .= patron_status_string($patron);
+ $resp .= (defined($lang) and length($lang) ==3) ? $lang : $patron->language;
+ $resp .= Sip::timestamp();
+
+ $resp .= add_count('patron_info/hold_items',
+ scalar @{$patron->hold_items});
+ $resp .= add_count('patron_info/overdue_items',
+ scalar @{$patron->overdue_items});
+ $resp .= add_count('patron_info/charged_items',
+ scalar @{$patron->charged_items});
+ $resp .= add_count('patron_info/fine_items',
+ scalar @{$patron->fine_items});
+ $resp .= add_count('patron_info/recall_items',
+ scalar @{$patron->recall_items});
+ $resp .= add_count('patron_info/unavail_holds',
+ scalar @{$patron->unavail_holds});
+
+ $resp .= add_field(FID_INST_ID, ($ils->institution_id || 'SIP2'));
+
+ # while the patron ID we got from the SC is valid, let's
+ # use the one returned from the ILS, just in case...
+ $resp .= add_field(FID_PATRON_ID, $patron->id);
+ $resp .= add_field(FID_PERSONAL_NAME, $patron->name);
+
+ # TODO: add code for the fields
+ # hold items limit
+ # overdue items limit
+ # charged items limit
+
+ $resp .= add_field(FID_VALID_PATRON, 'Y');
+ if (defined($patron_pwd)) {
+ # If patron password was provided, report whether it was right or not.
+ $resp .= add_field(FID_VALID_PATRON_PWD,
+ sipbool($patron->check_password($patron_pwd)));
+ }
- $resp .= maybe_add(FID_CURRENCY, $patron->currency);
- $resp .= maybe_add(FID_FEE_AMT, $patron->fee_amount);
- $resp .= add_field(FID_FEE_LMT, $patron->fee_limit);
+ $resp .= maybe_add(FID_CURRENCY, $patron->currency);
+ $resp .= maybe_add(FID_FEE_AMT, $patron->fee_amount);
+ $resp .= add_field(FID_FEE_LMT, $patron->fee_limit);
- # TODO: zero or more item details for 2.0 can go here:
- # hold_items
- # overdue_items
- # charged_items
- # fine_items
- # recall_items
+ # TODO: zero or more item details for 2.0 can go here:
+ # hold_items
+ # overdue_items
+ # charged_items
+ # fine_items
+ # recall_items
- $resp .= summary_info($ils, $patron, $summary, $start, $end);
+ $resp .= summary_info($ils, $patron, $summary, $start, $end);
- $resp .= maybe_add(FID_HOME_ADDR, $patron->address);
- $resp .= maybe_add(FID_EMAIL, $patron->email_addr);
- $resp .= maybe_add(FID_HOME_PHONE, $patron->home_phone);
+ $resp .= maybe_add(FID_HOME_ADDR, $patron->address);
+ $resp .= maybe_add(FID_EMAIL, $patron->email_addr);
+ $resp .= maybe_add(FID_HOME_PHONE, $patron->home_phone);
- # SIP 2.0 extensions used by Envisionware
- # Other terminals will ignore unrecognized fields (unrecognized field identifiers)
- $resp .= maybe_add(FID_PATRON_BIRTHDATE, $patron->birthdate);
- $resp .= maybe_add(FID_PATRON_CLASS, $patron->ptype);
+ # SIP 2.0 extensions used by Envisionware
+ # Other terminals will ignore unrecognized fields (unrecognized field identifiers)
+ $resp .= maybe_add(FID_PATRON_BIRTHDATE, $patron->birthdate);
+ $resp .= maybe_add(FID_PATRON_CLASS, $patron->ptype);
- # Custom protocol extension to report patron internet privileges
- $resp .= maybe_add(FID_INET_PROFILE, $patron->inet_privileges);
+ # Custom protocol extension to report patron internet privileges
+ $resp .= maybe_add(FID_INET_PROFILE, $patron->inet_privileges);
- $resp .= maybe_add(FID_SCREEN_MSG, $patron->screen_msg);
- $resp .= maybe_add(FID_PRINT_LINE, $patron->print_line);
+ $resp .= maybe_add(FID_SCREEN_MSG, $patron->screen_msg);
+ $resp .= maybe_add(FID_PRINT_LINE, $patron->print_line);
} else {
# Invalid patron ID:
# no privileges, no items associated,
$resp .= 'YYYY' . (' ' x 10) . $lang . Sip::timestamp();
$resp .= '0000' x 6;
+ $resp .= add_field(FID_INST_ID, ($ils->institution_id || 'SIP2'));
# patron ID is invalid, but field is required, so just echo it back
$resp .= add_field(FID_PATRON_ID, $fields->{(FID_PATRON_ID)});
$resp .= add_field(FID_PERSONAL_NAME, '');
}
}
- $resp .= add_field(FID_INST_ID, ($ils->institution_id || 'SIP2'));
$self->write_msg($resp);
return(PATRON_INFO);
}
($trans_date) = @{$self->{fixed_fields}};
- $ils->check_inst_id($fields->{FID_INST_ID}, "handle_end_patron_session");
+ $ils->check_inst_id($fields->{(FID_INST_ID)}, 'handle_end_patron_session');
($status, $screen_msg, $print_line) = $ils->end_patron_session($fields->{(FID_PATRON_ID)});
if (($i = scalar @{$item->hold_queue}) > 0) {
$resp .= add_field(FID_HOLD_QUEUE_LEN, $i);
}
- if (($i = $item->due_date) != 0) {
- $resp .= add_field(FID_DUE_DATE, Sip::timestamp($i));
+ if ($item->due_date) {
+ $resp .= add_field(FID_DUE_DATE, Sip::timestamp($item->due_date));
}
if (($i = $item->recall_date) != 0) {
$resp .= add_field(FID_RECALL_DATE, Sip::timestamp($i));
return $patron_status;
}
-sub api_auth($$) {
- # AUTH
- my ($username,$password) = (shift,shift);
- $ENV{REMOTE_USER} = $username;
- my $query = CGI->new();
- $query->param(userid => $username);
- $query->param(password => $password);
- my ($status, $cookie, $sessionID) = check_api_auth($query, {circulate=>1}, "intranet");
- # print STDERR "check_api_auth returns " . ($status || 'undef') . "\n";
- # print "api_auth userenv = " . &dump_userenv;
- return $status;
+sub api_auth {
+ my ($username,$password, $branch) = @_;
+ $ENV{REMOTE_USER} = $username;
+ my $query = CGI->new();
+ $query->param(userid => $username);
+ $query->param(password => $password);
+ if ($branch) {
+ $query->param(branch => $branch);
+ }
+ my ($status, $cookie, $sessionID) = check_api_auth($query, {circulate=>1}, 'intranet');
+ return $status;
}
1;