Subversion Repositories winbugtracker

Rev

Rev 8 | Rev 12 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8 Rev 11
Line 3... Line 3...
3
(*
3
(*
4
 * TODO:
4
 * TODO:
5
 * - Spezielle Filter
5
 * - Spezielle Filter
6
 *   ... Auflisten nach Modul
6
 *   ... Auflisten nach Modul
7
 *   ... Anzeigen der Agenda
7
 *   ... Anzeigen der Agenda
8
 * - verbinden mit ticketsystem von HS
-
 
9
 * - rtf controls?
8
 * - rtf control bar?
10
 * - Neue Felder:
-
 
11
 *   ... Erfasser
-
 
12
 *   ... Agenda
-
 
13
 *   ... Status = Offen, gefixt, Abgelehnt, Veröffentlicht
-
 
14
 *   ... RTF Feld als BIGTEXT definieren
-
 
15
 * - Neue Aufteilung der States
-
 
16
 *   ... Open, Fixed, Published, Wontfix/Rejected, Planned(Agenda)
9
 * - ein neu angelegter bug soll links aus der leiste verschwinden, wenn er nicht in das kriterium passt
17
 *
10
 *
18
 * NOT INCLUDED:
11
 * NOT INCLUDED:
19
 * - duplicate of
12
 * - duplicate of
20
 *
13
 *
21
 * FUTURE:
14
 * FUTURE:
Line 70... Line 63...
70
    dsModule: TDataSource;
63
    dsModule: TDataSource;
71
    Timer1: TTimer;
64
    Timer1: TTimer;
72
    Splitter1: TSplitter;
65
    Splitter1: TSplitter;
73
    Hilfe1: TMenuItem;
66
    Hilfe1: TMenuItem;
74
    ber1: TMenuItem;
67
    ber1: TMenuItem;
75
    btnFixedToggle: TButton;
-
 
76
    btnBearbeitungsnotiz: TButton;
68
    btnBearbeitungsnotiz: TButton;
77
    qryBugsid: TAutoIncField;
69
    qryBugsid: TAutoIncField;
78
    qryBugstitel: TStringField;
70
    qryBugstitel: TStringField;
79
    qryBugsbeschreibung: TMemoField;
71
    qryBugsbeschreibung: TMemoField;
80
    qryBugserstellt: TDateTimeField;
72
    qryBugserstellt: TDateTimeField;
81
    qryBugswichtigkeit: TIntegerField;
73
    qryBugswichtigkeit: TIntegerField;
82
    qryBugsbearbeiter: TIntegerField;
74
    qryBugsbearbeiter: TIntegerField;
83
    qryBugsfixdatum: TDateTimeField;
-
 
84
    qryBugsversion_release: TIntegerField;
75
    qryBugsversion_release: TIntegerField;
85
    qryBugsmodul: TIntegerField;
76
    qryBugsmodul: TIntegerField;
86
    qryBugsprojekt: TIntegerField;
77
    qryBugsprojekt: TIntegerField;
87
    qryVersionen: TADOQuery;
78
    qryVersionen: TADOQuery;
88
    qryModule: TADOQuery;
79
    qryModule: TADOQuery;
Line 93... Line 84...
93
    qryBugserfasser: TIntegerField;
84
    qryBugserfasser: TIntegerField;
94
    qryBugsversion_agenda: TIntegerField;
85
    qryBugsversion_agenda: TIntegerField;
95
    Label9: TLabel;
86
    Label9: TLabel;
96
    cbxErfasser: TDBLookupComboBox;
87
    cbxErfasser: TDBLookupComboBox;
97
    Label10: TLabel;
88
    Label10: TLabel;
-
 
89
    lkpStatus: TADOTable;
-
 
90
    dsStatus: TDataSource;
-
 
91
    DBLookupComboBox5: TDBLookupComboBox;
-
 
92
    qryBugsstatus: TIntegerField;
-
 
93
    qryBugsstatus_geaendert: TDateTimeField;
98
    procedure Mitarbeiter1Click(Sender: TObject);
94
    procedure Mitarbeiter1Click(Sender: TObject);
99
    procedure qryBugsAfterScroll(DataSet: TDataSet);
95
    procedure qryBugsAfterScroll(DataSet: TDataSet);
100
    procedure Module1Click(Sender: TObject);
96
    procedure Module1Click(Sender: TObject);
101
    procedure Projekte1Click(Sender: TObject);
97
    procedure Projekte1Click(Sender: TObject);
102
    procedure Versionen1Click(Sender: TObject);
98
    procedure Versionen1Click(Sender: TObject);
Line 104... Line 100...
104
    procedure Timer1Timer(Sender: TObject);
100
    procedure Timer1Timer(Sender: TObject);
105
    procedure ComboBox1Change(Sender: TObject);
101
    procedure ComboBox1Change(Sender: TObject);
106
    procedure Projektwechseln1Click(Sender: TObject);
102
    procedure Projektwechseln1Click(Sender: TObject);
107
    procedure qryBugsAfterInsert(DataSet: TDataSet);
103
    procedure qryBugsAfterInsert(DataSet: TDataSet);
108
    procedure ber1Click(Sender: TObject);
104
    procedure ber1Click(Sender: TObject);
109
    procedure btnFixedToggleClick(Sender: TObject);
-
 
110
    procedure qryBugsversion_releaseValidate(Sender: TField);
105
    procedure qryBugsversion_releaseValidate(Sender: TField);
111
    procedure FormCreate(Sender: TObject);
106
    procedure FormCreate(Sender: TObject);
112
    procedure qryVersionenAfterInsert(DataSet: TDataSet);
107
    procedure qryVersionenAfterInsert(DataSet: TDataSet);
113
    procedure qryModuleAfterInsert(DataSet: TDataSet);
108
    procedure qryModuleAfterInsert(DataSet: TDataSet);
114
    procedure btnBearbeitungsnotizClick(Sender: TObject);
109
    procedure btnBearbeitungsnotizClick(Sender: TObject);
115
    procedure qryBugsBeforeCancel(DataSet: TDataSet);
110
    procedure qryBugsBeforeCancel(DataSet: TDataSet);
116
    procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
111
    procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
117
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
112
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
-
 
113
    procedure qryBugsstatusChange(Sender: TField);
118
  public
114
  public
119
    eingeloggtMitarbeiter: integer;
115
    eingeloggtMitarbeiter: integer;
120
    eingeloggtMitarbeiterName: string;
116
    eingeloggtMitarbeiterName: string;
121
    aktuellesProjekt: integer;
117
    aktuellesProjekt: integer;
122
    aktuellesProjektName: string;
118
    aktuellesProjektName: string;
Line 137... Line 133...
137
begin
133
begin
138
  // Standardwerte für einen neuen Bug
134
  // Standardwerte für einen neuen Bug
139
  qryBugs.FieldByName('wichtigkeit').AsInteger := 5; // Mitte
135
  qryBugs.FieldByName('wichtigkeit').AsInteger := 5; // Mitte
140
  qryBugs.FieldByName('erstellt').AsDateTime := Now;
136
  qryBugs.FieldByName('erstellt').AsDateTime := Now;
141
  qryBugs.FieldByName('erfasser').AsInteger := eingeloggtMitarbeiter;
137
  qryBugs.FieldByName('erfasser').AsInteger := eingeloggtMitarbeiter;
142
  // qryBugs.FieldByName('bearbeiter').AsInteger := eingeloggtMitarbeiter;
-
 
143
  qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt;
138
  qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt;
-
 
139
  qryBugs.FieldByName('status').AsInteger := 1; // Offen
144
end;
140
end;
145
 
141
 
146
procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet);
142
procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet);
147
var
143
var
148
  bakEvent: TNotifyEvent;
