#!/usr/bin/perl 
use lib("/www/opals/module");
use Opals::Context('/etc/opals/conf/ztest');
use strict;
=item
use Opals::BookingSystem qw(
  bs_addBooking
    bs_updateBooking
    bs_delBooking
    bs_getBookingById
    bs_getBookingByUid
    bs_getBooikngItemList
    bs_getBooking4UserList
    bs_createBooking
    bs_addItem2Booking
    bs_updateBookingItemList
    bs_delItemFromBooking
    bs_addUser2Booking
    bs_updateBooking4UserList
    bs_delUserfromBooking
    bs_isRecBooked
    bs_getBooking4ByUid
    bs_isItemBooked
    bs_numCopyBooked
    bs_isItemBooked_cat
    bs_isBItemLoan2Uid
    bs_numBItemLoan
    bs_numBItemHold
    bs_numBItemPending
    bs_isBcHold4Uid
    bs_isItemLoan2Uid
    bs_isBcHold
    bs_isItemBooked4Uid
);
=cut

use POSIX qw(
    ceil
    floor
);

use Opals::Circulation qw(
    circ_numItemsAvailable
    circ_getItemInfo
);
use Opals::Date qw(
    date_getDeadLineDate
    date_deltaWorkDay   
    date_deltaWorkDayHour
    date_parse
    dateTime_parse
    date_today
    date_text
    date_now
    date_getDeadLineDateTime

);
use Opals::User qw(
    user_searchByName
);
use DBI;
my $dbh = Opals::Context->dbh();
END {
    if ($dbh) {
        $dbh->disconnect();
    }
}

$| = 1;

my @a=(1,2);
my @b=(3,4);
@a=(@b,@a);
my $headers={
    notice  => ['title', 'barcode', 'price', 'dewey', 'dateLoan', 'dateDue'],
};
#@{$headers->{'notice'}}=qw(title barcode price dewey dateLoan dateDue);
#$headers->{'unpaid'}=qw(title,barcode,fineType,date,amount);


foreach my $x(@{$headers->{'notice'}}){
    print "$x\n";
}

my ($t1,$t2)=("14:57","17:50");
my $delTime=_delTime($t1,$t2) ;
printf ("%d:%d\n" ,$delTime->{'hour'},$delTime->{'minute'});

sub _delTime{
    my($t1,$t2)=@_;
    my $ret ={hour=>0,minute=>0};
    return $ret if($t1 !~ m/[\d]{1,2}:[\d]{1,2}/ || $t2 !~ m/[\d]{1,2}:[\d]{1,2}/);
    my @m1 =split(/:/,$t1);
    my @m2 =split(/:/,$t2);
    return $ret if(int(@m1[0]) < 0 || int(@m1[0]) > 23 || int(@m1[1]) < 0 || int(@m1[1]) > 59 ||
                int(@m2[0]) < 0 || int(@m2[0]) > 23 || int(@m2[1]) < 0 || int(@m2[1]) > 59);
   
    my $delMin= int(@m2[0])*60 +  int(@m2[1])  - int(@m1[0])*60 - int(@m1[1]);
    my $delHour=floor($delMin/60) ;
       $delMin %=60;
    $ret={hour=>$delHour,minute=>$delMin};
    return $ret;   


}

=item
my $dd = '2010-01-1 2:22:22';
if($dd =~ m/^\d{4}-\d{1,2}-\d{1,2}( \d{1,2}:\d{1,2}:\d{1,2}){0,1}$/g){
    print "valid date\n";
}
my $hh={};
for(my $i=0;$i<3;$i++){
    push @{$hh->{$i}}, "a$i";
    push @{$hh->{$i}}, "b$i";
    push @{$hh->{$i}}, "c$i";
}

foreach my $k(sort keys %$hh){
    print "$k\n";
    foreach my $v(@{$hh->{$k}}){
        print "------$v\n";
    }
}

my $dateTimeStr1 ="2010-05-14 15:30:00";
my $dateTimeStr2 ="2010-05-14 12:45:30";

my $retDateTime1 = dateTime_parse($dateTimeStr1);
my $retDateTime2 = dateTime_parse($dateTimeStr2);
print $retDateTime2>$retDateTime1?">>>\n":"<<<\n";
my ($d,$h)=date_deltaWorkDayHour($retDateTime1,$retDateTime2);
my $ddate = date_now();

my $d="2010-01-01 02:13:33";
my $time= substr $d,11,8;

       print "[$time]\n";
 
****** NOTE **********

Structure of bookingInfo:

     {uid=>userId,
      reqFirstname=>'',
      reqLastname=>'',
      department=>'',
      section=>'',
      reserveFrom=>'',
      reserveTo=>'',
      itemList=>({rid=>22,itemCategory=>1,numOfCopy=>1},....),
      reserve4UserList=>(uid1,uid2.....)
     }
