#!/usr/bin/perl

use strict;
use CGI;

use Opals::Context;

use POSIX qw(

    floor

);

use Opals::Template qw(

    tmpl_read
    tmpl_write

);

use Opals::User qw(

    user_list
    user_getInformationById
    user_teacherList
    user_isUserBc
);


use Opals::TeacherCourse qw(
    
    teacherCourse_getList
    teacher_getCatCode
    
);

use Opals::Course qw(
    
    course_getSchoolYearList
    course_getSchoolYearInfo

);

use Opals::Tb_Circulation qw(

    circ_getItemStatus
    circ_getItemInfo
    circ_getUserCircStatus
    circ_getUserListLoan
    circ_processLoan
    circ_processReturn
    circ_processRenew
    circ_declareLost
    circ_setAvailable
    circ_record_ODL

);
use Time::localtime;


use Date::Calc qw(

    Add_Delta_DHMS

);

use Opals::Date qw(

    date_text
    date_today
    date_parse
    date_getDeadLineDate

);

use Opals::Constant;

my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookie, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'txtbk/loan.tmpl',
        reqPermission   => 'tb_circ_loan',
    }
);

my @cookieList = (@$cookie);
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d" , $tm->year+1900, ($tm->mon)+1, $tm->mday);
my $dateDue;
my $dLast  = Opals::Context->preference('dateLast');
my $uInput = $input->{'uInput'};
my $courseTeacherId = $cgi->cookie('teacherScheduleId') ? $cgi->cookie('teacherScheduleId'):0;
my $teacherId   =  $cgi->cookie('teacherId') ? $cgi->cookie('teacherId'):0;
my $teacherName = ($input->{'selTeacherName'})?$input->{'selTeacherName'}:"";
my $courseName  = ($input->{'selCourseName'})?$input->{'selCourseName'}:"";
my($uid,$status,$loanOverrid) = getUID();
    if ($uid >= 0){
        push @cookieList, $cgi->cookie(
            -name   =>'borrower',
            -value  => $uid,
        );
        getUserInfo($dbh, $uid);

        my $op = $input->{'op'};
        if ($op eq ''){
            my $cmdCode = $input->{'cmdCode'};
            my $barcode = $input->{'bc'};
            $barcode =~ s/^\s+|\s+$//g;
            if ($barcode ne ''){
                my $userStatus      = circ_getUserCircStatus($dbh, $uid, $barcode);
                my $itemCircStatus  = circ_getItemStatus($dbh, $barcode);
                my $itemInfo        = circ_getItemInfo($dbh,$barcode,$uid);    
                my $userMsgCode     = getMsgCode_user($userStatus);
                my $itemMsgCode     = getMsgCode_item($itemCircStatus, $uid);
            
                if ($itemCircStatus->{'status'} == IT_STAT_NOEXIST){
                    #check if enter userbarcode into item barcode input
                    my $isUId = user_isUserBc($dbh,$barcode);
                    if ($isUId){
                        $uid = $isUId;
                        goto L_USER;
                    }
                    $template->param(msgCode=>1);
                    $template->param("msgItem_" . $itemMsgCode =>1);
                    goto L_USER;
                }
                my $loanPeriod = ($itemInfo->{'loanPeriod'})? $itemInfo->{'loanPeriod'} :0;
                #my $courseTeacherId = $input->{'courseTeacherId'};
                $dateDue = $input->{'dd'};
                if ($dateDue && $dateDue ne ''){
                    my $today = date_today();
                    my $dd = date_parse($dateDue);
                    if($dd && $dd <$today){
                        $dateDue="";
                    }
                }
                if (!$dateDue || $dateDue eq ''){
                    $dateDue = date_getDeadLineDate($loanPeriod, $todayStr);
                }
                else{
                     $dateDue .= " 23:59:59";
                }
                if ($itemCircStatus->{'status'} != IT_STAT_NOEXIST){
                    $template->param(
                        rid         => $itemInfo->{'rid'},
                        l_title     => $itemInfo->{'title'},
                        l_author    => $itemInfo->{'author'},
                        l_pubName   => $itemInfo->{'publisher'},
                        l_pubDate   => $itemInfo->{'pubDate'},
                        barcode     => $barcode,
                        uid         => $uid,
                    );       
                }
                my $alllowOD = 1;
                #0: no override, 1: override with question, 2: override automatically without approval
                if (($itemMsgCode eq '05' || $itemMsgCode eq '08' || 
                    $itemMsgCode eq '12' || $itemMsgCode eq '16' ||
                    $itemMsgCode eq '17') && (substr($userMsgCode , 0 ,3 ) eq '100' )){
                    my $processCode = processCmd($dbh,$uid,$barcode,$itemInfo,$itemCircStatus,$itemMsgCode,$dateDue,$courseTeacherId,$teacherName,$courseName );
                    $template->param($processCode => 1);
                    $template->param(processRSCode => 1);
                }
                elsif ($cmdCode && $cmdCode ne ''){
                    if ($cmdCode eq '11' || $cmdCode eq '15'){ #renewal
                    }
                    my $processCode = processCmd($dbh,$uid,$barcode,$itemInfo,$itemCircStatus,$cmdCode,$dateDue);
                    $template->param($processCode => 1);
                    $template->param(processRSCode => 1);
                }
                else{
                    my $maxLoanBit  = substr($userMsgCode, 2 ,1);
                    my $overdueBit  = substr($userMsgCode, 1, 1);
                    
                    if ($maxLoanBit eq '1'){
                        $template->param(msgCode=>$itemMsgCode . "-" . $userMsgCode); 
                        $template->param('msgItem_' . $itemMsgCode=>1);
                        $template->param(userMsgcode=>1);
                        $template->param('msgUser_' .$userMsgCode=>1);
                    }
                    elsif ($overdueBit eq '1'){
                         $template->param(msgCode=>$itemMsgCode . "-" . $userMsgCode); 
                         $template->param('msgItem_' . $itemMsgCode=>1);
                         $template->param(userMsgcode=>1);
                         $template->param('msgUser_' .$userMsgCode=>1);
                    }
                    else{
                        $template->param(msgCode=>$itemMsgCode . "-" . $userMsgCode); 
                        $template->param(msgCode=>1);
                        $template->param("msgItem_" . $itemMsgCode =>1); 
                    }
                }
            }
        }#if $op eq ''
        elsif ($input->{'op'} eq 'return'){
            my @returnList = split /,/, $input->{'itemList'};
            for (my $i = 0; $i <scalar(@returnList); $i++){
                my $retRS = processReturn($dbh, $returnList[$i]);
            }
        }
        elsif ($input->{'op'} eq 'lost'){
            declareLost($dbh, $uid, $input->{'itemList'});
        }

L_USER:
        getUserInfo($dbh, $uid);
    } #if($uid>=0)

my $schoolYear      = course_getSchoolYearInfo($dbh,'2009-2010');
my $curSchoolYearId = $schoolYear->{'id'};

my $catCode_teacher = teacher_getCatCode($dbh);

my $params = {};
my ($resultSize, $teacherList) = user_teacherList($dbh,$params, 0, 0, 'lastname, firstname', '' );

foreach my $teacher(@$teacherList){
    if ($teacher->{'uid'} == $teacherId){
        $teacher->{'selected'} = 1;
    }
}
my $teacherCourseList  = teacherCourse_getList($dbh, $curSchoolYearId ,$catCode_teacher);

$template->param(teacherList => $teacherList); 
$template->param(courseTeacherId => $courseTeacherId); 
$template->param(courseByTeacherList => $teacherCourseList); 

$template->param(dateDue => $dateDue); 

tmpl_write($dbh, $cgi, \@cookieList, $template);

#############################################################33

sub getUID{
    my($uid, $status, $loanOverride)=(-1,0,'');
    if ($input->{'uInput'}){
        my @uList = user_list($dbh, $input->{'uInput'},undef);
        if (scalar(@uList) == 1){
            $uid    = $uList[0]->{'uid'};
            $status = $uList[0]->{'status'};
            if ($status == 1){
                $template->param(u_block => 0);
                @uList[0]->{'u_block'} = 0;
            }
            else{
                $template->param(u_block =>1);
            }
            $template->param(uPerson =>1);
        }
        elsif(scalar(@uList)>1){
            for(my $i=0; $i<scalar(@uList); $i++){
                @uList[$i]->{'u_block'} = @uList[$i]->{'status'}==1?0:1;
            }
            $template->param(uList => \@uList);
        }
        else {#patron not in system
            $template->param(userNotMatch=>1);
        }
        #$template->param(uList => \@uList);
    }
    elsif ($input->{'InputFromList'}){
        $uid = $input->{'InputFromList'};
        my ($uInfo,$ttt) = user_getInformationById($dbh, $uid);
        $status = $uInfo->{'status'};
        if ($status == 1){
            $template->param(u_block => 0);
        }
        else{
            $template->param(u_block =>1);
        }
    }
    else{
        if ($input->{'hiddenid'}){
            $uid    = $input->{'hiddenid'};
        }
        else{
            #$uid = $input->{'uid'};
            $uid = $cgi->cookie('borrower'); }
        my ($uInfo,$ttt) = user_getInformationById($dbh, $uid);
        $status = $uInfo->{'status'};
        if ($status == 1){
            $template->param(u_block => 0);
        }
        else{
            $template->param(u_block =>1);
        }
    }
    if ($uid && $uid >= 0){
        $template->param(hasUser=>1,);  
    }
    else{
        $template->param(noUser=>1, );    }
    return ($uid, $status,$loanOverride);
}#end sub

