Several fixes to allow for creation of valid Code 128 barcodes.
[koha.git] / stats.print.pl
1 #!/usr/bin/perl\r
2 \r
3 use strict;\r
4 use CGI;\r
5 use C4::Output;\r
6 use HTML::Template;\r
7 use C4::Auth;\r
8 use C4::Interface::CGI::Output;\r
9 use C4::Context;\r
10 use Date::Manip;\r
11 use C4::Stats;\r
12 use Text::CSV_XS;\r
13 &Date_Init("DateFormat=non-US"); # set non-USA date, eg:19/08/2005\r
14 \r
15 my $csv = Text::CSV_XS->new(\r
16     {\r
17         'quote_char'  => '"',\r
18         'escape_char' => '"',\r
19         'sep_char'    => ',',\r
20         'binary'      => 1\r
21     }\r
22 );\r
23 \r
24 my $input=new CGI;\r
25 my $time=$input->param('time');\r
26 \r
27 my @loop1;\r
28 my @loop2;\r
29 my $date;\r
30 my $date2;\r
31 if ($time eq 'yesterday'){\r
32         $date=ParseDate('yesterday');\r
33         $date2=ParseDate('today');\r
34 }\r
35 if ($time eq 'today'){\r
36         $date=ParseDate('today');\r
37         $date2=ParseDate('tomorrow');\r
38 }\r
39 if ($time eq 'daybefore'){\r
40         $date=ParseDate('2 days ago');\r
41         $date2=ParseDate('yesterday');\r
42 }\r
43 if ($time eq 'month') {\r
44         $date = ParseDate('1 month ago');\r
45         $date2 = ParseDate('today');\r
46 \r
47 }\r
48 if ($time=~ /\//){\r
49         $date=ParseDate($time);\r
50         $date2=ParseDateDelta('+ 1 day');\r
51         $date2=DateCalc($date,$date2);\r
52 }\r
53 \r
54 if ($time eq ''){\r
55         $date=ParseDate('today');\r
56         $date2=ParseDate('tomorrow');\r
57 }\r
58 \r
59 \r
60 my $date=UnixDate($date,'%Y-%m-%d');\r
61 my $date2=UnixDate($date2,'%Y-%m-%d');\r
62 \r
63 #warn "MASON: DATE: $date, $date2";\r
64 \r
65 #get a list of every payment\r
66 my @payments=TotalPaid($date,$date2);\r
67 \r
68 my $count=@payments;\r
69 # print "MASON: number of payments=$count\n";\r
70 \r
71 my $i=0;\r
72 my $totalcharges=0;\r
73 my $totalcredits=0;\r
74 my $totalpaid=0;\r
75 my $totalwritten=0;\r
76 \r
77 # lets get a a list of all individual item charges paid for by that payment\r
78 while ($i<$count ){\r
79 \r
80        my $count;\r
81        my @charges;\r
82 \r
83        if ($payments[$i]{'type'} ne 'writeoff'){         # lets ignore writeoff payments!.\r
84            @charges=getcharges($payments[$i]{'borrowernumber'}, $payments[$i]{'timestamp'}, $payments[$i]{'proccode'});\r
85            $totalcharges++;\r
86            $count=@charges;\r
87 \r
88            # getting each of the charges and putting them into a array to be printed out\r
89            #this loops per charge per person\r
90            for (my $i2=0;$i2<$count;$i2++){\r
91 \r
92                my $hour=substr($payments[$i]{'timestamp'},8,2);\r
93                my $min=substr($payments[$i]{'timestamp'},10,2);\r
94                my $sec=substr($payments[$i]{'timestamp'},12,2);\r
95                my $time="$hour:$min:$sec";\r
96                my $time2="$payments[$i]{'date'}";\r
97                my $branch=Getpaidbranch($time2,$payments[$i]{'borrowernumber'});\r
98 \r
99                my @rows1 = ($branch,          # lets build up a row\r
100                             $payments[$i]->{'datetime'},\r
101                             $payments[$i]->{'surname'},\r
102                             $payments[$i]->{'firstname'},\r
103                             $charges[$i2]->{'description'},\r
104                             $charges[$i2]->{'accounttype'},\r
105                             sprintf("%.2f", $charges[$i2]->{'amount'}), # rounding amounts to 2dp\r
106                             $payments[$i]->{'type'},\r
107                             $payments[$i]->{'value'});\r
108 \r
109                push (@loop1, \@rows1);\r
110            }\r
111        } else {\r
112          ++$totalwritten;\r
113        }\r
114        $i++; #increment the while loop\r
115        $totalpaid = $totalpaid + $payments[$i]->{'value'};\r
116 }\r
117 \r
118 #get credits and append to the bottom of payments\r
119 my @credits=getcredits($date,$date2);\r
120 \r
121 my $count=@credits;\r
122 my $i=0;\r
123 \r
124 while ($i<$count ){\r
125 \r
126        my @rows2 = ($credits[$i]->{'branchcode'},\r
127                     $credits[$i]->{'date'},\r
128                     $credits[$i]->{'surname'},\r
129                     $credits[$i]->{'firstname'},\r
130                     $credits[$i]->{'description'},\r
131                     $credits[$i]->{'accounttype'},\r
132                     $credits[$i]->{'amount'});\r
133 \r
134        push (@loop2, \@rows2);\r
135        $i++;\r
136        $totalcredits = $totalcredits + $credits[$i]->{'amount'};\r
137 }\r
138 \r
139 #takes off first char minus sign "-100.00"\r
140 $totalcredits = substr($totalcredits, 1);\r
141 \r
142 print $input->header(\r
143     -type       => 'application/vnd.ms-excel',\r
144     -attachment => "moo.csv",         \r
145 );\r
146 print "Branch, Datetime, Surame, Firstnames, Description, Type, Invoice amount, Payment type, Payment Amount\n";\r
147 \r
148 \r
149 for my $row ( @loop1 ) {\r
150 \r
151     $csv->combine(@$row);\r
152     my $string = $csv->string;\r
153     print $string, "\n";\r
154 }\r
155 \r
156 print ",,,,,,,\n";\r
157 \r
158 for my $row ( @loop2 ) {\r
159 \r
160     $csv->combine(@$row);\r
161     my $string = $csv->string;\r
162     print $string, "\n";\r
163 }\r
164 \r
165 print ",,,,,,,\n";\r
166 print ",,,,,,,\n";\r
167 print ",,Total Amount Paid, $totalpaid\n";\r
168 print ",,Total Number Written, $totalwritten\n";\r
169 print ",,Total Amount Credits, $totalcredits\n";\r