1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| case sComboBoxPeriode.ItemIndex of
0: // semaine
begin
{$REGION Par Semaine}
With FData.QryMaTable Do
Begin
Try
Try
SQL.Clear;
SQL.Add('SELECT MaTable.DateDebut, MaTable.DateFin, ');
SQL.Add('MaTable.RepereHeureDebut, MaTable.RepereHeureFin, ');
SQL.Add('Categorie.Libelle, MaTable.CodeRessource ');
SQL.Add('FROM Ressource INNER JOIN (Categorie INNER JOIN MaTable ON Categorie.Code = MaTable.CodeCategorie) ');
SQL.Add('ON Ressource.Code = MaTable.CodeRessource ');
SQL.Add('Where (DateDebut >= :xDebut1 And Datedebut <= :xDebut2) ');
SQL.Add('Order By Ressource.Nom, Ressource.Prenom, MaTable.CodeRessource, Categorie.Libelle');
Parameters.ParamByName('xDebut1').Value := FormatDatetime('dd/mm/yyyy',StartOfTheWeek(nNow));
Parameters.ParamByName('xDebut2').Value := FormatDatetime('dd/mm/yyyy',EndOfTheWeek(nNow));
Open;
Ressource := FieldByName('CodeRessource').AsString;
Categorie := FieldByName('Libelle').AsString;
NbHeure := 0;
While not eof do
Begin
if Ressource = FieldByName('CodeRessource').AsString then
begin
if Categorie = FieldByName('libelle').AsString then
begin
// la tache est dans le même jour
if FieldByName('DateDebut').AsDateTime = FieldByName('DateFin').AsDateTime then
begin
NbHeure := NbHeure +
(((FieldByName('RepereHeureFin').AsInteger) - (FieldByName('RepereHeureDebut').AsInteger))/2);
//...
end
// la tache se fini un autre jour de la semaine
else
begin
HeureDepart := FieldByName('RepereHeureDebut').AsInteger;
nDaysBetween := DaysBetween(FieldByName('Datefin').AsDateTime,FieldByName('DateDebut').AsDateTime);
case nDaysBetween of
0:
begin
NbHeure := NbHeure + ((30 - HeureDepart) / 2);
end;
else
begin
for n := 0 to nDaysBetween do
begin
if n <> nDaysBetween then // on est pas à la fin
begin
NbHeure := NbHeure + ((30 - HeureDepart) / 2);
//...
end
else
begin
NbHeure := NbHeure + (FieldByName('RepereHeureFin').AsInteger div 2);
//...
end;
HeureDepart := 0;
end;
end;
end;
end;
next;
end
else
begin
for n := 0 to StringGrid1.RowCount - 1 do
begin
CodeRessourceInString := Copy
(StringGrid1.Cells[0,n],
Pos('[',StringGrid1.Cells[0,n])+1,
Pos(']',StringGrid1.Cells[0,n])
-
Pos('[',StringGrid1.Cells[0,n])
-1);
if CodeRessourceInString = Ressource then
begin
for m := 0 to StringGrid1.ColCount - 1 do
begin
if StringGrid1.Cells[m,0] = Categorie then
begin
StringGrid1.Cells[m,n] := FormatFloat('#0.00;;#',NbHeure);
Break;
end;
end;
Break;
end;
end;
Categorie := FieldByName('Libelle').AsString;
NbHeure := 0;
end;
end
else
// ...
end;
Except
on E : Exception do
Begin
// message d'erreur
end;
end;
Finally
Close;
end;
end;
{$ENDREGION Par Semaine}
end;
1: // jour
begin |
Partager