sub getUserInfo{
    my ($dbh, $uid) = @_;
    my ($userInfo, $guardian) = user_getInformationById($dbh, $uid);

    my $balance = 0;
    $balance = floor($balance*100  + 0.50)/100;
    $balance = sprintf("%.2f",$balance);

    getItemLoanList($dbh,$template,$uid);
    $template->param(
        user_uid        => $userInfo->{'uid'},
        user_barcode    => $userInfo->{'userbarcode'},
        user_username   => $userInfo->{'username'},
        user_firstname  => $userInfo->{'firstname'},
        user_lastname   => $userInfo->{'lastname'},
        homeroom        => $userInfo->{'homeroom'},
        teacher         => $userInfo->{'teacher'},
        grade           => $userInfo->{'grade'},
        notes           => $userInfo->{'notes'},
        hiddenid        => $userInfo->{'uid'},
        balance         => $balance,
    );
}

sub getMsgCode_item{
    my ($itemCircStatus,$uid)=@_;
    my $retCode="";
    my $reserveList=$itemCircStatus->{'reserveList'};
    my $holdList=$itemCircStatus->{'holdList'};
    if($itemCircStatus->{'status'}==IT_STAT_NOEXIST){
        $retCode="00";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_UNAVAIL){
        $retCode="01";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_RESTRICTED){
        $retCode="02";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_LOST){
        $retCode="03";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_MISSING){
        $retCode="18";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_DAMAGED){
        $retCode="04";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_ONHOLD){
           if(getReserveId($uid,$holdList)>0){
               $retCode="05";}
           elsif(getReserveId($uid,$reserveList)>0){
                $retCode="06";}
           else{
                $retCode="07";}
    }
    elsif($itemCircStatus->{'status'}==IT_STAT_FULL_AVAIL && getReserveId($uid,$holdList)>0 ){
          $retCode="05";
    }    
    elsif($itemCircStatus->{'status'}==IT_STAT_HAVE_RSVR ){
        if(scalar(@$reserveList)){
            my $topReserveUID = @$reserveList[0]->{'uid'};
            if($itemCircStatus->{'inTBKRoom'}){
                if($uid ==$topReserveUID){
                    $retCode="08";            }
                elsif(getReserveId($uid,$reserveList)>0){
                    $retCode="09";            }
                else{
                    $retCode="10";            }
            }
            else{
                if($uid == $itemCircStatus->{'l_uid'}){
                    $retCode="11";  
                }
                elsif($uid ==$topReserveUID){
                    $retCode="12";            }
                elsif(getReserveId($uid,$reserveList)>0){
                    $retCode="13";            }
                else{
                    $retCode="14";            }
            }
        }
    }
    elsif($itemCircStatus->{'status'}==IT_STAT_ONLOAN && $uid eq $itemCircStatus->{'l_uid'}){
        $retCode="15";    }
    elsif($itemCircStatus->{'status'}==IT_STAT_ONLOAN && $uid ne $itemCircStatus->{'l_uid'}){
        $retCode="16";    }
    else{ # fully available
        $retCode="17";    }
    return $retCode;    
}

