#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use Digest::SHA qw(
    sha1_base64
    sha1_hex
);
use POSIX qw(
    ceil
);

use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
);
use Opals::Session qw(
    SessionHdl_viewMovingHolding
    SessionHdl_mhPrevNextRecord
    SessionHdl_moveHolding
    SessionHdl_setTarget
    SessionHdl_add
    SessionHdl_del
    SessionHdl_get
    SessionHdl_clearVar
    SessionHdl_exist_rid
    SessionHdl_exist_bc
    SessionHdl_count
    SessionHdl_getBriefRecList
    SessionHdl_getBrRecListByHolding
);
use Opals::Search qw(
    srch_parseSearchTerm
    srch_searchRecord
    srch_zTab
    srch_buildNewItemSQLs
    srch_searchRecordSQL
    
);

use Opals::Equipment qw(
     srch_equipment

);
use Opals::SolrIndex qw(
    slr_search
    slr_buildSearchQuery_notContain
    slr_buildSearchQuery
    slr_buildSNewItemQuery
    slr_buildSReviewItemQuery
);

use Opals::Date qw(
    date_today
    date_f005
);
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();
=item
my($op,$varName,$rid,$bcList,$note);
   $rid  = $input->{"rid"};
   $bcList   = $input->{"bc"};
   $note = $input->{"note"};
=cut
my $sf852Map ={
    8001=>'2',              
    8002=>'3',               
    8003=>'6',               
    8004=>'8',               
    8005=>'9',               
    8006=>'a',               
    8007=>'b',               
    8008=>'c',              
    8009=>'e',              
    8010=>'f',              
    8011=>'g',              
    8012=>'h',              
    8013=>'i',              
    8014=>'j',              
    8015=>'k',              
    8016=>'l',              
    8017=>'m',   
    8018=>'n',              
    8019=>'p',              
    8020=>'q',              
    8021=>'s',              
    8022=>'t',              
    8023=>'x',              
    8024=>'z'          
    };

my $op        = $input->{"op"};
my $varName   = $input->{"ssVar"};
my @rid       = ($cgi->param('rid'));
my @bcList    = ($cgi->param('bc'));
my @note      = ($cgi->param('note'));

my $ssid      = getSessionId();
my $zid       = $input->{'zid'};
($zid && $zid =~ m/^[\d]+$/ && $zid >= 0) || ($zid = 0);
   
my $response="<?xml version=\"1.0\" encoding=\"UTF-8\"?><response>";

