Stundenverteilung

angelozehr

Mitglied
Hi,

Ich steck grad echt in der Klemme...

Ich habe einen Auftrag angenommen zu einer Mitarbeiterübersicht in PHP mit MySql obwohl ich da noch gaaaar kein Profi bin :rolleyes:

also.. mein grosses Problem:

Der Chef ist der einzige der dieses Programm verwendet.
Er trägt bei einem Projekt ein Startdatum, ein Enddatum, ein Mitarbeiter und eine Anzahl an Stunden ein.
Nun kommt das schwierige: Mitarbeiter dürfen maximal 8 Stunden täglich arbeiten.
Das heisst: Wenn sich Projekte überschneiden oder mit Ausbildungstagen (die werden auch vom Chef eingetragen), dann müssen die Arbeitsstunden für jeden Tag automatisch angepasst werden.

Das heisst zum Beispiel:
Projekt A : 1.3.08 - 31.3.08, 150 Stunden, Mitabeiter X
Projekt B : 10.3.08 - 19.3.08, 56 Stunden, Mitabeiter X
Ausbildung C: 13.3.08, 4 Stunden, Mitarbeiter X

Klar zu sehen, am 13.3.08 ist der Mitarbeiter viel zu viel beschäftigt.
Es muss also von den 8 Maximalen Stunden 4 für Ausbildung wegnehmen, und dann weiter: Die restlichen Stunden (wieder 4) auf die anderen Projekte aufteilen und WEITER: beim Projekt natürlich die Stunden auf andere Tage verteilen.
Ausserdem müsste er vom 10.3 bis 19.3 auch über 8 arbeiten, also müssen da die Stunden auch auf vorher bzw. nachher aufgeteilt werden.

Ich blick nicht mehr durch und hab absolut keine Ahnung wie ich sowas machen kann :confused:

ich brauche dringend HIIILFE:(
 
Wie siehts mit eigenen Ansätzen aus!? - oder glaubst du tatsächlich, dass wir dir die Überlegungen abnehmen und ein fertiges Script zur Verfügung stellen?
 
Hi,

ich denke gegen ein "kleines" Entgeld hilft dir sicherlich jemand und lieftert dir das fertige Script.

In Zukunft keine Aufträge annehmen wenn man
1. gar kein keine Ahnung hat
2. nicht mal ne Idee

:confused:
 
Ich würd es für dich schreiben aber blick da im moment nicht durch :D

Wer gibt die Stunden vom Mitarbeiter X oder Y ein?
Wenn du alles ausführlich noch einmal beschreiben könntest, würde ich es für dich schreiben ;)
 
Ich muss ne0hype und chainy da zustimmen...
So gänzlich ohne ne eigenen Idee, wei man sowas machen könnte, solltest du solche Aufträge nicht annehmen...

Aber chainy... Es geht wohl nicht darum nen fertiges Skript zu Verfügung zu stellen, sondern eher darum, dass der gute ne Hilfe fürn Denkansatz brauch...
Ich selbst frag hier im Forum auch nach hilfe, wie man einige IDeen umsetzen und realisieren könnte... Dabei geht es nicht um eine fertige Lösung, sondern nur darum erstmal nen Ansatz zu finden ;)
 
So nu versuch ich mich mal daran, nen Ansatz zu schaffen:
Weil nur der Chef zugriff haben soll auf die Eingabe, solltest du also ne Passwortgeschützte Admin-Oberfläche bauen...
Die einzelnen Panel zum Eingeben der Daten (Formulare) sollten auch nicht unbedingt schwierig sein für dich...
Dann brauchst du in der DB die passenden Tabellen... So aus dem Stehgreif würde ich 2-3Tabellen arbeiten... Eine für die Projekte mit den Daten... Eine für die Mitarbeiter und den Arbeitsstunden... Und eine um die MItarbeiter den Projekten zuzuordnen...

Damit hast du dann schonmal alles, damit Cheffe seine Daten eingeben kann...

Für den Rest fehlt mir grad ne Idee, falls mir noch was einfällt meld ich mich ;)
 
Aber chainy... Es geht wohl nicht darum nen fertiges Skript zu Verfügung zu stellen, sondern eher darum, dass der gute ne Hilfe fürn Denkansatz brauch...
Ich selbst frag hier im Forum auch nach hilfe, wie man einige IDeen umsetzen und realisieren könnte... Dabei geht es nicht um eine fertige Lösung, sondern nur darum erstmal nen Ansatz zu finden ;)
Dessen bin ich mir schon bewusst, dass es nicht (nur) darum geht, ein fertiges Skript vorgestellt zu bekommen. Nur würde ich ohne einen eigenen Lösungsansatz zu haben keinen Thread eröffnen; ein bisschen Eigenleistung sollte schon von vornherein vorhanden sein.

Sorry das ich das so sage, ich will den Thread-Starter nicht persönlich angreifen oder derartiges, aber mit solchen "Wischi-Waschi-Formulierungen" kann man leider auch wenig anfangen.
 
jajaja, die Tabellen existieren
und ein Ansatz existiert auch..

hier der dazugehörige Code:

PHP:
<body>
<table>
 <tr>
