/trunk/BugtrackerMain.dfm |
---|
134,9 → 134,11 |
object Label4: TLabel |
Left = 240 |
Top = 101 |
Width = 29 |
Width = 31 |
Height = 13 |
Caption = 'Gefixt' |
BiDiMode = bdLeftToRight |
Caption = 'Status' |
ParentBiDiMode = False |
end |
object Label5: TLabel |
Left = 16 |
147,7 → 149,7 |
end |
object Label6: TLabel |
Left = 240 |
Top = 149 |
Top = 216 |
Width = 119 |
Height = 13 |
Caption = 'Ver'#246'ffentlicht als Version' |
176,10 → 178,10 |
end |
object Label9: TLabel |
Left = 240 |
Top = 195 |
Width = 96 |
Top = 170 |
Width = 92 |
Height = 13 |
Caption = 'Geplant f'#252'r Version:' |
Caption = 'Geplant f'#252'r Version' |
end |
object Label10: TLabel |
Left = 17 |
206,7 → 208,7 |
Anchors = [akLeft, akTop, akRight, akBottom] |
DataField = 'beschreibung' |
DataSource = dsBugs |
TabOrder = 9 |
TabOrder = 10 |
end |
object DBEdit1: TDBEdit |
Left = 15 |
215,7 → 217,7 |
Height = 21 |
DataField = 'titel' |
DataSource = dsBugs |
TabOrder = 5 |
TabOrder = 6 |
end |
object DBLookupComboBox1: TDBLookupComboBox |
Left = 16 |
240,19 → 242,19 |
DataField = 'erstellt' |
DataSource = dsBugs |
ReadOnly = True |
TabOrder = 2 |
TabOrder = 8 |
end |
object DBEdit3: TDBEdit |
Left = 240 |
Top = 120 |
Top = 141 |
Width = 155 |
Height = 21 |
TabStop = False |
Color = clBtnFace |
DataField = 'fixdatum' |
DataField = 'status_geaendert' |
DataSource = dsBugs |
ReadOnly = True |
TabOrder = 4 |
TabOrder = 3 |
end |
object DBLookupComboBox2: TDBLookupComboBox |
Left = 15 |
265,11 → 267,11 |
ListField = 'modul' |
ListSource = dsModule |
NullValueKey = 46 |
TabOrder = 3 |
TabOrder = 4 |
end |
object DBLookupComboBox3: TDBLookupComboBox |
Left = 240 |
Top = 168 |
Top = 235 |
Width = 155 |
Height = 21 |
DataField = 'version_release' |
277,7 → 279,7 |
KeyField = 'id' |
ListField = 'version' |
ListSource = dsVersionen |
TabOrder = 6 |
TabOrder = 7 |
end |
object TrackBar1: TTrackBar |
Left = 245 |
285,18 → 287,9 |
Width = 164 |
Height = 45 |
Position = 5 |
TabOrder = 10 |
TabOrder = 11 |
OnChange = TrackBar1Change |
end |
object btnFixedToggle: TButton |
Left = 401 |
Top = 118 |
Width = 72 |
Height = 25 |
Caption = 'Umschalten' |
TabOrder = 8 |
OnClick = btnFixedToggleClick |
end |
object btnBearbeitungsnotiz: TButton |
Left = 17 |
Top = 240 |
303,12 → 296,12 |
Width = 185 |
Height = 25 |
Caption = 'Notiz hinzuf'#252'gen' |
TabOrder = 7 |
TabOrder = 9 |
OnClick = btnBearbeitungsnotizClick |
end |
object DBLookupComboBox4: TDBLookupComboBox |
Left = 240 |
Top = 208 |
Top = 189 |
Width = 155 |
Height = 21 |
DataField = 'version_agenda' |
316,7 → 309,7 |
KeyField = 'id' |
ListField = 'version' |
ListSource = dsVersionen |
TabOrder = 11 |
TabOrder = 5 |
end |
object cbxErfasser: TDBLookupComboBox |
Left = 17 |
333,14 → 326,25 |
ReadOnly = True |
TabOrder = 12 |
end |
object DBLookupComboBox5: TDBLookupComboBox |
Left = 240 |
Top = 120 |
Width = 155 |
Height = 21 |
DataField = 'status' |
DataSource = dsBugs |
KeyField = 'id' |
ListField = 'status' |
ListSource = dsStatus |
TabOrder = 2 |
end |
end |
object ADOConnection1: TADOConnection |
Connected = True |
ConnectionString = |
'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' + |
'fo=False;Initial Catalog=WULI;Data Source=GREINER\CORA2012,49001' |
'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MySQL' + |
' RAS;Initial Catalog=bugtracker;' |
LoginPrompt = False |
Provider = 'SQLOLEDB.1' |
Left = 104 |
Top = 344 |
end |
433,9 → 437,6 |
object qryBugsbearbeiter: TIntegerField |
FieldName = 'bearbeiter' |
end |
object qryBugsfixdatum: TDateTimeField |
FieldName = 'fixdatum' |
end |
object qryBugsversion_release: TIntegerField |
FieldName = 'version_release' |
OnValidate = qryBugsversion_releaseValidate |
452,7 → 453,14 |
object qryBugsversion_agenda: TIntegerField |
FieldName = 'version_agenda' |
end |
object qryBugsstatus: TIntegerField |
FieldName = 'status' |
OnChange = qryBugsstatusChange |
end |
object qryBugsstatus_geaendert: TDateTimeField |
FieldName = 'status_geaendert' |
end |
end |
object dsVersionen: TDataSource |
DataSet = qryVersionen |
Left = 240 |
503,4 → 511,17 |
Left = 304 |
Top = 344 |
end |
object lkpStatus: TADOTable |
Active = True |
Connection = ADOConnection1 |
CursorType = ctStatic |
TableName = 'lkp_status' |
Left = 344 |
Top = 344 |
end |
object dsStatus: TDataSource |
DataSet = lkpStatus |
Left = 344 |
Top = 312 |
end |
end |
/trunk/BugtrackerMain.pas |
---|
5,15 → 5,8 |
* - Spezielle Filter |
* ... Auflisten nach Modul |
* ... Anzeigen der Agenda |
* - verbinden mit ticketsystem von HS |
* - rtf controls? |
* - Neue Felder: |
* ... Erfasser |
* ... Agenda |
* ... Status = Offen, gefixt, Abgelehnt, Veröffentlicht |
* ... RTF Feld als BIGTEXT definieren |
* - Neue Aufteilung der States |
* ... Open, Fixed, Published, Wontfix/Rejected, Planned(Agenda) |
* - rtf control bar? |
* - ein neu angelegter bug soll links aus der leiste verschwinden, wenn er nicht in das kriterium passt |
* |
* NOT INCLUDED: |
* - duplicate of |
72,7 → 65,6 |
Splitter1: TSplitter; |
Hilfe1: TMenuItem; |
ber1: TMenuItem; |
btnFixedToggle: TButton; |
btnBearbeitungsnotiz: TButton; |
qryBugsid: TAutoIncField; |
qryBugstitel: TStringField; |
80,7 → 72,6 |
qryBugserstellt: TDateTimeField; |
qryBugswichtigkeit: TIntegerField; |
qryBugsbearbeiter: TIntegerField; |
qryBugsfixdatum: TDateTimeField; |
qryBugsversion_release: TIntegerField; |
qryBugsmodul: TIntegerField; |
qryBugsprojekt: TIntegerField; |
95,6 → 86,11 |
Label9: TLabel; |
cbxErfasser: TDBLookupComboBox; |
Label10: TLabel; |
lkpStatus: TADOTable; |
dsStatus: TDataSource; |
DBLookupComboBox5: TDBLookupComboBox; |
qryBugsstatus: TIntegerField; |
qryBugsstatus_geaendert: TDateTimeField; |
procedure Mitarbeiter1Click(Sender: TObject); |
procedure qryBugsAfterScroll(DataSet: TDataSet); |
procedure Module1Click(Sender: TObject); |
106,7 → 102,6 |
procedure Projektwechseln1Click(Sender: TObject); |
procedure qryBugsAfterInsert(DataSet: TDataSet); |
procedure ber1Click(Sender: TObject); |
procedure btnFixedToggleClick(Sender: TObject); |
procedure qryBugsversion_releaseValidate(Sender: TField); |
procedure FormCreate(Sender: TObject); |
procedure qryVersionenAfterInsert(DataSet: TDataSet); |
115,6 → 110,7 |
procedure qryBugsBeforeCancel(DataSet: TDataSet); |
procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn); |
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
procedure qryBugsstatusChange(Sender: TField); |
public |
eingeloggtMitarbeiter: integer; |
eingeloggtMitarbeiterName: string; |
139,8 → 135,8 |
qryBugs.FieldByName('wichtigkeit').AsInteger := 5; // Mitte |
qryBugs.FieldByName('erstellt').AsDateTime := Now; |
qryBugs.FieldByName('erfasser').AsInteger := eingeloggtMitarbeiter; |
// qryBugs.FieldByName('bearbeiter').AsInteger := eingeloggtMitarbeiter; |
qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt; |
qryBugs.FieldByName('status').AsInteger := 1; // Offen |
end; |
procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet); |
181,11 → 177,31 |
else raise EAbort.Create('Abbruch durch Benutzer'); // Cancel geklickt |
end; |
procedure TfrmBugtracker.qryBugsstatusChange(Sender: TField); |
var |
col: TColor; |
begin |
qryBugsstatus_geaendert.AsDateTime := Now; |
DBLookupComboBox5.KeyValue := qryBugsstatus.AsVariant; // nur benötigt, daamit wir auf DBLookupComboBox5.Text zugreifen können |
case qryBugsstatus.AsInteger of |
1: col := clRed; // Offen |
2: col := clMaroon; // Abgelehnt |
3: col := clPurple; // In Bearbeitung |
4: col := clTeal; // Gefixt |
5: col := clGreen; // Veröffentlicht |
else |
col := clBlack; // sollte nicht passieren |
end; |
NotizHinzufuegen(col, DBLookupComboBox5.Text); |
end; |
procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField); |
begin |
if qryBugs.FieldByName('fixdatum').IsNull then |
if qryBugs.FieldByName('status').AsInteger <> 5 then |
begin |
raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als gefixt markiert werden.'); |
// raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als "Veröffentlicht" markiert werden.'); |
qryBugs.FieldByName('status').AsInteger := 5; |
end; |
end; |
225,24 → 241,9 |
procedure TfrmBugtracker.btnBearbeitungsnotizClick(Sender: TObject); |
begin |
NotizHinzufuegen(clRed, 'Notiz'); |
NotizHinzufuegen(clOlive, 'Notiz'); |
end; |
procedure TfrmBugtracker.btnFixedToggleClick(Sender: TObject); |
begin |
if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit; |
if qryBugs.FieldByName('fixdatum').IsNull then |
begin |
qryBugs.FieldByName('fixdatum').AsDateTime := Now; |
NotizHinzufuegen(clGreen, 'Gefixt'); |
end |
else |
begin |
qryBugs.FieldByName('fixdatum').Clear; |
NotizHinzufuegen(clBlue, 'Neu eröffnet'); |
end; |
end; |
procedure TfrmBugtracker.ComboBox1Change(Sender: TObject); |
begin |
case ComboBox1.ItemIndex of |
249,22 → 250,22 |
0: |
begin |
// Meine offenen Bugs (nach Wichtigkeit) |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC'; |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND (status = 1 OR status = 3) AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC'; |
end; |
1: |
begin |
// Alle offenen Bugs (nach Wichtigkeit) |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL ORDER BY wichtigkeit DESC'; |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND (status = 1 OR status = 3) ORDER BY wichtigkeit DESC'; |
end; |
2: |
begin |
// Gelöst ohne Veröffentlichung (nach Lösungsdatum) |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY fixdatum DESC'; |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND status = 4 ORDER BY status_geaendert DESC'; |
end; |
3: |
begin |
// Gelöst und Veröffentlicht (nach Version und Lösungsdatum) |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY version_release DESC, fixdatum DESC'; |
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND status = 5 ORDER BY status_geaendert DESC'; |
end; |
4: |
begin |
315,6 → 316,7 |
qryVersionen.Active := true; |
tblProjekte.Active := true; |
qryModule.Active := true; |
lkpStatus.Active := true; |
end; |
procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject); |
347,6 → 349,8 |
if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit; |
// Endet der Text mit zwei Zeilenabständen? Wenn nein, dann einfügen. |
if Trim(DBRichEdit1.Text) <> '' then |
begin |
leerzeilen := 0; |
if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-2, 2) = #13#10 then Inc(leerzeilen); // letzte Zeile |
if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-4, 2) = #13#10 then Inc(leerzeilen); // Vorletzte Zeile |
355,6 → 359,11 |
1: umbruch := #13#10; |
2: umbruch := ''; |
end; |
end |
else |
begin |
umbruch := ''; |
end; |
DBRichEdit1.SelStart := DBRichEdit1.GetTextLen; |
DBRichEdit1.SelText := umbruch; |
/trunk/bugtracker_mssql.sql |
---|
7,7 → 7,8 |
[wichtigkeit] [int] NOT NULL, |
[erfasser] [int] NOT NULL, |
[bearbeiter] [int] NULL, |
[fixdatum] [datetime] NULL, |
[status] [int] NOT NULL, |
[status_geandert] [datetime] NULL, |
[version_release] [int] NULL, |
[version_agenda] [int] NULL, |
[modul] [int] NULL, |
14,6 → 15,7 |
[projekt] [int] NOT NULL |
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] |
ALTER TABLE [dbo].[bugs] ADD CONSTRAINT [DF_bugs_wichtigkeit] DEFAULT ((5)) FOR [wichtigkeit] |
ALTER TABLE [dbo].[bugs] ADD CONSTRAINT [DF_bugs_status] DEFAULT ((1)) FOR [status] |
CREATE TABLE [dbo].[mitarbeiter]( |
[id] [int] IDENTITY(1,1) NOT NULL, |
36,3 → 38,8 |
[version] [varchar](255) NULL, |
[projekt] [int] NOT NULL |
) ON [PRIMARY] |
CREATE TABLE [dbo].[lkp_status]( |
[id] [int] IDENTITY(1,1) NOT NULL, |
[status] [varchar](255) NULL |
) ON [PRIMARY] |
/trunk/bugtracker_mysql.sql |
---|
1,28 → 1,5 |
-- phpMyAdmin SQL Dump |
-- version 4.2.0-dev |
-- http://www.phpmyadmin.net |
 |
