- my $circ = shift;
-
- my $branchcode = C4::Context->userenv->{branch};
- my $borrower = GetMember( $circ->{ 'cardnumber' }, 'cardnumber' );
- my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } );
- my $issue = GetItemIssue( $item->{'itemnumber'} );
-
- my $issuingrule = GetIssuingRule( $borrower->{ 'categorycode' }, $item->{ 'itemtype' }, $branchcode );
- my $issuelength = $issuingrule->{ 'issuelength' };
- my ( $year, $month, $day ) = split( /-/, $circ->{'date'} );
- ( $year, $month, $day ) = Add_Delta_Days( $year, $month, $day, $issuelength );
- my $date_due = sprintf("%04d-%02d-%02d", $year, $month, $day);
-
- if ( $issue->{ 'date_due' } ) { ## Item is currently checked out to another person.
-warn "Item Currently Issued.";
- my $issue = GetOpenIssue( $item->{'itemnumber'} );
-
- if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it.
-warn "Item issued to this member already, renewing.";
-
- my $date_due_object = C4::Dates->new($date_due ,'iso');
- C4::Circulation::AddRenewal(
- $issue->{'borrowernumber'}, # borrowernumber
- $item->{'itemnumber'}, # itemnumber
- undef, # branch
- $date_due_object, # datedue
- $circ->{'date'}, # issuedate
- ) unless ($DEBUG);
-
- push( @output, { message => "Renewed $item->{ 'title' } ( $item->{ 'barcode' } ) to $borrower->{ 'firstname' } $borrower->{ 'surename' } ( $borrower->{'cardnumber'} ) : $circ->{ 'datetime' }\n" } );
-
- } else {
-warn "Item issued to a different member.";
-warn "Date of previous issue: $issue->{'issuedate'}";
-warn "Date of this issue: $circ->{'date'}";
- my ( $i_y, $i_m, $i_d ) = split( /-/, $issue->{'issuedate'} );
- my ( $c_y, $c_m, $c_d ) = split( /-/, $circ->{'date'} );
-
- 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.
- C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, $date_due ) unless ( DEBUG );
- push( @output, { message => "Issued $item->{ 'title' } ( $item->{ 'barcode' } ) to $borrower->{ 'firstname' } $borrower->{ 'surename' } ( $borrower->{'cardnumber'} ) : $circ->{ 'datetime' }\n" } );
-
- } 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.
-warn "Current issue to another member is newer. Doing nothing";
- ## This situation should only happen of the Offline Circ data is *really* old.
- ## FIXME: write line to old_issues and statistics
- }
-
+ my $circ = shift;
+
+ $circ->{barcode} = barcodedecode( $circ->{barcode} ) if $circ->{barcode};
+
+ my $branchcode = C4::Context->userenv->{branch};
+ my $patron = Koha::Patrons->find( { cardnumber => $circ->{cardnumber} } );
+ my $borrower = $patron->unblessed;
+ my $item = Koha::Items->find({ barcode => $circ->{barcode} });
+ my $issue = Koha::Checkouts->find( { itemnumber => $item->itemnumber } );
+ my $biblio = $item->biblio;
+
+ if ( $issue ) { ## Item is currently checked out to another person.
+ #warn "Item Currently Issued.";
+ my $issue = GetOpenIssue( $item->itemnumber ); # FIXME Hum? That does not make sense, if it's in the issue table, the issue is open (i.e. returndate is null)
+
+ if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it.
+ #warn "Item issued to this member already, renewing.";
+
+ C4::Circulation::AddRenewal(
+ $issue->{'borrowernumber'}, # borrowernumber
+ $item->itemnumber, # itemnumber
+ undef, # branch
+ undef, # datedue - let AddRenewal calculate it automatically
+ $circ->{'date'}, # issuedate
+ ) unless (DEBUG);
+
+ push @output, {
+ renew => 1,
+ title => $biblio->title,
+ biblionumber => $biblio->biblionumber,
+ barcode => $item->barcode,
+ firstname => $borrower->{ 'firstname' },
+ surname => $borrower->{ 'surname' },
+ borrowernumber => $borrower->{'borrowernumber'},
+ cardnumber => $borrower->{'cardnumber'},
+ datetime => $circ->{ 'datetime' }
+ };
+
+ } else {
+ #warn "Item issued to a different member.";
+ #warn "Date of previous issue: $issue->{'issuedate'}";
+ #warn "Date of this issue: $circ->{'date'}";
+ my ( $i_y, $i_m, $i_d ) = split( /-/, $issue->{'issuedate'} );
+ my ( $c_y, $c_m, $c_d ) = split( /-/, $circ->{'date'} );
+
+ 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.
+ C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG );
+ push @output, {
+ issue => 1,
+ title => $biblio->title,
+ biblionumber => $biblio->biblionumber,
+ barcode => $item->barcode,
+ firstname => $borrower->{ 'firstname' },
+ surname => $borrower->{ 'surname' },
+ borrowernumber => $borrower->{'borrowernumber'},
+ cardnumber => $borrower->{'cardnumber'},
+ datetime => $circ->{ 'datetime' }
+ };
+
+ } 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.
+ #warn "Current issue to another member is newer. Doing nothing";
+ ## This situation should only happen of the Offline Circ data is *really* old.
+ ## FIXME: write line to old_issues and statistics
+ }
+ }
+ } else { ## Item is not checked out to anyone at the moment, go ahead and issue it
+ C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG );
+ push @output, {
+ issue => 1,
+ title => $biblio->title,
+ biblionumber => $biblio->biblionumber,
+ barcode => $item->barcode,
+ firstname => $borrower->{ 'firstname' },
+ surname => $borrower->{ 'surname' },
+ borrowernumber => $borrower->{'borrowernumber'},
+ cardnumber => $borrower->{'cardnumber'},
+ datetime =>$circ->{ 'datetime' }
+ };