#!/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_preference    
    tmpl_rangedPageList
);


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/viewCircDetail.tmpl',
            reqPermission   => 'rpt_circ',
        }
);

    
    my $dateToday = date_f005();
    $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;

    my $syspref = tmpl_preference($dbh);
    my $patronItemPrivacy  = ($syspref->{'patronItemPrivacy'})? $syspref->{'patronItemPrivacy'} : 1;

    my $rid             = $input->{'rid'};
    my $dateFrom        = $input->{'statFrom'};
    my $dateTo          = $input->{'statTo'};
    my $dateRange       = $input->{'dateRangeOpt'};
    my $num             = $input->{'num'};
    my $pNum            = $input->{'pNum'};
    my $sortBy          = $input->{'sortBy'};
    my $sortDir         = $input->{'sortDir'};
     
    if(!defined $sortBy || $sortBy !~ m/^barcode$|^callNumber$|^name$|^dateReturn$|^dateLoan$|^userbarcode$/g){
        $sortBy ='dateLoan' ;
        $sortDir='desc';
    }
    $sortBy='lastname, firstname ' if($sortBy eq 'name');
    $sortDir='asc' if(!defined $sortDir || $sortDir !~ m/^asc$|^desc$/gi);
    $template->param("sortBy_$sortBy"=>1);
    $template->param(
        from          => substr($dateFrom,0,10),
        to            => substr($dateTo,0,10),
        rid           => $rid,
        num           => $num,
        pNum          => $pNum,
        dateRangeOpt  => $dateRange,
        patronItemPrivacy => $patronItemPrivacy,
    );
    
    
    
    if($dateRange eq 'all'){
        $template->param(
            rangeAll   => 1,
       );
    }
    elsif($dateRange eq 'fYear'){
        $template->param(
            rangeFYear   => 1,
       );
    }
    else{
        $template->param(
            rangeSel   => 1,
       );
    }
    

    my ($bcList,$bcCount) = GetRecordStatDetail($dbh, $rid,$dateFrom,$dateTo,$sortBy,$sortDir);

$template->param(
    bcList      => $bcList,
    bcCount     => $bcCount,
);


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

################################################################################
sub GetRecordStatDetail {
    my ($dbh, $rid,$dateFrom,$dateTo,$sortBy,$sortDir) = @_;

    my $sql = <<_STH_;
select    l.dateLoan,l.dateReturn,u.firstname, u.lastname, u.userbarcode,  
          i.rid, i.callNumber,i.barcode ,m.title, m.author,m.pubName,m.pubPlace,m.pubDate
from      opl_marcRecord m 
          inner join opl_item i on i.rid=m.rid  
          inner  join opl_loan l on i.barcode=l.barcode
          left outer join opl_user u on u.uid=l.uid 
where     i.rid = $rid           
          order by   $sortBy $sortDir    
_STH_
 

    my $sth = $dbh->prepare($sql);
    $sth->execute();
    
    my $pNum   =-1;
    my @bcList =();
    my $inSel=0;

    while (my $r = $sth->fetchrow_hashref) {
        $inSel=0;
        my $rec;
        $rec->{'rid'}        = $r->{'rid'};
        $rec->{'title'}      = $r->{'title'};
        $rec->{'author'}     = $r->{'author'};
        $rec->{'pubName'}     = $r->{'pubName'};
        $rec->{'pubPlace'}     = $r->{'pubPlace'};
        $rec->{'pubDate'}     = $r->{'pubDate'};
        $rec->{'barcode'}    = $r->{'barcode'};
        $rec->{'barcode'}    =~ s/^___|_\d\d\d$//g;
        $rec->{'totalCirc'}  = $r->{'totalCirc'};
        $rec->{'callNumber'} = $r->{'callNumber'};


        if($r->{'dateLoan'} ge $dateFrom && $r->{'dateLoan'} le $dateTo){
            $inSel=1;
        }

        $rec->{'inSel'} = $inSel;
        #$rec->{'inSel'} =>1;
        $rec->{'dateLoan'}     = $r->{'dateLoan'};
        $rec->{'dateReturn'}   = $r->{'dateReturn'};

        $rec->{'firstname'}    = $r->{'firstname'};
        $rec->{'lastname'}     = $r->{'lastname'};
        $rec->{'userbarcode'}  = $r->{'userbarcode'};
        $pNum++;        
        $rec->{'odd'} = $pNum%2;
        $rec->{'order'} = $pNum;
        push @bcList, $rec;
        
    }  
    
    

    my $bcCount = scalar(@bcList);
    $sth->finish;
    return (\@bcList,$bcCount);
}



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


