#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Context;
use Date::Calc qw(Day_of_Week Week_Number Day_of_Year);

use Opals::User qw(
    user_getInformation
);
use Opals::Circulation qw(
    circ_infoRecord
);
use Opals::Search qw(
    srch_searchRecord
    srch_buildNewItemSQLs
    srch_searchRecordSQL
);
use Opals::MarcXml qw(
    mxml_delete
    mxml_newItem
);


use Opals::Date qw(
    date_parse
    date_today
    date_text
    date_f005
);
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_rangedPageList
);

use Opals::BookCover qw(
    bookCover_getUrl
);

use Opals::Session qw(
    SessionHdl_get
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
use Opals::SolrIndex qw(
    slr_buildSNewItemQuery
    slr_search
);
use Opals::RecordInfoHTML qw(
    rinfo_getPageNavForm_search
);


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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $sessionID = $cgi->cookie('globalSessionID');
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'report/newitemMngmt.tmpl',
            reqPermission   => 'rpt_catRec',
        }
);
my $debugstr="";
my  $awsId =Opals::Context->preference('amazonId');
my  $syndeticsId =Opals::Context->preference('syndeticsId');
if($syndeticsId && $syndeticsId ne''){$awsId ="";}

#Wed, Jan 14, 2009 @ 09:42:07 EST
# remove new items
my $op = $input->{'op'};
if($op && $op eq 'del'){    
    removeNewItem($dbh,$sessionID);
}

my $sortAttr = $input->{'sortAttr'};
my $sortOrder = $input->{'sortOrder'};
                                 


############################
 
    my $pSize = 20;
    my $curPage= $input->{'pNum'};
    $curPage= 1 if ( !$curPage );

    my $dateToday = date_f005();
    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
    
    $template->param(newItemMngmt=> 1);
     
    my $selNumOfDays = 365;
    if (scalar ($input->{'range'}>0)){
       $selNumOfDays =$input->{'range'};   
    }
    else{
        $input->{'range'}=$selNumOfDays;
    }

    my $isbnList="";
    my ($resultSize,$result)  = GetNewItems($dbh, $input, $curPage, $pSize);
    my $offset = ($curPage - 1) * $pSize ;
    my $recRsPos =$offset;
    foreach my $record (@$result) {
            my $isbnTmpList="";
            if($record->{'isbn'}){
                $isbnTmpList .=join (",",@{$record->{'isbn'}}) . ",";
            }
            $isbnList .=$isbnTmpList;
            $record->{'isbnList'}=$isbnTmpList;
            $record->{'recRsPos'}=$recRsPos++;
            $record->{'callNumber'} =~ s/\s/<br>/g
    }


    
    my $pRange = 10;
    my @rangedPageList = tmpl_rangedPageList($resultSize, $curPage, $pSize, $pRange);

$template->param(
    result       => \@$result,
    pNum         => $curPage,
    selNumOfDays => $selNumOfDays,
        rangedPageList      => \@rangedPageList,
        resultSize          => $resultSize,
        sortCallNum1st      => ($sortAttr == 5001)              ? 1 : 0,
        sortTitle           => ($sortAttr == 4)                 ? 1 : 0,
        sortAuthor          => ($sortAttr == 1003)              ? 1 : 0,
        sortPubDateSort     => ($sortAttr == 31)                ? 1 : 0,
        sortOrder           => $sortOrder,
#        sortable            => (1<$resultSize && $resultSize<160) ? 1 : 0,
        showAmazonCover          => ($awsId && $awsId ne '')  ?1:0,
        showSyndeticsCover => ($syndeticsId && $syndeticsId ne '')  ?1:0,
        newItemMngmt       => 1,
        hlpUrl     => Opals::Constant->getHlpUrl("newitems")

 );
 my $pageNavForm =rinfo_getPageNavForm_search($cgi);
    $template->param(pageNavForm=>$pageNavForm,
                     );

#Wed, Jan 13, 2010 @ 09:20:36 EST
my $msgValMap ={};
my $msgMap            =loc_getMsgFile('report/reports.msg',$msgValMap);
my $infoMsgMap        =loc_getMsgFile('record/bib_info.msg');

loc_write($template,$msgMap);
loc_write($template,$infoMsgMap);


