#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Time::localtime;
use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);

use Opals::User qw(
    user_getInformationById
);
use Opals::Tb_Circulation qw(
    circ_getItemStatus
    circ_getItemInfo
    circ_processRenew
);
use Opals::Date qw(
    date_getDeadLineDate
    date_text

);


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/ajax/circ/renew.tmpl',
        reqPermission   => 'tb_circ_loan',
    }
);

my $dateDue;
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);
my $syspref = tmpl_preference($dbh);
my @renewRSArr=();


if ($permission && $permission->{'tb_circ_loan'}) {
    my $uid = $input->{'uid'};
    my $inDueDate  = $input->{'duedate'};  
    my $cmdCode = $input->{'cmdCode'};  
    my @renewArr = split /,/,$input->{'bcList'};
    foreach my $barcode(@renewArr){
        $barcode    =~ s/^\s+|\s+$//g;
        my $renewStatus =0;
        my $renewStatusCode=""; 
        if ($barcode ne '') {    
            my $itemCircStatus = circ_getItemStatus($dbh,$barcode);
            my $l_uid               = $itemCircStatus->{'l_uid'};
            my $itemInfo       = circ_getItemInfo($dbh, $barcode, $l_uid);
            $dateDue  = ($inDueDate ne '')? "$inDueDate 23:59:59" : date_getDeadLineDate($itemInfo->{'renewalPeriod'},$todayStr);
             
            # cmdCode
            # CASE 1: renewal reaches max allowance.
            # CASE 2: Override block to renewal this item since this item has reserve forsomeone

            # renewalMsgCode:
            # renewal ok                :01        
            # item on loan but reserved :02
            # renewal not allowed       :03
            # renewal reaches max       :04
            # item doesnot exist        :05
            # item not on loan          :06
            # item not on loan for current user :07
                    
            if($cmdCode 
                && ($cmdCode eq '01'|| $cmdCode eq '02')){
                    $renewStatus = circ_processRenew($dbh,$uid,$barcode,$dateDue);
                    $renewStatusCode="01";
             }
                     
            elsif($itemCircStatus->{'status'}==IT_STAT_ONLOAN){
                if($uid ne $itemCircStatus->{'l_uid'}){
                    $renewStatusCode="07";
                }
                elsif($itemCircStatus->{'maxRenewal'}==0){
                    $renewStatusCode="03";
                  }
                elsif($itemCircStatus->{'renewalCount'} >= $itemCircStatus->{'maxRenewal'}){
                    $renewStatusCode="04";
                   }

                elsif($itemCircStatus->{'renewalCount'} < $itemCircStatus->{'maxRenewal'}){
                    $renewStatus = circ_processRenew($dbh,$uid,$barcode,$dateDue);
                    $renewStatusCode="01";
                }
            }
            else{

                    if($itemCircStatus->{'status'}==IT_STAT_NOEXIST){
                        $renewStatusCode="05";
                    }
                    elsif ($itemCircStatus->{'status'} == IT_STAT_HAVE_RSVR) {
                        # TRICKY CASE: 1 record may have more than 1 holding
                        # there is 1 or more on loan and at least 1 on reserve
                        $renewStatusCode="02";
                    }
                    elsif ($itemCircStatus->{'status'} != IT_STAT_ONLOAN) {
                        $renewStatusCode="06";
                    }
                               

           } #else if($itemCircStatus->{'status'}==IT_STAT_ONLOAN)     
           
            my $dueDateStr= date_text($dateDue, 0);
            push @renewRSArr,{  
                                uid=>$uid,
                                renewalMsgCode=>$renewStatusCode,
                                barcode=>$barcode,
                                dateDue=>$dueDateStr,
                                rid =>$itemInfo->{'rid'},
                                title =>$itemInfo->{'title'},
                                author=>$itemInfo->{'author'},
                                pubName=>$itemInfo->{'pubName'},
                                price=>$itemInfo->{'price'},
                             }
            
             
         }#if ($barcode ne '')
    }
    $template->param(renewalList=>\@renewRSArr);
     
      
}
tmpl_write($dbh, $cgi, $cookie, $template);


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



