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/ServFiBuBasic.pm

package Application::ServFiBuBasic;

use strict;
use Data::Dumper;

sub new {

   my $class = shift;
   my $self  = {};
   my $text  = shift;
   $self->{'BUCHUNGEN'}   = [];
   $self->{'KONTENLISTE'} = {};
   $self->{'STORE'}       = {};
   $self->{'BID'}         = {};  #  Liste der Buchungsidentifier
   $self->{'GID'}         = {};  #  Liste der Gruppenidentifier
   $self->{'BIDMAX'} = 0;
   $self->{'GIDMAX'} = 0;
   bless($self,$class);
   $self->restore($text);
   return($self);

}

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

sub restore {

   my $self = shift;
   my $text = shift;
   return(0) if (!$text);
   my @tt   = split("\n",$text);
   my $o; my $o1; my $datum; my $amount; my $kto1; my $kto2; my $rem;
   my $buchungen = []; my $kontenliste = {};
   foreach $o (@tt) {
      if ( $o =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.*?)(\s*)$/ ) {
         $datum  = $1;
         $amount = $2;
         $kto1   = $3;
         $kto2   = $4;
         $rem    = $5;
         if ($datum > 19970000) {
            if (1 or $amount != 0) {
               push(@$buchungen,[$datum,$amount,$kto1,$kto2,$rem]);
               if ($rem =~ /BID\:(\d+)/) {
                  $o1 = $1;
                  $self->{'BID'}->{$o1} = 1;
                  if ($o1 > $self->{'BIDMAX'}) { $self->{'BIDMAX'} = $o1; }
               }
               if ($rem =~ /GID\:(\d+)/) {
                  $o1 = $1;
                  $self->{'GID'}->{$o1} = 1;
                  if ($o1 > $self->{'GIDMAX'}) { $self->{'GIDMAX'} = $o1; }
               }
               $o = "";
            }
         }
      }
      if ( $o =~ /^(\S+)\s+(.*?)(\s*)$/ ) {
         if (substr($1,0,2) ne "\:\:") {
            $kontenliste->{$1} = $2;
         }
      }
   }
   $self->buchungen($buchungen);
   $self->kontenliste($kontenliste);

}

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

sub exp {   #  Dump-Funktion

   my $self   = shift;
   my $format = shift;
   my $text = "";
   my $buchungen = $self->buchungen();
   my $o; my $p1; my $p2; my $o1;
   foreach $o (@$buchungen) {
      next if ($self->{'RESTRICTED'} and (!($o->[4] =~ /\@\@/)));
      if (!$format) {
         $text = $text . $o->[0] . " " . sprintf("%3.2f",$o->[1]) . " " .
               $o->[2] . " " .
               $o->[3] . " " .
               $o->[4] . "\n";
      } else {
            if (length($o->[2]) < 23) {
               $p1 = substr($o->[2]."                                 ",0,23);
            } else {
               $p1 = $o->[2] . " ";
            }
            if (length($o->[3]) < 23) {
               $p2 = substr($o->[3]."                                 ",0,23);
            } else {
               $p2 = $o->[3] . " ";
            }
         $text = $text . $o->[0] . " " . sprintf("%11.2f",$o->[1]) . " " .
               $p1 . " " . $p2 . " " . 
               $o->[4] . "\n";
      }
   }
   my $kontenliste = $self->kontenliste();
   foreach $o (sort keys %$kontenliste) {
      $o1 = $o;
      if (length($o1) < 31) {
         $o1 =  substr($o1."                              ",0,32);
      }
      $text = $text . $o1 . " " . $kontenliste->{$o} . "\n";
   }
   return($text);

}

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

sub xxstore {

   my $self = shift;
   my $name = shift;
   my $val  = shift;
   if ($val) {
      $self->{'STORE'}->{$name} = $val;
   }
   return($self->{'STORE'}->{$name});

}

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

sub restrict {

   my $self = shift;
   my $par  = shift;
   if ($par) {
      if ($par == 1) {
         $self->{'RESTRICTED'} = 1;
      } else {
         $self->{'RESTRICTED'} = 0;
      }
   }
   return($self->{'RESTRICTED'});

}

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

sub buchungen {

   my $self = shift;
   my $bb   = shift;
   if ($bb) {
      $self->{'BUCHUNGEN'} = [ sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) } @$bb ];
   }
#   foreach my $o (@{$self->{'BUCHUNGEN'}}) {
#      print $self->sortbuchung($o) . "\n"; sleep 1;
#   }
   return($self->{'BUCHUNGEN'});

}

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

sub kontenliste {

   my $self = shift;
   my $kk   = shift;
   if ($kk) {
      $self->{'KONTENLISTE'} = $kk;
   }
   return($self->{'KONTENLISTE'});

}

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