=cut    
=item

my @reserve4list=(1,2,3,4);
my @reserveItemList=({rid=>1,itemCategory=>1,numOfCopy=>5},{rid=>2,itemCategory=>1,numOfCopy=>5});
my $bookingInfo={
    uid=>100,
    reqFirstname=>'Harry ',
      reqLastname=>'Chan',
      department=>'History',
      section=>'H2130',
      reserveFrom=>'2010-04-13 10:30:00',
      reserveTo=>'2010-04-13 11:30:00',
      itemList=>\@reserveItemList,
      reserve4UserList=>\@reserve4list,
};
my $BID =1;
# $BID =bs_addBooking($dbh,$bookingInfo);

#@reserveItemList[0]->{'numOfCopy'}=6;
#@reserveItemList[1]->{'numOfCopy'}=16;

#push @reserveItemList,{rid=>3,itemCategory=>1,numOfCopy=>10};
#pop @reserve4list;

#push @reserve4list,5;
#$bookingInfo->{'reserveFrom'}='2010-04-11 12:30:00';
#$bookingInfo->{'reserveTo'}='2010-04-10 12:30:00';
# bs_updateBooking($dbh,$BID,$bookingInfo);
#bs_delBooking($dbh,$BID);

my $booking =bs_getBookingById($dbh,$BID);
my $bList=bs_getBookingByUid($dbh,100);
foreach  $booking(@$bList){
    printReqInfo($booking);
    printReq4User($booking->{'reserve4UserList'});
    printReqItem($booking->{'itemList'});
}


print "rec 1 isReserved? " . bs_isRecBooked($dbh,1,1,'','2010-04-11 10:20:00') . "\n";
my $bList = bs_getBooking4ByUid($dbh,1);
foreach my $bid(@$bList){
    print "\t$bid\n";

}

my $str="aaaa{ssss}bbbb";
my $searchTerm="{ssss}";
           $searchTerm  =~ s/\[/\\\[/g;
           $searchTerm  =~ s/\]/\\\]/g;
           $searchTerm  =~ s/\(/\\\(/g;
           $searchTerm  =~ s/\)/\\\)/g;
           $searchTerm  =~ s/\{/\\\{/g;
           $searchTerm  =~ s/\}/\\\}/g;

$str =~ s/$searchTerm/xxxxx/g;
print "$str\n";

my $a=checkItemCategory($dbh,'LT0001');
print @$a[0]->{'rid'} . "-- " . @$a[0]->{'itemcategory'} ."\n";

print bs_isItemBooked($dbh,'LT0001') ,"\n";

my ($c,$ulist)=user_searchByName($dbh,"khanh le",0,10);

print "$c\n";
print bs_numCopyBooked($dbh,9520,1,'2010-03-25 10:30:00','2010-03-25 11:30:00') ." ------ \n";
print circ_numItemsAvailable($dbh,125,1,'2010-03-31','2010-04-30 16:30:00') ." ------ \n";

=

my $s =bs_isItemBooked4Uid($dbh,9870,55,1);
print "$s\n";

my $s =bs_isBcHold4Uid($dbh,9870,'3ERBD00000071X',1);
print "$s\n";

my $s =bs_isItemLoan2Uid($dbh,9870,55,1);
print "$s\n";

my $s =bs_isBcHold($dbh,'3ERBD00000071X',1,'');
print "$s\n";

my $dateHold ="2010-5-4";
if($dateHold =~ s/(\d{4}-\d{1,2}-\d{1,2})(.*)/$1/g){
    print "$dateHold\n";
}
sub checkItemCategory{
    my ($dbh,$bc)=@_;
    my @catList=();
    my $catTbl={'opl_item'=>1,
                'tbk_items'=>2,
                'eq_items'=>3
                };
 
    foreach my $tbl (keys %$catTbl){
        my ($rid) = $dbh->selectrow_array("select rid from $tbl where barcode ='$bc'");
        if($rid){
            push @catList,{rid=>$rid,itemcategory=>$catTbl->{$tbl}};
        }

    }
    return \@catList;

}

sub printReqInfo{
    my($booking)=@_;
    print "\n================================================================\n\n";
    print "Booking ID: $booking->{'bookingId'}\n";
    print "$booking->{'reqFirstname'} $booking->{'reqLastname'} \n";
    print "From $booking->{'reserveFrom'} To $booking->{'reserveTo'} \n";
}
sub printReqItem{
    my($itemList)=@_;
    print "\n=======Reserved Item List =========\n";
    foreach my $item(@$itemList){
        print "rid:$item->{'rid'}    numOfCopy: $item->{'numOfCopy'} \n";
    }
}
sub printReq4User{
    my($userList)=@_;
    print "\n=======Reserved for users =========\n";
    foreach my $user(@$userList){
        print "$user->{'firstname'}  $user->{'lastname'} \n";
    }

}
=cut