<?php
$mitarbeiterid = $_GET[mitarbeiterid] ;
include('mysqlconnect.php');
$res = mysql_query("select * from auftraege where mitarbeiterid = $mitarbeiterid");
while($dsatz = mysql_fetch_assoc($res)) {
  echo( '<td colspan="2">' );
  $res0 = mysql_query("select * from mitarbeiter where id = $mitarbeiterid");
  while($dsatz0 = mysql_fetch_assoc($res0)) {
	echo( $dsatz0["vorname"] . ' ' . $dsatz0["name"] . '</td> </tr> <tr> ' );
  }
  $start = $dsatz["sstamp"] ;
  $end   = $dsatz["estamp"] ;
  $alle  = ($end-$start)/86400+1 ;
  $res1 = mysql_query("select * from feiertage where stamp > $start && stamp < $end ");
  $feiertage = mysql_num_rows( $res1 );
  $starttag = date("w",$start);
  $endtag   = $starttag + $alle ;
  $weekends = 0 ;
  while( $starttag < $endtag ) {
    if( $starttag%7 == 6 || $starttag%7 == 0 ) {
      $weekends = $weekends+1 ;
    }
	$starttag++ ;
	}
	
  $dauer = $alle-$weekends-$feiertage ;
  echo( '<td>' );
  while( $start <= $end ) {
	$datum = date("d.m.Y",$start);
	$wochentag = date("w",$start);
	$dbfeier = array( );
	  $res2 = mysql_query("select * from feiertage");
  	  while($dsatz2 = mysql_fetch_assoc($res2)) {
	  	array_push( $dbfeier, $dsatz2["stamp"] );
	  }
	if( $wochentag != 0 && $wochentag != 6 && in_array($start, $dbfeier) != 1 ) {
	  echo( $datum . '<br />');
	}
	$start = $start+86400 ;
  }
	
  echo( '</td><td>' );
	
  $aufwand = $dsatz["aufwand"] ;
  $i = 1 ;
  $modulo = $aufwand%$dauer ;
  
  $dividend = $aufwand-$modulo ;
  
  $stunden = $dividend/$dauer ;
	
  while( $i <= $modulo ) {
	echo( $stunden+1 . ' Stunden<br />' );
	$i++ ;
  }
	
  while( $i <= $dauer && $i > $modulo ) {
	echo( $stunden . ' Stunden<br />' );
	$i++ ;
  }

}
?>
  </td>
 </tr>
</table>
</body>

Alle Wochenenden sind nicht dabei und Feiertage können auch eingetragen werden (z.B.14.2.08)

Das funktioniert für 1 Projekt, nicht aber für Überschneidungen

Ich muss das Problem vom überschneiden lösen vorallem.
 
Zuletzt bearbeitet:
Sind das deine DB-Tabellen? Wenn ja, dann würde ich mir nochmal Gedanken darüber machen.
Code:
CREATE TABLE `mitarbeiter` (
`vorname` VARCHAR( 50 ) NOT NULL ,
`name` VARCHAR( 50 ) NOT NULL ,
`status` INT( 1 ) NOT NULL ,
`id` INT( 50 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

CREATE TABLE `projekte` (
`bezeichnung` VARCHAR( 50 ) NOT NULL ,
`kundenid` INT( 50 ) NOT NULL ,
`wbsstammnr` VARCHAR( 100 ) NOT NULL ,
`orionnr` VARCHAR( 100 ) NOT NULL ,
`status` INT( 1 ) NOT NULL ,
`id` INT( 50 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

CREATE TABLE `kunden` (
`bezeichnung` VARCHAR( 50 ) NOT NULL ,
`status` INT( 1 ) NOT NULL ,
`id` INT( 50 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

CREATE TABLE `auftraege` (
`bezeichnung` VARCHAR( 50 ) NOT NULL ,
`stag` INT( 2 ) NOT NULL ,
`smonat` INT( 2 ) NOT NULL ,
`sjahr` INT( 4 ) NOT NULL ,
`etag` INT( 2 ) NOT NULL ,
`emonat` INT( 2 ) NOT NULL ,
`ejahr` INT( 4 ) NOT NULL ,
`aufwand` INT( 50 ) NOT NULL ,
`verrechenbar` INT( 1 ) NOT NULL ,
`id` INT( 50 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

CREATE TABLE `ausbildungen` (
`bezeichnung` VARCHAR( 50 ) NOT NULL ,
`mitarbeiterid` INT( 50 ) NOT NULL ,
`tag` INT( 2 ) NOT NULL ,
`monat` INT( 2 ) NOT NULL ,
`jahr` INT( 4 ) NOT NULL ,
`aufwand` INT( 50 ) NOT NULL ,
`id` INT( 50 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

Als Beispiel:
In der Tabelle "auftraege" hast du drei Felder, stag, smonat, sjahr; soll wohl den Start eines Projektes wiederspiegeln. Wieso fasst du die drei Felder nicht in einem zusammen, nennst es start und gibst ihm den Typ "Date". Das ganze könntest du mit etag, emonat und ejahr auch machen. Aus sechs mach zwei ;)

Wie sollst du denn mit Projektüberschneidungen umgehen? Was passiert mit Projekten, die den Zeitraum sprengen, bzw. was passiert mit den nachfolgenden Projekten, wenn die Mitarbeiter gleich nach dem geplanten Fertigstellungstermin für andere Projekte eingeteilt wurden, aber leider das vorhergehende Projekt nicht zeitnah fertigstellen konnten? Du hast da viele unbekannte im Spiel...
 
Zurück