sub nextbid { my $self = shift; return($self->{'BIDMAX'}+1); }
sub nextgid { my $self = shift; return($self->{'GIDMAX'}+1); }

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

#   Hinzufuegen von Buchungen.
#   Format: Datum, Betrag, Konto1, Konto2, Text

sub addbuchung {

   my $self     = shift;
   my @buchsatz = @_;    #  Feld mit Buchungssaetzen
   return(1) if ($self->{'RESTRICTED'});
   my $o; my $o1;
   foreach $o (@buchsatz) {
      $o->[2] =~ s/^x//;
      $o->[2] =~ s/-[1234567890ABCij]-/-/;
      $o->[2] =~ s/-[1234567890ABCij]$//;
      $o->[3] =~ s/^x//;
      $o->[3] =~ s/-[1234567890ABCij]-//;
      $o->[3] =~ s/-[1234567890ABCij]$//;
      $o->[4] =~ s/^(.*?)(\s+)$/$1/;
      push(@{$self->{'BUCHUNGEN'}},$o);
      my $rem = $o->[4];
      if ($rem =~ /BID\:(\d+)/) {
         $o1 = $1;
         $self->{'BID'}->{$o1} = 1;
         if ($o1 > $self->{'BIDMAX'}) { $self->{'BIDMAX'} = $o1; }
      }
      if ($rem =~ /GID\:(\d+)/) {
         $o1 = $1;
         $self->{'GID'}->{$o1} = 1;
         if ($o1 > $self->{'GIDMAX'}) { $self->{'GIDMAX'} = $o1; }
      }
   }

#   my @bb = sort { $a->[0] . substr($a->[4],0,15)
#                    cmp $b->[0] . substr($b->[4],0,15) }

   $self->buchungen( [ @{$self->{'BUCHUNGEN'}} ] );

#   my @bb = sort { $self->sortbuchung($a) cmp $self->sortbuchung($b) }
#                            @{$self->{'BUCHUNGEN'}};
#   $self->{'BUCHUNGEN'} = \@bb;

   return(1);

}

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

sub sortbuchung {

   my $self    = shift;
   my $buchung = shift;
   
   my $erg = $buchung->[4];
   $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 = $buchung->[2];
   my $o2 = $buchung->[3];
   if (($o1 cmp $o2) > 0) {
      $o1 = $buchung->[3];
      $o2 = $buchung->[2];
   }

   $erg = $buchung->[0] . $erg . substr($o1."                                      ",0,20) .
                             substr($o2."                                      ",0,20);

# if (-f "xxx.xxx") { print " $erg\n"; sleep 1; }               
   return($erg);
   
}

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

#   Loeschen von Buchungen

sub delbuchung {

   my $self     = shift;
   my @buchsatz = @_;    #  Feld mit Buchungssaetzen
   return(1) if ($self->{'RESTRICTED'});
   my $o; my $o1;
   my @bb = ();
   foreach $o (@{$self->{'BUCHUNGEN'}}) {
      foreach $o1 (@buchsatz) {
         $o1->[2] =~ s/-[1234567890ABCij]-/-/;
         $o1->[2] =~ s/-[1234567890ABCij]$//;
         $o1->[3] =~ s/-[1234567890ABCij]-//;
         $o1->[3] =~ s/-[1234567890ABCij]$//;
         last if (!(ref($o)));
         if (ref($o1) and ref($o)) {
            $o1->[2] =~ s/^x//;
            $o1->[3] =~ s/^x//;
#            $o->[4]  =~ s/^\s*(.*?)\s*$/$1/;
#            $o1->[4] =~ s/^\s*(.*?)\s*$/$1/;
#            print Dumper($o);
#            print Dumper($o1); sleep 10 if ($o->[1] =~ /14\.89/);
            if ( (($o->[0] eq $o1->[0]) and
                  ($o->[1] == $o1->[1]) and
                  ($o->[2] eq $o1->[2]) and
                  ($o->[3] eq $o1->[3]) and
                  ($o->[4] eq $o1->[4])) or
                 (($o->[0] eq $o1->[0]) and
                  ($o->[1] == -$o1->[1]) and
                  ($o->[2] eq $o1->[3]) and
                  ($o->[3] eq $o1->[2]) and
                  ($o->[4] eq $o1->[4])) ) {
               $o = "";
            }
         } else {
            if ($o->[4] =~ /$o1(\D|$)/) {
               $o = "";
            }
            last if (!$o);
         }
      }
      if ($o) { push(@bb,$o); }
   }
   $self->{'BUCHUNGEN'} = \@bb;

   return(1);

}

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

#   Liefert Kontoinformationen als Array mit drei Feldern:

#   Erstes Feld:  Buchungssaetze
#   Zweites Feld: Hash mit Unterkonten-Salden
#   Drittes Feld: Gesamt-Konto-Saldo


sub viewkonto {

   my $self  = shift;
   my $kto   = shift;
   my $o; my $o1; my $o2; my @ee;
   my $saldo = 0;
   my $gkto; my $ukto; my $amount;
   my $ktotext  = [];
   my $buchkont = {};
   my $remark;

   my $monat = "";
   $kto      = $kto . "-";
   if ($kto =~ s/-([123456789ABCij])-/-/) {
      $monat = "0" . $1;
      if    ($monat eq "00") { $monat = "10"; }
      elsif ($monat eq "0i") { $monat = "11"; }
      elsif ($monat eq "0j") { $monat = "12"; }
      elsif ($monat eq "0A") { $monat = "10"; }
      elsif ($monat eq "0B") { $monat = "11"; }
      elsif ($monat eq "0C") { $monat = "12"; }
   }
   $kto =~ s/(.*)-$/$1/;

   my $buchungen = $self->{'BUCHUNGEN'};
###   my $collect   = 0;
   my $ukto_add  = "";
   $o = "";
###   if ($kto =~ /-X(.*)/ or $kto =~ s/^x//) {
###      $o = $1;
####      if (!$o) {
####         $kto = $kto . "-";
####         $ukto_add = "-";
####      }
###      $buchungen = [@$buchungen];
###      $collect   = 1;
###      $kto =~ s/-X/-\[123456789ABCDEFGHIJKLMNOPQRSTUVWYZ\]/;
###   }

   foreach my $o (@$buchungen) {
      next if ($self->{'RESTRICTED'} and (!($o->[4] =~ /\@\@/)));
      $gkto = "";
      $ukto = "";
      if ($o->[2] =~ /^$kto(.*)/) {
         $ukto   = $1;
         $amount = $o->[1];
         $remark = $o->[4];
         @ee = ();
         my @ee1 = split(/-/,$kto);
         foreach $o1 (split(/-/,$o->[2])) {
            if (shift(@ee1) eq ".*") { $o1 = "xxx"; }
            push(@ee,$o1);
            $o2 = join("-",@ee);
###            if ($collect) {
###               $o2 =~ s/-[123456789ABCDEFGHIJKLMNOPQRSTUVWYZ](-|$)/-X$1/;
###            }
            next if (!($o2 =~ /^$kto/));
            next if ($monat and substr($o->[0],4,2) ne $monat);
            $buchkont->{$o2} = $buchkont->{$o2} + $amount;
         }
         $gkto   = $o->[3];
      }
      if ($o->[3] =~ /^$kto(.*)/) {
         $ukto   = $1;
         $amount = - ( $o->[1] );
         $remark = $o->[4];
         if ($remark !~ s/\{\-/\{/) { $remark =~ s/\{/\{\-/; }
         @ee = ();
         my @ee1 = split(/-/,$kto);
         foreach $o1 (split(/-/,$o->[3])) {
            if (shift(@ee1) eq ".*") { $o1 = "xxx"; }
            push(@ee,$o1);
            $o2 = join("-",@ee);
###            if ($collect) {
###               $o2 =~ s/-[123456789ABCDEFGHIJKLMNOPQRSTUVWYZ](-|$)/-X$1/;
###            }
            next if (!($o2 =~ /^$kto/));
            next if ($monat and substr($o->[0],4,2) ne $monat);
            $buchkont->{$o2} = $buchkont->{$o2} + $amount;
         }
         if ($gkto) {
            $gkto = "";
         } else {
            $gkto = $o->[2];
         }
      }
      next if (!$gkto);
      next if ($monat and substr($o->[0],4,2) ne $monat);
      if (!$ukto) { $ukto = "-"; }
      $ukto = $ukto_add . $ukto;
      $saldo   = $saldo + $amount;
      push(@$ktotext,[$o->[0],$amount,$ukto,$gkto,$saldo,$remark]);
   }

   return($ktotext,$buchkont,$saldo);

}


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

sub saldo {

   my $self = shift;
   my $kto  = shift;
   my ($o,$o1,$o2) = $self->viewkonto($kto);
   return($o2);

}

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

sub ktoname {

   my $self = shift;
   my $kto  = shift;
   return($self->{'KONTENLISTE'}->{$kto});

}


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

#  Liefert eine Liste aller Unterkonten

sub konten {

   my $self = shift;
   my $path = shift;
   my $x; my $o; my $o1; my $o2;
   my @ukto = (); my $xx = {};
   if (!($self->{'BUCHUNGEN'})) {
      $self->{'BUCHUNGEN'} = [];
   }
   my @kl = keys %{$self->{'KONTENLISTE'}};
   foreach $o (@kl) {
      $o = ["",$o,$o];
   }
   foreach $o (@{$self->{'BUCHUNGEN'}},@kl) {
      next if ($self->{'RESTRICTED'} and (!($o->[4] =~ /\@\@/)));
      next if ( $o->[5] eq "DEL" );
      foreach $o1 ($o->[2],$o->[3]) {
         $o2 = $self->is_ukto($path,$o1);
         next if (!$o2);
         if (!($xx->{$o2})) {
            $xx->{$o2} = 1;
            if ($path) {
               $o2 = $path . "-" . $o2;
               $o2 =~ s/--/-/g;
            }
            $x = $self->{'KONTENLISTE'}->{$o2};
            push(@ukto,[$o1,$o2,$x]);
         }
      }
   }
   @ukto = sort { $a->[1] cmp $b->[1] } @ukto;
   return([@ukto]);
}
      

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

#sub export_kto {
#
#   my $self = shift;
#   my $kto  = shift;
#
#   if (!($kto)) { $self->{'EXPORT_KTO'} = []; }
#
#   my $ktoliste = $self->konten($kto);
#   my $o;
#   foreach $o (@$ktoliste) {
#      push(@{$self->{'EXPORT_KTO'}},$o->[0]);
#      $self->export_kto($o->[0]);
#   }
#
#   if (!($kto)) { return(join(",",@{$self->{'EXPORT_KTO'}})) }
#   return(1);
#
#}
      

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

sub is_ukto {

   my $self = shift;
   my $path = shift;
   my $ukto = shift;
   if ( $ukto =~ /^$path(.*)/ ) {
      $ukto = "-" . $1;
      my @ee = split(/-+/,$ukto);
      if ($ee[1]) { return($ee[1]) };
   }
   return(0);
}
      
#************************************************************************   

sub xxtransform {

   my $self     = shift;
   my $bb       = [];
   my $ktoliste = {};
   my $o; my $datum; my $amount; my $k1; my $k2; my $text;

   foreach $o (@{$self->{'BUCHUNGEN'}}) {
      next if ($self->{'RESTRICTED'} and (!($o->[4] =~ /\@\@/)));
      $datum  = $o->[0];
      $amount = $o->[1];
      $k1     = $o->[2];
      $k2     = $o->[3];
      $text   = $o->[4];
      push(@$bb,[$datum,$amount,$self->t1($k1,$datum,$ktoliste),
                         $self->t1($k2,$datum,$ktoliste),$text]);
   }

   $ktoliste->{"10"}      = "Aktiva";
   $ktoliste->{"11"}      = "Passiva";
   $ktoliste->{"12"}      = "Ertrag";
   $ktoliste->{"13"}      = "Aufwand";

   foreach $o (keys %{$self->{'KONTENLISTE'}}) {
      $self->t1($o,"20000101",$ktoliste);
   }

   $self->{'BUCHUNGEN'}   = $bb;
   $self->{'KONTENLISTE'} = $ktoliste;

}

sub t1 {

   my $self  = shift;
   my $kto   = shift;
   my $datum = shift;
   my $ktoliste = shift;
   my $ktotext  = $self->{'KONTENLISTE'}->{$kto};
   my $typ; my $quartal = "";

   if (  0    < $kto and $kto <  1799 ) { $typ = "10"; }
   if (  1799 < $kto and $kto <  1999 ) { $typ = "11"; }
   if (  1999 < $kto and $kto <  3000 ) { $typ = "12"; }
   if (  2999 < $kto and $kto <  6000 ) { $typ = "13"; }
   if (  6000 < $kto and $kto <  9999 ) { $typ = "12"; }
   if (  9999 < $kto and $kto < 10999 ) { $typ = "10"; }
   if ( 10999 < $kto and $kto < 11999 ) { $typ = "11"; }

   if ($kto == 1571 or $kto == 1575 or $kto == 1771 or $kto == 1775) {
      $quartal = "-" . substr($datum,2,2);
      $datum = substr($datum,4,2);
      if ($datum ==  1 or $datum ==  2 or $datum ==  3) {
               $quartal = $quartal . "1"; }
      if ($datum ==  4 or $datum ==  5 or $datum ==  6) {
               $quartal = $quartal . "2"; }
      if ($datum ==  7 or $datum ==  8 or $datum ==  9) {
               $quartal = $quartal . "3"; }
      if ($datum == 10 or $datum == 11 or $datum == 12) {
               $quartal = $quartal . "4"; }
   }

   $kto = $typ . "-" . $kto;
   $ktoliste->{$kto} = $ktotext;
   $kto = $kto . $quartal;

   return($kto);

}

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