From a8d4a8a9efe8377157e4b46065a6e89c585c7f38 Mon Sep 17 00:00:00 2001 From: "kilian (ksmachome)" Date: Tue, 24 Dec 2019 08:00:38 +0100 Subject: [PATCH] v20191223 --- CGI/api/app.cgi | 4 +- CGI/api/audio.cgi | 6 +- CGI/api/createpdf.cgi | 4 +- CGI/api/db.cgi | 4 +- CGI/api/download.cgi | 0 CGI/api/lib/playlistcreator.pm | 85 +++++++ CGI/api/parsestatement.cgi | 4 +- CGI/api/playlist.cgi | 0 CGI/api/playlistcreator.cgi | 34 +++ CGI/api/upload.cgi | 0 CGI/index.cgi | 17 +- CGI/tmpl/app/coloradio/module/audio/index.tt | 216 ++++++------------ .../clr_generateplaylist.pl | 144 ++++++------ bin/newplc.pl | 0 bin/ranglescht.pl | 90 ++++++++ bin/wkhtmltopdf/testdoc.pdf | Bin 13646 -> 42104 bytes bin/wkhtmltopdf/testdoc/content.html | 191 +++++++++------- bin/wkhtmltopdf/testdoc/dks_500.png | Bin 0 -> 19377 bytes bin/wkhtmltopdf/testdoc/footer.html | 8 +- bin/wkhtmltopdf/testdoc/header.html | 40 ++-- bin/wkhtmltopdf/testdoc/pdfconfig.conf | 6 +- dev/setvendor.pl | 5 - dksnas.pl | 4 +- 23 files changed, 505 insertions(+), 357 deletions(-) mode change 100644 => 100755 CGI/api/app.cgi mode change 100644 => 100755 CGI/api/audio.cgi mode change 100644 => 100755 CGI/api/createpdf.cgi mode change 100644 => 100755 CGI/api/db.cgi mode change 100644 => 100755 CGI/api/download.cgi create mode 100644 CGI/api/lib/playlistcreator.pm mode change 100644 => 100755 CGI/api/parsestatement.cgi mode change 100644 => 100755 CGI/api/playlist.cgi create mode 100755 CGI/api/playlistcreator.cgi mode change 100644 => 100755 CGI/api/upload.cgi mode change 100644 => 100755 CGI/index.cgi rename bin/{playlist_creator => }/clr_generateplaylist.pl (52%) mode change 100644 => 100755 create mode 100755 bin/newplc.pl create mode 100644 bin/ranglescht.pl create mode 100644 bin/wkhtmltopdf/testdoc/dks_500.png delete mode 100644 dev/setvendor.pl diff --git a/CGI/api/app.cgi b/CGI/api/app.cgi old mode 100644 new mode 100755 index 8dfde54..2326284 --- a/CGI/api/app.cgi +++ b/CGI/api/app.cgi @@ -1,9 +1,11 @@ #!/Users/kilian/perl5/perlbrew/perls/perl-5.24.1/bin/perl use strict; -use FindBin qw($Bin); +use FindBin qw($Bin $RealBin); # use lib ('CGI/api/lib/perl5'); # use lib ('CGI/api/lib'); use lib ($Bin.'/CGI/api/lib/perl5'); use lib ($Bin.'/CGI/api/lib'); +use lib ($RealBin.'/api/lib/perl5'); +use lib ($RealBin.'/api/lib'); use CGI; use CGI::Cookie; \ No newline at end of file diff --git a/CGI/api/audio.cgi b/CGI/api/audio.cgi old mode 100644 new mode 100755 index 4ee104e..f22b09e --- a/CGI/api/audio.cgi +++ b/CGI/api/audio.cgi @@ -1,6 +1,6 @@ -#!/Users/kilian/perl5/perlbrew/perls/perl-5.24.1/bin/perl +#!/usr/bin/env perl use strict; -use FindBin qw($Bin); +use FindBin qw($RealBin $Bin); use CGI; use CGI::Cookie; @@ -13,6 +13,8 @@ use JSON::PP; use lib ($Bin.'/CGI/api/lib/perl5'); use lib ($Bin.'/CGI/api/lib'); +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); use audio; my $cgi = new CGI(); diff --git a/CGI/api/createpdf.cgi b/CGI/api/createpdf.cgi old mode 100644 new mode 100755 index 0336b95..71bb1d9 --- a/CGI/api/createpdf.cgi +++ b/CGI/api/createpdf.cgi @@ -1,8 +1,10 @@ #!/Users/kilian/perl5/perlbrew/perls/perl-5.24.1/bin/perl use strict; -use FindBin qw($Bin); +use FindBin qw($RealBin $Bin); use lib ($Bin.'/CGI/api/lib/perl5'); use lib ($Bin.'/CGI/api/lib'); +use lib ($RealBin.'/api/lib/perl5'); +use lib ($RealBin.'/api/lib'); use CGI; use CGI::Cookie; # use CGI::Carp qw/fatalsToBrowser/; diff --git a/CGI/api/db.cgi b/CGI/api/db.cgi old mode 100644 new mode 100755 index 17ed817..40afbb8 --- a/CGI/api/db.cgi +++ b/CGI/api/db.cgi @@ -1,10 +1,12 @@ #!/Users/kilian/perl5/perlbrew/perls/perl-5.24.1/bin/perl use strict; -use FindBin qw($Bin); +use FindBin qw($RealBin $Bin); # use lib ('CGI/api/lib/perl5'); # use lib ('CGI/api/lib'); use lib ($Bin.'/CGI/api/lib/perl5'); use lib ($Bin.'/CGI/api/lib'); +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); use CGI; use CGI::Cookie; # use CGI::Carp qw/fatalsToBrowser/; diff --git a/CGI/api/download.cgi b/CGI/api/download.cgi old mode 100644 new mode 100755 diff --git a/CGI/api/lib/playlistcreator.pm b/CGI/api/lib/playlistcreator.pm new file mode 100644 index 0000000..f5cc38e --- /dev/null +++ b/CGI/api/lib/playlistcreator.pm @@ -0,0 +1,85 @@ +package dksdb; + +use strict; +use FindBin qw($Bin); +use lib ('./lib/perl5'); +use lib ('./lib'); +use lib ('./'); +use dksdb; + +sub new { + my $class = shift; + my $param = shift; + my $self = bless {}, $class; + foreach my $p (keys %{$param}){ + $self->{$p} = $param->{$p}; + } + if ($p->{db} ne ""){ + $self->{db} = dksdb->new({dsn => "DBI:SQLite:dbname=".$sitecfg->{datapath}.'/'.$p->{db}.'.sqlite'}); + } else { + $self->{db} = dksdb->new(); + } + + return $self; +} + +sub createplaylist(){ + my $self = shift; + my $date = shift; + my $limit = shift; + my $idschedule = shift; + my $timetofill = shift; + if ($timetofill == undef){ + $timetofill = 84600; + } + my $ctime = 0; + my $cpos = 0; + my $rdef=$self->getrotation($cschedule); + #print Dumper($ref); + my $musiclists = $self->getallmusiclists(); + #print Dumper($musiclists); + while ($ctime < $timetofill){ + foreach my $vfid (sort {$a <=> $b} keys(%{$rdef})){ + my $data = shift($musiclists->{$vfid}); + + } + } + +} + +sub getrotation(){ + my $self = shift; + my $idschedule = shift; + my $rotdef = (); + my $cnt = 0; + # do we have a schedule? + my $sql = "select id_vfolder from rotations where id_schedule='".$idschedule."' order by rpos;"; + my $rot = &dbquerysorted($sql); + return $rot; +} + +sub getallmusiclists(){ + my $self = shift; + my $idschedule = shift; + my $ldate = shift; + my $limit = shift; + my $vfolders = "select distinct(id_vfolder) as id_vfolder from rotations;"; + my $mcats = (); + my @mxcats = &dbqueryarray($msql); + foreach my $cat (@mxcats){ + $mcats->{$cat} = &getmusiclist($cat,$ldate,$limit); + } + return $mcats; +} + +sub getmusiclist(){ + my $self = shift; + my $idvfolder = shift; + my $ldate = shift; + my $limit = shift; + my $msql = "select random() as rand,id,title,artist,filepath,seconds from music where id_vfolder=".$idvfolder." and id not in +(select id_music from playlists pl join music mu on (pl.id_music=mu.id) where mu.id_vfolder=".$idvfolder." and pl.playdate <= date('".$ldate."') order by pl.id DESC LIMIT ".$limit.") order by rand"; + my @mxdata = &dbqueryarray($msql); + return \@mxdata; +} +1; \ No newline at end of file diff --git a/CGI/api/parsestatement.cgi b/CGI/api/parsestatement.cgi old mode 100644 new mode 100755 index 3b0d0ae..7ba5728 --- a/CGI/api/parsestatement.cgi +++ b/CGI/api/parsestatement.cgi @@ -5,11 +5,13 @@ use CGI::Carp qw/fatalsToBrowser/; use File::Path qw/make_path/; use File::Basename; use JSON::PP; -use FindBin qw($Bin); +use FindBin qw($RealBin $Bin); # use lib ('CGI/api/lib/perl5'); # use lib ('CGI/api/lib'); use lib ($Bin.'/CGI/api/lib/perl5'); use lib ($Bin.'/CGI/api/lib'); +use lib ($RealBin.'/api/lib/perl5'); +use lib ($RealBin.'/api/lib'); use dksconfig qw/$sitecfg/; use dksdb; diff --git a/CGI/api/playlist.cgi b/CGI/api/playlist.cgi old mode 100644 new mode 100755 diff --git a/CGI/api/playlistcreator.cgi b/CGI/api/playlistcreator.cgi new file mode 100755 index 0000000..5e11be9 --- /dev/null +++ b/CGI/api/playlistcreator.cgi @@ -0,0 +1,34 @@ +#!/Users/kilian/perl5/perlbrew/perls/perl-5.24.1/bin/perl +use strict; +use FindBin qw($Bin); + +use CGI; +use CGI::Cookie; +use CGI::Carp qw/fatalsToBrowser/; +use File::Basename; +use Data::Dumper; +use File::Basename; + +use lib ($Bin.'/CGI/api/lib/perl5'); +use lib ($Bin.'/CGI/api/lib'); +use lib ($Bin.'/lib/perl5'); +use lib ($Bin.'/lib'); +use dksconfig qw/$sitecfg/; +use dksdb; + +my $cgi = new CGI(); +my $scriptpath = $cgi->url(-absolute => 1); +my $p = (); +my @params = $cgi->param(); +foreach my $pe (@params){ + $p->{$pe} = $cgi->param($pe); +} +my $html->{result} = (); +$html->{params} = $p; +print $cgi->header(-type=> 'text/html', -charset=>"UTF-8"); +print Dumper($html); +#print $cgi->header(-type=> 'application/json', -charset=>"UTF-8"); +# my $js = JSON::PP->new(); +# $js->allow_blessed(1); +# $js->convert_blessed(1); +# print $js->utf8->encode($html); \ No newline at end of file diff --git a/CGI/api/upload.cgi b/CGI/api/upload.cgi old mode 100644 new mode 100755 diff --git a/CGI/index.cgi b/CGI/index.cgi old mode 100644 new mode 100755 index ff00aa5..6c2828b --- a/CGI/index.cgi +++ b/CGI/index.cgi @@ -1,13 +1,13 @@ -#!C:\Strawberry\perl\bin\perl.exe +#!/usr/bin/env perl use strict; -use FindBin qw($Bin); +use FindBin qw($RealBin $Bin); # use lib ('CGI/api/lib/perl5'); # use lib ('CGI/api/lib'); use lib ($Bin.'/CGI/api/lib/perl5'); use lib ($Bin.'/CGI/api/lib'); -# use lib ('./api/lib/perl5'); -# use lib ('./api/lib'); +use lib ($RealBin.'/api/lib/perl5'); +use lib ($RealBin.'/api/lib'); use File::Basename qw/dirname basename/; use Template; # use Template::Constants qw( :debug ); @@ -62,8 +62,13 @@ if ($vars->{suffix} eq ".js"){ } print $cgi->header(-type=>$ctype, -charset=>"utf-8"); - -my $template = Template->new({INCLUDE_PATH => [$Bin.'/CGI/tmpl']}); +my $tmplincpath = $RealBin.'/CGI/tmpl'; +if (basename($RealBin) eq "CGI" ){ + $tmplincpath = $RealBin.'/tmpl'; +} +#print $Bin.'
'; +#print $tmplincpath.'
'; +my $template = Template->new({INCLUDE_PATH => [$tmplincpath]}); my @lv = split(/\//,$vars->{filepath}); my $absnum = scalar(@lv)-1; diff --git a/CGI/tmpl/app/coloradio/module/audio/index.tt b/CGI/tmpl/app/coloradio/module/audio/index.tt index 829c478..686bdea 100644 --- a/CGI/tmpl/app/coloradio/module/audio/index.tt +++ b/CGI/tmpl/app/coloradio/module/audio/index.tt @@ -1,150 +1,78 @@ - - - - - - - - - - -
-
- -
- -
- +[% PROCESS macro/fields.tt %] +
+
+ Audio-List +
+
+ +
-
- Home - - - - - - + +
+ + +
+ Bearbeiten + Löschen +
+ + + +
+
+
+ -
+
+
+
+
+
+ +
+
+
+ [% fieldhidden('id','music','ident','') %] +
+
+ [% fieldeditbox('title','music','Title','','','','') %][% fieldeditbox('artist','music','Artist','','','','') %] [% fieldtagbox('vfolder','music','categories','','','') %][% fieldtagbox('genre','music','Genre','','','') %] [% fieldtagbox('tempo','music','Tempo','','','') + %] [% fieldtagbox('mood','music','Stimmung','','','') %] [% fieldnumberbox('myear','music','Jahr','w3-third','','') %][% fieldtagbox('language','music','Sprache(n)','w3-twothird','','') %] [% fieldtextarea('comment','music','Kommentar','','','50px','') + %]
-
-
- - - -
- -
- - - -
-
- - - -
+
+ [% fieldeditbox('folder','music','Ordner','','readonly','','') %] [% fieldeditbox('filename','music','Datei-Name','','readonly','') %] +
+ [% fieldtimebox('duration','music','Dauer','w3-half','readonly','') %] [% fieldeditbox('filetype','music','Audio-Format','w3-half','readonly','') %] +
[% fieldnumberbox('bitrate','music','Bitrate','w3-half','readonly','') %] [% fieldnumberbox('samplerate','music','Samplerate','w3-half','readonly','') %] [% fieldnumberbox('filesize','music','Größe','w3-half','readonly','') + %] [% fielddatebox('modified','music','Datum','w3-half','readonly','') %]
-
-
- - - -
-
- - - -
-
- - - -
-
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
-
- -
- -
- - - - - - - - - - \ No newline at end of file + +
+
+ \ No newline at end of file diff --git a/bin/playlist_creator/clr_generateplaylist.pl b/bin/clr_generateplaylist.pl old mode 100644 new mode 100755 similarity index 52% rename from bin/playlist_creator/clr_generateplaylist.pl rename to bin/clr_generateplaylist.pl index e677ca2..1038a28 --- a/bin/playlist_creator/clr_generateplaylist.pl +++ b/bin/clr_generateplaylist.pl @@ -16,60 +16,57 @@ use Encode; my $dbfile = "/Users/kilian/Workspace/dksnas/data/coloradio/aral.sqlite"; my $datefrom = "2020-01-01"; my $dateto = "2020-12-31"; -my $cschedule="Default"; -my $musiclistlimit=100; +my $cschedule="2"; +my $limit = 100; my $udf = &getunixdatetime($datefrom." 00:00:00"); my $udt = &getunixdatetime($dateto." 00:00:00"); my $cdt = $udf; -my $musiclists= {}; +#my $musiclists= {}; my $dbh = DBI->connect('DBI:SQLite:dbname='.$dbfile,"","",{PrintError=>1,AutoCommit=>1}) or die "Connection Error!".$!."\n"; &writelog("Generate ".basename($dbfile)." Playlist from ".$datefrom." to ".$dateto); -&dbexec("DELETE from playlist where plistname >='".substr(&getdatetime($cdt),0,10)."' and plistname <= '".substr(&getdatetime($udt),0,10)."' and streamname = '".$cschedule."';"); -while ($cdt <= $udt){ - my $shortdate = substr(&getdatetime($cdt),0,10); - &writelog("Create Playlist for DATE ".$shortdate); - my $rotationdef = &getdayrotationdef($shortdate,$cschedule); - my $mids = (); - foreach my $e (sort {$a <=> $b} keys(%{$rotationdef})){ - my $crot = $rotationdef->{$e}; - my @cats = @{$crot->{categories}}; - #print localtime.": Start at ".$crot->{timefrom}."\n"; - #get first cat - my $timetofill = &getunixdatetime($shortdate." ".$crot->{timeend}.':00')-&getunixdatetime($shortdate." ".$crot->{timebegin}.':00'); - if ($crot->{timeend} <= $crot->{timefrom}){ - $timetofill += 86400; - } - my $ctime = 0; - my $cpos = 0; - my @audiolist = (); - while ($ctime < $timetofill){ - for (my $c=0;$c".$cats[$c]."\n"; - if (!exists($musiclists->{$cats[$c]}) || scalar(@{$musiclists->{$cats[$c]}}) == 0){ - if (scalar(@audiolist) > 0){ - &dbexec("INSERT INTO playlist (plistname,plposition,streamname,idmusic) VALUES ".join(",",@audiolist)); - @audiolist=(); - } - #print "get next music category data ".$cats[$c]."\n"; - &getmusiclist($cats[$c],$shortdate,$musiclistlimit); - } - my $data = shift(@{$musiclists->{$cats[$c]}}); - #my $checksql = "select idmusic from playlist where idmusic='".$data->{idmusic}."' and plistname='".$shortdate."' and streamname='".$schedulename."';"; - #my $rxx = $db->dbquerysorted($checksql); - if (!exists($mids->{$data->{idmusic}})){ - push(@audiolist,"('".$shortdate."',".$cpos.",'".$cschedule."','".$data->{idmusic}."')"); - $cpos++; - $ctime += $data->{duration}; - $mids->{$data->{idmusic}} = ""; - } - } - } - &dbexec("INSERT INTO playlist (plistname,plposition,streamname,idmusic) VALUES ".join(",",@audiolist)); - } - $cdt = $cdt+86400; - } -$dbh->disconnect(); +&dbexec("DELETE from playlists where playdate >= date('".substr(&getdatetime($cdt),0,10)."') and id_schedule='".$cschedule."';"); +my $rdef=&getrotation($cschedule); +#print Dumper($rdef); +my $musiclists = &getallmusiclists($cschedule,$datefrom,$limit); +#print Dumper($musiclists); +#print Dumper(keys(%{$musiclists})); + + while ($cdt <= $udt){ + my $shortdate = substr(&getdatetime($cdt),0,10); + &writelog("Create Playlist for DATE ".$shortdate); + my $timetofill = 86400; + my $ctime = 0; + my $cpos = 0; + my @audiolist = (); + while ($ctime < $timetofill){ + foreach my $r (sort {$a <=> $b } keys(%{$rdef})){ + #print "$r :".Dumper($rdef->{$r}->{id_vfolder})."\n"; + my $aufile = shift(@{$musiclists->{$rdef->{$r}->{id_vfolder}}}); + #print Dumper($aufile); + #print " "; + push(@audiolist,"(date('".$shortdate."'), '".$cpos."', '".$cschedule."', ".$aufile->{id}.")"); + $ctime += $aufile->{seconds}; + $cpos++; + if (scalar(@{$musiclists->{$rdef->{$r}->{id_vfolder}}}) == 0){ + if (scalar(@audiolist) > 0 ){ + &dbexec("INSERT INTO playlists (playdate, playposition, id_schedule, id_music) VALUES ".join(",",@audiolist)); + @audiolist = (); + } + + $musiclists->{$rdef->{$r}->{id_vfolder}} = &getmusiclist($rdef->{$r}->{id_vfolder},$shortdate,$limit); + } + } + #print Dumper(scalar(@audiolist)); + if (scalar(@audiolist) > 0 ){ + &dbexec("INSERT INTO playlists (playdate, playposition, id_schedule, id_music) VALUES ".join(",",@audiolist)); + @audiolist = (); + } + } + $cdt = $cdt+86400; +} +$dbh->disconnect(); +&writelog("End Creation!"); sub getunixdatetime(){ @@ -181,40 +178,37 @@ sub writelog(){ print $logrow; } -sub getdayrotationdef(){ - my $strdate = shift; - my $schedulename = shift; +sub getrotation(){ + my $idschedule = shift; my $rotdef = (); my $cnt = 0; # do we have a schedule? - my $sql = "select * from schedule where weekday = '".&getweekday($strdate)."';"; - my $dayrot = &dbquerysorted($sql); - if (keys(%{$dayrot}) > 0){ - foreach my $i (sort {$a<=>$b} keys(%{$dayrot})){ - $sql = "select * from rotation where rotation='".$dayrot->{$i}->{rotation}."' order by position;"; - my $hrot = &dbquerysorted($sql); - my $trange ={"timefrom" => $dayrot->{$i}->{start}, "timeto" => $dayrot->{$i}->{end}}; - my @rot = (); - foreach my $p (sort {$a<=>$b} keys(%{$hrot})){ - push(@rot,$hrot->{$p}->{owncategory}); - } - $trange->{categories} = \@rot; - $rotdef->{$cnt} = $trange; - $cnt++; - } - } + my $sql = "select id_vfolder from rotations where id_schedule='".$idschedule."' order by rpos;"; + my $rot = &dbquerysorted($sql); + return $rot; +} - return $rotdef; +sub getallmusiclists(){ + my $idschedule = shift; + my $ldate = shift; + my $limit = shift; + my $sql = "select distinct(id_vfolder) as id_vfolder from rotations;"; + my $mcats = (); + my @mxcats = &dbqueryarray($sql); + foreach my $cat (@mxcats){ + # print "CAT:\n"; + # print Dumper($cat); + $mcats->{$cat->{id_vfolder}} = &getmusiclist($cat->{id_vfolder},$ldate,$limit); + } + return $mcats; } sub getmusiclist(){ - my $owncat = shift; - my $date = shift; + my $idvfolder = shift; + my $ldate = shift; my $limit = shift; - my $msql = "select rrm.idmusic,rrm.duration from ( select mc.idmusic,bb.lastplayed,random() as rand - from music mc left join (select max(maxxx) as lastplayed,idmusic from (select pl.plistname || '_' || pl.plposition as maxxx,pl.idmusic from playlist pl left join music rm on (rm.idmusic=pl.idmusic) where pl.idmusic in (select idmusic from music where owncategory='".$owncat."') and plistname <'".$date."') aa group by idmusic) bb on (mc.idmusic=bb.idmusic) where mc.owncategory='".$owncat."' order by bb.lastplayed ASC LIMIT 100) cc left join music rrm on (rrm.idmusic=cc.idmusic) order by cc.rand;"; + my $msql = "select random() as rand,id,title,artist,filepath,seconds from music where id_vfolder=".$idvfolder." and id not in +(select id_music from playlists pl join music mu on (pl.id_music=mu.id) where mu.id_vfolder=".$idvfolder." and pl.playdate <= date('".$ldate."') order by pl.id DESC LIMIT ".$limit.") order by rand"; my @mxdata = &dbqueryarray($msql); - $musiclists->{$owncat} = \@mxdata; - # - #return @data; + return \@mxdata; } \ No newline at end of file diff --git a/bin/newplc.pl b/bin/newplc.pl new file mode 100755 index 0000000..e69de29 diff --git a/bin/ranglescht.pl b/bin/ranglescht.pl new file mode 100644 index 0000000..f8527c3 --- /dev/null +++ b/bin/ranglescht.pl @@ -0,0 +1,90 @@ +#!/usr/bin/env perl +use strict; +use Spreadsheet::XLSX; +use Encode; +use Getopt::Long; +use Data::Dumper; +my $xlsxfile = ""; +GetOptions("xlsx|x=s" => \$xlsxfile); + +my $excel = Spreadsheet::XLSX -> new ($xlsxfile); +my $points = (); +my $cols = (); +my $startrow = 0; +foreach my $sheet (@{$excel -> {Worksheet}}) { + $sheet -> {MaxRow} ||= $sheet -> {MinRow}; + foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) { + $sheet -> {MaxCol} ||= $sheet -> {MinCol}; + foreach my $col ($sheet -> {MinCol} .. $sheet -> {MaxCol}) { + my $cell = $sheet -> {Cells} [$row] [$col]; + if ($cell) { + if ($cell -> {Val} eq "Nom"){ + $cols->{$col} = "name"; + $startrow = $row +1; + } + if (($cell -> {Val} =~ /OLR/) && ($row == $startrow-1)){ + my ($n) = $cell -> {Val} =~ m/.*(\d+).*/; + $cols->{$col} = "rl".$n; + } + if ((exists($cols->{$col}) ) && ($row > $startrow) && ($startrow != 0)){ + if ($cell -> {Val} ne "0"){ + $points->{$row}->{$cols->{$col}} = $cell->{Val}; + } + } + } + } + } + } + #print Dumper($points); + foreach my $p (keys(%{$points})){ + + if (keys(%{$points->{$p}}) > 1){ + my ($surname,$prename) = $points->{$p}->{"name"} =~ m/^(.+)\s(.+)$/; + $points->{$p}->{surname} = $surname; + $points->{$p}->{prename} = $prename; + print Dumper($points->{$p}); + } + + } +# my $xlsx = parsexlsx->new(); +# my @data = $xlsx->sheetdata($p->{file},"Tabelle1"); +# my $dataok = 0; +# my @datax = (); +# my $colnames = (); +# foreach my $c (@data){ + +# if ($dataok == 1){ +# my $nc = (); +# foreach my $r (sort {$a <=> $b} keys(%{$c})){ + +# if ($c->{$r} ne "0"){ +# $nc->{$colnames->{$r}} = $c->{$r}; +# if ($colnames->{$r} eq "Nom"){ +# my ($surname,$prename) = $c->{$r} =~ m/^(.+)\s(.+)$/; +# $nc->{prename} = $prename; +# $nc->{surname} = $surname; +# } +# if ($colnames->{$r} eq "Place"){ +# $nc->{$colnames->{$r}} =~ s/\.//; +# } +# } +# } +# push(@datax,$nc); +# } +# if (exists($c->{3}) && $c->{3} eq "Nom"){ + +# # print $c; +# $dataok = 1; +# foreach my $n (keys(%{$c})){ +# $colnames->{$n} = $c->{$n}; +# } +# #$html->{colnames} = $colnames; +# } + +# } +# foreach my $dx (@datax){ +# if (exists($dx->{"OLR ".$p->{rl}})){ +# print encode("utf-8","select * from rankingdata('".$p->{listname}."','".$p->{season}."',".$p->{rl}.",'".$dx->{surname}."','".$dx->{prename}."',".$dx->{"OLR ".$p->{rl}}.",".$dx->{"Total"}.",".$dx->{"Place"}.");")."\n"; +# #print "select rl2=".$dx->{"OLR ".$p->{rl}}.", WHERE surname='".$dx->{surname}."' and prename='".$dx->{prename}."';" +# } +# } \ No newline at end of file diff --git a/bin/wkhtmltopdf/testdoc.pdf b/bin/wkhtmltopdf/testdoc.pdf index df1ec4140020394e65a717c4706a7eeb5d9ff0ef..d491d3fa508640af6631acb76a243c9693d3d6b7 100644 GIT binary patch literal 42104 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