sub getMsgCode_user{
    my($userStatus)=@_;
    return $userStatus->{'status'}.$userStatus->{'overdue'}.$userStatus->{'maxLoan'}.$userStatus->{'maxRenew'}.$userStatus->{'maxReserve'};
}

sub getItemLoanList{
    my ($dbh, $template, $uid) = @_;
    my $loanList = circ_getUserListLoan($dbh,$uid);
    my $count = 0;
    my $odCount = 0;

    foreach my $loan(@$loanList){
        if ($loan->{'overdue'}) {$odCount++;}
        $loan->{'dateLoan'} = date_text($loan->{'dateLoan'}, 0);
        $loan->{'dateDue'}  = date_text($loan->{'dateDue'}, 0);
        $loan->{'number'} = $count++;
    }
    $template->param(loanList => \@$loanList);
    $template->param(LoanCount => scalar(@$loanList));
    $template->param(NumOfOverdue => $odCount);
}

sub processCmd{
    my ($dbh, $uid,$barcode,$itemInfo,$itemCircStatus,$cmdCode,$dateDue, $teacherScheduleId,$teacherName,$courseName) =@_;
    my $dateReturn =$todayStr;
        
    my $retVal; 

    if ($cmdCode eq '03'){
        circ_setAvailable($dbh,$barcode,IT_STAT_LOST);       
        #trans_doReverseLost($dbh,$barcode,$loginuid);
    }
    if ($cmdCode eq '18'){
        circ_setAvailable($dbh,$barcode,IT_STAT_MISSING);       
    }
    elsif ($cmdCode eq '04'){
        circ_setAvailable($dbh,$barcode,IT_STAT_DAMAGED);       
    }    
    elsif($cmdCode eq '05'){  
        #my $idReserve =getReserveId($uid,$itemCircStatus->{'holdList'});
        #my $fillHold  = circ_fillHold($dbh,$idReserve,$barcode);
    }
    elsif($cmdCode eq '06'){
        #my $idReserve     = getReserveId($uid,$itemCircStatus->{'reserveList'});
        #my $fillReserve   = circ_fillReserve($dbh,$uid ,$itemCircStatus->{'rid'});
        #my $idReserve     = getLastReserveId($itemCircStatus->{'holdList'});
        #my $cancelHold    = circ_cancelHold($dbh,$idReserve) ;
        #my $resetReserve  = circ_resetReserve($dbh,$idReserve);
    }
    elsif($cmdCode eq '07'){
        #my $idReserve    = getLastReserveId($itemCircStatus->{'holdList'});
        #my $cancelHold   = circ_cancelHold($dbh,$idReserve) ;
        #my $resetReserve = circ_resetReserve($dbh,$idReserve);
    }
    elsif($cmdCode eq '07_R'){
=item
        #my $dateExpiry   = date_getDeadLineDate($itemInfo->{'reservePeriod'},$todayStr);
        #my $putReserve   = circ_placeReserve($dbh, $uid,$itemCircStatus->{'rid'},1, $todayStr, $dateExpiry);
        #$retVal =  "p1_07_R";
=cut
        return $retVal;
    }
    elsif($cmdCode eq '08' || $cmdCode eq '09'){
        #my $fillReserve  = circ_fillReserve($dbh,$uid ,$itemCircStatus->{'rid'});
    }
    elsif($cmdCode eq '09_H'){
=item
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
        $retVal =  "p1_09_H";
=cut
        return $retVal;
     }
    elsif($cmdCode eq '10_H'){
=item
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
        $retVal =  "p1_10_H";
=cut
        return $retVal;
    }
    elsif($cmdCode eq '10_HR'){
=item
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
           $dateExpiry   = date_getDeadLineDate($itemInfo->{'reservePeriod'},$todayStr);
        my $putReserve   = circ_placeReserve($dbh, $uid,$itemCircStatus->{'rid'},1, $todayStr, $dateExpiry);
        $retVal =  "p1_10_HR";
=cut
        return $retVal;
    }
    elsif($cmdCode eq '11' || $cmdCode eq '15'){
        my $renew       = circ_processRenew($dbh,$uid,$barcode,$dateDue);
        $retVal =  "p". $renew . "_" .$cmdCode;
        return $retVal ;
    }
    elsif($cmdCode eq '11_H' ){
=item
        my $return       = doReturn($dbh,$itemCircStatus->{'l_uid'}, $barcode,$dateReturn);
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry;
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
        $retVal =  "p1_11_H";
=cut
        return $retVal ;
    }
    elsif($cmdCode eq '12' || $cmdCode eq '13'){
=item
        my $return       = doReturn($dbh,$itemCircStatus->{'l_uid'}, $barcode,$dateReturn);
        my $fillReserve  = circ_fillReserve($dbh,$uid ,$itemCircStatus->{'rid'});
=cut
    }
    elsif($cmdCode eq '13_H'){
=item
        my $return       = doReturn($dbh,$itemCircStatus->{'l_uid'}, $barcode,$dateReturn);
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry;
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
        $retVal =  "p1_13_H";
=cut
        return  $retVal;
    }
    elsif($cmdCode eq '14' || $cmdCode eq '16'){
        my $return       = doReturn($dbh,$itemCircStatus->{'l_uid'}, $barcode,$dateReturn);
    }
    elsif($cmdCode eq '14_H'){
=item
        my $return       = doReturn($dbh,$itemCircStatus->{'l_uid'}, $barcode,$dateReturn);
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry;
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
        $retVal =  "p1_14_H";
=cut
        return $retVal;
    }

    elsif($cmdCode eq '14_HR'){
=item        
        my $return       = doReturn($dbh,$itemCircStatus->{'l_uid'}, $barcode,$dateReturn);
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = date_getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry;
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
           $dateExpiry   = date_getDeadLineDate($itemInfo->{'reservePeriod'},$todayStr);
        my $putReserve   = circ_placeReserve($dbh, $uid,$itemCircStatus->{'rid'},1, $todayStr, $dateExpiry);
        $retVal =  "p1_14_HR";
=cut
        return $retVal;
    }
#   2006-09-28
#   fill hold if item is availbale and on hold for the same patron        
#   BEGIN    
=item
    my $idReserve =getReserveId($uid,$itemCircStatus->{'holdList'});
    if($idReserve && ($cmdCode eq '16' || $cmdCode eq 17)){
            my $fillHold  = circ_fillHold($dbh,$idReserve,$barcode);
    }
=cut
#   END     
    my $loan = circ_processLoan($dbh,$uid ,$barcode,$todayStr,$dateDue, $itemInfo->{'maxRenewal'}, $itemInfo->{'fine'},$teacherScheduleId,$teacherName,$courseName);
   
    $retVal = "p" .$loan  ."_" .$cmdCode ;

    return  $retVal;
}
sub getReserveId{
    my($uid,$list)=@_;
    if(!$list){
        return 0;
    }
    for(my $i=0; $i < scalar(@$list); $i++){
        if(@$list[$i]->{'uid'} == $uid){
            return @$list[$i]->{'idReserve'};
        }
    }
    return 0;
}