144
  bakEvent: TNotifyEvent;
Line 179... Line 175...
179
     end;
175
     end;
180
  end
176
  end
181
  else raise EAbort.Create('Abbruch durch Benutzer'); // Cancel geklickt
177
  else raise EAbort.Create('Abbruch durch Benutzer'); // Cancel geklickt
182
end;
178
end;
183
 
179
 
-
 
180
procedure TfrmBugtracker.qryBugsstatusChange(Sender: TField);
-
 
181
var
-
 
182
  col: TColor;
-
 
183
begin
-
 
184
  qryBugsstatus_geaendert.AsDateTime := Now;
-
 
185
 
-
 
186
  DBLookupComboBox5.KeyValue := qryBugsstatus.AsVariant; // nur benötigt, daamit wir auf DBLookupComboBox5.Text zugreifen können
-
 
187
  case qryBugsstatus.AsInteger of
-
 
188
    1: col := clRed; // Offen
-
 
189
    2: col := clMaroon; // Abgelehnt
-
 
190
    3: col := clPurple; // In Bearbeitung
-
 
191
    4: col := clTeal; // Gefixt
-
 
192
    5: col := clGreen; // Veröffentlicht
-
 
193
    else
-
 
194
      col := clBlack; // sollte nicht passieren
-
 
