Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

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
Upload File :
Current File : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Application/IB.pm

package Application::IB;

use strict;
use Algorithm::Diff;
use Digest::MD5;
use Data::Dumper;

our $slash = "/";

#*****************************************************************

sub new {

   my $class   = shift;
   $class      = ref($class) || $class;
   my $self    = {};
   $self->{'FILE'} = shift;
   bless($self,$class);
   return($self);
   
}

#*****************************************************************

sub viewkonto_txt {

   my $self   = shift;
   my $kto    = shift;
   my $format = shift;
   my $file0  = shift;
   my $file   = shift;

   my $kto0  = "";
   if ($kto  =~ s/^(.*)--(.*)$/$1-$2/) {
      $kto0  = $1;
   }
   $kto =~ s/\-$//;
   
   my $text; my $text1; my $datum; my $kto1; my $kto2; my $betrag; my $remark;
   my $zeile; my $sum; my $o; my $o1; my $name; my $mode; my $buchh0;
   my $diff; my $buchh; my $text0; my $header;

   my $konten = {};
   return("") if ($self->{'FILE'} !~ /^(.*)\.(csv|txt|kto)$/);

#  1. Extract mode

   $buchh0 = $1;
   $name   = "";
   if ($buchh0 =~ s/^(.*?)--(.*)$/$1/) {
      $name = $2;
   }
   $buchh0 =~ s/^(.*)[\\\/](.*)$/$2/;
   open(FFILE,"<".$self->{'FILE'});
   if ($file0) {
      $text   = [<FFILE>];
      $text0  = join("",@$text); #  Speichern des gesamten Files im Falle eines Merge
      $header = shift($text);
      $text   = join("",grep(/$kto/,@$text))
   } else {
      $text = <FFILE>;
      $text = join("",grep(/$kto/,<FFILE>));  #  von vorneherein eine Beschraenkung auf Zeilen, die das Konto enthalten
   }
   close(FFILE);
   my $md5 = Digest::MD5::md5_base64($text);
   
   $text =~ s/(\d\d\d\d\d\d\d\d[; ]+\-?\d+\.\d\d[ ;]+)$kto(.*?[ ;]+)/$1---EMPTY---$2/g;  #  relativer Kontopfad
   $text =~ s/(\d\d\d\d\d\d\d\d[; ]+)(\-?\d+\.\d\d[ ;]+)([^ ;]+?[ ;]+)$kto(.*?[ ;]+)/$1\-$2---EMPTY---$4$3/g; # Konten umdrehen
   $text =~ s/\[\-$kto(.*?)\]/\[---EMPTY---$1\]/g;  # Konten in Berechnungen aendern
   $text =~ s/---EMPTY----/-/g;  # Referenz auf das Konto selbst
   $text =~ s/---EMPTY---/-/g;   # eliminieren
   $text =~ s/(\d\d\d\d\d\d\d\d[; ]+-?)--/$1 /g;  #  doppelte Minuszeichen eliminieren
   $text =~ s/\d\d\d\d\d\d\d\d[; ]+-?\d+\.\d\d[ ;]+[^-][^\n]*?\n//gs; # absolutes Konto am Anfang der Zeile geht nicht
#      $text =~ s/\n(\d\d\d\d\d\d\d\d.*\d\d\d\d\d\d\d\d.*?\n)(.*)/$1\n/s;
   $text =~ s/^([^ ;]+)[; ]+\-?\d+\.\d\d(.*)$/$1/g;  #  Kontobezeichnungen uebernehmen
   while ($text =~ s/\n$kto0-([^ ;]+[; ]+[^ ;]+)(\s*)\n/\n$1\n/gs) { 1; };  #  Kontobezeichnungen uebernehmen
   while ($text =~ s/\n$kto0-([^ ;]+[; ]+[^ ;]+)[ ;]+(-\d+\.\d\d)(\s*)\n/\n$1\n/gs) { 1; };  #  Kontobezeichnungen uebernehmen
   while ($text =~ s/\n\s*\S+\s*\n/\n/gs) { 1; }   #  leere Kontoeintraege entfernen

# print $text; print "KK $kto $kto0\n"; exit;

   if ($kto0) {
      $kto  =~ s/^$kto0//;
      $kto  =~ s/^-//;
      $kto0 = $buchh0 . ":" . $name . "-" . $kto0;
      $kto0 =~  s/[:-]-/:/g;
      $text =~ s/(\d\d\d\d\d\d\d\d[; ]+\-?\d+\.\d\d[ ;]+[^ ;]+?[ ;]+)([^ -][^ :;]*)/$1$buchh0\:$2/g;
# print $text; print "KK $kto $kto0\n"; exit;
      $text =~ s/\[([^-][^ :;]?)\]/\[$buchh0\:$1\]/g;
   } else {
      $kto0 = $buchh0;
   }

   $text =~ s/(\d\d\d\d\d\d\d\d[; ]+\-?\d+\.\d\d[ ;]+[^ ;]+?[ ;]+)($kto0\-)/$1/g;
   $text =~ s/\[$kto0\-(.*?)\]/\[$1\]/g;
   $kto0 =~ s/\:/\-/g;
   if (!$kto) {
      $text =~ s/(\d\d\d\d\d\d\d\d[; ]+\-?\d+\.\d\d[ ;]+)\-/$1/g;
      $text =~ s/(\d\d\d\d\d\d\d\d[; ]+\-?\d+\.\d\d[ ;]+[^ ;]+[ ;]+)\-/$1/g;
      $text =~ s/\[-(.*?)\]/\[$1\]/g;
   }


   $md5    =~  s/\+/\-/gs;
   $md5    =~  s/\//\_/gs;
   $buchh0 = $kto0 . "--" . $kto if ($kto);
   $text   = $kto0 . "--" . $kto . "--" . $md5 . "\n" . $text;

   $o = 1;
   $o = 0          if ($format =~ s/^\.//);
   $o = 2          if ($format =~ s/^\://);
   $o = 3          if ($format =~ s/^,//);
   $mode = "txt"   if ($format =~ s/t//i or !$mode);
   $mode = "csv"   if ($format =~ s/c//i);

   
   $file = $buchh0."_$md5.$mode";

#  2. --- Change mode

   while ($file0) {

      $diff    = $self->compute_diff($file0,$file);
      $buchh   = $diff->[0];
      $kto     = $diff->[1];
      $o       = $diff->[2];
      last if ($o ne $md5);

      foreach $zeile (split(/\n/,$diff->[3])) {  #  delete list
         if ($zeile =~ /^(\d\d\d\d\d\d\d\d)[; ]+(-?\d+\.\d\d)[; ]+(.*?)([^ :;]+)[; ]+(.*?)([^ :;]+)[; ]-?\d+\.\d\d[ ;]+(.*?)[ ;]*$/) {
            $zeile = "$1.*?$2.*?$3.*?$4.*?$6.*?$7";
         }
         elsif ($zeile =~ /^([^ ;]+)[ ;]+([^ ;]+)[ ;]+-?\d+\.\d\d/) {
            $zeile = ".*?$kto-$1.*?$2.*?";
         }
         return("Line not found: $zeile") if ($text0 !~ s/\n$zeile\n/\n/s);
         return("Double line: $zeile")    if ($text0 !~ s/\n$zeile\n/\n/s);
      }

      foreach $zeile (split(/\n/,$diff->[4])) {  #  add list
         if ($zeile =~ s/^(\d\d\d\d\d\d\d\d[; ]+-?\d+\.\d\d[; ]+)([^ ;]+)([; ]+)([^ ;]+)(.*?)[ ;]*$/$1---KTO1---$3---KTO2---$5/) {
            $o = [$2,$4];
            foreach $o1 (@$o) {
               $o1 =~ s/^-/$kto-/;
               if ($o1 !~ /\:/) { $o1 = $buchh . ":" . $o1; }
               $o1 =~ s/-$//;
            }
            $o1 = $o->[1];
            $o  = $o->[0];
            $zeile =~ s/---KTO1---/$o/;
            $zeile =~ s/---KTO2---/$o/;
         }
         elsif ($zeile =~ /^([^ ;]+)[ ;]+([^ ;]+)/) {
            $zeile = $buchh . "-" . $zeile;
            $zeile =~ s/^$buchh0//;
         }
         $text0 = $zeile . "\n" . $text0;
      }
      
      $text  = join("",sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) }
                        split(/\n/,$text0) );
      unlink($file0);
      unlink($file);
      $file  = $self->{'FILE'};
         
   }
   
      
   $text = $self->to_txt($text,$mode);
   
   if ($o == 1 or $o == 3) {
      open(FFILE,">$file");
      print FFILE $text;
      close(FFILE);
   }
   return($text) if ($o > 1);
   return($file);


}

#******************************************************************************

sub to_txt {

   my $self   = shift;
   my $text   = shift;
   my $format = shift;
   
   my $zeile; my $datum; my $betrag; my $kto1; my $kto2; my $remark;
   my $o; my $space; my $tab; my $sum; my $kto3; my $xtab; my $ytab;
   my $buchh; my $kto; my $md5;
   
   my $text1      = "";   
   my $bezeichner = {};

   my $gesamt = {};
   foreach $zeile (split(/\n/,$text)) {
      if ($zeile =~ /^(\d\d\d\d\d\d\d\d)[; ]+(-?\d+\.\d\d)[; ]+([^ ;]+?)[; ]+([^ ;]+?)([; ]+)(.*)$/) {
         $datum  =  $1;
         $betrag =  $2;
         $kto1   =  $3;
         $kto2   =  $4;
         $sum    =  "0.00";
         $remark =  $6;
# print "$zeile\n$kto1-\n$kto2-\n"; exit;
         $remark =~ s/^\-?\d+\.\d\d[; ]+//;
         if ($kto2 !~ /^-/) {
            $kto3   = $kto1;
            $kto3   =~ s/^-$//;
            while (0 == 0) {
               $gesamt->{$kto.$kto3} = $gesamt->{$kto.$kto3} + $betrag;
               last if ($kto3 !~ s/-([^- ]+)$//);
            }
            $sum = $gesamt->{$kto};
         }
         if ($format eq "txt") {
            if (length($kto1) < 13) { $kto1 = substr($kto1." "x13,0,13); }
            if (length($kto2) < 13) { $kto2 = substr($kto2." "x13,0,13); }
            while ($remark =~ s/^\;/   /) { 1; }
            $zeile = $datum . " " . sprintf("%11.2f",$betrag) . "  " .
                     $kto1 . "___TAB1___" . (sprintf("%09b",1023-length($kto1))) . "___ " .
                     $kto2 . "___TAB2___" . (sprintf("%09b",1023-length($kto2))) . "___  " .
                     sprintf("%11.2f",$sum) . "  " . $remark;
         } else {
            $zeile = $datum . ";" . sprintf("%3.2f",$betrag) . ";" .
                     $kto1 . ";" .
                     $kto2 . ";" .
                     sprintf("%3.2f",$sum) . ";" . $remark;
         }
         $text1 = $text1 . $zeile . "\n";
      }
      elsif ($zeile =~ /^\s*(.*?)([ ;]+)(.*?)\s*$/) {
         $bezeichner->{$1} = $3;
      }
      elsif (!$buchh and $zeile =~ /^(.*)--(.*)--(.*)/) {
         $buchh = $1;
         $kto   = $2;
         $md5   = $3;
      } 
   }
# print Dumper $gesamt; exit;

   $text1 = $text1 . "\n";
   $xtab  = $kto;
   $xtab  =~ s/[^-]//g;

   foreach $kto1 (sort keys %$gesamt) {
      $zeile  = sprintf("%3.2f",$gesamt->{$kto1});
      $zeile  =~ s/^(.*?)( *)$/$2$1/;
      $zeile  =~ s/ /\\/g;
      $ytab   =  $kto1;
      $ytab   =~ s/[^-]//g;
      $ytab   =~ s/^$xtab//;
      if ($format eq "txt") {
         $o     = $bezeichner->{$kto1} || "___undefined___";
         if (length($zeile) < 13) { $zeile = substr($zeile." "x13,0,13); }
         if (length($kto1) < 13)  { $kto1  = substr( $kto1." "x13,0,13); }
         if (length($o)    < 13)  { $o     = substr(    $o." "x13,0,13); }
         $ytab   =~ s/\-/\\/g;
         $zeile  = $kto1 . "___TAB3___" . (sprintf("%09b",1023-length($kto1))) . "___ " .
                   $o    . "___TAB4___" . (sprintf("%09b",1023-length($o)))    . "___ " .
                   $ytab . $ytab . $ytab . $zeile;
      } else {
         $ytab   =~ s/\-/\;/g;
         $zeile  = $kto1 . ";" .
                   $bezeichner->{$kto1} . ";" .
                   $ytab . $zeile;
      }
      $text1  = $text1 . $zeile . "\n";
   }

#print $text1; exit;

   if ($format eq "txt") {
      foreach $tab (1,2,3,4) {   
         while (0 == 0) {
            last if ($text1 =~ /___TAB$tab\___1/ and $text1 =~ /___TAB$tab\___0/);
            last if ($text1 !~ s/___TAB$tab\___(0|1)/___TAB$tab\___/gs);
         }
         while (0 == 0) {
            last if ($text1 !~ /___TAB$tab\___([01]*)\___/);
            $o = $1;
            $space = " " x eval("0b".$o);
            $text1 =~ s/___TAB$tab\___$o\___/$space/gs;
         }
      }
      $text1 =~ s/\\/ /g;
      $text1 =~ s/___undefined___/               /gs;
   }
   $o     = $text1;
   $o     =~ s/[ ;]+/ /g;

   if ($format eq "txt") {
      $text1 = $buchh . ", " . $kto . " (" . $md5 . ")\n\n" . $text1;
   } else {
      $text1 = $buchh . ";" . $kto . ";;" . $md5 . "\n\n" . $text1;
   }

   return($text1);

}

#******************************************************************

sub compute_diff {   #  compute a diff for changing the Buchungs-Liste

   my $self   = shift;
   my $list0  = shift;
   my $list   = shift;
   if(!$list) {
      $list  = $list0;
      $list0 = $list0 . "~";
   }

   if (-f $list0) {
      open(FFILE,"<".$list0);
      $list0 = join("",<FFILE>);
      close(FFILE);
   }
   if (-f $list) {
      open(FFILE,"<".$list);
      $list = join("",<FFILE>);
      close(FFILE);
   }
   
   return([]) if ($list0 !~ s/^(.*?)[,;\(\)]+(.*?)[,;\(\)]+(.*?)\n//s);
   my $buchh = $1;
   my $kto   = $2;
   my $md5   = $3;
   return([]) if ($list  !~ s/^$buchh[,;\(\)]+$kto[,;\(\)]+$md5\n//s);
      
   $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([$buchh,$kto,$md5,$dellist,$addlist]);

}

#*****************************************************************
#*****************************************************************

sub viewkonto {  #  Ausgabe des kleinsten Kontoblattes, das das angegebene Konto enthaelt

   my $self = shift;
   my $kto  = shift;

   my $text = "";
   my $kto; my $kto1; my $kto0;

   foreach $kto1 ( $self->subkto($kto) ) {
      $text = $text . $self->viewkonto($kto1);
   }

   opendir(DDIR,$self->{'DIR'});
   my $o; my $o1;
   while (0 == 0) {
      $o  = readdir(DDIR);
      next if ($o !~ /^(.*)\.csv$/);
      $o1 = $1;
      next if ($kto !~ /^$o/);
      next if (length($o) < length($kto0));
      $kto0 = $o1;
   }
   closedir(DDIR);
   
}

#*****************************************************************

sub consolidate {

   my $self = shift;
   my $kto  = shift;

   my $text = "";
   my $zeile; my $datum; my $betrag; my $kto1; my $kto2; my $sum; my $remark;
   my $o; my $o1; my $text1; my $kto0; my $buch;
   while (0 == 0) { # Konsolidieren aller Unterkonten
      opendir(DDIR,$self->{'DIR'});
      while (0 == 0) {
         $o  = readdir(DDIR);
         last if (!$o);
         next if ($o  !~ /^(.*)\.csv$/);
         $o1 = $1;
         last if ($o1 =~ /^$kto/);  #  suche IRGENDEIN Unterkonto aus
      }
      closedir(DDIR);
      last if (!$o);
      $text1 = $self->consolidate($o);
      $text1 =~ s/(\.\d\d)\;-/$1\;\-$o\-/g;  #  addiere zur relativen Kontoliste das Konto
      $text1 =~ s/(\.\d\d)\;(.*?)\;-/$1\;$2\;\-$o\-/g;
   }
   
   open(FFILE,"<$o.kto");
   $o = [ join("",<FFILE>) ];
   shift(@$o);
   $text = $text . join("",@$o);
   close(FFILE);
   
   $text = [ sort { $self->sortkto($a) cmp $self->sortkto($b) } split(/\n/,$text) ];
   
   my $sum = 0;
   foreach $o (@$text) {  #  Umsortieren, so dass Unterkonten stets am Anfang stehen
      if ($o =~ /^(\d\d\d\d\d\d\d\d)\;(\-?)(.*?)\;(.*?)\;+(.*?)\;+(.*?)\;+(.*)$/) {
         $datum  = $1;
         $betrag = $2.$3;
         $kto1   = $4;
         $kto2   = $5;
         $remark = $7;
         if    ($kto1 =~ /^\-/ and $kto2 !~ /\-/) {
            $sum = $sum + $betrag;
         }
         elsif ($kto2 =~ /^\-/ and $kto1 !~ /\-/) {
            $betrag = (-1) * $betrag;
            $o    = $kto1;
            $kto1 = $kto2;
            $kto2 = $o;
            $sum = $sum + $betrag;
         }
      }
      $o = "$datum\;".sprintf("%3.2f",$betrag).
           "\;$kto1\;$kto2\;".sprintf("%3.2f",$sum).$remark;
   }           

   open(FFILE,"<".$self->{'DIR'} . $slash . $kto0 . ".kto");
   my @text = <FFILE>;
   close(FFILE);
   
   $buch = join("\n",grep(/$o/,@$buch));
   

   if ($text) {   #  Speichern der Buchungen
      $self->{'BUCHUNGEN'} = $text;
      system("rm " . $self->{'KTO'} . "-\*.kto");
      open(FFILE,">".$self->{'KTO'}.".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;
   if(!$list) {
      $list  = $list0;
      $list0 = $list0 . "~";
   }

   if (-f $list0) {
      open(FFILE,"<".$list0);
      $list0 = join("",<FFILE>);
      close(FFILE);
   }
   if (-f $list) {
      open(FFILE,"<".$list);
      $list = join("",<FFILE>);
      close(FFILE);
   }
   
   $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;



bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net