sub processReturn{
    my ($dbh, $barcode) = @_;
    my $retVal ;
    my $itemCircStatus  = circ_getItemStatus($dbh, $barcode);
    my $itemInfo        = circ_getItemInfo($dbh, $barcode);
        $retVal->{'itemInfo'} = $itemInfo;
    if ($itemCircStatus->{'status'} == IT_STAT_ONLOAN  ){
        my $return   = doReturn($dbh, $itemCircStatus->{'l_uid'}, $barcode, $todayStr);
    }
    return $retVal;
}

sub doReturn{
    my ($dbh, $uid, $barcode, $dateReturn) = @_;
    return circ_processReturn($dbh, $uid, $barcode, $dateReturn);
}

sub declareLost {

    my ($dbh, $uid, $bcList) = @_;
    my @arrLost = split/,/,$bcList;
    for (my $i = 0; $i < @arrLost; $i++){
        my $itemCircStatus = circ_getItemStatus($dbh,$arrLost[$i]);
        if ($itemCircStatus->{'l_uid'} == $uid){
            circ_declareLost($dbh, $arrLost[$i]);
        }
        if ($itemCircStatus->{'l_idLoan'}){
            my $lost_odl_id = circ_record_ODL($dbh,$itemCircStatus->{'l_idLoan'},'lost',0);
        }
    }
}