##### view moving holdings
if ($op eq 'viewMvHolding') {
    my ($targetRec, $viewRec) = 
        SessionHdl_viewMovingHolding($dbh, $ssid, $varName);
    $response .= "$targetRec\n$viewRec\n";

    my ($ridCount, $bcCount) = SessionHdl_count($dbh, $ssid, $varName);
    $response .= "<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}

#####
# - select target record, then show the next moving record
# - remove viewing record, then show the next moving record
# - view the previous or the next moving record
if ($op =~ m/^(mhSelect|mhRemove|mhPrev|mhNext)$/) {
    if ($op eq 'mhSelect') {
        SessionHdl_setTarget($dbh, $ssid, $varName, $input->{'targetRid'});
        $op = 'mhNext';
    }
    elsif ($op eq 'mhRemove') {
        SessionHdl_del($dbh, $ssid, $varName, $input->{'viewRid'});
        $op = 'mhNext';
    }

    my $sOrder = $input->{'sOrder'};
    my $viewRec = 
        SessionHdl_mhPrevNextRecord($dbh, $ssid, $varName, $sOrder, $op);
    $response .= "$viewRec\n";

    my ($ridCount, $bcCount) = SessionHdl_count($dbh, $ssid, $varName);
    $response .= "<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}

##### move holdings
if ($op eq 'mhMove') {
    $response .= SessionHdl_moveHolding($dbh, $ssid, $varName);

    #my ($ridCount, $bcCount) = SessionHdl_count($dbh, $ssid, $varName);
    #$response .= "<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}


##### add to session
if($op eq 'add'){
   for(my $i =0; $i < scalar(@rid);$i++){
       my @bcArr = split("\n",@bcList[$i]);
       my $n = scalar(@bcArr);
       if($n>0){
           foreach my $bc(@bcArr){
               if($bc ne ''){
                    SessionHdl_add($dbh,$ssid,$varName,@rid[$i],$bc) ;
               }
              
            }
       }
       else{
           SessionHdl_add($dbh,$ssid,$varName,@rid[$i],'',@note[$i]) ;
       }
   }
   $response .="<status>success</status>";
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}

##### delete from session
if($op eq 'del'){
   if($cgi->param('rid') && scalar(@rid)>0){
       for(my $i =0; $i < scalar(@rid);$i++){
           if(scalar(@bcList) ==0){
                SessionHdl_del($dbh,$ssid,$varName,@rid[$i]) ;    
           }
           else{
               my @bcArr = split("\n",@bcList[$i]);
               foreach my $bc(@bcArr){
                    SessionHdl_del($dbh,$ssid,$varName,@rid[$i],$bc) ;    
               }
           }
        }
   }
   else{
       my $bcList =  $cgi->param('bc');
       my @bcArr = split("\n",$bcList);
       foreach my $bc(@bcArr){
            SessionHdl_del($dbh,$ssid,$varName,'',$bc) ;    
       }
   }
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<status>success</status>";
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}

##### get from session
if($op eq 'get'){
   my $offset =  ($cgi->param('offset'));
   my $count =  $cgi->param('count');
   ($offset && $offset >=0)|| ($offset=0);
   ($count && $count >0) || ($count=25);  
    
   my $val= SessionHdl_get($dbh,$ssid,$varName,$offset,$count) ;
   $response .="<status>success</status>";
   foreach my $r(@$val){
        $response .="<data>";
        $response .="<rid>" . $r->{"rid"} . "</rid>\n";
        if($r->{"barcode"}){
            $response .="<barcode>" . $r->{"barcode"} . "</barcode>\n";
        }
        if($r->{"note"}){
            $response .="<note>" . $r->{"note"} . "</note>\n";
        }
        $response .="</data>";
   }
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}
##### get record list from session
if($op eq 'getBriefRecList'){
   my $offset =  ($cgi->param('offset'));
   my $count  =  $cgi->param('count');
   my $filo   =  $cgi->param('filo');
   ($offset && $offset >=0)|| ($offset=0);
   ($count && $count >0) || ($count=20);  
   my $recListXml = SessionHdl_getBrRecListByHolding($dbh,$ssid,$varName,$offset,$count,$filo) ;
   $response .="<status>success</status>";
   $response .= $recListXml;
  }


##### get from session
if($op eq 'count'){
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<status>success</status>";
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}
if($op eq 'all' && $varName eq 'newItemMngmt'){
    my $range= $cgi->param('range');
    addAllNewItems($dbh,$range);
}
##### All all export
## Tue, Mar 22, 2011 @ 08:39:53 EDT
##### Using new searching:searchSolr
if($op eq 'addAll' || $op eq 'clearAll'){
   addDelAll($op);
    
   $response .="<status>success</status>";
   my($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}
##### All all Global editor

if($op eq 'addAllGe'){
    my ($resultSize, $result);
    my ($offset,$pSize)=(0,50);
    my $rs= searchSolr($input,{},$offset,$pSize);
    while($offset <$rs->{'hits'}){
        foreach my $rec(@{$rs->{'recordList'}}){
            my $itemList=$rec->{'itemList'};
            foreach my $item(@$itemList){
                SessionHdl_add($dbh,$ssid,$varName,$rec->{'rid'},$item->{'barcode'},''); 
            }
        }
        $offset +=$pSize;
        $rs= searchSolr($input,{},$offset,$pSize);
    }
   $response .="<status>success</status>";
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}
# Wed, Jan 21, 2009 @ 10:12:36 EST
# add all -- shelf range list for printing .....

if($op eq 'addAllPages'){
    if($varName eq 'shelfRange'){
        my $callNoB = $input->{'callNoB'};
        my $callNoE = $input->{'callNoE'};
        my $shelvingLoc = $input->{'shelvingLoc'};
        addAllShelfRange($dbh,$callNoB,$callNoE,$shelvingLoc);
    }
    elsif($varName eq 'itemNoCirc'){
        my $dateFrom          = $input->{'reportFrom'};
        my $dateTo            = $input->{'reportTo'};
        my $inExOpt           = $input->{'incExcOpt'};
        my $inEx_itemTypeStr  = $input->{'inEx_itemType'};
        my $dateRange         = $input->{'dateRangeOpt'};
        my $dateToday = date_f005();
        $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
        if ($dateRange eq "all"){
            $dateFrom= "1970-01-01";
            $dateTo  = $dateToday;
        }
    
        $dateFrom = $dateToday if ( !$dateFrom );
        $dateFrom .= " 00:00:00";
        $dateTo = $dateToday if ( !$dateTo );
        $dateTo .= " 23:59:59";
        addAllItemNoCirc($dbh,$dateFrom, $dateTo, $inExOpt, $inEx_itemTypeStr);    
    }
    elsif($varName eq 'delExpHitlist'){
        my @recType     = $cgi->param('recType');
        my $filter;
        $filter->{'recType'}=\@recType;

        my ($resultSize, $result);
        my ($offset,$pSize)=(0,50);
        my $rs= searchSolr($input,$filter,$offset,$pSize);

        while($offset <$rs->{'hits'}){
            foreach my $rec(@{$rs->{'recordList'}}){
                my $itemList=$rec->{'itemList'};
                    foreach my $item(@$itemList){
                        SessionHdl_add($dbh,$ssid,$varName,$rec->{'rid'},$item->{'barcode'},'');
                    }
            }
            $offset +=$pSize;
            $rs= searchSolr($input,$filter,$offset,$pSize);
        }

       
       
    }
    elsif ($varName eq 'eqBC'){
        my $kw          = $input->{'kw'};
        my $field       = $input->{'field'};
        my $sField      = $input->{'sField'};
        my $sortAttr    = $input->{'sortAttr'};
        my $sortOrder   = $input->{'sortOrder'};
        my ($resultSize, $recordList) = srch_equipment($dbh, $field, $kw,0,100000 ,$sortOrder, $sortAttr);
        foreach my $r (@$recordList){
            SessionHdl_add($dbh,$ssid,$varName,$r->{'rid'},'','') ;
        }
    }
    elsif($varName eq 'bibliography' && $input->{'pageName'} eq 'newitems'){
        addAllNewItem_Solr($dbh,$varName,$input);    
    }
    elsif($varName eq 'bibliography' && $input->{'pageName'} eq 'ratingitems'){
        addAllRatingItem_Solr($dbh,$varName,$input);    
    }
    
    $response .="<status>success</status>";
    my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
    $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";
}



##### clear session
if($op eq 'clearVar'){
   SessionHdl_clearVar($dbh,$ssid,$varName) ;
   $response .="<status>success</status>";
   $response .="<varCount><ridCount>0</ridCount><barcodeCount>0</barcodeCount></varCount>";
}
##### verify if rid in given list is already set in session
##### return rid(s) within this list which have been selected
if($op eq 'verify'){
   
   $response .="<status>success</status>";
   for(my $i =0; $i < scalar(@rid);$i++){
       if(@rid[$i] ne '' && SessionHdl_exist_rid($dbh,$ssid,$varName,@rid[$i])==1){
           $response .="<rid>" .@rid[$i] ."</rid>";
       }
   }
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";

}
##### verify if brcode in given list is already set in session
##### return barcode(s) within this list which have been selected
if($op eq 'verify_bc'){
   
   $response .="<status>success</status>";
   for(my $i =0; $i < scalar(@bcList);$i++){
       if(@bcList[$i] ne '' && SessionHdl_exist_bc($dbh,$ssid,$varName,@bcList[$i])==1){
           $response .="<barcode>" .@bcList[$i] ."</barcode>";
       }
   }
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount>$bcCount</barcodeCount></varCount>";

}
$response .="</response>";
my $cookie = $cgi->cookie(
      -name    => "globalSessionID",
      -value   => $ssid);

print $cgi->header(
        -type    => 'text/html',
        -cookie  => $cookie,
        -charset => 'utf-8'
    );
print $response;
#------------------------------------------------------------------------------
sub getSessionId{
   my $sessionID="";
   my $sessionID = $cgi->cookie('globalSessionID');
   if(!$sessionID){
        $sessionID = sha1_hex(time . rand(time));
   }
   return $sessionID; 
}
#------------------------------------------------------------------------------
################################################################################
sub buildPQF{
    my ($sfOrder, $kw, $boolop);
    my $pqf="";
    my $iCount = 0;
    foreach my $cgiInput (keys %$input) {
        $iCount++ if ($cgiInput =~ m/^sf/);
    }
    for (my $i = 0; $i < $iCount; $i++) {
        my $sfOrder= 'sf' . $i;
        $kw     = 'kw' . $i;
        $boolop = 'boolop' . $i;
         if ($input->{$kw}) {
            my $sTerm = srch_parseSearchTerm($input->{$kw});
            if ($sTerm) {
                if ($pqf) {
                    $pqf = "\@$input->{$boolop} $pqf \@attr 1=$input->{$sfOrder} $sTerm";
                }
                else {
                    $pqf = "\@attr 1=$input->{$sfOrder} $sTerm";
                }
            }
        }
    }

   return $pqf;

}
################################################################################
sub searchEmpty852Subfield{
    my($dbh,$code)=@_;

    my @result=();

    my $sql = "select  t1.rid,t1.barcode
           from    opl_item t1  left outer join opl_itemInfo t2 on t1.barcode= t2.barcode 
                   && t2.sf852Code=?

           where   t1.barcode not regexp '^\_\_\_'  && t2.barcode is null order by t1.rid";
    my $sth =  $dbh->prepare($sql);
    $sth->execute($code);
    my ($rid,$curRid,$barcode,$i)=(0,0,'',-1);
    while( ($rid,$barcode)=$sth->fetchrow_array){
       if($curRid != $rid ){
            push  @result,{rid=>$rid};
            $curRid =$rid;
            $i++;
       }
       push @{@result[$i]->{'itemList'}}, {barcode=>$barcode};
   }

=other way to create @result
   my $rlist;
   while (($rid, $barcode) = $sth->fetchrow_array()) {
       push @{$rlist->{$rid}}, $barcode;
   }
   foreach $rid (sort keys %{$rlist}) {
       push @result, {
           rid => $rid,
           itemList => $rlist->{$rid},
       };
   }
=cut
    return(\@result);
}
#------------------------------------------------------------------------------
#Fri, Apr 08, 2011 @ 10:18:57 EDT
sub addAllNewItem{
    my ($dbh,$varName,$sortAttr,$sortOrder,$range)=@_;
    my $input ={sortAttr  => $sortAttr,
                sortOrder => $sortOrder,
                range     => $range
                };
    my ($sql,$sql_count)= srch_buildNewItemSQLs($input);   

    my ($offset,$pSize)=(0,50);
    my ($resultSize, $result) =srch_searchRecordSQL($dbh,'b', $sql,$sql_count, $offset, $pSize);
    while($offset <$resultSize){
        foreach my $rec(@$result){
            SessionHdl_add($dbh,$ssid,$varName,$rec->{'rid'},'','');
        }
        $offset +=$pSize;
        ($resultSize, $result)= srch_searchRecordSQL($dbh,'b', $sql,$sql_count,$offset, $pSize);
    }
               
}
#------------------------------------------------------------------------------
#Thu, Aug 18, 2011 @ 08:44:48 EDT

sub addAllNewItem_Solr{
    my ($dbh,$varName,$input)=@_;
    my ($range,$sortAttr,$sortOrder) =  ($input->{'range'},$input->{'sortAttr'},$input->{'sortOrder'});

    my $today = date_today();
    my ($year,$month,$day) = $today->date();
    my $todayStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
    my $expiryDate = $today ;
    my $dateImport = $today + [0,0,-1*$range];
      ($year,$month,$day) = $expiryDate->date();
    my $expiryDateStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
      ($year,$month,$day) = $dateImport->date();
    my $dateImportStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
    
    my $lQuery=slr_buildSNewItemQuery($input);
    my $rs=undef;
 
    my ($offset,$pSize)=(0,50);
    $rs = slr_search({lQuery  =>$lQuery,  recFormat=>'brief',
                      sortAttr=>$sortAttr,sortDir  =>$sortOrder,
                      offset  =>$offset,  size     =>$pSize,
                      incCircStatus=>1});  

    my ($resultSize, $result) = ($rs->{'hits'}, $rs->{'recordList'});

    while($offset <$resultSize){
        foreach my $rec(@$result){
            SessionHdl_add($dbh,$ssid,$varName,$rec->{'rid'},'','');
        }
        $offset +=$pSize;
        $rs = slr_search({lQuery    =>$lQuery,  recFormat=>'brief',
                          sortAttr  =>$sortAttr,sortDir  =>$sortOrder,
                          offset    =>$offset,  size     =>$pSize,
                          incCircStatus=>1});  

         ($resultSize, $result) = ($rs->{'hits'}, $rs->{'recordList'});
     }
}

#------------------------------------------------------------------------------
# ADD Thu, Aug 18, 2011 @ 11:38:46 EDT

sub addAllRatingItem_Solr{
    my ($dbh,$varName,$input)=@_;
    my ($range,$sortAttr,$sortOrder) =  ($input->{'range'},$input->{'sortAttr'},$input->{'sortOrder'});

    my $today = date_today();
    my ($year,$month,$day) = $today->date();
    my $todayStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
    my $expiryDate = $today ;
    my $dateImport = $today + [0,0,-1*$range];
      ($year,$month,$day) = $expiryDate->date();
    my $expiryDateStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
      ($year,$month,$day) = $dateImport->date();
    my $dateImportStr = sprintf("%04d-%02d-%02d",$year,$month,$day);
    
    my $lQuery=slr_buildSReviewItemQuery($input);
    my $rs=undef;
 
    my ($offset,$pSize)=(0,50);
    $rs = slr_search({lQuery  =>$lQuery,  recFormat=>'brief',
                      sortAttr=>$sortAttr,sortDir  =>$sortOrder,
                      offset  =>$offset,  size     =>$pSize,
                      incCircStatus=>1});  

    my ($resultSize, $result) = ($rs->{'hits'}, $rs->{'recordList'});

    while($offset <$resultSize){
        foreach my $rec(@$result){
            SessionHdl_add($dbh,$ssid,$varName,$rec->{'rid'},'','');
        }
        $offset +=$pSize;
        $rs = slr_search({lQuery    =>$lQuery,  recFormat=>'brief',
                          sortAttr  =>$sortAttr,sortDir  =>$sortOrder,
                          offset    =>$offset,  size     =>$pSize,
                          incCircStatus=>1});  

         ($resultSize, $result) = ($rs->{'hits'}, $rs->{'recordList'});
     }
}


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

sub  addAllShelfRange{
    my ($dbh,$callNoB,$callNoE,$shelvingLoc)=@_;
    my $sqlCond ='';
    if($callNoB ne ''){
        $sqlCond =" &&  i.callNumber >= '$callNoB'";
    }
    if($callNoE ne ''){
        $sqlCond .=" &&  i.callNumber <= '$callNoE'";
    }
    if(defined $shelvingLoc && $shelvingLoc ne ''){
        $sqlCond .= " && location ='" . $shelvingLoc  ."'";
    }    
my $sql =<<_STH_;
    INSERT INTO opl_sessionVar(ssid,var,rid,barcode)
    select distinct '$ssid','shelfRange',i.rid,i.barcode
           from opl_marcRecord m inner join opl_item i on i.rid=m.rid 
                 
           where i.barcode not regexp '^\_\_\_'
_STH_

   if($sqlCond ne ''){
     $sql .= $sqlCond;  
   }

    my $sth = $dbh->prepare($sql);
    $sth->execute();
    $sth->finish;

    
}

#------------------------------------------------------------------------------
#  Mon, Jan 26, 2009 @ 15:22:03 EST
#
sub addAllItemNoCirc{
    my ($dbh,$dateFrom, $dateTo, $inExOpt, $inEx_itemTypeStr) = @_;
    
 
        
        my ($sql,$sqlCond) =('','');
        my ($op,$cmp) = ($inExOpt eq 'exclusion')?('AND','<>'):('OR','=');
        my @inEx_itemType = ();
        @inEx_itemType = split(/,/, $inEx_itemTypeStr);

        foreach my $exIType (@inEx_itemType){
            $exIType =~ s/\'/\\\'/gi;
            if($sqlCond ne ''){
                $sqlCond .=" $op typeId $cmp '$exIType' ";
            }
            else{
                $sqlCond =" typeId $cmp '$exIType' ";
            }
        }
         $sql ="  INSERT INTO opl_sessionVar(ssid,var,rid,barcode)           
            select distinct '$ssid','itemNoCirc',i.rid ,i.barcode
                   from opl_marcRecord m inner  join opl_item i on i.rid=m.rid 
                        left outer join opl_loan l on i.barcode=l.barcode  
                        && l.dateLoan <= '$dateTo' && l.dateLoan >= '$dateFrom'
                   where i.barcode not regexp '^\_\_\_' 
                         && i.barcode not regexp '^TMP\_' 
                         && i.dateImport <= '$dateTo'
                         && l.barcode is null";

       if($sqlCond ne ''){
         $sql .= " AND ($sqlCond)";  
       }
      # $sql .="    group by rid having count(l.barcode) =0 ";
      #open debug,">/tmp/zzz"; print debug ">>> \n$sql ";close debug; 
       my $sth = $dbh->prepare($sql);
       $sth->execute();
       $sth->finish;

}


sub addEqBC {
    
    my ($dbh,$rid) = @_;
    

}
#=======================================================
# Tue, Feb 05, 2013 @ 16:07:39 EST
#
sub addDelAll{
    my($op)=@_;
    my @recType     = $cgi->param('recType');
    my $filter;
    $filter->{'recType'}=\@recType;
    my $locationSel = $input->{'location'};
    if(defined $input->{'location'} && $locationSel ne ""){
        $filter->{'location'} = $locationSel;
    }

    my $ssFn=$op eq "addAll"?\&SessionHdl_add : \&SessionHdl_del;
    my ($resultSize, $result);
    my ($offset,$pSize)=(0,50);
    my $lQuery=buildSelAllQuerySolr($input,$filter);
    
    my $sParam={lQuery=>$lQuery,recFormat=>'detail',                         
                         offset=>$offset,size=>$pSize};
                         
    my $rs= slr_search($sParam);

    while($offset <$rs->{'hits'}){
        $offset +=$pSize;
        foreach my $rec(@{$rs->{'recordList'}}){
            if($varName eq 'delExpHitlist'){
                my $itemList=$rec->{'itemList'};
                foreach my $item(@$itemList){
                    &$ssFn($dbh,$ssid,$varName,$rec->{'rid'},$item->{'barcode'},''); 
                }
            }
            else{
                &$ssFn($dbh,$ssid,$varName,$rec->{'rid'},'','');
            }
        }
        last if($offset>$rs->{'hits'});
        $sParam->{"offset"} =$offset;
        $rs= slr_search($sParam);
    }

}
#=======================================================
sub searchSolr{
    my ($input,$filter,$offset,$size) =@_;
    #my $lQuery=slr_buildSearchQuery($input,$filter);
    #my $lQuery=($input->{'notContain'} eq 1)?slr_buildSearchQuery_notContain($input)
    #                                        :slr_buildSearchQuery($input,$filter);
   
    my $lQuery= buildSelAllQuerySolr($input,$filter) ;
    my $rs=undef;
    
    if($lQuery ne ''){        
        $rs = slr_search({lQuery=>$lQuery,recFormat=>'detail',                         
                         offset=>$offset,size=>$size});  
    }
    return $rs;
}
#=======================================================
sub buildSelAllQuerySolr{
    my ($input,$filter) =@_;
    my $lQuery;
    if($input->{'srchPage'} eq 'newItem'){
        $lQuery=slr_buildSNewItemQuery($input);
    }
    elsif($input->{'srchPage'} eq 'review'){
        $lQuery=slr_buildSReviewItemQuery($input);
    }
    elsif($input->{'notContain'} eq 1){
        $lQuery=slr_buildSearchQuery_notContain($input);
    }
    else{
        $lQuery=slr_buildSearchQuery($input,$filter);
    }

    return $lQuery;
}

#=======================================================
sub addAllNewItems {
    my ($dbh,$periodDays) = @_;
    my $sth =$dbh->prepare(<<_STH_);
select      f.rid ,callNumber, m.author, m.title,m.pubDate 
from        opl_featureItem f inner join opl_item i on f.rid = i.rid
            inner join opl_marcRecord m  on m.rid = i.rid
where       i.barcode not regexp '^\_\_\_' && 
            expiryDate >= now() && 
            feature ='newItem'   && 
            i.dateImport >=DATE_SUB(CURRENT_DATE, INTERVAL $periodDays DAY)
_STH_

    $sth->execute();
    while (my $rec = $sth->fetchrow_hashref) {
        SessionHdl_add($dbh,$ssid,$varName,$rec->{'rid'},'','');
    }
 $response .="<status>success</status>";
   my ($ridCount,$bcCount)= SessionHdl_count($dbh,$ssid,$varName) ;
   $response .="<varCount><ridCount>$ridCount</ridCount><barcodeCount></barcodeCount></varCount>";

}
