| Lines 15-130
          
      
      
        Link Here | 
        
          | 15 | # with Koha; if not, write to the Free Software Foundation, Inc., | 15 | # with Koha; if not, write to the Free Software Foundation, Inc., | 
        
          | 16 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 16 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 
        
          | 17 |  | 17 |  | 
          
            
              | 18 | use strict; | 18 | use Modern::Perl; | 
            
              | 19 | use warnings; |  |  | 
        
          | 20 | use CGI; | 19 | use CGI; | 
        
          | 21 | use C4::Auth; | 20 | use C4::Auth; | 
        
          | 22 | use C4::Serials; | 21 | use C4::Serials; | 
        
          | 23 | use C4::Acquisition; | 22 | use C4::Acquisition; | 
        
          | 24 | use C4::Output; | 23 | use C4::Output; | 
        
          | 25 | use C4::Context; | 24 | use C4::Context; | 
            
              |  |  | 25 | use C4::Csv qw( GetCsvProfile ); | 
        
          | 26 |  | 26 |  | 
            
              | 27 | # use Date::Manip; |  |  | 
        
          | 28 | use Text::CSV_XS; | 27 | use Text::CSV_XS; | 
        
          | 29 |  | 28 |  | 
            
              | 30 |  |  |  | 
            
              | 31 | # &Date_Init("DateFormat=non-US"); # set non-USA date, eg:19/08/2005 | 
            
              | 32 |  | 
            
              | 33 |  | 
            
              | 34 | my $csv = Text::CSV_XS->new( | 
            
              | 35 |         { | 
            
              | 36 |             'quote_char'  => '"', | 
            
              | 37 |             'escape_char' => '"', | 
            
              | 38 |             'sep_char'    => ',', | 
            
              | 39 |             'binary'      => 1 | 
            
              | 40 |         } | 
            
              | 41 |     ); | 
            
              | 42 |  | 
            
              | 43 |  | 
        
          | 44 | my $query = new CGI; | 29 | my $query = new CGI; | 
        
          | 45 | my $supplierid = $query->param('supplierid'); | 30 | my $supplierid = $query->param('supplierid'); | 
          
            
              | 46 | my @serialid = $query->param('serialid'); | 31 | my @serialids = $query->param('serialid'); | 
        
          | 47 | my $op = $query->param('op') || q{}; | 32 | my $op = $query->param('op') || q{}; | 
            
              | 48 | my $serialidcount = @serialid; |  |  | 
        
          | 49 |  | 33 |  | 
          
            
              | 50 | my @loop1; | 34 | my $csv_profile_id = $query->param('csv_profile'); | 
            
              | 51 | my @lateissues; | 35 | my $csv_profile = C4::Csv::GetCsvProfile( $csv_profile_id ); | 
            
              | 52 | if($op ne 'claims'){ | 36 | die "There is no valid csv profile given" unless $csv_profile; | 
            
              | 53 |     @lateissues = GetLateIssues($supplierid); | 37 |  | 
            
              | 54 |     for my $issue (@lateissues){ | 38 | my $csv = Text::CSV_XS->new({ | 
            
              | 55 |         push @loop1, | 39 |     'quote_char'  => '"', | 
            
              | 56 |       [ $issue->{'name'}, $issue->{'title'}, $issue->{'serialseq'}, $issue->{'planneddate'},]; | 40 |     'escape_char' => '"', | 
            
              | 57 |     } | 41 |     'sep_char'    => $csv_profile->{csv_separator}, | 
            
              |  |  | 42 |     'binary'      => 1 | 
            
              | 43 | }); | 
            
              | 44 |  | 
            
              | 45 | my $content = $csv_profile->{content}; | 
            
              | 46 | my ( @headers, @fields ); | 
            
              | 47 | while ( $content =~ / | 
            
              | 48 |     ([^=]+) # header | 
            
              | 49 |     = | 
            
              | 50 |     ([^\|]+) # fieldname (table.row or row) | 
            
              | 51 |     \|? /gxms | 
            
              | 52 | ) { | 
            
              | 53 |     push @headers, $1; | 
            
              | 54 |     my $field = $2; | 
            
              | 55 |     $field =~ s/[^\.]*\.?//; # Remove the table name if exists. | 
            
              | 56 |     push @fields, $field; | 
        
          | 58 | } | 57 | } | 
            
              | 59 | my $totalcount2 = 0; |  |  | 
            
              | 60 | my @loop2; | 
            
              | 61 | my @missingissues; | 
            
              | 62 | for (my $k=0;$k<@serialid;$k++){ | 
            
              | 63 |     @missingissues = GetLateOrMissingIssues($supplierid, $serialid[$k]); | 
        
          | 64 |  | 58 |  | 
          
            
              | 65 |     for (my $j=0;$j<@missingissues;$j++){ | 59 | my @rows; | 
            
              | 66 | 	my @rows2 = ($missingissues[$j]->{'name'},          # lets build up a row | 60 | for my $serialid ( @serialids ) { | 
            
              | 67 | 	             $missingissues[$j]->{'title'}, | 61 |     my @missingissues = GetLateOrMissingIssues($supplierid, $serialid); | 
            
              | 68 |                      $missingissues[$j]->{'serialseq'}, | 62 |     my $issue = $missingissues[0]; | 
            
              | 69 |                      $missingissues[$j]->{'planneddate'}, | 63 |     my @row; | 
            
              | 70 |                      ); | 64 |     for my $field ( @fields ) { | 
            
              | 71 |         push (@loop2, \@rows2); | 65 |         push @row, $issue->{$field}; | 
        
          | 72 |     } | 66 |     } | 
          
            
              | 73 |     $totalcount2 += scalar @missingissues; | 67 |     push @rows, \@row; | 
            
              | 74 |     # update claim date to let one know they have looked at this missing item |  |  | 
            
              | 75 |     updateClaim($serialid[$k]); | 
            
              | 76 | } | 
        
          | 77 |  | 68 |  | 
          
            
              | 78 | my $heading =''; | 69 |     # update claim date to let one know they have looked at this missing item | 
            
              | 79 | my $filename =''; | 70 |     updateClaim($serialid); | 
            
              | 80 | if($supplierid){ |  |  | 
            
              | 81 |     if($missingissues[0]->{'name'}){ # if exists display supplier name in heading for neatness | 
            
              | 82 | 	# not necessarily needed as the name will appear in supplier column also | 
            
              | 83 |         $heading = "FOR $missingissues[0]->{'name'}"; | 
            
              | 84 | 	$filename = "_$missingissues[0]->{'name'}"; | 
            
              | 85 |     } | 
        
          | 86 | } | 71 | } | 
        
          | 87 |  | 72 |  | 
        
          | 88 | print $query->header( | 73 | print $query->header( | 
          
            
              | 89 |         -type       => 'application/vnd.ms-excel', | 74 |     -type       => 'plain/text', | 
            
              | 90 |         -attachment => "claims".$filename.".csv", | 75 |     -attachment => "serials-claims.csv", | 
            
              | 91 |     ); | 76 | ); | 
            
              | 92 |  |  |  | 
            
              | 93 | if($op ne 'claims'){ | 
            
              | 94 |     print "LATE ISSUES ".$heading."\n\n"; | 
            
              | 95 |     print "SUPPLIER,TITLE,ISSUE NUMBER,LATE SINCE\n"; | 
        
          | 96 |  | 77 |  | 
          
            
              | 97 |     for my $row ( @loop1 ) { | 78 | print join( $csv_profile->{csv_separator}, @headers ) . "\n"; | 
            
              | 98 |  |  |  | 
            
              | 99 |         $csv->combine(@$row); | 
            
              | 100 |         my $string = $csv->string; | 
            
              | 101 |         print $string, "\n"; | 
            
              | 102 |     } | 
            
              | 103 |  | 
            
              | 104 |     print ",,,,,,,\n\n"; | 
            
              | 105 | } | 
            
              | 106 | if($serialidcount == 1){ | 
            
              | 107 |     print "MISSING ISSUE ".$heading."\n\n"; | 
            
              | 108 | } else { | 
            
              | 109 |     print "MISSING ISSUES ".$heading."\n\n"; | 
            
              | 110 | } | 
            
              | 111 | print "SUPPLIER,TITLE,ISSUE NUMBER,LATE SINCE\n"; | 
            
              | 112 |  | 
            
              | 113 | for my $row ( @loop2 ) { | 
            
              | 114 |  | 
            
              | 115 |         $csv->combine(@$row); | 
            
              | 116 |         my $string = $csv->string; | 
            
              | 117 |         print $string, "\n"; | 
            
              | 118 |     } | 
            
              | 119 |  | 
            
              | 120 | print ",,,,,,,\n"; | 
            
              | 121 | print ",,,,,,,\n"; | 
            
              | 122 | if($op ne 'claims'){ | 
            
              | 123 |     my $count = scalar @lateissues; | 
            
              | 124 |     print ",,Total Number Late, $count\n"; | 
            
              | 125 | } | 
            
              | 126 | if($serialidcount == 1){ | 
        
          | 127 |  | 79 |  | 
          
            
              | 128 | } else { | 80 | for my $row ( @rows ) { | 
            
              | 129 |     print ",,Total Number Missing, $totalcount2\n"; | 81 |     $csv->combine(@$row); | 
            
              |  |  | 82 |     my $string = $csv->string; | 
            
              | 83 |     print $string, "\n"; | 
        
          | 130 | } | 84 | } | 
            
              | 131 | -  |  |  |