#!/usr/bin/perl 
# for i in `ls /etc/opals/conf/`; do cp -p /www/opals/script/requestReserveConv /tmp/urt; perl -pi -e "s/_MY_SITE_/$i/" /tmp/urt; sudo /tmp/urt; done


use lib "/www/opals/module";;
use Opals::Context('/etc/opals/conf/_MY_SITE_');
use strict;
use Opals::Constant; 
use Date::Calc::Object qw(
    :all
);
use Digest::SHA qw(
    sha1_hex
    sha512_hex
);

use POSIX qw(
    ceil
    floor
);
use Time::localtime;


use CGI;
use DBI;

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

$dbh->do("truncate table opl_requestReserve");
$dbh->do("truncate table opl_reqReserveHistory");
$dbh->do("insert into opl_requestReserve(id,idReserve,rid,uid,numCopyRequest,dateRequest,dateExpiry,dateProcess,status,noticeType) select idReserve,idReserve,rid,uid,numCopyReserve,dateReserve,dateExpiry,dateReserve,'reserve','email' from opl_reserve ");

my $sth=$dbh->prepare("select r.idReserve,r.rid,r.uid,numCopyReserve,dateReserve,r.dateExpiry dateExpiry_r, r.dateCancel dateCancel_r,idloan,barcode, h.idReserve idReserve_h, dateHold, h.dateExpiry dateExpiry_h,dateLoan, h.dateCancel dateCancel_h from opl_reserve r left outer join opl_hold h using(idReserve)  order by r.idReserve,dateHOld");
   $sth->execute();
   my $count=1; 
   my $preId=0;
   while(my $req = $sth->fetchrow_hashref){
       updateReqRsvStatus($dbh, $req->{'idReserve'},"reserve",$req->{'idReserve'},1,$req->{'dateExpiry_r'},$req->{'dateReserve'});

       if($req->{'dateCancel_r'} ne '' ){
           updateReqRsvStatus($dbh, $req->{'idReserve'},"cancel",undef,1,undef,$req->{'dateCancel_r'});

       }
       elsif($req->{'dateHold'} ne ''){
           updateReqRsvStatus($dbh, $req->{'idReserve'},"ready",undef,1,undef,$req->{'dateHold'});
       }
       if($preId != $req->{'idReserve'}){
           $dbh->do("update opl_requestReserve set numCopyRequest=numCopyRequest +? where idReserve= ?",undef,$count,$preId);
           $preId = $req->{'idReserve'};
           $count=0;
       }
       if(defined $req->{'dateHold'} && ($req->{'dateCancel_h'} eq '' || ($req->{'dateCancel_r'} ne '' && $req->{'dateCancel_h'} ne '')) ){
               $count++;
       }
   }
   $dbh->do("update opl_requestReserve set numCopyRequest=numCopyRequest +  ? where idReserve=?",undef,$count,$preId);


#-----------------------------------------------------------------------------------------------
sub updateReqRsvStatus{
    my ($dbh, $reqId,$status,$idreserve,$respUid,$dateExpiry,$dateProcess) = @_;
    my($todayStr)=$dbh->selectrow_array("select now()");

    if($status ne 'reserve' || (defined $idreserve && $idreserve>0 )){
        if($status eq 'reserve'){
            $dbh->do("update opl_requestReserve 
                      set status=?,idReserve=? where id=?",undef,$status,$idreserve,$reqId);
        }
         
        else{
            $dbh->do("update opl_requestReserve 
                      set status=? where id=?",undef,$status,$reqId);
        }

        my $log= to_json({notes=>'',dateProcess=>$dateProcess});
        $dbh->do("insert into opl_reqReserveHistory set reqId=?,uid=?,action=?,log=?"
                 ,undef,$reqId,$respUid,$status,$log);

    }
     
}

