#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use JSON;

use Opals::Context;

use Opals::User qw(
    user_getInformationById
    user_isUserBc
    user_getUserCircInfo
);
use Opals::Constant;

use Opals::Template qw(
    tmpl_preference
);

use Opals::Equipment qw(
    eq_item_findByBarcode
);
use Opals::Eq_Circulation qw(
    
    circ_getItemInfo
    circ_getItemStatus
    
    circ_getUserCircStatus
    circ_getUserListLoan
    circ_getUserListReserve
    circ_getUserLoanHistory

    circ_processLoan
    circ_processReturn
    circ_processRenew

    circ_fillHold
    circ_placeHold
    circ_cancelHold
    circ_cancelHold_all
    circ_isOnHold

    circ_fillReserve
    circ_placeReserve
    circ_cancelReserve
    circ_resetReserve

    circ_declareLost
    circ_setAvailable
    circ_record_ODL

);
use Opals::Eq_BarcodeMgmt qw(
    eq_bcm_validateBc
);

use Opals::Date qw(

    date_time_text
    date_now
    date_parse
    date_getDeadLineDate
    date_deltaWorkDay
    date_getDeadLineDateTime
);

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

my $syspref    = tmpl_preference($dbh);
my $validateBc       = $syspref->{'validateBarcode'};
my $barcodeType      = $syspref->{'barcodeType'};

my $todayStr   = date_now();
my $input = {};
my ($msgCode,$itemMsgCode,$processCode,$userMsgCode)=(undef,undef,undef,undef);
my $reqItem;
my $tmpUser;
my ($uid,$barcode,$loanType,$dueDate,$cmdCode,$op,$cmdCode);
my $dateDueFormat_text="";
my $renewError;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
   $input = decode_json($cgi->param('POSTDATA'));
   ($uid,$barcode,$loanType,$dueDate,$op) = (0,"","","","");
   $uid = $input->{'uid'};
   $barcode = $input->{'barcode'};
   $loanType = $input->{'loanType'};
   $dueDate = $input->{'dateDue'} || $input->{'hourDue'};
   $op = $input->{'op'} || "";
   $cmdCode = $input->{'cmdCode'} || "";
   my ($userInfo, $guardian) = user_getInformationById($dbh, $uid);
   if ($op eq ""){ #loan
       $barcode    =~ s/^\s+|\s+$//g;
       $barcode = eq_bcm_validateBc($dbh, $barcode, $barcodeType) if ($validateBc eq '1');
        my $userCircStatus  = circ_getUserCircStatus($dbh, $uid, $barcode);
        my $itemCircStatus  = circ_getItemStatus($dbh, {barcode=>$barcode, uid=>$uid}); 
        $userMsgCode        = getMsgCode_user($userCircStatus);
        $itemMsgCode        = getMsgCode_item($itemCircStatus,$uid);
        my $itemInfo        = circ_getItemInfo($dbh, $barcode,$uid);
        if ($itemCircStatus->{'status'} == IT_STAT_NOEXIST){
            $msgCode = 1;
            #check if enter userbarcode into item barcode input
            my $isUId = user_isUserBc($dbh,$barcode);
            if ($isUId &&$isUId>0 ){
                $uid = $isUId;
                $itemMsgCode = '19';
                $tmpUser=getUserCircInfo($dbh,$isUId);
            }
       }
       else{
            my $loanPeriod   = ($itemInfo->{'loanPeriod'})? $itemInfo->{'loanPeriod'}:0;
            my $loanUnit = ($itemInfo->{'loanUnit'})? $itemInfo->{'loanUnit'} : 'day';
            my $loanDueDate = ($loanType eq "standard") ?getItemDueDate($loanPeriod, $loanUnit , $todayStr ) : formatStrDateDue($dueDate,$loanType);
            chomp($loanDueDate);
            #$loanPeriod = 0;             $loanDueDate = "";   
            if ($loanPeriod == 0 && (!$loanDueDate || $loanDueDate<= 0 || $loanDueDate eq "") ){
                $msgCode = 1;
                $itemMsgCode = '02';
                $reqItem = { 
                    name => $itemInfo->{'rname'},
                    barcode=> $barcode,
                    sfList=> $itemInfo->{'fields'}
                };
            }
            elsif ($itemCircStatus->{'status'} != IT_STAT_NOEXIST && $itemInfo){
                $dateDueFormat_text =  date_time_text($loanDueDate, 1, 'en' );
                $reqItem = { 
                    name => $itemInfo->{'rname'},
                    barcode=> $barcode,
                    sfList=> $itemInfo->{'fields'}
                };
                if(($itemMsgCode eq '05' || $itemMsgCode eq '08' || $itemMsgCode eq '12' || 
                        $itemMsgCode eq '16' || $itemMsgCode eq '17') && substr($userMsgCode, 0, 3 ) eq '100' ) {
                    $processCode = processCmd($dbh,$uid,$barcode,$itemInfo,$itemCircStatus,$itemMsgCode,$loanDueDate,undef);
                }
                elsif($cmdCode && $cmdCode ne ''){
                    $processCode = processCmd($dbh,$uid,$barcode,$itemInfo,$itemCircStatus,$itemMsgCode,$loanDueDate,undef);
                }
                else{
                     my $maxLoanBit  = substr ( $userMsgCode, 2 ,1); 
                     my $overdueBit  = substr ( $userMsgCode, 1 ,1);
                     if ($maxLoanBit eq '1')     {
                            $msgCode = $itemMsgCode . "-" . $userMsgCode; 
                        }
                        elsif ($overdueBit eq '1') {
                            $msgCode = $itemMsgCode . "-" . $userMsgCode; 
                            $processCode= 0;
                        }
                        else {
                            $msgCode=$itemMsgCode . "-" . $userMsgCode; 
                        }
                }
            }
            $uid = ($processCode)?$uid: undef;

       }

   } #if ($op eq "")
} #if ($ENV{'REQUEST_METHOD'} eq "POST")
print "Content-type: text/plain\n\n";
print   to_json({ 
    userCircInfo  => $tmpUser,
    msgCode       => $msgCode,
    itemMsgCode   => $itemMsgCode,
    itemInfo      => $reqItem,
    processCode   => $processCode,
    userMsgCode   => $userMsgCode,
    uid           => $uid,
    dueDate       => $dateDueFormat_text,
    barcode       => $barcode,
});

