
| Current Path : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Application/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Application/IB1.pm |
package Application::IB;
use strict;
use Algorithm::Diff;
use Data::Dumper;
our $slash = "/";
#*****************************************************************
sub new {
my $class = shift;
my $self = {};
$self->{'NAME'} = shift;
if (ref($class)) {
my $obj = $class;
$class = ref($obj);
$self->{'PARENT'} = $obj;
}
bless($self,$class);
return($self);
}
#*****************************************************************
sub subfibu { # to overload
my $self = shift;
my $o; my $file; my @ee;
if (!($self->{'FIBU'})) {
$self->{'FIBU'} = [];
opendir(DDIR,$self->{'NAME'});
while (0 == 0) {
$o = readdir(DDIR);
last if (!$o);
next if ($o =~ /^\./);
next if ($o !~ /^(.*)\.kto$/);
$file = $1;
push(@ee,$file);
}
closedir(DIR);
foreach $o (sort @ee) {
push(@{$self->{'FIBU'}},$self->new($self->{'NAME'}."-".$o));
}
}
return($self->{'FIBU'});
}
#*****************************************************************
sub buchungen {
my $self = shift;
my $text = shift;
if ($text) {
$self->{'BUCHLIST'} = $text;
open(FFILE,">".$self->{'NAME'}.".kto");
print FFILE $self->{'NAME'} . "\n";
print FFILE $self->{'BUCHLIST'};
print FFILE $self->{'KONTLIST'};
close(FFILE);
return($text);
}
open(FFILE,"<".$self->{'NAME'}.".kto");
$text = join("",<FFILE>);
close(FFILE);
$text =~ s/^(.*?)\n//s;
$text =~ s/(\d\d\d\d\d\d\d\d+) +(\S+) +(\S+) +(\S+) +(.+?) */$1,$2,$3,$4,$5\|/g;
$text =~ s/(.*?),\-(.*?),(.*?),(.*?),(.+) */$1,$2,$4,$3,$5/g;
$self->{'BUCHLIST'} = $text;
$self->{'KONTLIST'} = "";
if ($text =~ /^(.*)\|(.*?)\n(.*)$/s) {
$self->{'BUCHLIST'} = $1 . $2 . "\n";
$self->{'KONTLIST'} = $3;
$self->{'BUCHLIST'} =~ s/\|//gs;
}
return($self->{'BUCHLIST'});
}
#******************************************************************
sub konten {
my $self = shift;
my $text = shift;
if ($text) {
$self->{'KONTLIST'} = $text;
}
return($self->{'KONTLIST'});
}
#******************************************************************
sub dump { 1; }
#******************************************************************
sub ch_kto {
my $self = shift;
my $list0 = shift;
my $list = shift;
my ($dellist,$addlist) = $self->compute_diff($list0,$list);
$self->change_buchung($dellist,$addlist);
}
#******************************************************************
sub compute_diff { # compute a diff for changing the Buchungs-Liste
my $self = shift;
my $list0 = shift;
my $list = shift;
$list0 = [ sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) }
split(/\n/,$list0) ];
$list = [ sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) }
split(/\n/,$list) ];
my $addlist = "";
my $dellist = "";
my $o; my $o1;
# print Dumper ( Algorithm::Diff::diff( $list0,$list ) ); exit;
foreach $o ( Algorithm::Diff::diff( $list0,$list ) ) {
foreach $o1 (@$o) {
if ($o1->[0] eq "+") {
$addlist = $addlist . $o1->[2] . "\n";
} else {
$dellist = $dellist . $o1->[2] . "\n";
}
}
}
return($dellist,$addlist);
}
#*****************************************************************
sub change_buchung {
my $self = shift;
my $dellist = shift;
my $addlist = shift;
return("") if (!$dellist and !$addlist);
my $o = "," . $self->{'NAME'} . ":";
$dellist =~ s/$o//g;
$addlist =~ s/$o//g;
my $newbuch = "";
$newbuch = $self->buchungen();
if ($dellist) {
$o = $dellist;
$o =~ s/(.*)\:(.*)//g;
$o =~ s/(\n+)/\|/gs;
$o = "(" . $o . ")";
$newbuch =~ s/$o//gs;
$newbuch =~ s/\n+/\n/gs;
}
if ($addlist) {
$newbuch = $self->buchungen() if (!$newbuch);
$newbuch = join("\n", sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) }
split(/\n/,$newbuch.$addlist) ) . "\n";
}
$dellist =~ s/(\d\d\d\d\d\d\d\d),(.*),([^\:]+),([^\:]+),(.*)//g;
$addlist =~ s/(\d\d\d\d\d\d\d\d),(.*),([^\:]+),([^\:]+),(.*)//g;
# $self->{'PARENT'}->change_buchung($dellist,$addlist);
$self->buchungen($newbuch);
}
#**************************************************************************
sub sortbuchung {
my $self = shift;
my $text = shift;
$text =~ /^(.*?),(.*?),(.*?),(.*?),(.*)$/;
my $erg = $5;
my $kto1 = $3;
my $kto2 = $4;
my $datum = $1;
$erg =~ s/[äöüÄÖÜß]/X/g;
if ($erg =~ s/^\d(.*?)\((.*)\)$/$2/s) { # Umsatzsteuerbehandlung
$erg = substr($erg,0,22) . "ZZZZZZZZZZZZZZZZZZZZZZZZZ";
} else {
$erg = substr($erg,0,22) . "AAAAAAAAAAAAAAAAAAAAAAAAA";
}
$erg = substr($erg,0,23);
if ($erg =~ /^Brutto-Lohn/) { $erg = "01" . $erg; }
elsif ($erg =~ /^(LST|Lohnsteuer)/) { $erg = "02" . $erg; }
elsif ($erg =~ /^(KST|Kirchensteuer)/) { $erg = "03" . $erg; }
elsif ($erg =~ /^Soli/) { $erg = "04" . $erg; }
elsif ($erg =~ /^KV-Beitrag/) { $erg = "05" . $erg; }
elsif ($erg =~ /^PV-Beitrag/) { $erg = "06" . $erg; }
elsif ($erg =~ /^RV-Beitrag/) { $erg = "07" . $erg; }
elsif ($erg =~ /^AV-Beitrag/) { $erg = "08" . $erg; }
elsif ($erg =~ /^A.-Anteil KV/) { $erg = "10" . $erg; }
elsif ($erg =~ /^A.-Anteil ZU/) { $erg = "11" . $erg; }
elsif ($erg =~ /^A.-Anteil RV/) { $erg = "12" . $erg; }
elsif ($erg =~ /^A.-Anteil PV/) { $erg = "13" . $erg; }
elsif ($erg =~ /^A.-Anteil KI/) { $erg = "14" . $erg; }
elsif ($erg =~ /^A.-Anteil AV/) { $erg = "15" . $erg; }
elsif ($erg =~ /^A.-Anteil ST/) { $erg = "16" . $erg; }
elsif ($erg =~ /^A.-Anteil Umlage 1/) { $erg = "17" . $erg; }
elsif ($erg =~ /^A.-Anteil Umlage 2/) { $erg = "18" . $erg; }
elsif ($erg =~ /^A.-Anteil Inso/) { $erg = "19" . $erg; }
else { $erg = "00" . $erg; }
my $o1 = $kto1;
my $o2 = $kto2;
if (($o1 cmp $o2) > 0) {
$o1 = $kto2;
$o2 = $kto1;
}
$erg = $datum . $erg . substr($o1." ",0,20) .
substr($o2." ",0,20);
# if (-f "xxx.xxx") { print " $erg\n"; sleep 1; }
return($erg);
}
#**************************************************************************
sub viewkonto {
my $self = shift;
my $kto = shift;
my $text = $self->viewkonto1($kto);
$text = $text . $self->{'PARENT'}->viewkonto2($kto,"") if ($self->{'PARENT'});
$text = $text . $self->viewkonto3($kto);
$text = [ sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) }
split(/\n/,$text) ];
return(join("\n",@$text) . "\n");
}
#**************************************************************************
# Look in kto and in sub fibus
sub viewkonto1 {
my $self = shift;
my $kto = shift;
# my $interval = "";
# if ($kto =~ /^(.*)\-([123456789ABCEZDV])$/) {
# $kto = $1;
# $interval = $2;
# }
my $buch = [ split(/\n/,$self->buchungen()) ];
my $o = "," . $kto;
$buch = join("\n",grep(/$o/,@$buch));
}
#**************************************************************************
sub viewkonto2 { # searching above
my $self = shift;
my $kto = shift;
my $buch = shift;
$buch = $self->{'NAME'} . "-" . $buch;
$kto = $self->{'NAME'} . "-" . $kto;
my $text = $self->viewkonto1($kto);
$text =~ s/(.*?),(.*?),(.*?),(.*)/$1,$buch\:$2,$buch\:$3,$4/g;
$text =~ s/,$buch\:$buch//g;
if ($self->{'PARENT'}) {
$text = $text . $self->{'PARENT'}->viewkonto2($kto,$buch);
}
return($text);
}
#**************************************************************************
sub viewkonto3 { # searching underneath
my $self = shift;
my $kto = shift;
print "KK: $self $kto $self->{'NAME'}\n";
my $fibu; my $name; my $text;
foreach $fibu (@{$self->subfibu()}) {
$name = $fibu->{'NAME'};
print "NAME: $name $kto $fibu\n"; sleep 1;
if ($kto =~ s/^$name\-//) {
$text = $fibu->viewkonto1($kto);
print "TT $text $fibu->{'NAME'} " . $fibu->buchungen() ."\n"; sleep 20;
$text =~ s/(.*?),(.*?),(.*?),(.*)/$1,$name\-$2,$name\-$3,$4/g;
return($text . $self->viewkonto3($kto));
}
}
return("");
}
#************************************************************
sub to_kto {
my $self = shift;
my $kto = shift;
my $buch1 = "";
my $o;
# foreach $o (@$buch) {
# next if ($o !~ /^(.*?),(\-*)(.*?),(.*?),(.*?),(.*)$/);
# if ($2) {
# $sum = sprintf("%10.8f",$sum-$3);
# $o = "$1,$3,$5,$4,$sum,$6";
# } else {
# $sum = sprintf("%10.8f",$sum+$3);
# $o = "$1,$3,$4,$5,$sum,$6";
# }
# $buch1 = $buch1 . $o . "\n";
# }
return($buch1);
}
#********************************************************************************
1;