#!/usr/bin/perl
use Opals::Context;
use Time::localtime;
use Opals::Template qw(
    tmpl_read
    tmpl_write
    tmpl_preference
);

use Opals::Date qw(
    date_parse
    date_text
    date_today
    date_profileList
);

use Opals::User qw(
    user_getInformationById
    user_list

);

use Opals::Transactions qw(
    trans_getUnpaidFineList
    trans_getBalance
    trans_doPayment
    trans_getTaxTable
    trans_getUnrefundLostList
    trans_doRefund
);

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

my $cgi    = CGI->new;
my $input  = $cgi->Vars();
#my $uid    = $cgi->cookie('borrower');#$input->{'uid'};
my $op     = $input->{'op'};

my $offset    =  0; #$input->{'offset'};
my $size      =  10; #$input->{'size'};
my $dir       =  'asc' ;#$input->{'dir'};

my $selType  =  'all';
 if ($input->{'type'}){
      $selType  = $input->{'type'};
 }
 
my ($permission, $cookieList, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'report/userTransactions.tmpl',
            reqPermission   => 'rpt_user|rpt_fine|rpt_circ|circ_loan',
        }
);

my $loginuid         = $template->param('curUserId');
    my $tm = localtime;
    my $dateToday = sprintf("%04d-%02d-%02d", 
                            $tm->year+1900, 
                            ($tm->mon)+1, 
                            $tm->mday);


    my ($uid,$status) = getUID();
    if ($uid >= 0){
        push @$cookieList, $cgi->cookie(
            -name   => 'borrower',
            -value  => $uid
        );
     }
# See User.pm for the list of permissions
if ($permission && $permission->{'circ_loan'}) {
    #my ($uid,$status) = getUID();
    if ($uid >= 0){
        my $u_block=($status==1?0:1);
        $template->param(u_block =>$u_block);
        $template->param(uid => $uid);
        
        my $loginuid = $template->param('curUserId');
        my ($responsibleInfo, $g) = user_getInformationById($dbh, $loginuid);
        my $respName = $responsibleInfo->{'firstname'} . " " . $responsibleInfo->{'lastname'};
        my $pAmount = $input->{'payAmount'};
                
        if($op eq  'payment'){
            trans_doPayment($dbh,$uid,$respName,$pAmount );
        }
        

        my ($userInfo, $guardian) = user_getInformationById($dbh, $uid);
        $template->param(
            user_uid            => $userInfo->{'uid'},
            user_barcode        => $userInfo->{'userbarcode'},
            user_username       => $userInfo->{'username'},
            user_firstname      => $userInfo->{'firstname'},
            user_lastname       => $userInfo->{'lastname'},
            homeroom            => $userInfo->{'homeroom'},
            teacher             => $userInfo->{'teacher'},
            notes               => $userInfo->{'notes'},

        );
        
        ########  Get unpaid transactions  ############
        #
        my @transTbl;
            @transTbl =trans_getUnpaidFineList($dbh,$uid,$dir);
        my $idx=0;
        foreach my $tr(@transTbl){
            $tr->{'idx'} =$idx++;
            $tr->{'barcode'} =~ s/^___//g;
            $tr->{'barcode'} =~ s/_\d\d\d$//g;
        }
        my @taxTbl =trans_getTaxTable($dbh);
        if(scalar(@taxTbl)>0){
            $template->param(taxTbl=>\@taxTbl);
        }
           
        $template->param(
            selType   =>$selType,
            transList  =>\@transTbl,
            numTrans   =>scalar(@transTbl),
            dateToday  => date_text($dateToday)
        );

        ########  Get refund transactions ############ 
        #
        my  ($tidList,$totalRefund) =("",0);              
        my @refundTbl = trans_getUnrefundLostList($dbh,$uid,$dir);
        foreach my $r(@refundTbl){
            $r->{'tamount'} = abs($r->{'tamount'});
            $totalRefund   += $r->{'tamount'};
        }
        $template->param(
            refundList  => \@refundTbl,
            tidList     => $tidList,
            totalRefund => $totalRefund,
        );
        
        if(scalar(@transTbl) || scalar(@refundTbl)){
            $template->param(printDiv => 1);
        }
    }
    my $balance = trans_getBalance($dbh,$uid);
    $template->param(
       userTransaction=>1,
       balance => abs($balance),
       checkid => 1,
       uid=>$uid
    );

    my $headerTxt =" Charge Amount";
    if($balance<0){
        $headerTxt =" Refund Amount ";
    }
    if($balance !=0){
        $template->param(headerTxt  => $headerTxt);
    }
    else{
        $template->param(headerTxt =>" Amount ");
    }
}
    tmpl_write($dbh, $cgi, $cookieList, $template); 
#---------------------------------------------------------
sub getUID{
    my ($uid,$status)=(-1,0);
    if ( $input->{'uInput'}) {
        # my @uList = user_list($dbh,  $input->{'uInput'}, USER_ACTIVE);
        my @uList = user_list($dbh,  $input->{'uInput'}, undef);
        if(scalar(@uList)==1){
           $uid = $uList[0]->{'uid'};
           $status= @uList[0]->{'status'};
           if( @uList[0]->{'status'}==1 ){
               $template->param(block =>0);
               @uList[0]->{'block'}=  0;
           }
           else {
               $template->param(block =>1);
           }
            $template->param(uPerson => 1);
        }
        elsif(scalar(@uList)>=1){
            for(my $i=0; $i < scalar(@uList) ; $i++){
                @uList[$i]->{'block'}= @uList[$i]->{'status'}==1 ? 0:1;
            }
           # $template->param(uList => \@uList);
        } 
     $template->param(uList => \@uList);
    }
    elsif ( $input->{'InputFromList'}){
        $uid = $input->{'InputFromList'};
        my ($uInfo,$ttt)=user_getInformationById($dbh,$uid);
        $status=$uInfo->{'status'};
    }
    else{
        if ( $input->{'uid'} ) { 
            $uid = $input->{'uid'}; 
        }
        else { 
            $uid = $cgi->cookie('borrower'); 
        }
        my ($uInfo,$ttt)=user_getInformationById($dbh,$uid);
        $status=$uInfo->{'status'};
    }

    return ($uid,$status);
}

