#!/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_getInformationById
);
use Opals::Date qw(
    date_now
    date_text
    date_DHM_text
    date_text
);

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


use Opals::Tb_Circulation qw(
    circ_getUserListLoan
    circ_getUserListReserve
);

use Opals::Tb_Transactions qw(
    trans_getUnpaidFineList
    
);

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 ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        =>'/txtbk/circ/userCircList_prt.tmpl',
            reqPermission   => 'report',
        }
);
my $uid=$input->{'uid'};
my $today = date_now();
$today =~ s/([\d]{4}-[\d]{2}-[\d]{2}) ([\d:])+/$1/;
$today = date_text($today, 1);
my $pref = tmpl_preference($dbh);
my $libname       = $pref->{'libname'};

my ($userInfo,$guardian) =user_getInformationById($dbh,$uid);
my $loanList  = GetLoanItems($dbh,$uid); 
my $reservedList = GetReservedItems($dbh,$uid);
my $transList = getUnpaidList($dbh, $uid);

my $circListMsgMap=loc_getMsgFile('circ/userCircList.msg');
loc_write($template,$circListMsgMap);
my $nothing2print=(scalar(@$loanList)==0 && scalar(@$reservedList)==0 && scalar(@$transList)==0);
$template->param(
                firstName=> $userInfo->{'firstname'},
                lastName=> $userInfo->{'lastname'},
                homeRoom=> $userInfo->{'homeroom'},
                teacher=> $userInfo->{'teacher'},
                loanItemList =>$loanList,
                reservedItemList=>$reservedList,
                transList =>$transList,
                today=>$today,
                libName=>$libname ,
                nothing2print=>$nothing2print,
                );


tmpl_write($dbh, $cgi, $cookie, $template);
$dbh->disconnect();
#----------------------------------------------------------
sub GetReservedItems
{
    my ($dbh,$uid) = @_;
    
    my $reserveList = circ_getUserListReserve($dbh, $uid) || ();
    foreach my $reserve (@$reserveList) 
    {
        $reserve->{'dateReserve'} = date_text($reserve->{'dateReserve'}, 0);
        if($reserve->{'numCopyReserve'}==0){
            $reserve->{'dateExpiry'}  ='';
        }
        else{
            $reserve->{'dateExpiry'}  = date_text($reserve->{'dateExpiry'}, 0);
        }
    }
    return $reserveList;
}
#----------------------------------------------------------
sub GetLoanItems
{
    my ($dbh, $uid) = @_;
    
    my  $loanList = circ_getUserListLoan($dbh, $uid);
    my $odCount = 0;
    foreach my $loan (@$loanList) 
    {
        $loan->{'dateLoan'} = date_text($loan->{'dateLoan'}, 0);
        $loan->{'dateDue'}  = $loan->{'dateDue'} =~ m/23:59:59$/g ? date_text($loan->{'dateDue'}, 0):date_DHM_text($loan->{'dateDue'}, 0);
    }
    return $loanList;
}
#----------------------------------------------------------
sub getUnpaidList{
    my($dbh,$uid)=@_;
    my @transList = trans_getUnpaidFineList($dbh, $uid);
    foreach my $t(@transList){
        $t->{'date'} = date_text($t->{'date'});
    }
    return \@transList;
}