ti;}WHUm1F(G8RZ%5I_u5D&$wxg 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¬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 diff --git a/bin/wkhtmltopdf/testdoc/content.html b/bin/wkhtmltopdf/testdoc/content.html index dd8f286..f3327fa 100644 --- a/bin/wkhtmltopdf/testdoc/content.html +++ b/bin/wkhtmltopdf/testdoc/content.html @@ -5,98 +5,113 @@ Document + -

TEST DOCUMENT

- - + +
TEST
+ + + + + + + + + +
Rechnung
+ Firma
1, rue Principale
L-1234 Ville

+
+ + + + + +
Rechnungs-Nr.YYYYMMDD-XXXX
DatumDD.MM.YYYY
FälligkeitDD.MM.YYYY
Kundennummer00000000
+
+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
#Produkt / DienstleistungAnz.Einzel-PreisNetto-Summe
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
row
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
AB12Lange Beschreibung0Stunden0,00 €0,00 €
Total Netto + 0000,00 €
MwSt. (17%) + 0000,00 €
Gesamt zu bezahlen: + 0000,00 €
+
Nous vous prions de virer le montant ci-dessus au compte
+ LU25 0020 1100 2783 8700 (BILLLULL)
\ No newline at end of file diff --git a/bin/wkhtmltopdf/testdoc/dks_500.png b/bin/wkhtmltopdf/testdoc/dks_500.png new file mode 100644 index 0000000000000000000000000000000000000000..35c6adb0a2eea64d75374b48e82688655c657ec5 GIT binary patch literal 19377 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 Ef>|9d5dZ)H literal 0 HcmV?d00001 diff --git a/bin/wkhtmltopdf/testdoc/footer.html b/bin/wkhtmltopdf/testdoc/footer.html index 724a6e3..9ed52d3 100644 --- a/bin/wkhtmltopdf/testdoc/footer.html +++ b/bin/wkhtmltopdf/testdoc/footer.html @@ -20,11 +20,13 @@ function subst() { } } - +
+ - +
DKS, Société à responsabilité limitée, RC B168572 - TVA: LU 25375617 - No. Aut: 10024550 / 0
+ IBAN: LU25 0020 1100 2783 8700; BIC: BILLLULL
- Page of + Seite /
diff --git a/bin/wkhtmltopdf/testdoc/header.html b/bin/wkhtmltopdf/testdoc/header.html index fcdb882..b5596a1 100644 --- a/bin/wkhtmltopdf/testdoc/header.html +++ b/bin/wkhtmltopdf/testdoc/header.html @@ -1,31 +1,21 @@ - - + + + +
- - + + +
- Page of +   +
+ DKS s.à r.l.
+ 8b, rue du Moulin
+ L-6914 Roodt-sur-Syre

