#!/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 Date::Calc::Object qw(
    :all
);
use Time::localtime;

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

use Opals::Locale qw(
    loc_getMsgFile
    loc_write
);
use Opals::Date qw(
    date_f005
);

use Opals::BookingSystem qw(
    bs_getBookingById_libCat
    bs_placeHold
    bs_updateBookingStatus
    bs_getBookingBarcodeList
    bs_getAvailableBarcodeList
    bs_isItemBooked_cat
    bs_markDelBarcodeHold
    bs_removeDelBarcodeHold
);


################################################################################
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        => 'circ/bProcess.tmpl',
            reqPermission   => 'circ_rsrv_self|circ_rsrv',
        }
);
my $dateToday = date_f005();
   $dateToday =~ s/([\d]{4})([\d]{2})([\d]{2})[\d]+\.(0|1)/$1-$2-$3/;
my $syspref          = tmpl_preference($dbh);
my $loginuid         = $template->param('curUserId');

my @cookieList  = (@$cookie);
my $tm          = localtime;
my $todayStr    = sprintf("%04d-%02d-%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);

my $op      = $input->{'op'};
if ($permission && ($permission->{'circ_rsrv_self'}|| $permission->{'circ_rsrv'})){   
    if($op eq 'placeOnHold'){
        my $bookingId    = $input->{'bookingId'};
        my $itemCategory;
        my $bc;
        my $rid;
        my @ridList      =($cgi->param('rid'));
        my ($from,$to)   =($cgi->param('reserveFrom'),$cgi->param('reserveTo'));
        my @itemCategory =($cgi->param('itemCategory'));
        bs_updateBookingStatus($dbh,$bookingId,'processing'); 
        my $deleted =1;
        bs_markDelBarcodeHold($dbh,$bookingId,$deleted);
        my $newHold;
        for(my $i=0; $i<scalar(@ridList);$i++){
            $rid            = @ridList[$i];
            $itemCategory   = @itemCategory[$i];
            my @bcList =($cgi->param('bcLst_' . $rid));
            
            for(my $j=0; $j<scalar(@bcList);$j++){
                $bc = @bcList[$j];
                #if(bs_isItemBooked_cat($dbh,$bc,$itemCategory,$from,$to)){
                    $newHold = bs_placeHold($dbh,$bookingId,$bc,$rid,$itemCategory); 
                #}
            }
        }
        if($newHold){
            bs_removeDelBarcodeHold($dbh,$bookingId);
        }
        my $url ='/bin/circ/bList';
        tmpl_redirect($cgi,$url);
    }

        my $bid     = $input->{'selBid'};
        my $booking = bs_getBookingById_libCat($dbh,$bid);
        my $idx=0;
        foreach my $item(@{$booking->{'itemList'}}){
            $item->{'index'} = ++$idx;
            $item->{'bcList'} = bs_getBookingBarcodeList($dbh,$bid,$item->{'rid'});
            $item->{'availBcList'} = bs_getAvailableBarcodeList($dbh,$item->{'rid'},1);

        }
        $template->param(
            bookingId           => $booking->{'bookingId'},
            selBid              => $bid,
            department          => $booking->{'department'},
            course              => $booking->{'course'},
            reqFirstname        => $booking->{'reqFirstname'},
            reqLastname         => $booking->{'reqLastname'},
            reserveFrom         => $booking->{'reserveFrom'},
            reserveTo           => $booking->{'reserveTo'},
            startDate           => $booking->{'startDate'},
            startTime           => $booking->{'startTime'},
            endDate             => $booking->{'endDate'},
            endTime             => $booking->{'endTime'},
            itemList            => $booking->{'itemList'},
            reserve4UserList    => $booking->{'reserve4UserList'},

        );
           
}#if ($permission && $permission->{'circ_loan'})


my $qeMsgMap            =loc_getMsgFile('circ/booking.msg');
loc_write($template,$qeMsgMap);

tmpl_write($dbh, $cgi, \@cookieList, $template);



