Subversion Repositories winbugtracker

Rev

Rev 5 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit BugtrackerMain;
  2.  
  3. (*
  4.  * TODO:
  5.  * - fertigstellen
  6.  *   ... bearbeitungsnotiz-button (rtf-farben usw)
  7.  *   ...
  8.  * - abfragen ob speichern wenn fenster geschlossen wird
  9.  * - filtern nach modul
  10.  * - verbinden mit ticketsystem von HS
  11.  * - rtf controls?
  12.  *)
  13.  
  14. interface
  15.  
  16. uses
  17.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  18.   Dialogs, DBXpress, WideStrings, DB, SqlExpr, StdCtrls, ExtCtrls, DBCtrls,
  19.   ADODB, ComCtrls, Grids, DBGrids, Mask, Menus, XPMan;
  20.  
  21. type
  22.   TfrmBugtracker = class(TForm)
  23.     Panel1: TPanel;
  24.     DBGrid1: TDBGrid;
  25.     ComboBox1: TComboBox;
  26.     DBNavigator2: TDBNavigator;
  27.     Panel2: TPanel;
  28.     Label1: TLabel;
  29.     Label2: TLabel;
  30.     Label3: TLabel;
  31.     Label4: TLabel;
  32.     Label5: TLabel;
  33.     Label6: TLabel;
  34.     DBNavigator1: TDBNavigator;
  35.     DBRichEdit1: TDBRichEdit;
  36.     DBEdit1: TDBEdit;
  37.     DBLookupComboBox1: TDBLookupComboBox;
  38.     DBEdit2: TDBEdit;
  39.     DBEdit3: TDBEdit;
  40.     DBLookupComboBox2: TDBLookupComboBox;
  41.     DBLookupComboBox3: TDBLookupComboBox;
  42.     TrackBar1: TTrackBar;
  43.     ADOConnection1: TADOConnection;
  44.     dsBugs: TDataSource;
  45.     tblMitarbeiter: TADOTable;
  46.     dsMitarbeiter: TDataSource;
  47.     MainMenu1: TMainMenu;
  48.     Stammdaten1: TMenuItem;
  49.     Mitarbeiter1: TMenuItem;
  50.     Projekte1: TMenuItem;
  51.     Module1: TMenuItem;
  52.     Versionen1: TMenuItem;
  53.     Projektwechseln1: TMenuItem;
  54.     XPManifest1: TXPManifest;
  55.     qryBugs: TADOQuery;
  56.     dsVersionen: TDataSource;
  57.     tblProjekte: TADOTable;
  58.     dsProjekte: TDataSource;
  59.     dsModule: TDataSource;
  60.     Timer1: TTimer;
  61.     Splitter1: TSplitter;
  62.     Hilfe1: TMenuItem;
  63.     ber1: TMenuItem;
  64.     btnFixedToggle: TButton;
  65.     btnBearbeitungsnotiz: TButton;
  66.     qryBugsid: TAutoIncField;
  67.     qryBugstitel: TStringField;
  68.     qryBugsbeschreibung: TMemoField;
  69.     qryBugserstellt: TDateTimeField;
  70.     qryBugswichtigkeit: TIntegerField;
  71.     qryBugsbearbeiter: TIntegerField;
  72.     qryBugsfixdatum: TDateTimeField;
  73.     qryBugsversion_release: TIntegerField;
  74.     qryBugsmodul: TIntegerField;
  75.     qryBugsprojekt: TIntegerField;
  76.     qryVersionen: TADOQuery;
  77.     qryModule: TADOQuery;
  78.     procedure Mitarbeiter1Click(Sender: TObject);
  79.     procedure qryBugsAfterScroll(DataSet: TDataSet);
  80.     procedure Module1Click(Sender: TObject);
  81.     procedure Projekte1Click(Sender: TObject);
  82.     procedure Versionen1Click(Sender: TObject);
  83.     procedure TrackBar1Change(Sender: TObject);
  84.     procedure Timer1Timer(Sender: TObject);
  85.     procedure ComboBox1Change(Sender: TObject);
  86.     procedure Projektwechseln1Click(Sender: TObject);
  87.     procedure qryBugsAfterInsert(DataSet: TDataSet);
  88.     procedure ber1Click(Sender: TObject);
  89.     procedure btnFixedToggleClick(Sender: TObject);
  90.     procedure qryBugsversion_releaseValidate(Sender: TField);
  91.     procedure FormCreate(Sender: TObject);
  92.     procedure qryVersionenAfterInsert(DataSet: TDataSet);
  93.     procedure qryModuleAfterInsert(DataSet: TDataSet);
  94.   private
  95.     { Private-Deklarationen }
  96.   public
  97.     { Public-Deklarationen }
  98.     eingeloggtMitarbeiter: integer;
  99.     aktuellesProjekt: integer;
  100.     procedure NeuFiltern;
  101.   end;
  102.  
  103. var
  104.   frmBugtracker: TfrmBugtracker;
  105.  
  106. implementation
  107.  
  108. uses Mitarbeiter, Module, Versionen, Projekte, Login, About, inifiles;
  109.  
  110. {$R *.dfm}
  111.  
  112. procedure TfrmBugtracker.qryBugsAfterInsert(DataSet: TDataSet);
  113. begin
  114.   // Standardwerte für einen neuen Bug
  115.   qryBugs.FieldByName('wichtigkeit').AsInteger := 5;
  116.   // qryBugs.FieldByName('bearbeiter').AsInteger := eingeloggtMitarbeiter;
  117.   qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt;
  118. end;
  119.  
  120. procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet);
  121. var
  122.   bakEvent: TNotifyEvent;
  123. begin
  124.   bakEvent := TrackBar1.OnChange;
  125.   TrackBar1.OnChange := nil;
  126.   try
  127.     TrackBar1.Position := qryBugs.FieldByName('wichtigkeit').AsInteger;
  128.   finally
  129.     TrackBar1.OnChange := bakEvent;
  130.   end;
  131. end;
  132.  
  133. procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField);
  134. begin
  135.   if qryBugs.FieldByName('fixdatum').IsNull then
  136.   begin
  137.     raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als gefixt markiert werden.');
  138.   end;
  139. end;
  140.  
  141. procedure TfrmBugtracker.qryModuleAfterInsert(DataSet: TDataSet);
  142. begin
  143.   // Standardwerte für ein neues Modul
  144.   qryModule.FieldByName('projekt').AsInteger := aktuellesProjekt;
  145. end;
  146.  
  147. procedure TfrmBugtracker.qryVersionenAfterInsert(DataSet: TDataSet);
  148. begin
  149.   // Standardwerte für eine neue Version
  150.   qryVersionen.FieldByName('projekt').AsInteger := aktuellesProjekt;
  151. end;
  152.  
  153. procedure TfrmBugtracker.Timer1Timer(Sender: TObject);
  154. begin
  155.   Timer1.Enabled := false;
  156.   if frmLogin.ShowModal = mrCancel then Close;
  157. end;
  158.  
  159. procedure TfrmBugtracker.TrackBar1Change(Sender: TObject);
  160. begin
  161.   if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
  162.   qryBugs.FieldByName('wichtigkeit').AsInteger := TrackBar1.Position;
  163. end;
  164.  
  165. procedure TfrmBugtracker.Versionen1Click(Sender: TObject);
  166. begin
  167.   frmVersionen.ShowModal;
  168. end;
  169.  
  170. procedure TfrmBugtracker.ber1Click(Sender: TObject);
  171. begin
  172.   AboutBox.ShowModal;
  173. end;
  174.  
  175. procedure TfrmBugtracker.btnFixedToggleClick(Sender: TObject);
  176. begin
  177.   if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
  178.   if qryBugs.FieldByName('fixdatum').IsNull then
  179.     qryBugs.FieldByName('fixdatum').AsDateTime := Now
  180.   else
  181.     qryBugs.FieldByName('fixdatum').Clear;
  182. end;
  183.  
  184. procedure TfrmBugtracker.ComboBox1Change(Sender: TObject);
  185. begin
  186.   case ComboBox1.ItemIndex of
  187.     0:
  188.       begin
  189.         // Meine offenen Bugs (nach Wichtigkeit)
  190.         qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC';
  191.       end;
  192.     1:
  193.       begin
  194.         // Alle offenen Bugs (nach Wichtigkeit)
  195.         qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL ORDER BY wichtigkeit DESC';
  196.       end;
  197.     2:
  198.       begin
  199.         // Gelöst ohne Veröffentlichung (nach Lösungsdatum)
  200.         qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY fixdatum DESC';
  201.       end;
  202.     3:
  203.       begin
  204.         // Gelöst und Veröffentlicht (nach Version und Lösungsdatum)
  205.         qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY version_release DESC, fixdatum DESC';
  206.       end;
  207.     4:
  208.       begin
  209.         // Alle Bugs (nach Eröffnungsdatum)
  210.         qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' ORDER BY erstellt DESC';
  211.       end;
  212.   end;
  213.   qryBugs.Active := true;
  214. end;
  215.  
  216. procedure TfrmBugtracker.FormCreate(Sender: TObject);
  217. var
  218.   ini: TMemIniFile;
  219. begin
  220.   ini := TMemIniFile.Create('bugtracker.ini');
  221.   try
  222.     ADOConnection1.ConnectionString := ini.ReadString('Database', 'ConnectionString', '');
  223.   finally
  224.     ini.Free;
  225.   end;
  226.  
  227.   ADOConnection1.Connected := true;
  228.   qryBugs.Active := true;
  229.   tblMitarbeiter.Active := true;
  230.   qryVersionen.Active := true;
  231.   tblProjekte.Active := true;
  232.   qryModule.Active := true;
  233. end;
  234.  
  235. procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject);
  236. begin
  237.   frmMitarbeiter.ShowModal;
  238. end;
  239.  
  240. procedure TfrmBugtracker.Module1Click(Sender: TObject);
  241. begin
  242.   frmModule.ShowModal;
  243. end;
  244.  
  245. procedure TfrmBugtracker.NeuFiltern;
  246. begin
  247.   ComboBox1Change(ComboBox1);
  248.  
  249.   qryModule.SQL.Text := 'SELECT * FROM module WHERE projekt = ' + IntToStr(aktuellesProjekt);
  250.   qryModule.Active := true;
  251.  
  252.   qryVersionen.SQL.Text := 'SELECT * FROM versionen WHERE projekt = ' + IntToStr(aktuellesProjekt);
  253.   qryVersionen.Active := true;
  254. end;
  255.  
  256. procedure TfrmBugtracker.Projekte1Click(Sender: TObject);
  257. begin
  258.   frmProjekte.ShowModal;
  259. end;
  260.  
  261. procedure TfrmBugtracker.Projektwechseln1Click(Sender: TObject);
  262. begin
  263.   frmLogin.ShowModal;
  264. end;
  265.  
  266. end.
  267.