Lines 43-55
my $FILE_VERSION = '1.0';
Link Here
|
43 |
|
43 |
|
44 |
our $query = CGI->new; |
44 |
our $query = CGI->new; |
45 |
|
45 |
|
46 |
my ($template, $loggedinuser, $cookie) |
46 |
my ($template, $loggedinuser, $cookie) = get_template_and_user({ |
47 |
= get_template_and_user( { template_name => "offline_circ/process_koc.tmpl", |
47 |
template_name => "offline_circ/process_koc.tmpl", |
48 |
query => $query, |
48 |
query => $query, |
49 |
type => "intranet", |
49 |
type => "intranet", |
50 |
authnotrequired => 0, |
50 |
authnotrequired => 0, |
51 |
flagsrequired => { circulate => "circulate_remaining_permissions" }, |
51 |
flagsrequired => { circulate => "circulate_remaining_permissions" }, |
52 |
}); |
52 |
}); |
53 |
|
53 |
|
54 |
|
54 |
|
55 |
my $fileID=$query->param('uploadedfileid'); |
55 |
my $fileID=$query->param('uploadedfileid'); |
Lines 71-78
if ($completedJobID) {
Link Here
|
71 |
my $uploaded_file = C4::UploadedFile->fetch($sessionID, $fileID); |
71 |
my $uploaded_file = C4::UploadedFile->fetch($sessionID, $fileID); |
72 |
my $fh = $uploaded_file->fh(); |
72 |
my $fh = $uploaded_file->fh(); |
73 |
my @input_lines = <$fh>; |
73 |
my @input_lines = <$fh>; |
74 |
|
74 |
|
75 |
my $filename = $uploaded_file->name(); |
75 |
my $filename = $uploaded_file->name(); |
76 |
my $job = undef; |
76 |
my $job = undef; |
77 |
|
77 |
|
78 |
if ($runinbackground) { |
78 |
if ($runinbackground) { |
Lines 110-134
if ($completedJobID) {
Link Here
|
110 |
# if we get here, we're a child that has detached |
110 |
# if we get here, we're a child that has detached |
111 |
# itself from Apache |
111 |
# itself from Apache |
112 |
|
112 |
|
113 |
} |
113 |
} |
114 |
|
114 |
|
115 |
my $header_line = shift @input_lines; |
115 |
my $header_line = shift @input_lines; |
116 |
my $file_info = parse_header_line($header_line); |
116 |
my $file_info = parse_header_line($header_line); |
117 |
if ($file_info->{'Version'} ne $FILE_VERSION) { |
117 |
if ($file_info->{'Version'} ne $FILE_VERSION) { |
118 |
push( @output, { message => 1, |
118 |
push @output, { |
119 |
ERROR_file_version => 1, |
119 |
message => 1, |
120 |
upload_version => $file_info->{'Version'}, |
120 |
ERROR_file_version => 1, |
121 |
current_version => $FILE_VERSION |
121 |
upload_version => $file_info->{'Version'}, |
122 |
} ); |
122 |
current_version => $FILE_VERSION |
|
|
123 |
}; |
123 |
} |
124 |
} |
124 |
|
125 |
|
125 |
|
|
|
126 |
my $i = 0; |
126 |
my $i = 0; |
127 |
foreach my $line (@input_lines) { |
127 |
foreach my $line (@input_lines) { |
128 |
|
|
|
129 |
$i++; |
128 |
$i++; |
130 |
my $command_line = parse_command_line($line); |
129 |
my $command_line = parse_command_line($line); |
131 |
|
130 |
|
132 |
# map command names in the file to subroutine names |
131 |
# map command names in the file to subroutine names |
133 |
my %dispatch_table = ( |
132 |
my %dispatch_table = ( |
134 |
issue => \&kocIssueItem, |
133 |
issue => \&kocIssueItem, |
Lines 193-199
sub parse_command_line {
Link Here
|
193 |
my $command_line = shift; |
192 |
my $command_line = shift; |
194 |
chomp($command_line); |
193 |
chomp($command_line); |
195 |
$command_line =~ s/\r//g; |
194 |
$command_line =~ s/\r//g; |
196 |
|
195 |
|
197 |
my ( $timestamp, $command, @args ) = split( /\t/, $command_line ); |
196 |
my ( $timestamp, $command, @args ) = split( /\t/, $command_line ); |
198 |
my ( $date, $time, $id ) = split( /\s/, $timestamp ); |
197 |
my ( $date, $time, $id ) = split( /\s/, $timestamp ); |
199 |
|
198 |
|
Lines 239-363
sub arguments_for_command {
Link Here
|
239 |
} |
238 |
} |
240 |
|
239 |
|
241 |
sub kocIssueItem { |
240 |
sub kocIssueItem { |
242 |
my $circ = shift; |
241 |
my $circ = shift; |
243 |
|
242 |
|
244 |
$circ->{ 'barcode' } = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); |
243 |
$circ->{ 'barcode' } = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); |
245 |
my $branchcode = C4::Context->userenv->{branch}; |
244 |
my $branchcode = C4::Context->userenv->{branch}; |
246 |
my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); |
245 |
my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); |
247 |
my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); |
246 |
my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); |
248 |
my $issue = GetItemIssue( $item->{'itemnumber'} ); |
247 |
my $issue = GetItemIssue( $item->{'itemnumber'} ); |
249 |
|
248 |
|
250 |
if ( $issue->{ 'date_due' } ) { ## Item is currently checked out to another person. |
249 |
if ( $issue->{ 'date_due' } ) { ## Item is currently checked out to another person. |
251 |
#warn "Item Currently Issued."; |
250 |
#warn "Item Currently Issued."; |
252 |
my $issue = GetOpenIssue( $item->{'itemnumber'} ); |
251 |
my $issue = GetOpenIssue( $item->{'itemnumber'} ); |
253 |
|
252 |
|
254 |
if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it. |
253 |
if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it. |
255 |
#warn "Item issued to this member already, renewing."; |
254 |
#warn "Item issued to this member already, renewing."; |
256 |
|
255 |
|
257 |
C4::Circulation::AddRenewal( |
256 |
C4::Circulation::AddRenewal( |
258 |
$issue->{'borrowernumber'}, # borrowernumber |
257 |
$issue->{'borrowernumber'}, # borrowernumber |
259 |
$item->{'itemnumber'}, # itemnumber |
258 |
$item->{'itemnumber'}, # itemnumber |
260 |
undef, # branch |
259 |
undef, # branch |
261 |
undef, # datedue - let AddRenewal calculate it automatically |
260 |
undef, # datedue - let AddRenewal calculate it automatically |
262 |
$circ->{'date'}, # issuedate |
261 |
$circ->{'date'}, # issuedate |
263 |
) unless ($DEBUG); |
262 |
) unless ($DEBUG); |
264 |
|
263 |
|
265 |
push( @output, { renew => 1, |
264 |
push @output, { |
266 |
title => $item->{ 'title' }, |
265 |
renew => 1, |
267 |
biblionumber => $item->{'biblionumber'}, |
266 |
title => $item->{ 'title' }, |
268 |
barcode => $item->{ 'barcode' }, |
267 |
biblionumber => $item->{'biblionumber'}, |
269 |
firstname => $borrower->{ 'firstname' }, |
268 |
barcode => $item->{ 'barcode' }, |
270 |
surname => $borrower->{ 'surname' }, |
269 |
firstname => $borrower->{ 'firstname' }, |
271 |
borrowernumber => $borrower->{'borrowernumber'}, |
270 |
surname => $borrower->{ 'surname' }, |
272 |
cardnumber => $borrower->{'cardnumber'}, |
271 |
borrowernumber => $borrower->{'borrowernumber'}, |
273 |
datetime => $circ->{ 'datetime' } |
272 |
cardnumber => $borrower->{'cardnumber'}, |
274 |
} ); |
273 |
datetime => $circ->{ 'datetime' } |
|
|
274 |
}; |
275 |
|
275 |
|
276 |
} else { |
276 |
} else { |
277 |
#warn "Item issued to a different member."; |
277 |
#warn "Item issued to a different member."; |
278 |
#warn "Date of previous issue: $issue->{'issuedate'}"; |
278 |
#warn "Date of previous issue: $issue->{'issuedate'}"; |
279 |
#warn "Date of this issue: $circ->{'date'}"; |
279 |
#warn "Date of this issue: $circ->{'date'}"; |
280 |
my ( $i_y, $i_m, $i_d ) = split( /-/, $issue->{'issuedate'} ); |
280 |
my ( $i_y, $i_m, $i_d ) = split( /-/, $issue->{'issuedate'} ); |
281 |
my ( $c_y, $c_m, $c_d ) = split( /-/, $circ->{'date'} ); |
281 |
my ( $c_y, $c_m, $c_d ) = split( /-/, $circ->{'date'} ); |
282 |
|
282 |
|
283 |
if ( Date_to_Days( $i_y, $i_m, $i_d ) < Date_to_Days( $c_y, $c_m, $c_d ) ) { ## Current issue to a different persion is older than this issue, return and issue. |
283 |
if ( Date_to_Days( $i_y, $i_m, $i_d ) < Date_to_Days( $c_y, $c_m, $c_d ) ) { ## Current issue to a different persion is older than this issue, return and issue. |
|
|
284 |
C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG ); |
285 |
push @output, { |
286 |
issue => 1, |
287 |
title => $item->{ 'title' }, |
288 |
biblionumber => $item->{'biblionumber'}, |
289 |
barcode => $item->{ 'barcode' }, |
290 |
firstname => $borrower->{ 'firstname' }, |
291 |
surname => $borrower->{ 'surname' }, |
292 |
borrowernumber => $borrower->{'borrowernumber'}, |
293 |
cardnumber => $borrower->{'cardnumber'}, |
294 |
datetime => $circ->{ 'datetime' } |
295 |
}; |
296 |
|
297 |
} else { ## Current issue is *newer* than this issue, write a 'returned' issue, as the item is most likely in the hands of someone else now. |
298 |
#warn "Current issue to another member is newer. Doing nothing"; |
299 |
## This situation should only happen of the Offline Circ data is *really* old. |
300 |
## FIXME: write line to old_issues and statistics |
301 |
} |
302 |
} |
303 |
} else { ## Item is not checked out to anyone at the moment, go ahead and issue it |
284 |
C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG ); |
304 |
C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG ); |
285 |
push( @output, { issue => 1, |
305 |
push @output, { |
286 |
title => $item->{ 'title' }, |
306 |
issue => 1, |
287 |
biblionumber => $item->{'biblionumber'}, |
307 |
title => $item->{ 'title' }, |
288 |
barcode => $item->{ 'barcode' }, |
308 |
biblionumber => $item->{'biblionumber'}, |
289 |
firstname => $borrower->{ 'firstname' }, |
309 |
barcode => $item->{ 'barcode' }, |
290 |
surname => $borrower->{ 'surname' }, |
310 |
firstname => $borrower->{ 'firstname' }, |
291 |
borrowernumber => $borrower->{'borrowernumber'}, |
311 |
surname => $borrower->{ 'surname' }, |
292 |
cardnumber => $borrower->{'cardnumber'}, |
312 |
borrowernumber => $borrower->{'borrowernumber'}, |
293 |
datetime => $circ->{ 'datetime' } |
313 |
cardnumber => $borrower->{'cardnumber'}, |
294 |
} ); |
314 |
datetime =>$circ->{ 'datetime' } |
295 |
|
315 |
}; |
296 |
} else { ## Current issue is *newer* than this issue, write a 'returned' issue, as the item is most likely in the hands of someone else now. |
|
|
297 |
#warn "Current issue to another member is newer. Doing nothing"; |
298 |
## This situation should only happen of the Offline Circ data is *really* old. |
299 |
## FIXME: write line to old_issues and statistics |
300 |
} |
301 |
|
302 |
} |
316 |
} |
303 |
} else { ## Item is not checked out to anyone at the moment, go ahead and issue it |
|
|
304 |
C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG ); |
305 |
push( @output, { issue => 1, |
306 |
title => $item->{ 'title' }, |
307 |
biblionumber => $item->{'biblionumber'}, |
308 |
barcode => $item->{ 'barcode' }, |
309 |
firstname => $borrower->{ 'firstname' }, |
310 |
surname => $borrower->{ 'surname' }, |
311 |
borrowernumber => $borrower->{'borrowernumber'}, |
312 |
cardnumber => $borrower->{'cardnumber'}, |
313 |
datetime =>$circ->{ 'datetime' } |
314 |
} ); |
315 |
} |
316 |
} |
317 |
} |
317 |
|
318 |
|
318 |
sub kocReturnItem { |
319 |
sub kocReturnItem { |
319 |
my ( $circ ) = @_; |
320 |
my ( $circ ) = @_; |
320 |
$circ->{'barcode'} = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); |
321 |
$circ->{'barcode'} = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); |
321 |
my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); |
322 |
my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); |
322 |
#warn( Data::Dumper->Dump( [ $circ, $item ], [ qw( circ item ) ] ) ); |
323 |
#warn( Data::Dumper->Dump( [ $circ, $item ], [ qw( circ item ) ] ) ); |
323 |
my $borrowernumber = _get_borrowernumber_from_barcode( $circ->{'barcode'} ); |
324 |
my $borrowernumber = _get_borrowernumber_from_barcode( $circ->{'barcode'} ); |
324 |
if ( $borrowernumber ) { |
325 |
if ( $borrowernumber ) { |
325 |
my $borrower = GetMember( 'borrowernumber' =>$borrowernumber ); |
326 |
my $borrower = GetMember( 'borrowernumber' =>$borrowernumber ); |
326 |
C4::Circulation::MarkIssueReturned( $borrowernumber, |
327 |
C4::Circulation::MarkIssueReturned( |
327 |
$item->{'itemnumber'}, |
328 |
$borrowernumber, |
328 |
undef, |
329 |
$item->{'itemnumber'}, |
329 |
$circ->{'date'} ); |
330 |
undef, |
330 |
|
331 |
$circ->{'date'} |
331 |
push( @output, { return => 1, |
332 |
); |
332 |
title => $item->{ 'title' }, |
|
|
333 |
biblionumber => $item->{'biblionumber'}, |
334 |
barcode => $item->{ 'barcode' }, |
335 |
borrowernumber => $borrower->{'borrowernumber'}, |
336 |
firstname => $borrower->{'firstname'}, |
337 |
surname => $borrower->{'surname'}, |
338 |
cardnumber => $borrower->{'cardnumber'}, |
339 |
datetime => $circ->{ 'datetime' } |
340 |
} ); |
341 |
} else { |
342 |
push( @output, { ERROR_no_borrower_from_item => 1, |
343 |
badbarcode => $circ->{'barcode'} |
344 |
} ); |
345 |
|
346 |
} |
347 |
|
333 |
|
|
|
334 |
push @output, { |
335 |
return => 1, |
336 |
title => $item->{ 'title' }, |
337 |
biblionumber => $item->{'biblionumber'}, |
338 |
barcode => $item->{ 'barcode' }, |
339 |
borrowernumber => $borrower->{'borrowernumber'}, |
340 |
firstname => $borrower->{'firstname'}, |
341 |
surname => $borrower->{'surname'}, |
342 |
cardnumber => $borrower->{'cardnumber'}, |
343 |
datetime => $circ->{ 'datetime' } |
344 |
}; |
345 |
} else { |
346 |
push @output, { |
347 |
ERROR_no_borrower_from_item => 1, |
348 |
badbarcode => $circ->{'barcode'} |
349 |
}; |
350 |
} |
348 |
} |
351 |
} |
349 |
|
352 |
|
350 |
sub kocMakePayment { |
353 |
sub kocMakePayment { |
351 |
my ( $circ ) = @_; |
354 |
my ( $circ ) = @_; |
352 |
my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); |
355 |
my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); |
353 |
recordpayment( $borrower->{'borrowernumber'}, $circ->{'amount'} ); |
356 |
recordpayment( $borrower->{'borrowernumber'}, $circ->{'amount'} ); |
354 |
push( @output, { payment => 1, |
357 |
push @output, { |
355 |
amount => $circ->{'amount'}, |
358 |
payment => 1, |
356 |
firstname => $borrower->{'firstname'}, |
359 |
amount => $circ->{'amount'}, |
357 |
surname => $borrower->{'surname'}, |
360 |
firstname => $borrower->{'firstname'}, |
358 |
cardnumber => $circ->{'cardnumber'}, |
361 |
surname => $borrower->{'surname'}, |
359 |
borrower => $borrower->{'borrowernumber'} |
362 |
cardnumber => $circ->{'cardnumber'}, |
360 |
} ); |
363 |
borrower => $borrower->{'borrowernumber'} |
|
|
364 |
}; |
361 |
} |
365 |
} |
362 |
|
366 |
|
363 |
=head2 _get_borrowernumber_from_barcode |
367 |
=head2 _get_borrowernumber_from_barcode |
Lines 375-383
sub _get_borrowernumber_from_barcode {
Link Here
|
375 |
|
379 |
|
376 |
my $item = GetBiblioFromItemNumber( undef, $barcode ); |
380 |
my $item = GetBiblioFromItemNumber( undef, $barcode ); |
377 |
return unless $item->{'itemnumber'}; |
381 |
return unless $item->{'itemnumber'}; |
378 |
|
382 |
|
379 |
my $issue = C4::Circulation::GetItemIssue( $item->{'itemnumber'} ); |
383 |
my $issue = C4::Circulation::GetItemIssue( $item->{'itemnumber'} ); |
380 |
return unless $issue->{'borrowernumber'}; |
384 |
return unless $issue->{'borrowernumber'}; |
381 |
return $issue->{'borrowernumber'}; |
385 |
return $issue->{'borrowernumber'}; |
382 |
|
|
|
383 |
} |
386 |
} |
384 |
- |
|
|