#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);
use Opals::Context;
use Opals::Constant;
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);


use Opals::Circulation qw(
    circ_getUserCircStatus
    circ_getItemStatus
    circ_getItemInfo
    eCirc_processLoan
    eCirc_updateReserve
    eCirc_processReturn
    eCirc_getActiveLoanId
    eCirc_getNextReserveByBid
    eCirc_isOnLoanTo
    eCirc_updateReserveById
);
use Opals::Date qw(
    date_now
    date_getDeadLineDate
);
use Opals::User qw(
    user_currentUser
);

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        => 'ajax/circ/ebookReturn.tmpl'
        }
);
my $uid       = 0;
my $bid       = $input->{'bid'};
my $barcode   = undef; 

my ($errCode, $cookie, $user) = user_currentUser($dbh, $cgi);
my $userStatus      = undef;
my $itemCircStatus  = {status=>IT_STAT_NOEXIST};
my $itemInfo        = {loanPeriod=>0};

my $status=0;
my $itemMsgCode  ="60" ;

if($errCode==0 && $user->{'uid'}>0){
    $uid        = $user->{'uid'};
}

if (defined $bid && $bid>0) {
    $barcode= getBarcodeEbook($dbh,$bid);
    if(defined $barcode && $barcode ne""){
        $itemInfo   = circ_getItemInfo($dbh, $barcode, $uid);
        if (eCirc_isOnLoanTo($dbh,$uid,$bid)){
            $status = processReturn($dbh,$uid,$bid);
            $itemMsgCode  ="10" if($status >0);
        }
    }
}

$template->param(
                uid         => $uid,
                bid         => $bid,
                rid         => $itemInfo->{'rid'},
                title       => $itemInfo->{'title'},
                author      => $itemInfo->{'author'},
                itemType    => $itemInfo->{'itemId'},
                status      => $status,
                itemMsgCode => $itemMsgCode

        );
        
tmpl_write($dbh, $cgi, $cookie, $template);
###########################################################################################

sub getBarcodeEbook{
    my($dbh,$bid)=@_;
    my $sth=$dbh->prepare("select i.barcode from opl_item i inner join opl_ridBid e using(rid) where e.bid=? limit 1");
    $sth->execute($bid);
    my ($barcode ) = $sth->fetchrow_array;
    return $barcode eq '0E0'? undef:$barcode;
}
#-------------------------------------------------------------------------------------------

sub processReturn{
    my($dbh,$uid,$bid)=@_;
    my $idloan = eCirc_getActiveLoanId($dbh,$bid,$uid);
    my $status = eCirc_processReturn($dbh,$idloan);
    if($status){
      $status=1 if(fillReserve($dbh,$bid));
    }
    return $status;

}

#-------------------------------------------------------------------------------------------

sub fillReserve{
    my($dbh,$bid)=@_;
    my $reserve=eCirc_getNextReserveByBid($dbh,$bid);
    my $idloan=0;
    my $todayStr  = date_now() ;
    if($reserve){
        my $barcode     = getBarcodeEbook($dbh,$bid);
        my $itemInfo    = circ_getItemInfo($dbh, $barcode,$reserve->{'uid'});
        my $loanPeriod  = $itemInfo->{'loanPeriod'};
        my $dateDue     = date_getDeadLineDate($loanPeriod ,$todayStr);

        $idloan =   eCirc_processLoan($dbh,$reserve->{'uid'},$bid,$todayStr,$dateDue);
        eCirc_updateReserveById($dbh,$reserve->{'idReserve'},$idloan) if($idloan);
    }
    return $idloan>0?1:0;
}
