#!/usr/bin/perl

# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA  02111-1307 USA

use strict;
use CGI;
use C4::Output;
use C4::Auth;
use C4::Interface::CGI::Output;
use C4::Context;
use Date::Manip;
use C4::Stats;

&Date_Init("DateFormat=non-US");    # set non-USA date, eg:19/08/2005

my $input = new CGI;
my $time  = $input->param('time');
my $time2 = $input->param('time2');

if (   $input->param('submit') eq "To Excel"
    || $input->param('submit_x') eq "To Excel" )
{
    print $input->redirect(
        "/cgi-bin/koha/stats.print.pl?time=$time&time2=$time2");
}

my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
    {
        template_name   => "stats_screen.tmpl",
        query           => $input,
        type            => "intranet",
        authnotrequired => 1,
        flagsrequired   => { reports => 1 },
        debug           => 1,
    }
);

my $date;
my $date2;
if ( $time eq 'yesterday' ) {
    $date  = ParseDate('yesterday');
    $date2 = ParseDate('today');
}
if ( $time eq 'today' ) {
    $date  = ParseDate('today');
    $date2 = ParseDate('tomorrow');
}
if ( $time eq 'daybefore' ) {
    $date  = ParseDate('2 days ago');
    $date2 = ParseDate('yesterday');
}
if ( $time eq 'month' ) {
    $date  = ParseDate('1 month ago');
    $date2 = ParseDate('today');

}
if ( $time =~ /\// ) {
    $date  = ParseDate($time);
    $date2 = ParseDateDelta('+ 1 day');
    $date2 = DateCalc( $date, $date2 );
}

# if time is blank
if ( $time eq '' ) {
    $date  = ParseDate('today');
    $date2 = ParseDate('tomorrow');
}

# if script is called with a start and finsh date range...
if ( $time ne '' && $time2 ne '' ) {
    $date  = ParseDate($time);
    $date2 = ParseDate($time2);
}

my $date  = UnixDate( $date,  '%Y-%m-%d' );
my $date2 = UnixDate( $date2, '%Y-%m-%d' );

# warn "MASON: TIME: $time, $time2";
# warn "MASON: DATE: $date, $date2";

# get a list of every payment
my @payments = TotalPaid( $date, $date2, 0 );

my $count = @payments;

# print "MASON: number of payments=$count\n";

my $i            = 0;
my $totalcharges = 0;
my $totalcredits = 0;
my $totalpaid    = 0;
my $totalwritten = 0;
my @loop1;
my @loop2;

# lets get a a list of all individual item charges paid for by that payment
while ( $i < $count ) {

    my $count;
    my @charges;

    if ( $payments[$i]{'type'} ne 'writeoff' ) {

        @charges = getcharges(
            $payments[$i]{'borrowernumber'},
            $payments[$i]{'timestamp'},
            $payments[$i]{'proccode'}
        );
        $totalcharges++;
        $count = @charges;

   # getting each of the charges and putting them into a array to be printed out
   #this loops per charge per person
        for ( my $i2 = 0 ; $i2 < $count ; $i2++ ) {
            my $hour = substr( $payments[$i]{'timestamp'}, 8,  2 );
            my $min  = substr( $payments[$i]{'timestamp'}, 10, 2 );
            my $sec  = substr( $payments[$i]{'timestamp'}, 12, 2 );
            my $time = "$hour:$min:$sec";
            my $time2 = "$payments[$i]{'date'}";

#               my $branch=Getpaidbranch($time2,$payments[$i]{'borrowernumber'});
            my $branch = $payments[$i]{'branch'};

#	       if ($payments[$i]{'borrowernumber'} == 18265){
#               warn "$payments[$i]{'branch'} $branch $payments[$i]{'borrowernumber'}";#
#		   }
# lets build up a row
            my %rows1 = (
                branch      => $branch,
                datetime    => $payments[$i]->{'datetime'},
                surname     => $payments[$i]->{'surname'},
                firstname   => $payments[$i]->{'firstname'},
                description => $charges[$i2]->{'description'},
                accounttype => $charges[$i2]->{'accounttype'},
                amount      => sprintf( "%.2f", $charges[$i2]->{'amount'} )
                ,    # rounding amounts to 2dp
                type  => $payments[$i]->{'type'},
                value => sprintf( "%.2f", $payments[$i]->{'value'} )
            );       # rounding amounts to 2dp

            push( @loop1, \%rows1 );
            $totalpaid = $totalpaid + $payments[$i]->{'value'};
        }
    }
    else {
        ++$totalwritten;
    }

    $i++;            #increment the while loop
}

#get credits and append to the bottom of payments
my @credits = getcredits( $date, $date2 );

my $count = @credits;
my $i     = 0;

while ( $i < $count ) {

    my %rows2 = (
        creditbranch      => $credits[$i]->{'branchcode'},
        creditdate        => $credits[$i]->{'date'},
        creditsurname     => $credits[$i]->{'surname'},
        creditfirstname   => $credits[$i]->{'firstname'},
        creditdescription => $credits[$i]->{'description'},
        creditaccounttype => $credits[$i]->{'accounttype'},
        creditamount      => sprintf( "%.2f", $credits[$i]->{'amount'} )
    );

    push( @loop2, \%rows2 );
    $totalcredits = $totalcredits + $credits[$i]->{'amount'};
    $i++;    #increment the while loop
}

#takes off first char minus sign "-100.00"
$totalcredits = substr( $totalcredits, 1 );

my $totalrefunds = 0;
my @loop3;
my @refunds = getrefunds( $date, $date2 );
$count = @refunds;
$i     = 0;

while ( $i < $count ) {

    my %rows2 = (
        refundbranch      => $refunds[$i]->{'branchcode'},
        refunddate        => $refunds[$i]->{'date'},
        refundsurname     => $refunds[$i]->{'surname'},
        refundfirstname   => $refunds[$i]->{'firstname'},
        refunddescription => $refunds[$i]->{'description'},
        refundaccounttype => $refunds[$i]->{'accounttype'},
        refundamount      => sprintf( "%.2f", $refunds[$i]->{'amount'} )
    );

    push( @loop3, \%rows2 );
    $totalrefunds = $totalrefunds + $refunds[$i]->{'amount'};
    $i++;    #increment the while loop
}

my $totalcash = $totalpaid - $totalrefunds;

$template->param(
    date         => $time,
    date2        => $time2,
    loop1        => \@loop1,
    loop2        => \@loop2,
    loop3        => \@loop3,
    totalpaid    => $totalpaid,
    totalcredits => $totalcredits,
    totalwritten => $totalwritten,
    totalrefund  => $totalrefunds,
    totalcash    => $totalcash
);

output_html_with_http_headers $input, $cookie, $template->output;

