#!/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::Date qw(
    date_parse
    date_today
    date_text
);
use Opals::Tb_Search qw(
    
    search_record
    search_record_byBarcode
    
);

use Opals::Tb_Circulation qw(

    circ_infoRecord
    circ_getItemStatus

);
use Opals::Tb_Record qw(
    
    tb_record_findByRId
    tb_item_findByRId

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

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $sessionID = $cgi->cookie('globalSessionID');

my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'txtbk/report/searchWtBc_prt.tmpl',
            #reqPermission   => 'report',
        }
);

my $pRange = 5;
my $pSize = 10;
my $curPage = $input->{'pNum'};

my $kw          = $input->{'kw'};
my $sfCode      = $input->{'sfCode'};
my $sortAttr    = $input->{'sortAttr'};
    if (!$sortAttr ){
        $sortAttr = '245_a';
    }
my $sortOrder   = $input->{'sortOrder'};
    ($sortOrder && $sortOrder >=1 ) || ($sortOrder = 1);
my $prtOpt = $input->{'prtOpt'};   

my $offset;
    ($curPage && $curPage >= 1) ||($curPage = 1 );
    $offset = ($curPage - 1 ) * $pSize;

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

my $recordList = search_record_item($dbh, $prtOpt, $sfCode, $kw, $sortOrder, $sortAttr);

$template->param(
    sKw         =>  $kw,
    pNum        =>  $curPage,
    sfCode      =>  $sfCode?$sfCode:'245_a',
    sfIndex     =>  ($input->{'sfIndex'})? $input->{'sfIndex'}:0,
    sortAttr    =>  $sortAttr,
    sortOrder   =>  $sortOrder,
    sortOrderReverse    => ($sortOrder && $sortOrder == 1)  ? 2 : 1,
    sortTitle           => ($sortAttr eq '245_a')           ? 1 : 0,
    sortAuthor          => ($sortAttr eq '100_a')           ? 1 : 0,
    sortPublisher       => ($sortAttr eq '260_a')           ? 1 : 0,
    sortPubDate         => ($sortAttr eq '260_c')           ? 1 : 0,
    sortBarcode         => ($sortAttr eq '852_p')           ? 1 : 0,
    sortDown            => ($sortOrder && $sortOrder == 1)  ? 1 : 0,
);

$template->param(
    searchWtBc      => 1,
    recordList      => \@$recordList,
    rec_start       => $offset + 1,
    rec_end         => $offset + scalar(@{$recordList}),
);

tmpl_write($dbh, $cgi, $cookie, $template);

sub search_record_item{

    my ($dbh,$prtOpt, $sfCode, $kw, $sortOrder, $sortAttr) = @_;
    my $sql;
    my @recordList = ();
    my $itemList;
    if ($prtOpt eq 'all'){
        if ($sfCode eq '852_p' || $sortAttr eq '852_p'){
            $sql        = "SELECT distinct(r1.rid) FROM tb_records r1 LEFT OUTER JOIN tb_items i ON r1.rid = i.rid WHERE_CLAUSE ";
        }
        else{
            $sql        = "SELECT distinct(r1.rid) FROM tb_records r1 LEFT OUTER JOIN tb_records r2 ON r1.rid = r2.rid && r2.fId = '$sortAttr' WHERE_CLAUSE ";
        }
        $kw =~ s/ / \+/g;
        $sql        =~ s/WHERE_CLAUSE / where MATCH(r1.fVal) AGAINST('+$kw' IN BOOLEAN MODE) && r1.fId = '$sfCode' /;
        $sql .= " && r1.deleted <> '1' ";
        if ($sfCode eq '852_p' || $sortAttr eq '852_p'){
             if ($sortOrder && $sortOrder ==2){
                $sql .= " order by length(i.barcode), i.barcode desc ";
            }
            else{
                $sql .= " order by i.barcode asc ";
            }
        }
        else{
            if ($sortOrder && $sortOrder ==2){
                $sql .= " order by r2.fVal desc ";
            }
            else{
                $sql .= " order by r2.fVal asc ";
            }
        }
    }
    else{
        $sql=" select distinct rid from opl_sessionVar where  var='searchWtBc' && ssid ='$sessionID' ";
        my $sth = $dbh->prepare($sql);

    }
    my $sth = $dbh->prepare($sql);
    $sth->execute(); 
    while(my ($rid) = $sth->fetchrow_array()){
        my ($recId, $recInfo) = tb_record_findByRId($dbh, $rid);
        my ($title,$subTitle, $author, $isbn, $publisher, $pubDate)   = formatRecord(@$recInfo);
        if ($sortOrder && $sortOrder ==2){
            $itemList = tb_item_findByRId($dbh, $rid, 'desc');
        }
        else{
            $itemList = tb_item_findByRId($dbh, $rid, 'asc');
        }
        
        foreach my $item(@$itemList){
                    my $itemCircStatus =  circ_getItemStatus($dbh,$item->{'barcode'});
                    my ($itemStatus,$colorStyle,$fontStyle) = ('available','black','normal');
                    if($itemCircStatus->{'status'} == 2){
                        ($itemStatus,$colorStyle,$fontStyle) = ('reserved','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 3){
                        ($itemStatus,$colorStyle,$fontStyle) = ('on loan','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 4){
                        ($itemStatus,$colorStyle,$fontStyle) = ('overdue','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 5){
                        ($itemStatus,$colorStyle,$fontStyle) = ('on hold','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 7){
                        ($itemStatus,$colorStyle,$fontStyle) = ('lost','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 8){
                        ($itemStatus,$colorStyle,$fontStyle) = ('damage','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 10){
                        ($itemStatus,$colorStyle,$fontStyle) = ('restricted','brown','bold');
                    }
                    elsif($itemCircStatus->{'status'} == 11){
                        ($itemStatus,$colorStyle,$fontStyle) = ('missing','brown','bold');
                    }
                    $item->{'status'} = $itemStatus; 
                    $item->{'colorStyle'} = $colorStyle;
                    $item->{'fontStyle'} = $fontStyle;
                }

        push @recordList,  {
            rid         => $recId,
            title       => $title,
            author      => $author,
            isbn        => $isbn,
            publisher   => $publisher,
            pubDate     => $pubDate,
            itemList    => $itemList,
            itemCount   => scalar(@$itemList),
            rwspan      => scalar(@$itemList)?scalar(@$itemList):1,
        };
    }
    $sth->finish;
    return \@recordList;
}


sub formatRecord {
    my (@record) = @_;
    my ($title, $subTitle, $author, $isbn, $publisher, $pubDate);
    foreach my $f(@record){
        if ($f->{'fId'} eq '245_a'){
            $title = $f->{'fVal'};
        }
        elsif($f->{'fId'} eq '245_b'){
            $subTitle = $f->{'fVal'};
        }
        elsif ($f->{'fId'} eq '100_a'){
            foreach my $a(@{$f->{'fVals'}}){
                $author .= $a->{'fVal'} . " " ;
            }
        }
        elsif($f->{'fId'} eq '020_a'){
            $isbn = $f->{'fVal'};
        }
        elsif($f->{'fId'} eq '260_b'){
            $publisher = $f->{'fVal'};
        }
        elsif($f->{'fId'} eq '260_c'){
            $pubDate = $f->{'fVal'};
        }
    }
    return ($title, $subTitle, $author, $isbn, $publisher, $pubDate);
}


__END_OF_FILE:

