Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/Process/

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/Process/projekt.pm

package Process::projekt;

use strict;
use Data::Dumper;
#use Time::ParseDate; 
#use Date::Format; 

sub new {

   my $class = shift;
   my $self  = {};
   $self->{'FAKTOR'}   = {@_};
   $self->{'PROJEKTE'} = {};
   bless($self,$class);
   return($self);
}

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

sub metrik {

   my $self = shift;
   $self->{'FAKTOR'} = {@_};

}

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

sub projgroup {

   my $self = shift;
   $self->{'PROJGROUP'} = [@_];
   
}

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

sub uebersicht {

   my $self = shift;
   my $day  = shift;
   
   return($self->report(1,$day,$day,@{$self->{'PROJGROUP'}}));
   
}

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

sub budget {

   my $self  = shift;
   my $day1  = shift;
   my $day2  = shift;
   my $title = shift;

   my $erg = $title . "\n\n" . <<'TEXT_ENDE';

Task              Plan lt.Plan    Plan      real       Rueck- Rest-  LATE  to
.                      verbraucht angepasst verbraucht stand  mittel START start

TEXT_ENDE

   my $m1 = $day1 - 1;
   my $m2 = $day2 - 1;
   my $o;
   foreach my $o (@{$self->{'PROJGROUP'}}) {
      $erg = $erg . $self->report("1,1,$day2","1,1,$m1","$day1,1,$day2",
                    "$day1,1,$m1",".1,1,$m2",'-$p[4]+$p[2]',
                    '$p[3]-$p[4]','_($q[4]-1).$q[2]',
                    '_($q[2]-1).$q[5]',"*".$o) . "\n";
   }
   $erg = $erg . <<'TEXT_ENDE';
Erlaeuterung:

Task:                   <taskgruppe>_<tasknummer>_<zugeordnete person>
Plan:                   Gesamt-Budget laut Plan
lt. Plan verbraucht:    bis zum Stichtag verbrauchtes Budget laut Plan
Plan angepasst:         angepasster Plan
real verbraucht:        tatsaechlich bis zum Stichtag verbrauchtes Budget
Rueckstand:             Differenz zwischen Planverbrauch und tatsaechlichem
                        Verbrauch (Differenz zwischen Spalte 4 und 2)
Restmittel:             noch abzuarbeitendes Budget
LATE START:             bei -1.00: Task haette schon gestartet werden sollen,
                        das ist aber noch nicht geschehen
to start:               bei -1,00: dieser Task soll laut Plan in der
                        dem Stichtag folgenden Woche gestartet werden.
TEXT_ENDE

   return($erg);
   
}

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

sub gesamt {

   my $self = shift;
   my $day1 = shift;
   my $day2 = shift;
   
   my $erg = $self->uebersicht($day1) . "\n\n" .
        "----------------------------------------------------------\n\n\n" .
             $self->budget($day1+1,$day2) . "\n\n";
             
   return($erg);
   
}


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

#  Aktualisieren gespeicherter Tasks


sub actualize {

   my $self = shift;
   my $o; my $VAR1;
   
   foreach $o (keys %{$self->{'TASKS'}}) {
      eval($self->{'TASKS'}->{$o}); print $@;
      $self->np(@$VAR1);
   }
   
}


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

#  Speichern von Projektdaten

sub np {

   my $self = shift;
   my @pars = @_;
   my $faktor = 1;
   my $o; my $o1; my $o2; my $o3; my @ee;
   foreach $o (keys %{$self->{'FAKTOR'}}) {
      next if ($pars[1] !~ /$o/);
      $faktor = $self->{'FAKTOR'}->{$o};
   }

   my $zaehler = -1;
   my $summe   = 0;

   if ($pars[0] eq "DAY") {
      $self->{'TASKS'}->{$pars[1]} = Dumper([@pars]);
   }

   foreach $o (@pars) {
      if (ref($o)) {
         if ($o->[0] =~ /^DAY/) { $o->[0] = $PAR::DAY }
         if ($o->[1] =~ /^DAY/) { $o->[1] = $PAR::DAY }
         if ($o->[0] > $o->[1]) {
            $o = $o->[0];
         } else {
            $o = $o->[1];
         }
      }
      if ($o =~ /^DAY/) { $o = $PAR::DAY }
   }
   my $nr   = shift(@pars);
   my $id   = shift(@pars);

   push(@pars,0);
   push(@pars,99999);
   
   while (@pars) {
      $o  = shift(@pars);             #   Starttag
      $o1 = shift(@pars);             #   Menge
      if ($o1 < 0) {
         $o1 = -$o1;   #  das ist die Gesamt-Task-Stundenmenge
         if ($o1 > 0.009 and $o1 < 0.99999) {
            if ($o1 > 0.998) { $o1 = 1; }   #  als Prozentangabe
            $o1 = $summe/$o1;               #  des schon gelaufenen
         }
         $o1 = $o1 - $summe;
         $summe = 0;
         if ($o1 < 0) { $o1 = 0; }
      } else {
         $summe = $summe + $o1;
      }
      $o1 = $o1 * $faktor;
      last if (!@pars);
      if ($o1 > 0 and $o >= $pars[0]) { # wenn noch Arbeitsleistung zu tun ist
         $pars[0] = $o + 1;
      }
      elsif ($o1 == 0 and $o > $pars[0]) {
          $pars[0] = $o;
      }
      $o2 = $pars[0];       #   Endtag
      next if ($o1 == 0 and $o2 == $o);
      if ($o2 == $o) { print "Fehler bei $id, $o, $o1, $o2, zero division.\n"; exit; }
      $zaehler = $zaehler + 1;
      if ($o2 <= $nr and $o1) {
         foreach $o3 (keys %{$self->{'PROJEKTE'}->{$id}}) {
            if ($o < $o3 and $o3 < $o2) {
               print "Warnung: Aenderung der Ist-Daten in $id, Stichtag $nr\n";
            }
         }
      }
      $self->{'PROJEKTE'}->{$id}->{$nr}->[$zaehler] = [$o,$o1,$o2,
                                   $o1/($o2-$o)];
   }

}

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

sub version {

   my $self  = shift;
   my $id    = shift;
   my $stand = shift;
   
   my @ee; my $projektdaten = []; my $versionen;
   my $versionen = $self->{'PROJEKTE'}->{$id};
   if ($stand == 0) {
      @ee = reverse sort keys %$versionen;
      $projektdaten = $versionen->{shift(@ee)};
   } else {
      @ee = sort { $a <=> $b } keys %$versionen;
      while (0 == 0) {
         last if ($ee[0] > $stand);
         $projektdaten = $versionen->{$ee[0]};
         shift(@ee);
         last if (!@ee);
      }
   }

   return($projektdaten);

}

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

sub remark {

   my $self = shift;
   $self->{'REMARK'} = {@_};

}

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

sub projlist {

   my $self = shift;
   my $pars = shift;

   my @erg = ();
   my $projekt; my $bed; my $o2; my @pars1;
   foreach $projekt (keys %{$self->{'PROJEKTE'}}) {
      @pars1 = split(/,/,$pars);
      $bed = 1;
      foreach $o2 (@pars1) {
         next if ($projekt =~ /$o2/);
         $bed = 0;
         last;
      }
      if ($bed) {
#         $projekt =~ s/\_CG$/\_\(CG\|KH\)/;
         push(@erg,$projekt);
      }
   }

   return(sort @erg);

}

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

sub compare {

   my $self  = shift;
   my @pars  = @_;

   my @days = ();
   while ($pars[0] =~ /\$/ or $pars[0] =~ /^(\.?)(\d+),(\d+),(\d+)$/
                             or $pars[0] =~ /^[A-Z]$/ or $pars[0] =~ /^\_/) {
      push(@days,shift(@pars));
   }
   push(@pars,"sum");

   my $o; my $o1; my @p; my @q;

   my $text = "             ";
   my $hiddenday = [];
   my $short     = [];
   my $zaehler = -1;
   foreach $o (@days) {
      $zaehler = $zaehler + 1;
      $o  =~ s/\'//g;
      $o1 = $o;
      $o1 =~ s/\$/ /g;
      $o1 = 9 - length($o1);
      if ($o1 < 1) { $o1 = 1; }
      if ($o =~ /^\.(.*)/) {   #   Spalte wird nicht angezeigt
         $o = $1;
         $hiddenday->[$zaehler] = 1;
      }
      elsif ($o =~ /^\_(.*)/) {  #  Kurz-Ausgabe bei fuehrendem _
         $o = $1;
         $short->[$zaehler] = 1;
         $text = $text . substr("   ",0,$o1) . $o;
      }
      else {
         $text = $text . substr("           ",0,$o1) . $o;
      }
   }
   my $sum = {};
   foreach $o (@pars) {
      $text = $text . "\n" . substr($o."                         ",0,20);
      $sum->{$o} = 0;
      @p = ($o);
      @q = ($o);
      $zaehler = -1;
      foreach $o1 (@days) {
         $zaehler = $zaehler + 1;
         if ($o ne "sum") {
            $o1 =~ /(.*),(.*),(.*)/;
            if    ($o1 eq "A") { $self->{'SUMME'} = -$p[4]+$p[2]; }
            elsif ($o1 eq "B") { $self->{'SUMME'} = $p[3]-$p[4]; }
            elsif ($o1 eq "C") { $self->{'SUMME'} = ($q[4]-1) * $q[2]; }
            elsif ($o1 eq "D") { $self->{'SUMME'} = ($q[2]-1) * $q[5]; }
            elsif ($o1 =~ /\$/) {
               $o1 =~ s/\./\*/g;
               eval("\$self->{'SUMME'} = " . $o1); print $@;
            }
            else {
               $self->report($2,$3,"$1,$o");
            }
            push(@p,$self->{'SUMME'});
            push(@q,($self->{'SUMME'} ? 1 : 0));
            $sum->{$o1} = $sum->{$o1} + $self->{'SUMME'};
         } else {
            $self->{'SUMME'} = $sum->{$o1};
         }
         if (!($hiddenday->[$zaehler])) {
            if ($short->[$zaehler]) {
               $text = $text . sprintf("%4.0f",$self->{'SUMME'});
            } else {
               $text = $text . sprintf("%9.2f",$self->{'SUMME'});
            }
         }
      }
   }

   return($text . "\n");

}

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

sub bedarf {

   my $self  = shift;
   my $day   = shift;
   my $pars  = shift;

   my $o; my $o1; my $o2; my @pars1; my $bed;
   my $projekt; my $projektdaten; my $versionen; my $ee; my $stand;
   my $erg = 0;

   @pars1 = split(/,/,$pars);
   if ($pars1[0] =~ /^\d/) {
      $stand = shift(@pars1);
   } else {
      $stand = 0;
   }

   $pars = join(",",$stand,@pars1);
   if(!($self->{'PROJEKTDATEN'}->{$pars})) {
      $ee = [];
      foreach $projekt (keys %{$self->{'PROJEKTE'}}) {
         $bed = 1;
         foreach $o2 (@pars1) {
            next if ($projekt =~ /$o2/);
            $bed = 0;
            last;
         }
         if ($bed) {
            push(@$ee,$self->version($projekt,$stand))
         }
      }
      $self->{'PROJEKTDATEN'}->{$pars} = $ee;
   }

   $ee = $self->{'PROJEKTDATEN'}->{$pars};
   foreach $projekt (@$ee) {
      foreach $o1 (@$projekt) {      
         if ($o1->[0] <= $day and $day < $o1->[2]) {
#            if ($bed) {
               $erg = $erg + $o1->[3];
#            }
         }
      }
   }

   return($erg);

}
      
#***********************************************************************

sub report {

   my $self  = shift;
   my @pars1 = @_;

   my $zeile; my $zeile1; my $zeile2; my $o; my $par; my $zaehler; my $par1;
   my $par7; my @pars = ();
   foreach $o (@pars1) {
      if (-f $o) {
         open(FFILE,"<".$o);
         $o = join("",<FFILE>);
         close(FFILE);
         $o =~ s/\n/ /g;
         foreach $zaehler (split(/ /,$o)) {
            push(@pars,$zaehler);
         }
      }
      if ($o =~ s/\*//) {
         my @ee = $self->projlist($o);
         foreach $zaehler (@ee) {
            push(@pars,$zaehler);
         }
      }
      else {
         push(@pars,$o);
      }
   }

   if ($pars[0] eq "list") {
      shift(@pars);
      my @ee = $self->projlist(@pars);
      return();      
   }

   if ($pars[0] =~ /,/) {
      return($self->compare(@pars));
   }

#-----------------------------------

   my $start  = shift(@pars);
   my $start1 = $start;
   my $ende   = shift(@pars);
   my $ende1  = $ende;

   my $faktor = 1;
   if ($start < 0) {
      $start = -$start;
      $faktor = 8;
   }

   my $short = 0;
   if ($ende < 0) {
      $ende = -$ende;
      $short = 1;
   }

   my @summe = ();
   $start = $start - 1;
   my $text = "";


   if ($pars[0] =~ /^\d+$/) {
      $par = shift(@pars);
      foreach $o (@pars) {
         $o = $par . "," . $o;
      }
   }
   
   my $spaces  = {};
   my $spaces1 = {};
   
   $zeile2 = "          ";
   $zeile1 = "          ";
   foreach $par (@pars) {
      $par1 = $par;
      if ($short) { $par1 =~ s/[\_A-Z]//g; }
      $o = length($par1);
      if ($o < 8) {
         $zaehler = substr("        ",0,8-$o);
         $o = 8;
      }
      elsif ($o == 8) {
         $zaehler = " ";
         $o = 9;
      }
      else {
         $zaehler = "  ";
         $o = $o + 2;
      }
      $spaces->{$par}  = substr("                           ",0,$o-5);
      $zeile2 = $zeile2 . $zaehler . $par1;
      $spaces1->{$par} = substr("                           ",0,$o-8);
   }

   while ($start < $ende) {
      $start = $start + 1;
      $o = $self->{'REMARK'}->{$start} || "-";
      $zeile = substr($o . "           ",0,11) .
                 sprintf("%3u",$start);
      $zaehler = 0;
      foreach $par (@pars) { 
         $o = $faktor*$self->bedarf($start,$par);
         $zeile = $zeile . $spaces->{$par} . sprintf("%5.2f",$o);
         $summe[$zaehler] = $summe[$zaehler] + $o;
         $zaehler = $zaehler + 1;
      }
      $text = $text . $zeile . "\n";
   }
   $text  = $text . "\n";
   @pars1 = ();
   foreach $par (@pars) {
      if ($summe[0]) {
         push(@pars1,$par);
      } else {
         $zeile2 = "";
      }
      $self->{'SUMME'} = $summe[0];
      $zeile1 = $zeile1 . $spaces1->{$par} . sprintf("%8.2f",shift(@summe));
   }

   if (!$zeile2) {
      return($self->report($start1,$ende1,@pars1));
   }

   $text = $text . $zeile1 . "\n" . $zeile2 . "\n";

   return($text);

}


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