• R/O
  • SSH
  • HTTPS

mantisbtmonitor: Commit


Commit MetaInfo

Revision109 (tree)
Time2022-11-25 04:58:01
Authorderekwildstar

Log Message

MantisBT Monitor

Recursos foram adicionados, substituídos ou removidos
Removido TFormNoLogin
Renomeado TFormLogin para TFormInitialConfiguration
Criada uma versão sobrecarregada de ShowSpecialDialog que permite a informação do handle da janela pai
Remoção de código desnecessário na função Logout
As enumerações TEnvironment, TProfile e TUnitId foram movidas para UTypes.pas
O Método TConfigurations.GetMantisConfigs agora é público e também carrega os rótulos das unidades organizacionais

Change Summary

Incremental Difference

--- trunk/client/prj/MantisBTMonitor.dpr (revision 108)
+++ trunk/client/prj/MantisBTMonitor.dpr (revision 109)
@@ -7,8 +7,7 @@
77 UFormBasicDialog in '..\src\UFormBasicDialog.pas' {FormBasicDialog},
88 UFormGeneralConfiguration in '..\src\UFormGeneralConfiguration.pas' {FormGeneralConfiguration},
99 UConfigurations in '..\src\UConfigurations.pas',
10- UFormLogin in '..\src\UFormLogin.pas' {FormLogin},
11- UFormNoLogin in '..\src\UFormNoLogin.pas' {FormNoLogin},
10+ UFormInitialConfiguration in '..\src\UFormInitialConfiguration.pas' {FormInitialConfiguration},
1211 UDamoPrincipal in '..\src\UDamoPrincipal.pas' {DamoPrincipal: TDataModule},
1312 UFormTask in '..\src\UFormTask.pas' {FormTask},
1413 UFunctions in '..\src\lib\UFunctions.pas',
@@ -45,30 +44,83 @@
4544 else
4645 begin
4746 // Quando UserName tiver um valor aqui, significa que houve um login bem
48- // sucedido e quando Profile tiver um valor, significa que houve a correta
49- // configuração desta propriedade
50- while (UserInfo.UserName = '') or (Configurations.Profile = pUnknown) do
47+ // sucedido, o que implica que a senha também está correta. Quando Profile
48+ // tiver um valor, significa que houve a correta configuração desta
49+ // propriedade e o mesmo vale para UnityId. O loop abaixo só termina quando
50+ // todas as suas condições forem false, o que indica que todas as
51+ // informações obrigatórias foram preenchidas com valores válidos. As
52+ // verificações existentes dentro do loop podem parecer descenessárias no
53+ // caminha feliz do uso do programa, já que TFormInitialConfiguration
54+ // garante que todas estas informações precisam estar digitadas ou
55+ // selecionadas, mas estas verificações adicionais servirão caso o registro
56+ // do sistema fique inválido por algum motivo, daí, ao tentar entrar no
57+ // sistema tais informações estarão em branco e a tela de configurações
58+ // iniciais precisa ser exibida novamente
59+ while (UserInfo.UserName = '') or (Configurations.Profile = pUnknown) or (Configurations.UnityId = TUnitId.none) do
5160 begin
5261 if not Login(Application.Handle,Configurations.UserName,Configurations.Password,UserInfo) then
5362 begin
5463 ZeroMemory(@UserInfo,SizeOf(TUSerInfo));
5564
56- if TFormLogin.ShowMeModal <> 1 then // mrOk
65+ if TFormInitialConfiguration.ShowMeModal <> 1 then // mrOk
5766 begin
58- TFormNoLogin.ShowMeModal;
67+ ShowSpecialDialog(GetDesktopWindow
68+ ,TSpecialDialogType.ShieldHeadError
69+ ,'Finalizando a aplicação'
70+ ,'Não é possível continuar sem que todas as informações requeridas tenham sido selecionadas ou digitadas. A aplicação será finalizada agora!'
71+ ,''
72+ ,''
73+ ,''
74+ ,TSpecialDialogType.Information
75+ ,'Você precisa informar um nome de usuário e uma senha válidos');
5976 Break;
6077 end;
61- end;
78+ end
79+ // Quando o login é bem sucedido, podemos obter as configurações do
80+ // MantisBT. Fazer isso dessa forma garante que possíveis strings
81+ // traduzíveis venham no idioma correto de acordo com as configurações do
82+ // usuário bem como outras configurações específicas de cada usuário.
83+ // Carregar as configurações do MantisBT invariavelmente ao se criar a
84+ // classe de configurações, eventualmente trazia os nomes dos status em
85+ // inglês, provocando a incorreta visualização dos botões na tela de
86+ // terafa, a qual usa os nomes dos status em português. Essa solução,
87+ // portanto, só garante que tudo vai funcionar bem quando o idioma do
88+ // usuário for português. Por ora isso é suficiente
89+ else
90+ Configurations.GetMantisConfigs;
6291
6392 if Configurations.Profile = pUnknown then
64- if TFormLogin.ShowMeModal <> 1 then // mrOk
93+ if TFormInitialConfiguration.ShowMeModal <> 1 then // mrOk
6594 begin
66- TFormNoLogin.ShowMeModal;
95+ ShowSpecialDialog(GetDesktopWindow
96+ ,TSpecialDialogType.ShieldHeadError
97+ ,'Finalizando a aplicação'
98+ ,'Não é possível continuar sem que todas as informações requeridas tenham sido selecionadas ou digitadas. A aplicação será finalizada agora!'
99+ ,''
100+ ,''
101+ ,''
102+ ,TSpecialDialogType.Information
103+ ,'Você precisa informar o perfil de seu usuário');
67104 Break;
68105 end;
106+
107+ if Configurations.UnityId = TUnitId.none then
108+ if TFormInitialConfiguration.ShowMeModal <> 1 then // mrOk
109+ begin
110+ ShowSpecialDialog(GetDesktopWindow
111+ ,TSpecialDialogType.ShieldHeadError
112+ ,'Finalizando a aplicação'
113+ ,'Não é possível continuar sem que todas as informações requeridas tenham sido selecionadas ou digitadas. A aplicação será finalizada agora!'
114+ ,''
115+ ,''
116+ ,''
117+ ,TSpecialDialogType.Information
118+ ,'Você precisa informar a sua unidade organizacional');
119+ Break;
120+ end;
69121 end;
70122
71- if (UserInfo.UserName <> '') and (Configurations.Profile <> pUnknown) then
123+ if (UserInfo.UserName <> '') and (Configurations.Profile <> pUnknown) and (Configurations.UnityId <> TUnitId.none) then
72124 begin
73125 Configurations.UserInfo := UserInfo;
74126 Application.CreateForm(TFormSplash, FormSplash);
--- trunk/client/prj/MantisBTMonitor.dproj (revision 108)
+++ trunk/client/prj/MantisBTMonitor.dproj (revision 109)
@@ -119,7 +119,7 @@
119119 <VerInfo_MinorVer>0</VerInfo_MinorVer>
120120 <VerInfo_Release>0</VerInfo_Release>
121121 <VerInfo_Locale>1033</VerInfo_Locale>
122- <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.151;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
122+ <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.170;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
123123 <Debugger_RunParams>/desenvolvimento</Debugger_RunParams>
124124 <VerInfo_AutoGenVersion>false</VerInfo_AutoGenVersion>
125125 <VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion>
@@ -127,7 +127,7 @@
127127 <DCC_SymbolReferenceInfo>2</DCC_SymbolReferenceInfo>
128128 <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
129129 <DCC_MapFile>3</DCC_MapFile>
130- <VerInfo_Build>151</VerInfo_Build>
130+ <VerInfo_Build>170</VerInfo_Build>
131131 </PropertyGroup>
132132 <ItemGroup>
133133 <DelphiCompile Include="$(MainSource)">
@@ -143,12 +143,9 @@
143143 <Form>FormGeneralConfiguration</Form>
144144 </DCCReference>
145145 <DCCReference Include="..\src\UConfigurations.pas"/>
146- <DCCReference Include="..\src\UFormLogin.pas">
147- <Form>FormLogin</Form>
146+ <DCCReference Include="..\src\UFormInitialConfiguration.pas">
147+ <Form>FormInitialConfiguration</Form>
148148 </DCCReference>
149- <DCCReference Include="..\src\UFormNoLogin.pas">
150- <Form>FormNoLogin</Form>
151- </DCCReference>
152149 <DCCReference Include="..\src\UDamoPrincipal.pas">
153150 <Form>DamoPrincipal</Form>
154151 <DesignClass>TDataModule</DesignClass>
--- trunk/client/src/UFormLogin.pas (revision 108)
+++ trunk/client/src/UFormLogin.pas (nonexistent)
@@ -1,81 +0,0 @@
1-unit UFormLogin;
2-
3-interface
4-
5-uses
6- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7- Dialogs, UFormBasicDialog, StdCtrls, Buttons, UPngBitBtn, ExtCtrls, PngImage;
8-
9-type
10- TFormLogin = class(TFormBasicDialog)
11- LAEDUserName: TLabeledEdit;
12- LAEDPassword: TLabeledEdit;
13- CBBXProfile: TComboBox;
14- PANE1: TPanel;
15- LABE1: TLabel;
16- LABE2: TLabel;
17- procedure FormShow(Sender: TObject);
18- private
19- { Private declarations }
20- protected
21- procedure ValidateOk; override;
22- public
23- { Public declarations }
24- end;
25-
26-implementation
27-
28-uses
29- UConfigurations;
30-
31-{$R *.dfm}
32-
33-{ TFormLogin }
34-
35-{ TODO : É necessário criar um campo aqui para a unidade do usuário. caso esta
36-configuração não seja definida, os headers dos comentários não aparecerão
37-direito. Isso deve ser feito de forma que o tal campo seja salvo no registro do
38-Windows também, tal como é feito atualmente com outros campos }
39-
40-procedure TFormLogin.FormShow(Sender: TObject);
41-begin
42- inherited;
43- LAEDUserName.Text := Configurations.UserName;
44- LAEDPassword.Text := Configurations.Password;
45- CBBXProfile.ItemIndex := Pred(Integer(Configurations.Profile));
46-end;
47-
48-procedure TFormLogin.ValidateOk;
49-begin
50- if Trim(LAEDUserName.Text) = '' then
51- begin
52- Application.MessageBox('Informe o seu nome de usuário','Campo obrigatório não preenchido',MB_ICONERROR);
53- LAEDUserName.SetFocus;
54- Exit;
55- end;
56-
57- if Trim(LAEDPassword.Text) = '' then
58- begin
59- Application.MessageBox('Informe a sua senha','Campo obrigatório não preenchido',MB_ICONERROR);
60- LAEDPassword.SetFocus;
61- Exit;
62- end;
63-
64- if CBBXProfile.ItemIndex = -1 then
65- begin
66- Application.MessageBox('É necessário selecionar um perfil','Selecione um perfil!',MB_ICONERROR);
67- CBBXProfile.SetFocus;
68- Exit;
69- end;
70-
71- // Se chegar aqui é porque os dados da tela foram validados com sucesso, logo,
72- // podemos salvá-los
73-
74- Configurations.UserName := LAEDUserName.Text;
75- Configurations.Password := LAEDPassword.Text;
76- Configurations.Profile := TProfile(Succ(CBBXProfile.ItemIndex));
77-
78- inherited; // Confirma o fechamento da tela com salvamento positivo dos dados
79-end;
80-
81-end.
--- trunk/client/src/UFormNoLogin.pas (revision 108)
+++ trunk/client/src/UFormNoLogin.pas (nonexistent)
@@ -1,25 +0,0 @@
1-unit UFormNoLogin;
2-
3-interface
4-
5-uses
6- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7- Dialogs, UFormBasicDialog, StdCtrls, Buttons, UPngBitBtn, ExtCtrls, PngImage;
8-
9-type
10- TFormNoLogin = class(TFormBasicDialog)
11- LABE1: TLabel;
12- private
13- { Private declarations }
14- public
15- { Public declarations }
16- end;
17-
18-var
19- FormNoLogin: TFormNoLogin;
20-
21-implementation
22-
23-{$R *.dfm}
24-
25-end.
--- trunk/client/src/lib/UFunctions.pas (revision 108)
+++ trunk/client/src/lib/UFunctions.pas (revision 109)
@@ -32,7 +32,8 @@
3232 //: especiais de aprovação/reprovação de tarefas, apenas os cabeçalhos padrão de
3333 //: comentários de acordo com a unidade do usuário
3434 procedure AddCommentHeader(var AComment: String; AHeaderDescription: String = '');
35-function ShowSpecialDialog(AType: TSpecialDialogType; AMainInstruction: String; AContent: String; AExpandedInformation: String = ''; ACollapsedControlText: String = ''; AExpandedControlText: String = ''; AFooterIcon: TSpecialDialogType = TSpecialDialogType.None; AFooterText: String = ''): Boolean;
35+function ShowSpecialDialog(AType: TSpecialDialogType; AMainInstruction: String; AContent: String; AExpandedInformation: String = ''; ACollapsedControlText: String = ''; AExpandedControlText: String = ''; AFooterIcon: TSpecialDialogType = TSpecialDialogType.None; AFooterText: String = ''): Boolean; overload;
36+function ShowSpecialDialog(AParentHandle: HWND; AType: TSpecialDialogType; AMainInstruction: String; AContent: String; AExpandedInformation: String = ''; ACollapsedControlText: String = ''; AExpandedControlText: String = ''; AFooterIcon: TSpecialDialogType = TSpecialDialogType.None; AFooterText: String = ''): Boolean; overload;
3637 function AddHistory(ATaskId: Cardinal; AFieldName: String; AOldValue: String; ANewValue: String): Boolean; overload;
3738 function AddHistory(ATaskId: Cardinal; AFieldName: String; AValue: String): Boolean; overload;
3839 procedure WaitForAsynchronousReturn;
@@ -1205,6 +1206,28 @@
12051206 end;
12061207 end;
12071208
1209+function ShowSpecialDialog(AParentHandle: HWND; AType: TSpecialDialogType; AMainInstruction: String; AContent: String; AExpandedInformation: String; ACollapsedControlText: String; AExpandedControlText: String; AFooterIcon: TSpecialDialogType; AFooterText: String): Boolean;
1210+begin
1211+ with TKRKTaskDialog.Create(nil) do
1212+ try
1213+ CommonButtons := [];
1214+ Flags := [];
1215+
1216+ MainIcon := TKRKTaskDialogIcon(AType);
1217+ CollapsedControlText := ACollapsedControlText;
1218+ ExpandedControlText := AExpandedControlText;
1219+ Content := AContent;
1220+ MainInstruction := AMainInstruction;
1221+ ExpandedInformation := AExpandedInformation;
1222+ FooterIcon := TKRKTaskDialogIcon(AFooterIcon);
1223+ Footer := AFooterText;
1224+
1225+ Result := Execute(AParentHandle);
1226+ finally
1227+ Free;
1228+ end;
1229+end;
1230+
12081231 function ShowSpecialDialog(AType: TSpecialDialogType; AMainInstruction: String; AContent: String; AExpandedInformation: String; ACollapsedControlText: String; AExpandedControlText: String; AFooterIcon: TSpecialDialogType; AFooterText: String): Boolean;
12091232 begin
12101233 with TKRKTaskDialog.Create(nil) do
--- trunk/client/src/lib/UScrapFunctions.pas (revision 108)
+++ trunk/client/src/lib/UScrapFunctions.pas (revision 109)
@@ -106,41 +106,36 @@
106106 Req: TRequestOptions;
107107 Res: TResponse;
108108 begin
109-// FS: TFormStatus := TFormStatus.Create(Application);
110- try
111- ZeroMemory(@Req,SizeOf(TRequestOptions));
112- ZeroMemory(@Res,SizeOf(TResponse));
109+ ZeroMemory(@Req,SizeOf(TRequestOptions));
110+ ZeroMemory(@Res,SizeOf(TResponse));
113111
114- Req.AutoClearSSLState := True;
112+ Req.AutoClearSSLState := True;
115113
116- Req.InternetOpenParams.Agent := 'MantisBT Monitor';
117- Req.InternetOpenParams.AccessType := INTERNET_OPEN_TYPE_PRECONFIG;
118- Req.InternetConnectParams.ServerName := PChar(Configurations.MantisBTBaseUrl + '/mantis/logout_page.php');
119- Req.InternetConnectParams.Service := INTERNET_SERVICE_HTTP;
120- Req.InternetConnectParams.Context := AHandle;
114+ Req.InternetOpenParams.Agent := 'MantisBT Monitor';
115+ Req.InternetOpenParams.AccessType := INTERNET_OPEN_TYPE_PRECONFIG;
116+ Req.InternetConnectParams.ServerName := PChar(Configurations.MantisBTBaseUrl + '/mantis/logout_page.php');
117+ Req.InternetConnectParams.Service := INTERNET_SERVICE_HTTP;
118+ Req.InternetConnectParams.Context := AHandle;
121119
122- Req.HttpOpenRequestParams.Verb := 'GET';
123- Req.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
120+ Req.HttpOpenRequestParams.Verb := 'GET';
121+ Req.HttpOpenRequestParams.AcceptTypes := TStringList.Create;
122+ try
123+ Req.HttpOpenRequestParams.AcceptTypes.Add('*/*');
124+ Req.HttpOpenRequestParams.Context := AHandle;
125+ Req.HttpOpenRequestParams.AutoDetectHTTPS := True;
126+ Req.HttpOpenRequestParams.IgnoreInvalidCertificates := True;
127+ Req.HttpSendRequestParams.IgnoreInvalidCertificateCA := True;
128+
129+ Res.Content := TStringStream.Create('',TEncoding.UTF8);
124130 try
125- Req.HttpOpenRequestParams.AcceptTypes.Add('*/*');
126- Req.HttpOpenRequestParams.Context := AHandle;
127- Req.HttpOpenRequestParams.AutoDetectHTTPS := True;
128- Req.HttpOpenRequestParams.IgnoreInvalidCertificates := True;
129- Req.HttpSendRequestParams.IgnoreInvalidCertificateCA := True;
131+ Request(Req,Res);
130132
131- Res.Content := TStringStream.Create('',TEncoding.UTF8);
132- try
133- Request(Req,Res);
134-
135- Result := Pos('<form id="login-form"',TStringStream(Res.Content).DataString) > 0;
136- finally
137- Res.Content.Free;
138- end;
133+ Result := Pos('<form id="login-form"',TStringStream(Res.Content).DataString) > 0;
139134 finally
140- Req.HttpOpenRequestParams.AcceptTypes.Free;
135+ Res.Content.Free;
141136 end;
142137 finally
143-
138+ Req.HttpOpenRequestParams.AcceptTypes.Free;
144139 end;
145140 end;
146141
--- trunk/client/src/lib/UTypes.pas (revision 108)
+++ trunk/client/src/lib/UTypes.pas (revision 109)
@@ -6,6 +6,19 @@
66 System.UITypes;
77
88 type
9+ TEnvironment = (eUnknown, eDevelopment, eTest, eHomologation, eProduction);
10+ TProfile = (pUnknown, pDeveloper, pTester, pHomologator);
11+ // Na enumeração abaixo eu não usei prefixos porque eu pretendo usar os nomes
12+ // dos elementos diretamente para obter os nomes dos tags especiais, a fim de
13+ // economizar código. Além disso o uso de prefixos caiu em desuso com a
14+ // possibilidade de se usar o nome do tipo como prefixo, como por exemplo,
15+ // TUnitId.une2 ou TUnitId.uds1, etc.
16+ TUnitId = (none, uds1, uds2, uds3, uds4, uds5, unts, une1, une2, une3, une4, une5, ungc);
17+ { TODO : Talvez seja melhor mudar unts para ues, ou criar um elemento
18+ adicional chamado ues. A UES trabalha com testes e análises, ou seja, é
19+ possível que sejam necessários dois identificadores, mas ainda não tenho
20+ certeza. Caso isso seja alterado, altere também o Plugin do MantisBT Monitor }
21+
922 TAssignedProject = record
1023 Name: string;
1124 AccessLevel: string;
@@ -58,11 +71,38 @@
5871 FUTSEffortCustomFieldId: Cardinal;
5972 FUESEffortCustomFieldId: Cardinal;
6073 FUGCEffortCustomFieldId: Cardinal;
74+ FUDS1Label: String;
75+ FUDS2Label: String;
76+ FUDS3Label: String;
77+ FUDS4Label: String;
78+ FUDS5Label: String;
79+ FUNE1Label: String;
80+ FUNE2Label: String;
81+ FUNE3Label: String;
82+ FUNE4Label: String;
83+ FUNE5Label: String;
84+ FUNGCLabel: String;
85+ FUNTSLabel: String;
86+ function GetUnitNameByUnitId(AUnitId: TUnitId): String;
6187 public
6288 property UFSEffortCustomFieldId: Cardinal read FUFSEffortCustomFieldId write FUFSEffortCustomFieldId;
6389 property UTSEffortCustomFieldId: Cardinal read FUTSEffortCustomFieldId write FUTSEffortCustomFieldId;
6490 property UESEffortCustomFieldId: Cardinal read FUESEffortCustomFieldId write FUESEffortCustomFieldId;
6591 property UGCEffortCustomFieldId: Cardinal read FUGCEffortCustomFieldId write FUGCEffortCustomFieldId;
92+ property UDS1Label: String read FUDS1Label write FUDS1Label;
93+ property UDS2Label: String read FUDS2Label write FUDS2Label;
94+ property UDS3Label: String read FUDS3Label write FUDS3Label;
95+ property UDS4Label: String read FUDS4Label write FUDS4Label;
96+ property UDS5Label: String read FUDS5Label write FUDS5Label;
97+ property UNE1Label: String read FUNE1Label write FUNE1Label;
98+ property UNE2Label: String read FUNE2Label write FUNE2Label;
99+ property UNE3Label: String read FUNE3Label write FUNE3Label;
100+ property UNE4Label: String read FUNE4Label write FUNE4Label;
101+ property UNE5Label: String read FUNE5Label write FUNE5Label;
102+ property UNGCLabel: String read FUNGCLabel write FUNGCLabel;
103+ property UNTSLabel: String read FUNTSLabel write FUNTSLabel;
104+
105+ property UnitNameByUnitId[AUnitId: TUnitId]: String read GetUnitNameByUnitId;
66106 end;
67107
68108 TMantisConfigs = record
@@ -748,4 +788,24 @@
748788 Result := Length(Attachments);
749789 end;
750790
791+{ TPluginConfigs }
792+
793+function TPluginConfigs.GetUnitNameByUnitId(AUnitId: TUnitId): String;
794+begin
795+ case AUnitId of
796+ uds1: Result := FUDS1Label;
797+ uds2: Result := FUDS2Label;
798+ uds3: Result := FUDS3Label;
799+ uds4: Result := FUDS4Label;
800+ uds5: Result := FUDS5Label;
801+ unts: Result := FUNTSLabel;
802+ une1: Result := FUNE1Label;
803+ une2: Result := FUNE2Label;
804+ une3: Result := FUNE3Label;
805+ une4: Result := FUNE4Label;
806+ une5: Result := FUNE5Label;
807+ ungc: Result := FUNGCLabel;
808+ end;
809+end;
810+
751811 end.
--- trunk/client/src/UConfigurations.pas (revision 108)
+++ trunk/client/src/UConfigurations.pas (revision 109)
@@ -6,18 +6,6 @@
66 UTypes, System.Classes, Graphics, System.Win.Registry, UScrapFunctions;
77
88 type
9- TEnvironment = (eUnknown, eDevelopment, eTest, eHomologation, eProduction);
10- TProfile = (pUnknown, pDeveloper, pTester, pHomologator);
11- // Na enumeração abaixo eu não usei prefixos porque eu pretendo usar os nomes
12- // dos elementos diretamente para obter os nomes dos tags especiais, a fim de
13- // economizar código. Além disso o uso de prefixos caiu em desuso com a
14- // possibilidade de se usar o nome do tipo como prefixo, como por exemplo,
15- // TUnitId.une2 ou TUnitId.uds1, etc.
16- TUnitId = (none, uds1, uds2, uds3, uds4, uds5, unts, une1, une2, une3, une4, une5, ungc);
17- { TODO : Talvez seja melhor mudar unts para ues, ou criar um elemento
18- adicional chamado ues. A UES trabalha com testes e análises, ou seja, é
19- possível que sejam necessários dois identificadores, mas ainda não tenho
20- certeza. Caso isso seja alterado, altere também o Plugin do MantisBT Monitor }
219 TConfigurations = class(TRegistry)
2210 private
2311 FEnvironment: TEnvironment;
@@ -25,8 +13,6 @@
2513 FMantisConfigs: TMantisConfigs;
2614 FUserInfo: TUserInfo;
2715
28- procedure GetMantisConfigs;
29-
3016 function GetPassword: String;
3117 function GetProfile: TProfile;
3218 function GetUserName: String;
@@ -40,6 +26,9 @@
4026 procedure SetUnitId(const AValue: TUnitId);
4127 public
4228 constructor Create;
29+
30+ procedure GetMantisConfigs;
31+
4332 // Propriedades obtidas automaticamente
4433 property Environment: TEnvironment read FEnvironment;
4534 property MantisBTBaseUrl: String read FMantisBTBaseUrl;
@@ -105,6 +94,17 @@
10594 end;
10695 end;
10796
97+ // Carreg as configurações do MantisBT e do plugin do MantisBT Monitor ao
98+ // criar a classe de configurações. Esta função também é executada após o
99+ // login bem sucedido para garantir que as configurações retornadas reflitam
100+ // as configurações do usuário logado. Quando um usuário não está logado,
101+ // eventualmente esta chamada carrega as configurações padrão do MantisBT,
102+ // como por exemplo os nomes dos status em inglês. É necessário chamar este
103+ // método aqui porque no form de configuração inicial existe um combo com os
104+ // nomes das unidades e estes nomes são obtidos a partir das configurações do
105+ // plugin do MabtisBT Monitor. Em suma, algumas configurações obtidas de forma
106+ // global precisam estar disponíveis antes de um login bem sucedido, por isso
107+ // essa chamada existe
108108 GetMantisConfigs;
109109 end;
110110
@@ -321,6 +321,18 @@
321321 PluginConfigs.UTSEffortCustomFieldId := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<Integer>('utsEffortCustomFieldId');
322322 PluginConfigs.UESEffortCustomFieldId := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<Integer>('uesEffortCustomFieldId');
323323 PluginConfigs.UGCEffortCustomFieldId := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<Integer>('ugcEffortCustomFieldId');
324+ PluginConfigs.UDS1Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('uds1label');
325+ PluginConfigs.UDS2Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('uds2label');
326+ PluginConfigs.UDS3Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('uds3label');
327+ PluginConfigs.UDS4Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('uds4label');
328+ PluginConfigs.UDS5Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('uds5label');
329+ PluginConfigs.UNE1Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('une1label');
330+ PluginConfigs.UNE2Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('une2label');
331+ PluginConfigs.UNE3Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('une3label');
332+ PluginConfigs.UNE4Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('une4label');
333+ PluginConfigs.UNE5Label := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('une5label');
334+ PluginConfigs.UNGCLabel := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('ungclabel');
335+ PluginConfigs.UNTSLabel := MantisConfigs.GetValue<TJSONObject>('pluginConfigs').GetValue<String>('untslabel');
324336
325337 FMantisConfigs.PluginConfigs := PluginConfigs;
326338 finally
--- trunk/client/src/UDamoTask.pas (revision 108)
+++ trunk/client/src/UDamoTask.pas (revision 109)
@@ -395,13 +395,6 @@
395395 algo não é da conta do programador, rejeitar pra ele e ter seu ponto negado por
396396 não ser um ciclo? (dessa eu discordo totalmente) }
397397
398-{ TODO 4 : Durante a primeira execução do programa, quando valores de registro são
399-criados, os botões de envio para testes e homologação não aparecem,
400-provavelmente porque algum objeto que deveria ser carregado após o login não
401-foi. Ao fechar o programa aparecem dois memory leaks que devem ter a ver com
402-isso. Faça o teste! apague tudo que tiver dentro de
403-HKCU\Software\TJPE\MantisBT Monitor e rode o programa monitorando
404-TFormTask.ConfigureStatusChangeActions }
405398
406399
407400
--- trunk/client/src/UFormInitialConfiguration.pas (nonexistent)
+++ trunk/client/src/UFormInitialConfiguration.pas (revision 109)
@@ -0,0 +1,92 @@
1+unit UFormInitialConfiguration;
2+
3+interface
4+
5+uses
6+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7+ Dialogs, UFormBasicDialog, StdCtrls, Buttons, UPngBitBtn, ExtCtrls, PngImage;
8+
9+type
10+ TFormInitialConfiguration = class(TFormBasicDialog)
11+ LAEDUserName: TLabeledEdit;
12+ LAEDPassword: TLabeledEdit;
13+ CBBXProfile: TComboBox;
14+ PANE1: TPanel;
15+ LABE1: TLabel;
16+ LABE2: TLabel;
17+ LABEUnit: TLabel;
18+ CBBXUnit: TComboBox;
19+ procedure FormShow(Sender: TObject);
20+ private
21+ { Private declarations }
22+ protected
23+ procedure ValidateOk; override;
24+ public
25+ { Public declarations }
26+ end;
27+
28+implementation
29+
30+uses
31+ System.TypInfo, UConfigurations, UTypes;
32+
33+{$R *.dfm}
34+
35+{ TFormLogin }
36+
37+procedure TFormInitialConfiguration.FormShow(Sender: TObject);
38+begin
39+ inherited;
40+ LAEDUserName.Text := Configurations.UserName;
41+ LAEDPassword.Text := Configurations.Password;
42+ CBBXProfile.ItemIndex := Pred(Integer(Configurations.Profile));
43+
44+ CBBXUnit.Clear;
45+ for var UnitId: TUnitId := Succ(Low(TUnitId)) to High(TUnitId) do
46+ CBBXUnit.AddItem(Configurations.MantisConfigs.PluginConfigs.UnitNameByUnitId[UnitId],TObject(UnitId));
47+
48+ CBBXUnit.ItemIndex := Pred(Integer(Configurations.UnityId));
49+end;
50+
51+procedure TFormInitialConfiguration.ValidateOk;
52+begin
53+ if Trim(LAEDUserName.Text) = '' then
54+ begin
55+ Application.MessageBox('Informe o seu nome de usuário','Campo obrigatório não preenchido',MB_ICONERROR);
56+ LAEDUserName.SetFocus;
57+ Exit;
58+ end;
59+
60+ if Trim(LAEDPassword.Text) = '' then
61+ begin
62+ Application.MessageBox('Informe a sua senha','Campo obrigatório não preenchido',MB_ICONERROR);
63+ LAEDPassword.SetFocus;
64+ Exit;
65+ end;
66+
67+ if CBBXProfile.ItemIndex = -1 then
68+ begin
69+ Application.MessageBox('É necessário selecionar um perfil','Selecione um perfil!',MB_ICONERROR);
70+ CBBXProfile.SetFocus;
71+ Exit;
72+ end;
73+
74+ if CBBXUnit.ItemIndex = -1 then
75+ begin
76+ Application.MessageBox('É necessário selecionar uma unidade organizacional','Selecione uma unidade organizacional!',MB_ICONERROR);
77+ CBBXUnit.SetFocus;
78+ Exit;
79+ end;
80+
81+ // Se chegar aqui é porque os dados da tela foram validados com sucesso, logo,
82+ // podemos salvá-los
83+
84+ Configurations.UserName := LAEDUserName.Text;
85+ Configurations.Password := LAEDPassword.Text;
86+ Configurations.Profile := TProfile(Succ(CBBXProfile.ItemIndex));
87+ Configurations.UnityId := TUnitId(Succ(CBBXUnit.ItemIndex));
88+
89+ inherited; // Confirma o fechamento da tela com salvamento positivo dos dados
90+end;
91+
92+end.
--- trunk/client/src/UFormSplash.pas (revision 108)
+++ trunk/client/src/UFormSplash.pas (revision 109)
@@ -36,7 +36,7 @@
3636 implementation
3737
3838 uses
39- DateUtils, UConfigurations, ClassesFileVersionInformation;
39+ DateUtils, UConfigurations, ClassesFileVersionInformation, UTypes;
4040
4141 {$R *.dfm}
4242
--- trunk/client/src/UFormTask.pas (revision 108)
+++ trunk/client/src/UFormTask.pas (revision 109)
@@ -824,6 +824,9 @@
824824 ACTNSendToTest.Hide;
825825 ACTNSendToHomologation.Hide;
826826
827+ verificar porque o play de testes aparece (desabilitado) quando o status da tarefa é incorreto
828+ criar uma tarefa para incluir o id do comentário em um local melhor
829+
827830 // Exibe as ações de acordo com diversos critérios para cada perfil de usuário
828831 case Configurations.Profile of
829832 pDeveloper: begin
Show on old repository browser