195
  end;
-
 
196
  NotizHinzufuegen(col, DBLookupComboBox5.Text);
-
 
197
end;
-
 
198
 
184
procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField);
199
procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField);
185
begin
200
begin
186
  if qryBugs.FieldByName('fixdatum').IsNull then
201
  if qryBugs.FieldByName('status').AsInteger <> 5 then
187
  begin
202
  begin
188
    raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als gefixt markiert werden.');
203
    // raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als "Veröffentlicht" markiert werden.');
-
 
204
    qryBugs.FieldByName('status').AsInteger := 5;
189
  end;
205
  end;
190
end;
206
end;
191
 
207
 
192
procedure TfrmBugtracker.qryModuleAfterInsert(DataSet: TDataSet);
208
procedure TfrmBugtracker.qryModuleAfterInsert(DataSet: TDataSet);
193
begin
209
begin
Line 223... Line 239...
223
  AboutBox.ShowModal;
239
  AboutBox.ShowModal;
224
end;
240
end;
225
 
241
 
226
procedure TfrmBugtracker.btnBearbeitungsnotizClick(Sender: TObject);
242
procedure TfrmBugtracker.btnBearbeitungsnotizClick(Sender: TObject);
227
begin
243
begin
228
  NotizHinzufuegen(clRed, 'Notiz');
244
  NotizHinzufuegen(clOlive, 'Notiz');
229
end;
-
 
230
 
-
 
231
procedure TfrmBugtracker.btnFixedToggleClick(Sender: TObject);
-
 
232
begin
-
 
233
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
-
 
234
  if qryBugs.FieldByName('fixdatum').IsNull then
-
 
235
  begin
-
 
236
    qryBugs.FieldByName('fixdatum').AsDateTime := Now;
-
 
237
    NotizHinzufuegen(clGreen, 'Gefixt');
-
 
238
  end
-
 
239
  else
-
 
240
  begin
-
 
241
    qryBugs.FieldByName('fixdatum').Clear;
-
 
242
    NotizHinzufuegen(clBlue, 'Neu eröffnet');
-
 
243
  end;
-
 
244
end;
245
end;
245
 
246
 
246
procedure TfrmBugtracker.ComboBox1Change(Sender: TObject);
247
procedure TfrmBugtracker.ComboBox1Change(Sender: TObject);
247
begin
248
begin
248
  case ComboBox1.ItemIndex of
249
  case ComboBox1.ItemIndex of
249
    0:
250
    0:
250
      begin
251
      begin
251
        // Meine offenen Bugs (nach Wichtigkeit)
252
        // Meine offenen Bugs (nach Wichtigkeit)