#-------------------------------------------------------------
sub getUserCircInfo{
    my ($dbh, $uid) = @_;
    my $userInfo=undef;
    my ($user, $guardian) = user_getInformationById($dbh, $uid);
    if(defined $user){
        $userInfo={};
        foreach my $f (qw(uid userbarcode username firstname lastname nickname homeroom teacher grade program studies notes status expired categorycode email)){
            $userInfo->{$f}=$user->{$f};
        }
    }
    my $userCircInfo->{'info'} = $userInfo;
    $userCircInfo->{'loanList'}= circ_getUserListLoan($dbh, {uid=>$uid});
    $userCircInfo->{'loanHistoryList'}    = circ_getUserLoanHistory($dbh, {uid=>$uid});
    return $userCircInfo;
}

sub getMsgCode_user{
    my ($userStatus)=@_;
    return $userStatus->{'status'}.$userStatus->{'overdue'}.$userStatus->{'maxLoan'}.$userStatus->{'maxRenew'}.$userStatus->{'maxReserve'};
}
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_HAVE_RSVR){
        if (scalar(@$reserveList)){
            my $topReserveUID = @$reserveList[0]->{'uid'};
            if ($itemCircStatus->{'inLibrary'}){
                if ($uid == $topReserveUID){
                    $retCode = "08";    }
                elsif (getReserseId($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{
        $retCode = "17";}
    return $retCode;
}
sub formatStrDateDue{
    my ($t_date,$h_d) = @_;
    my $retDD;
    return if ($t_date eq '' || $h_d eq '');
    if ($h_d eq 'd' || $h_d eq 'day' ){
          return $retDD = $t_date . ' 23:59:59';
    }
    return $retDD = `date -d '$t_date hour' '+%Y-%m-%d %H:%M:%S'`;
}
sub getItemDueDate{
    my($loanPeriod,$loanUnit, $todayStr) = @_;
    my $retDD;
    #return $retDD = `date -d '$loanPeriod hour' '+%Y-%m-%d %H:%M:%S'`
    if ($loanUnit eq 'hour' ){
        $retDD = date_getDeadLineDateTime($loanPeriod, $todayStr);
    }
    else {
        $retDD = date_getDeadLineDate($loanPeriod, $todayStr);
    }
    return $retDD;
}
sub getReserveId{
    my ($uid, $list)=@_;
    if (!$list){
        return 0;
    }
    foreach my $id(@$list){
        if ($id->{'uid'} == $uid){
            return $id->{'idReserve'};
        }
    }
    return 0;
}
sub processCmd{

    my ($dbh, $uid, $barcode, $itemInfo, $itemCircStatus, $cmdCode, $dateDue, $type) = @_;
    my $dateReturn = $todayStr;
    my $retVal;
    if ($cmdCode eq '03'){
        circ_setAvailable($dbh, $barcode, IT_STAT_LOST);
    }
    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'){
        my $dateExpiry      = getDeadLineDate($itemInfo->{'reservePeriod'}, $todayStr);
        my $placeReserve    = circ_placeReserve($dbh, $uid, $itemCircStatus->{'rid'}, 1,$todayStr, $dateExpiry);
        $retVal = 'p1_07_R';
        return $retVal;
    }
    elsif($cmdCode eq '08' || $cmdCode eq '09'){
        my $fillReserve = circ_fillReserve($dbh, $uid,$itemCircStatus->{'rid'});
    }
    elsif($cmdCode eq '09_H'){
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = 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";
        return $retVal;
     }
    elsif($cmdCode eq '10_H'){
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = 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";
        return $retVal;
    }
    elsif($cmdCode eq '10_HR'){
        my $reserveList  = $itemCircStatus->{'reserveList'};
        my $idReserve    = @$reserveList[0]->{'idReserve'};
        my $uidReserve   = @$reserveList[0]->{'uid'};
        my $reserveExpiry= @$reserveList[0]->{'dateExpiry'};
        my $dateExpiry   = getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
           $dateExpiry   = getDeadLineDate($itemInfo->{'reservePeriod'},$todayStr);
        my $putReserve   = circ_placeReserve($dbh, $uid,$itemCircStatus->{'rid'},1, $todayStr, $dateExpiry);
        $retVal =  "p1_10_HR";
        return $retVal;
    }
    elsif ($cmdCode eq '11' || $cmdCode eq '15'){
        my $renew = circ_processRenew($dbh, {uid=>$uid, barcode=>$barcode, rnDate=>$dateDue});
        return $retVal = "p" . $renew . "_" .$cmdCode;
    }
    elsif($cmdCode eq '11_H' ){
        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   = 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";
        return $retVal ;
    }
    elsif($cmdCode eq '12' || $cmdCode eq '13'){
        my $return      = doReturn($dbh, $itemCircStatus->{'l_uid'}, $barcode, $dateReturn);
        my $fillReserve = circ_fillReserve($dbh, $uid, $itemCircStatus->{'rid'});
    }
    elsif($cmdCode eq '13_H'){
        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   = 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";
        return  $retVal;
    }
    elsif ($cmdCode eq '14' || $cmdCode eq '16'){
        my $return  = doReturn($dbh, $itemCircStatus->{'l_uid'}, $barcode, $dateReturn);
    }
    elsif($cmdCode eq '14_H'){
        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   = 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";
        return $retVal;
    }
    elsif($cmdCode eq '14_HR'){
        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   = getDeadLineDate($itemInfo->{'holdPeriod'},$todayStr);
        if($dateExpiry >$reserveExpiry){
            $dateExpiry  = $reserveExpiry;
        }
        circ_fillReserve($dbh,$uidReserve ,$itemCircStatus->{'rid'});
        my $putOnHold    = circ_placeHold($dbh, $idReserve,$todayStr,$dateExpiry);
           $dateExpiry   = getDeadLineDate($itemInfo->{'reservePeriod'},$todayStr);
        my $putReserve   = circ_placeReserve($dbh, $uid,$itemCircStatus->{'rid'},1, $todayStr, $dateExpiry);
        $retVal =  "p1_14_HR";
        return $retVal;
    }
    my $idReserve =getReserveId($uid,$itemCircStatus->{'holdList'});
    if($idReserve && ($cmdCode eq '16' || $cmdCode eq 17)){
        my $fillHold  = circ_fillHold($dbh,$idReserve,$barcode);
    }
    my $loan = circ_processLoan($dbh, {uid=>$uid,barcode=>$barcode, dateLoan=>$todayStr, dateDue=>$dateDue});
    $retVal = "p" .$loan ."_" .$cmdCode;
    return $retVal;
}
sub doReturn{
    my ($dbh, $uid,$barcode,$dateReturn)= @_;
    my $sth = $dbh->prepare("select id as idLoan, dateDue from eq_loan where uid=? && barcode =? && dateReturn is null");
    $sth->execute($uid,$barcode);
    my $rec = $sth->fetchrow_hashref;
    my ($idLoan,$dateDue) = ($rec->{'idLoan'}, date_parse($rec->{'dateDue'}));
    my $dateRet = date_parse($dateReturn);
    my $odCount = date_deltaWorkDay($dateDue,$dateRet) ? date_deltaWorkDay($dateDue,$dateRet) : 0 ;
    my $odl_id = 0;
    if ($odCount > 0) {
        $odl_id = circ_record_ODL($dbh,$idLoan,'overdue',$odCount);
    }
    $sth->finish;
    return circ_processReturn($dbh, {uid=>$uid, barcode=>$barcode , dateReturn=>$dateReturn});
}

sub processRenew{
    my ($dbh, $uid, $bcList, $rnDateDue,$override)= @_;
    my @renewFailList = ();
    my $renewStatus;
    my $renewable = 0;
    foreach my $bc(@{$bcList}){
        my $itemCircStatus  = circ_getItemStatus($dbh, {barcode=>$bc });
        my $itemInfo        = circ_getItemInfo($dbh,$bc,$uid);
        $renewStatus = 0;
        $renewable = $override? 1: ($itemCircStatus->{'renewalCount'} < $itemCircStatus->{'maxRenewal'} ) ? 1:0;
        if ($itemCircStatus->{'l_uid'} == $uid && $renewable){
            my $dateDue = ($rnDateDue ne '')?$rnDateDue:getRenewDueDate($itemInfo->{'renewalPeriod'}, $itemCircStatus->{'l_duedate'},$todayStr);
            $renewStatus = circ_processRenew($dbh, {uid=>$uid, barcode=>$bc, rnDate=>$dateDue});
        }
        if (!$renewStatus){
            push @renewFailList, {
                bc      =>$bc, 
                rname   =>$itemInfo->{'rname'}, 
                renewable=>$renewable,
            };
        }
    }
    return \@renewFailList;
}

sub processReturn{
    my ($dbh, $uid, $barcode) = @_;
    my $retVal;
    my $itemInfo = circ_getItemInfo($dbh, $barcode);
    $retVal->{'itemInfo'} = $itemInfo;
    my $itemCircStatus  = circ_getItemStatus($dbh, {barcode=>$barcode});
    if ($itemCircStatus->{'status'} == IT_STAT_ONLOAN || $itemCircStatus->{'status'} == IT_STAT_HAVE_RSVR){
        my $return = doReturn($dbh, $uid, $barcode, $todayStr);
        my $reserveList = $itemCircStatus->{'reserveList'};
        $retVal->{'uid'} = $itemCircStatus->{'l_uid'};
        #check if current item is on reserve
        if ($reserveList && scalar(@$reserveList) > 0){
            my $idReserve   = @$reserveList[0]->{'idReserve'};
            my $uidReserve  = @$reserveList[0]->{'uid'};
            my ($reserveUser, $guardien) = user_getInformationById($dbh, $uidReserve);
            $itemInfo   = circ_getItemInfo($dbh, $barcode, $uidReserve);
            my $reserveExpiry  = @$reserveList[0]->{'dateExpiry'};
            my $dateExpiry      = getDeadLineDate($itemInfo->{'holdPeriod'}, $todayStr);
            if ($dateExpiry > $reserveExpiry){
                $dateExpiry = $reserveExpiry;
            }
            circ_fillReserve($dbh, $uidReserve, $itemCircStatus->{'rid'});
            my $placeOnHold = circ_placeHold($dbh, $idReserve, $todayStr, $dateExpiry);
        }
    }
    return $retVal;
}

sub declareLost{
    my ($dbh, $uid, $bcList) = @_;
    foreach my $bc(@{$bcList}){
        my $itemCircStatus  = circ_getItemStatus($dbh, {barcode=>$bc});
        my $itemInfo        = circ_getItemInfo($dbh, $bc, $uid);
        if ($itemCircStatus->{'l_uid'} == $uid){
            circ_declareLost($dbh, $uid ,$bc);
        }
        if ($itemCircStatus->{'l_idLoan'}){
            my $lost_odl_id = circ_record_ODL($dbh,$itemCircStatus->{'l_idLoan'},'lost', 0 );
        }
    }
}
sub getRenewDueDate{
    
    #my ($Dh, $duedate,$todayStr) = @_;
    my ($renewalPeriod, $duedate,$todayStr) = @_;
    my $retDate;
    my ($year,$month,$day,$hour,$min,$sec) = ($todayStr =~ /^(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)$/);
    return $retDate = date_getDeadLineDate($renewalPeriod, $todayStr);

}