+ Tel: +352 691 504 574
+ info@dks.lu / www.dks.lu
+
Database knowledge Solutions - Simplify IT
diff --git a/bin/wkhtmltopdf/testdoc/pdfconfig.conf b/bin/wkhtmltopdf/testdoc/pdfconfig.conf index 5ba2615..0ebe01d 100644 --- a/bin/wkhtmltopdf/testdoc/pdfconfig.conf +++ b/bin/wkhtmltopdf/testdoc/pdfconfig.conf @@ -1,6 +1,6 @@ -PDFTOP="10mm" -PDFBOTTOM="10mm" -PDFLEFT="10mm" +PDFTOP="40mm" +PDFBOTTOM="20mm" +PDFLEFT="20mm" PDFRIGHT="10mm" PDFSIZE="A4" PDFORIENTATION="Portrait" \ No newline at end of file diff --git a/dev/setvendor.pl b/dev/setvendor.pl deleted file mode 100644 index ef11ca7..0000000 --- a/dev/setvendor.pl +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env perl - -use strict; - -opendir \ No newline at end of file diff --git a/dksnas.pl b/dksnas.pl index 9b097cf..095ff06 100644 --- a/dksnas.pl +++ b/dksnas.pl @@ -45,12 +45,12 @@ print $cfgpath."\n"; my $allapp = builder { enable "DirIndex", dir_index => 'index.html'; - mount "/" => Plack::App::WrapCGI->new(script => $RealBin."/CGI/index.cgi")->to_app; + mount "/" => Plack::App::WrapCGI->new(script => $RealBin."/CGI/index.cgi" , execute => 1)->to_app; opendir(API,dirname($0)."/CGI/api"); while (my $s = readdir(API)){ if ($s =~ /\.cgi$/){ - mount "/api/".$s => Plack::App::WrapCGI->new(script => $RealBin."/CGI/api/".$s)->to_app; + mount "/api/".$s => Plack::App::WrapCGI->new(script => $RealBin."/CGI/api/".$s,execute => 1)->to_app; } } closedir(API); -- 2.39.5