#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Context;use POSIX qw(
    floor
);

use Time::localtime;
use Opals::Constant;

use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
    tmpl_redirect
);

use Opals::MarcXml qw(
    mxml_del_rec_holding
);
use Opals::Session qw(
    SessionHdl_clearVar
);
use URI::Escape;

use Opals::UnionRequest qw(
    urq_createUnionRequest
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);

use Opals::SolrIndex qw(
    slr_getARLMinMax_fieldVal
    slr_getLexileMinMax
);

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        => 'report/delExpFromHitlist.tmpl',
            reqPermission   => 'marc_del',
        }
);
$template->param(hlpUrl     => Opals::Constant->getHlpUrl('delExpFromHitlist'));
my $advSrch =$input->{'advSrch_hl'}|0;  


    $template->param(advSrch_hl     => $advSrch);
my $syspref = tmpl_preference($dbh);
#my @cookieList = ($cookie);
my $unionId   = Opals::Context->preference('unionId');
my $tm = localtime;
my $todayStr = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);

my $validateBc       = $syspref->{'validateBarcode'}; 
my ($bc,$rid,@ridArr, @ncrArr,$op, $dateExpiry);
my $holdingList;

my $actionName=$input->{'actionName'};  

my $sField  = $cgi->param('sf');
($sField && $sField =~ m/^(title|author|callnumber|barcode)$/i) || ($sField = 'barcode');
     
my $sValue  = $cgi->param('kw0');
my $loginuid = $template->param('curUserId');     
  
my $itemInfo; 
    my $msgValMap ={};
if ($permission && $permission->{'marc_del'}) {
    if($sValue && $sValue ne ''){
         $template->param(
            sValue   => $sValue,
        );
    }#if($sField eq 'barcode')

    #Fri, Jan 30, 2009 @ 15:08:56 EST
    if($unionId ne ''){
        $template->param(union  => 1);
    }
     $template->param(validateBc  => $validateBc );

my  $sth_get_ridBc = $dbh->prepare(<<_STH_);
select rid,barcode from opl_sessionVar where  ssid=? && var='delExpHitlist' order by rid
_STH_


    my $sessionID = $cgi->cookie('globalSessionID');
    my ($totalRequest,$totalDel) =(0,0);
    if($actionName && $actionName eq "deleteHolding"){
         $sth_get_ridBc->execute($sessionID);
         my %h; 
         while(my ($rid,$bc)= $sth_get_ridBc->fetchrow_array){
             $totalRequest++;
             if(!isItemOnloan($dbh,$bc)){
                $totalDel++;
                $h{$rid}{$bc}=1;
             }

         }
       
       my $delOpt=1;# 0: keep xml record if remaining holdings=0; 1 delete xml record;
       my $updateUnion =$input->{'update2Union'};

       $updateUnion='1' if($updateUnion && $updateUnion ne '');
       mxml_del_rec_holding($dbh,\%h,$delOpt,$updateUnion);
       
       
       ##push @cookieList, $cgi->cookie(-name => 'delExpHitlist', -value => '',); #clear cookie
       $msgValMap->{'delExpHitlist_msg_02'} ={totalRequest=>$totalRequest};
       $msgValMap->{'delExpHitlist_msg_02a'}={totalDel=>$totalDel};
       $msgValMap->{'delExpHitlist_msg_02b'}={totalOnloan=>$totalRequest - $totalDel};

       $template->param( deleteHolding => 1,
                         delListHasLoanItem=>($totalRequest>$totalDel)?1:0,
                        );
              
       $sth_get_ridBc->finish;
        
        # ===== clear selected from opl_sessionVar table ======
        SessionHdl_clearVar($dbh,$sessionID,"delExpHitlist");
 
    }
    elsif($actionName && $actionName eq "exportItem"){
        my $uid = $template->param('curUserId');

        my $eType         = $input->{'eType'};
        my $eEncoding     = $input->{'eEncoding'};
         
        my $query = <<_STH_;
insert into   opl_marcExport
set     uid             = $uid,
        dateRequest     = now(),
        eType           = ?,
        eEncoding       = ?,
        dateExpiry      = now() + interval 30 day
_STH_
        
        my $query_rid_bc = <<_STH_;
insert into opl_ridBcdHitlistExport
set     rid     = ?,
        barcode = ?,
        eid     = ?
_STH_
        if ($eType =~ m/^hitlist$/i) {
            my $sth_rid_bc = $dbh->prepare($query_rid_bc);
            my $sth = $dbh->prepare($query);
            $sth->execute($eType, $eEncoding);
            my $eid= $dbh->{'mysql_insertid'};
            $sth_get_ridBc->execute($sessionID);
            while(my ($rid,$bc)= $sth_get_ridBc->fetchrow_array){
                $sth_rid_bc->execute($rid,$bc,$eid);
            }
            $sth_rid_bc->finish;
            $sth_get_ridBc->finish;
            $sth->finish;
        }#if $eType
        
        # ===== clear selected from opl_sessionVar table ======
        my $clearAfterExp = $input->{'clearAfterExp'}; #Tue, Jan 27, 2009 @ 13:30:01 EST
        if($clearAfterExp eq '1'){
            SessionHdl_clearVar($dbh,$sessionID,"delExpHitlist");
        }
        tmpl_redirect($cgi,"/bin/record/export");

 
    }  
    elsif($actionName && $actionName eq "exportToUnion"){
        $sth_get_ridBc->execute($sessionID);
        my $ridBcList;
        while(my ($rid,$bc)= $sth_get_ridBc->fetchrow_array){
            push @{$ridBcList->{$rid}},$bc;  
        }
        urq_createUnionRequest($dbh,$loginuid,"import",$ridBcList);
        # ===== clear selected from opl_sessionVar table ======
        my $clearAfterExp = $input->{'clearAfterExp'}; #Tue, Jan 27, 2009 @ 13:30:01 EST
        if($clearAfterExp eq '1'){
            SessionHdl_clearVar($dbh,$sessionID,"delExpHitlist");
        }

    }
    
    
}

