#!/usr/bin/perl -w
#################################
# #
# von root mit hilfe #
# der perl-community.de #
# vollbracht! #
# #
# gerne zur freien Verfügung! #
# #
################################
use CGI::Carp 'fatalsToBrowser';
use CGI qw/:standard/;
use DBI;
use strict;
use Time::localtime;
use MIME::Lite;
use Time::HiRes qw(gettimeofday tv_interval usleep);
use PDF::Reuse;
# [..]
# Rechnung als PDF schreiben
my $stoppuhr_pdf = [gettimeofday];
my $rechnungsverz = '../customercare/rechnungen/'.$vertraege[$pArray]{'vertrag_id'};
unless(-e $rechnungsverz){
mkdir $rechnungsverz;
}
my $rechnungsdatei = 'rechnung'.$year.$rechnungsanzahl;
my $rechnungspath = $rechnungsverz."/".$rechnungsdatei.".pdf";
#$hinweis .= "Ich schreibe eine PDF-Rechnung!<br>";
### Beginne PDF zu generieren ###
# Zielfile bestimmen
prFile($rechnungspath);
# Vorlage laden
prForm( { file => '../templates/briefpapier.pdf',
'first' => 1,
'last' => 1 });
### TEXTE ### -------------------------------------------------------------------------------
my $abs = "root Software Engineering :-)";
my @adressfeld = split "<br>\n", $template{'empfaengeradresse'};
my @gruss = ("Wir bedanken uns für Ihren Auftrag.",
"Diese Rechnung ist sofort ohne weitere Mahnung fällig.",
"Bitte überweisen Sie den zu zahlenden Betrag innerhalb von 10 Tagen.",
"Die Rechnung wurde automatisch erstellt und ist ohne Unterschrift gültig."
);
#------------------------------------------------------------------------------------------
-----
### ADRESSEFELD ###
my $xabstand = 60;
my $yabstand = 680;
my $textsize = 10;
my $font = "Helvetica";
#------------------
my $zeilenabstand = 3;
prFontSize($textsize-4);
prText($xabstand, $yabstand, $abs);
$yabstand -= $zeilenabstand*3;
prFontSize($textsize);
my $zeilen_cnt=1;
foreach my $zeile (@adressfeld){
my $ypos =$yabstand - ($textsize+$zeilenabstand)*$zeilen_cnt;
#print "schreibe Adresse '$zeile' mit x:$xabstand y:$ypos <br>\n";
prText($xabstand , $ypos, $zeile);
$zeilen_cnt++;
$hinweis .= "$zeile ";
}
$hinweis .= "<br>\n";
### BETREFF ###
prFontSize($textsize);
prFont($font.'-Bold');
prText($xabstand, 555, $template{'betreff'});
prFont($font);
### R-DATEN ###
prFontSize($textsize);
prText($xabstand, 510, "Rechnungsnummer: ".$rechnungsnummer);
prText($xabstand, 500, "Vertragsnummer: ".$vertragnummer);
prText($xabstand, 490, "Projektname: ".$projektname);
### DATUM ###
# für rechtsbündig
my $xsize = prStrWidth($rechnungsdatum, $font, $textsize);
prFontSize($textsize);
prText($xabstand+440-$xsize, 480, $rechnungsdatum );
### RECHNUNGSTABELLE ###
prFontSize($textsize);
$yabstand = 450;
$zeilen_cnt=1;
my $ypossummen = 0;
foreach(@pdf_rechnungsposition){
if($zeilen_cnt>1){
# Eurozeichen
$pdf_rechnungsposition[($zeilen_cnt-1)][2] .=" ¤";
$pdf_rechnungsposition[($zeilen_cnt-1)][3] .=" ¤";
}
$ypossummen =$yabstand - ($textsize+$zeilenabstand)*$zeilen_cnt;
prText($xabstand , $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][0]);
# für rechtsbündig
my $xsize = prStrWidth($pdf_rechnungsposition[($zeilen_cnt-1)][1], $font, $textsize);
prText($xabstand-$xsize+285, $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][1]);
$xsize = prStrWidth($pdf_rechnungsposition[($zeilen_cnt-1)][2], $font, $textsize);
prText($xabstand-$xsize+365, $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][2]);
$xsize = prStrWidth($pdf_rechnungsposition[($zeilen_cnt-1)][3], $font, $textsize);
prText($xabstand-$xsize+440, $ypossummen, $pdf_rechnungsposition[($zeilen_cnt-1)][3]);
if($zeilen_cnt==1){
# Linie
&pdf_linie($xabstand, $xabstand+440, $ypossummen-3);
}
$zeilen_cnt++;
}
# Linie
&pdf_linie($xabstand, $xabstand+440, $ypossummen-3);
$zeilen_cnt=1;
# Summen
$ypossummen -= 3; # Lücke lassen
my $ypos;
foreach(@pdf_rechnungs_summen){
$script_laufzeit = tv_interval($script_start, [gettimeofday]);
print LOGFILE "Summe:$pdf_rechnungs_summen[($.)][1] T:$script_laufzeit V:$vertraege[$pArray]{'vertrag_id'}\n";
}
foreach(@pdf_rechnungs_summen){
$script_laufzeit = tv_interval($script_start, [gettimeofday]);
print LOGFILE "T: schreibe Summe $pdf_rechnungs_summen[($zeilen_cnt-1)][1] T:$script_laufzeit V:$vertraege[$pArray]{'vertrag_id'}\n";
$ypos =$ypossummen - ($textsize+$zeilenabstand)*$zeilen_cnt;
# für rechtsbündig
$xsize = prStrWidth($pdf_rechnungs_summen[($zeilen_cnt-1)][0], $font, $textsize);
my $linien_x_start = $xabstand-$xsize+390;
prText($linien_x_start, $ypos, $pdf_rechnungs_summen[($zeilen_cnt-1)][0]);
$xsize = prStrWidth($pdf_rechnungs_summen[($zeilen_cnt-1)][1], $font, $textsize);
prText($xabstand-$xsize+440 , $ypos, $pdf_rechnungs_summen[($zeilen_cnt-1)][1]);
if($pdf_rechnungs_summen[($zeilen_cnt-1)][2] eq 'black'){
# Linie
&pdf_linie($xabstand-$xsize+440, $xabstand+440, $ypos-3);
}
last if($. > 100);#?
$zeilen_cnt++;
}
&pdf_linie(355, $xabstand+440, $ypos-3);
&pdf_linie(355, $xabstand+440, $ypos-4.5);
### GRUSS ###
$yabstand = 200;
$textsize = 10;
$zeilenabstand = 3;
#------------------
prFontSize($textsize);
$zeilen_cnt=1;
foreach my $zeile (@gruss){
my $ypos =$yabstand - ($textsize+$zeilenabstand)*$zeilen_cnt;
#print "schreibe Gruss '$zeile' mit x:$xabstand y:$ypos <br>\n";
prText($xabstand , $ypos, $zeile);
$zeilen_cnt++;
}
my $pdf_prozesszeit = tv_interval($stoppuhr_pdf, [gettimeofday]);
#die("Prozeszeit zu lang") if ($pdf_prozesszeit >0.5);
#$hinweis .= "PDF für $vertraege[$pArray]{'bezeichnung'} ($vertraege[$pArray]{'vertrag_id'}) schreiben dauerte ".$pdf_prozesszeit."Sekunden<br>\n";
prEnd();