#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use POSIX qw(
    ceil
);

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

use Opals::User qw(
    user_getInformation
);
use Opals::MarcXml qw(
    mxml_delete
);
use Opals::Date qw(
    date_parse
    date_today
    date_text
    date_f005
);
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_rangedPageList
);
use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);


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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $ridList= $input->{'ridList'};
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'report/modifiedRecs.tmpl',
            reqPermission   => 'rpt_catRec|marc_edit',
        }
);


$template->param(hlpUrl     => Opals::Constant->getHlpUrl('modifiedRecs') );
    
    my $op = $input->{'op'};
    if(  $op eq '') {$op = 'report' };

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

    my $dateFrom= $input->{'modFrom'};
    my $dateTo  = $input->{'modTo'};
    my $sort    = $input->{'sort'};
    $sort = 'modDate' if ( !$sort );
   my $dateToday = date_f005();
    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
     $template->param(todayStr => $dateToday);




#Tue, Jan 12, 2010 @ 10:31:41 EST
my $msgValMap ={};
my $msgMap            =loc_getMsgFile('report/reports.msg',$msgValMap);
loc_write($template,$msgMap);

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

################################################################################
sub GetRecordModList {
    my ($dbh, $dateFrom, $dateTo, $sort, $pNum, $pagesize) = @_;

    my $pageoffset = $pNum;
    if ( !$pageoffset ) {
        $pageoffset = 0;
    }
    else {
        $pageoffset = ($pNum - 1) * $pagesize;
    }
       
    my $sql = <<_STH_;
select  distinct m.rid,m.title,m.author,m.modDate,i.callNumber
from    opl_marcRecord m  inner join opl_item i on i.rid=m.rid
where  i.available=1 &&  m.modDate between '$dateFrom' and  '$dateTo' + interval 1 day 
        && m.modDate <> i.dateImport
group by m.rid        
order by $sort 
limit   $pageoffset, $pagesize
_STH_
    my $sth = $dbh->prepare($sql);

    $sth->execute();
    

    my $pNum = -1;
    my @recordList =();
    my $holdingList;
    my $preRid=0;
    my $barcode;
    my $holdingList;
    while (my $r = $sth->fetchrow_hashref) {
        if($preRid != $r->{'rid'}){
            my $rec;
            $preRid = $r->{'rid'};
            $rec->{'rid'}= $r->{'rid'};
            $rec->{'title'}= $r->{'title'};
            $rec->{'author'}= $r->{'author'};
            $rec->{'modDate'}= $r->{'modDate'};
            $rec->{'callNumber'}= $r->{'callNumber'};
            $pNum++;        
            $rec->{'odd'} = $pNum%2;
            $rec->{'order'} = $pNum;
            $rec->{'marcXmlExist'}=isMarcXmlExist($rec->{'rid'});

            #$holdingList = getRecordHolding($dbh, $rec->{'rid'}, $dateFrom, $dateTo);
            #$rec->{'holdingList'} = $holdingList;
                        
            push @recordList, $rec;

        }
        
        if($r->{'barcode'} =~m/^\_\_\_(.*)\_[\d]+$/){
            $barcode=$1;
        }
        else{
           $barcode='n/a';
        }
     }
    $sth->finish;
    return \@recordList;
}


#----------------------------------------------------------
sub MakePages
{
    my ($dbh, $input, $template, $pagesize, $dateFrom, $dateTo) = @_;
     my $sql_count = <<_STH_;
select  count(distinct m.rid)
from    opl_marcRecord m  inner join opl_item i on i.rid=m.rid
where  i.available=1 &&  m.modDate between '$dateFrom' and  '$dateTo' + interval 1 day 
        && m.modDate <> i.dateImport


_STH_
    my $sth = $dbh->prepare($sql_count);
    $sth->execute();
    my ($countRecord) = $sth->fetchrow_array;

    ($input->{'pNum'} && $input->{'pNum'} > 0) || ($input->{'pNum'} = 1);

    my @rangedPageList = tmpl_rangedPageList($countRecord, $input->{'pNum'}, $pagesize, 10);
    #my @rangedPageList = tmpl_rangedPageList(200, 1, 20, 10);
    $template->param(        
        countRecord     => $countRecord,
        rangedPageList  => \@rangedPageList,
    );
}


#-------------------------------------------------------------
sub isMarcXmlExist{
    my ($rid) =@_;
    my $zRoot   = Opals::Context->config('zRoot');
    my $zDatabase = Opals::Context->config('zDatabase');
    my $dir     = "$zRoot/$zDatabase/" . ceil($rid/1000);
    
     
    return (-f "$dir/$rid.xml");

}

#-------------------------------------------------------------
sub export{
    my($dbh)=@_;
    my $uid = $template->param('curUserId');
    my $dateFrom= $input->{'modFrom'};
    my $dateTo  = $input->{'modTo'};
    my $expRecOpt     =$input->{'expRecOpt'};
    my $expHoldingOpt =$input->{'expHoldingOpt'};
    my $eType="";
    my $ridList = $cgi->cookie('modRidList');
    $ridList =~ s/,+/,/g;
    $ridList =~ s/^,|,$//g;
    if($expRecOpt eq 'sel'){
       $eType="ridList";
    }
    else{
       $eType="modDate";
    }
    if($expHoldingOpt eq 'mod'){
       $eType .="_h";
    }
    else{
       $eType .="_r";
    }
   my $query = <<_STH_;
insert into opl_marcExport
set     uid             = ? ,
        dateRequest     = now(),
        eType           = ?,
        eFrom           = ?,
        eTo             = ?,
        ridList         = ?,
        dateExpiry      = now() + interval 30 day
_STH_
      
    my $sth = $dbh->prepare($query);
    $sth->execute($uid,$eType,$dateFrom,$dateTo,$ridList);
    $sth->finish;

}