-- |
-- Host: localhost |
-- Erstellungszeit: 21. Feb 2016 um 03:49 |
-- Server Version: 5.5.44-0+deb8u1 |
-- PHP-Version: 5.6.17-0+deb8u1 |
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; |
SET time_zone = "+00:00"; |
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; |
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; |
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; |
/*!40101 SET NAMES utf8 */; |
-- |
-- Datenbank: `bugtracker` |
-- |
-- -------------------------------------------------------- |
-- |
-- Tabellenstruktur für Tabelle `bugs` |
-- |
32,9 → 9,10 |
`beschreibung` longtext NOT NULL, |
`erstellt` datetime DEFAULT NULL, |
`wichtigkeit` int(11) NOT NULL DEFAULT '5', |
`erfasser` int(11) DEFAULT NULL, |
`erfasser` int(11) DEFAULT NOT NULL, |
`bearbeiter` int(11) DEFAULT NULL, |
`fixdatum` datetime DEFAULT NULL, |
`status` int(11) NOT NULL DEFAULT '1', |
`status_geandert` datetime DEFAULT NULL, |
`version_release` int(11) NOT NULL, |
`version_agenda` int(11) NOT NULL, |
`modul` int(11) NOT NULL, |
88,69 → 66,65 |
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; |
-- |
-- Indexes for dumped tables |
-- Tabellenstruktur für Tabelle `lkp_status` |
-- |
CREATE TABLE IF NOT EXISTS `lkp_status` ( |
`id` int(11) NOT NULL, |
`status` varchar(255) NOT NULL |
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; |
-- |
-- Indexes for table `bugs` |
-- Indexes for dumped tables |
-- |
ALTER TABLE `bugs` |
ADD PRIMARY KEY (`id`); |
-- |
-- Indexes for table `mitarbeiter` |
-- |
ALTER TABLE `mitarbeiter` |
ADD PRIMARY KEY (`id`); |
-- |
-- Indexes for table `module` |
-- |
ALTER TABLE `module` |
ADD PRIMARY KEY (`id`); |
-- |
-- Indexes for table `projekte` |
-- |
ALTER TABLE `projekte` |
ADD PRIMARY KEY (`id`); |
-- |
-- Indexes for table `versionen` |
-- |
ALTER TABLE `versionen` |
ADD PRIMARY KEY (`id`); |
ALTER TABLE `lkp_status` |
ADD PRIMARY KEY (`id`); |
-- |
-- AUTO_INCREMENT for dumped tables |
-- |
-- |
-- AUTO_INCREMENT for table `bugs` |
-- |
ALTER TABLE `bugs` |
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
-- |
-- AUTO_INCREMENT for table `mitarbeiter` |
-- |
ALTER TABLE `mitarbeiter` |
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
-- |
-- AUTO_INCREMENT for table `module` |
-- |
ALTER TABLE `module` |
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
-- |
-- AUTO_INCREMENT for table `projekte` |
-- |
ALTER TABLE `projekte` |
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
-- |
-- AUTO_INCREMENT for table `versionen` |
-- |
ALTER TABLE `versionen` |
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; |
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; |
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
ALTER TABLE `lkp_status` |
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
-- |
-- Daten für Tabelle `lkp_status` |
-- |
INSERT INTO `lkp_status` (`id`, `status`) VALUES |
(1, 'Offen'), |
(2, 'Abgelehnt'), |
(3, 'In Arbeit'), |
(4, 'Abgeschlossen'), |
(5, 'Veröffentlicht'); |