#!/usr/bin/perl

use strict;
use CGI;
use Time::localtime;

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

use Opals::Eq_Search qw(
      
    eq_category_getList
    eq_category_getListById
    eq_search_cat
    eq_search
    eq_search_countByCat

);

use Opals::Equipment qw(

    eq_record_findByRId
    eq_containerItems_getList
);

use Opals::Eq_Circulation qw(

    circ_infoRecord
    circ_getLoanListByRid

);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookieList, $template) = tmpl_read(
    {
        dbh             => $dbh,
        cgi             => $cgi,
        tmplFile        => 'eqmnt/recDetail.tmpl',
        reqPermission   => 'eq_record_edit',
    }
);
my $tm = localtime;
my $curTime = sprintf("%04d%02d%02d%02d%02d%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday, $tm->hour, $tm->min, $tm->sec);

my $categoryList = eq_category_getList($dbh);

my @cats;
foreach my $c (@{$categoryList}){
    push @cats,$c;
    foreach my $cc (@{$c->{'children'}}){
        push @cats, $cc;
    }
}

my $catHash;
my $catSelected="";
foreach my $c (@cats){
    $catHash->{$c->{'id'}} = $c->{'name'};
}

my $kw          = $input->{'kw'};
my $rid         = $input->{'rId'};
my $cat         = $input->{'cat'};
my $srchCatId   = eq_category_getListById($dbh,$cat) || "0";
my $curPage     = $input->{'pNum'};
my $pRange  = 5;
my $pSize   = 10;
my $sortAttr    = $input->{'sortAttr'};
my $field       = $input->{'field'};
my ($type, $sF, $reqF) = split(/:/, $field);

my $sortOrder = $input->{'sortOrder'};
   ($sortOrder && $sortOrder >=1) || ($sortOrder = 1);

my $resultOrder = $input->{'resultOrder'};
my $direction = $input->{'direction'};

my ($recId, $recInfo);
my ($numTotal, $numLoan, $numReserve, $numHold, $itemList, $totalCirc,$totalMissing,$totalDamaged,$totalLost); 
my $pNum = $input->{'pNum'};
    ($pNum && $pNum > 0) || ($pNum = 1);
my $offset;
my ($resultSize, $recordList) ;
($curPage && $curPage >= 1) || ($curPage = 1);
$offset = ($curPage - 1) * $pSize;


if ($permission && $permission->{'eq_record_edit'}){
    if (!$rid){
        $template->param(
            error   => 1,);
    }
    else{
        $template->param(
            kw      => $kw,
            pNum    => $pNum,
            sfIndex => ($input->{'sfIndex'})?$input->{'sfIndex'}:0 ,
            field   => $field,    
        );
        if ($kw){
            if ($srchCatId && $srchCatId ne "" && scalar(@$srchCatId) > 0){
                ($resultSize, $recordList) = eq_search_cat($dbh,$srchCatId,$field,$kw,$offset,$pSize,$resultOrder,$sortAttr);
            }
            else {
                ($resultSize,$recordList) = eq_search($dbh,$srchCatId,$field,$kw,$resultOrder+$direction,$pSize,$sortOrder,$sortAttr);
            }
            
            ($recId, $recInfo) = eq_record_findByRId($dbh,{recordId=>$recordList->[0]->{'rid'}});    
            my $category = $recInfo->[0]->{'category'};
            my @cat = split(/,/, $category);
            my $catStr="";
            if (!@cat ){
                $recInfo->[0]->{'categoryString'} = '-';
            }
            else {
                foreach my $c (@cat){
                    $catStr .= $catHash->{$c} . ",";
                }
                $catStr =~ s/,$//;
            }
            foreach my $rec ( @$recInfo){
                $rec->{'categoryString'} = $catStr;
            }
            ($numTotal,$numLoan,$numReserve,$numHold,$itemList,$totalCirc,$totalMissing,$totalDamaged,$totalLost)=circ_infoRecord($dbh,$recId);
        }
        my $onLoanList =  circ_getLoanListByRid($dbh,$recId);
        if  (scalar(@$onLoanList)>0){
             $template->param(isOnLoan =>1); 
        }
        my $containerCnt = 0;
        foreach my $i (@{$itemList}){
            if ($i->{'container'} eq "1") {
                $i->{'contain'} = eq_containerItems_getList($dbh,$i->{'barcode'});
                    $containerCnt += scalar(@{$i->{'contain'}});
            }
        }
        $template->param(containerCnt =>$containerCnt);
        my $firstIndex=0;
        my $lastIndex= $resultSize -1;
        my $isFirst = ($resultOrder == $firstIndex)? "1":"0";
        my $isLast  = (($resultOrder+$direction) == $lastIndex)? "1":"0";
        $template->param(
                recordInfo      =>  $recInfo, 
                rid             =>  $recId,
                resultOrder     =>  $resultOrder+$direction,
                numTotal        =>  $numTotal,
                numLoan         =>  $numLoan,
                numReserve      =>  $numReserve,
                numHold         =>  $numHold,
                totalCirc       =>  $totalCirc,
                numReserveTotal =>  $numReserve + $numHold,
                numAvailable    =>  $numTotal - $numLoan - $numHold - $totalMissing - $totalDamaged - $totalLost,
                itemList        =>  $itemList, 
                resultSize      =>  $resultSize,
                isFirst         =>  $isFirst,
                isLast          =>  $isLast,
                curTime         =>  $curTime,
                lastIndex       => $lastIndex,
                cat             => $cat
        );
   }
   if ($permission && $permission->{'eq_record_edit'}) {
      $template->param(    eq_record_edit      => 1);
   }
}#if ($permission && $permission->{'eq_record_edit'})
tmpl_write($dbh, $cgi, $cookieList, $template);