252
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC';
253
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND (status = 1 OR status = 3) AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC';
253
      end;
254
      end;
254
    1:
255
    1:
255
      begin
256
      begin
256
        // Alle offenen Bugs (nach Wichtigkeit)
257
        // Alle offenen Bugs (nach Wichtigkeit)
257
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL ORDER BY wichtigkeit DESC';
258
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND (status = 1 OR status = 3) ORDER BY wichtigkeit DESC';
258
      end;
259
      end;
259
    2:
260
    2:
260
      begin
261
      begin
261
        // Gelöst ohne Veröffentlichung (nach Lösungsdatum)
262
        // Gelöst ohne Veröffentlichung (nach Lösungsdatum)
262
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY fixdatum DESC';
263
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND status = 4 ORDER BY status_geaendert DESC';
263
      end;
264
      end;
264
    3:
265
    3:
265
      begin
266
      begin
266
        // Gelöst und Veröffentlicht (nach Version und Lösungsdatum)
267
        // Gelöst und Veröffentlicht (nach Version und Lösungsdatum)
267
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY version_release DESC, fixdatum DESC';
268
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND status = 5 ORDER BY status_geaendert DESC';
268
      end;
269
      end;
269
    4:
270
    4:
270
      begin
271
      begin
271
        // Alle Bugs (nach Eröffnungsdatum)
272
        // Alle Bugs (nach Eröffnungsdatum)
272
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' ORDER BY erstellt DESC';
273
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' ORDER BY erstellt DESC';
Line 313... Line 314...
313
  qryBugs.Active := true;
314
  qryBugs.Active := true;
314
  tblMitarbeiter.Active := true;
315
  tblMitarbeiter.Active := true;
315
  qryVersionen.Active := true;
316
  qryVersionen.Active := true;
316
  tblProjekte.Active := true;
317
  tblProjekte.Active := true;
317
  qryModule.Active := true;
318
  qryModule.Active := true;
-
 
319
  lkpStatus.Active := true;
318
end;
320
end;
319
 
321
 
320
procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject);
322
procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject);
321
begin
323
begin
322
  frmMitarbeiter.ShowModal;
324
  frmMitarbeiter.ShowModal;
Line 345... Line 347...
345
  prefix: string;
347
  prefix: string;
346
begin
348
begin
347
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
349
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
348
 
350
 
349
  // Endet der Text mit zwei Zeilenabständen? Wenn nein, dann einfügen.
351
  // Endet der Text mit zwei Zeilenabständen? Wenn nein, dann einfügen.
-
 
352
  if Trim(DBRichEdit1.Text) <> '' then
-
 
353
  begin
350
  leerzeilen := 0;
354
    leerzeilen := 0;
351
  if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-2, 2) = #13#10 then Inc(leerzeilen); // letzte Zeile
355
    if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-2, 2) = #13#10 then Inc(leerzeilen); // letzte Zeile
352
  if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-4, 2) = #13#10 then Inc(leerzeilen); // Vorletzte Zeile
356
    if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-4, 2) = #13#10 then Inc(leerzeilen); // Vorletzte Zeile
353
  case leerzeilen of
357
    case leerzeilen of
354
    0: umbruch := #13#10#13#10;
358
      0: umbruch := #13#10#13#10;
355
    1: umbruch := #13#10;
359
      1: umbruch := #13#10;
356
    2: umbruch := '';
360
      2: umbruch := '';
357
  end;
361
    end;
-
 
362
  end
-
 
363
  else
-
 
364
  begin
-
 
365
    umbruch := '';
-
 
366
  end;
358
 
367
 
359
  DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
368
  DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
360
  DBRichEdit1.SelText := umbruch;
369
  DBRichEdit1.SelText := umbruch;
361
 
370
 
362
  DBRichEdit1.SelAttributes.Size := 13;
371
  DBRichEdit1.SelAttributes.Size := 13;