my($minAR_readingLevel,$maxAR_readingLevel)=slr_getARLMinMax_fieldVal('accelerated reader','AR_readingLevel');
my($minRC_readingLevel,$maxRC_readingLevel)=slr_getARLMinMax_fieldVal('reading counts','RC_readingLevel');

my($minAR_pointValue,$maxAR_pointValue)=slr_getARLMinMax_fieldVal('accelerated reader','AR_pointValue');
my($minRC_pointValue,$maxRC_pointValue)=slr_getARLMinMax_fieldVal('reading counts','RC_pointValue');

my($min_lexileValue,$max_lexileValue)=slr_getLexileMinMax();
$template->param(
    minAR_readingLevel  =>$minAR_readingLevel,
    maxAR_readingLevel  =>$maxAR_readingLevel,
    minRC_readingLevel  =>$minRC_readingLevel,
    maxRC_readingLevel  =>$maxRC_readingLevel,
    minAR_pointValue    =>$minAR_pointValue,
    maxAR_pointValue    =>$maxAR_pointValue,
    minRC_pointValue    =>$minRC_pointValue,
    maxRC_pointValue    =>$maxRC_pointValue,

    min_lexileValue     =>$min_lexileValue,
    max_lexileValue     =>$max_lexileValue,
);
#Tue, Jan 12, 2010 @ 10:31:41 EST
my $msgMap            =loc_getMsgFile('report/reports.msg',$msgValMap);
my $arlMsgMap         =loc_getMsgFile('search/arl.msg');
loc_write($template,$msgMap);
loc_write($template,$arlMsgMap);

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


################################################################################

sub isItemOnloan{
    my ($dbh,$bc)=@_;
    my $sql = <<_SQL_;
select  *
from    opl_loan
where   barcode = ? &&
        dateReturn is null
_SQL_

    my $item =$dbh->selectrow_hashref($sql, undef, $bc);
    if($item){
        return 1;
    }
    return 0;

}