tmpl_write($dbh, $cgi, $cookie, $template);
#$dbh->disconnect();

################################################################################
sub GetNewItemsInfo{
   my ($dbh, $rid) = @_;
 
    my $sth = $dbh->prepare(<<_STH_);
select  distinct s.barcode, callNumber, price
from    opl_itemstatus as s inner join opl_item as i on s.barcode = i.barcode
where   rid = ? && s.status =6 
order by callNumber,barcode asc
_STH_
    $sth->execute($rid);
    my @holdingListStatus;
    while (my $itemStatus = $sth->fetchrow_hashref) {
       push @holdingListStatus, $itemStatus;
    }
    $sth->finish;
 
    return \@holdingListStatus;
}

################################################################################
sub _getNewItemsInfo{
   my ($dbh, $rid) = @_;
 
    my $sth = $dbh->prepare(<<_STH_);
select  callNumber, m.author, m.title,m.pubDate
from    opl_marcRecord m  inner join opl_item as i on m.rid = i.rid
where   m.rid = ?
order by callNumber  asc
limit 1
_STH_
    $sth->execute($rid);
    my @info;
    while (my $rec = $sth->fetchrow_hashref) {
       push @info, $rec;
    }
    $sth->finish;
 
    return \@info;
}

################################################################################
# UPDATE on Tue, Sep 13, 2011 @ 11:06:03 EDT
# Use Solr Indexing
#
sub GetNewItems{
    my ($dbh,$input, $curPage, $pSize) = @_;
    my $offset = ($curPage - 1) * $pSize ;
    my $periodDays= $input->{'range'} || 365;
    my ($sortAttr, $sortOrder)  = ($input->{'sortAttr'}, $input->{'sortOrder'});
    $sortAttr = 'pubDate'  if(!defined $sortAttr  || $sortAttr  eq '');
    my $sth_count =$dbh->prepare(<<_STH_);
select      count(distinct f.rid) 
from        opl_featureItem f inner join opl_item i using(rid) 
where       i.barcode not regexp '\_\_\_' && 
            expiryDate >= now() && 
            feature ='newItem' && 
            i.dateImport >=DATE_SUB(CURRENT_DATE, INTERVAL $periodDays DAY)
_STH_
    $sth_count->execute();
    my ($resultSize) = $sth_count->fetchrow_array;
    $sth_count->finish;


    my $sth =$dbh->prepare(<<_STH_);
select      f.rid ,callNumber, m.author, m.title,m.pubDate,left(i.dateImport,10) dateImport  
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)
order by    $sortAttr $sortOrder                
limit       $offset,  $pSize      
_STH_

    my @result;
    $sth->execute();my $info; 
    while (my $rec = $sth->fetchrow_hashref) {
        push @result, $rec;
    }
    $sth->finish;

    return ($resultSize, \@result);
}
################################################################################
sub removeNewItem_bk{
    my($dbh,$sessionID)=@_;

    my $sth =$dbh->prepare(<<_STH_);
UPDATE opl_item i inner join opl_sessionVar v on i.rid=v.rid && v.ssid=? && v.var='newItemMngmt'
       inner join opl_itemstatus s on s.barcode=i.barcode && s.status=6
SET    s.ondate=date_sub(now(),INTERVAL 1 DAY)
       
_STH_

    my $sth_ss =$dbh->prepare(<<_STH_);
DELETE  FROM  opl_sessionVar 
WHERE   ssid=? && var='newItemMngmt'
       
_STH_

    $sth->execute($sessionID);
    $sth_ss->execute($sessionID);
}
#----------------------------------------------------------
sub removeNewItem{
    my($dbh,$sessionID)=@_;

    my $sth =$dbh->prepare(<<_STH_);
UPDATE opl_featureItem f inner join opl_sessionVar v on f.rid=v.rid && v.ssid=? && v.var='newItemMngmt'       
SET    f.expiryDate=date_sub(now(),INTERVAL 1 DAY)
       
_STH_

    my $sth_ss =$dbh->prepare(<<_STH_);
DELETE  FROM  opl_sessionVar 
WHERE   ssid=? && var='newItemMngmt'
       
_STH_

    $sth->execute($sessionID);
    $sth_ss->execute($sessionID);
}
