Revisión | 17 (tree) |
---|---|
Tiempo | 2020-03-09 04:55:52 |
Autor | ![]() |
Ajustes em alinhamentos e tamanhos de controles/componentes
Criado um campo agregado para retornar o saldo mês a mês
Criados métodos para atualização e obtenção de saldos
Implementado o manipulador do evento OnMonthBalance que vai excluir o saldo de um mês específico e reinserir os saldos de cada um de seus dias
@@ -31,6 +31,7 @@ | ||
31 | 31 | FDTASaldossaldo: TIntegerField; |
32 | 32 | DASOSaldos: TDataSource; |
33 | 33 | FDTASaldosdia: TIntegerField; |
34 | + FDTASaldosSaldoMensal: TAggregateField; | |
34 | 35 | procedure TMERTimer(Sender: TObject); |
35 | 36 | procedure APEVMinimize(Sender: TObject); |
36 | 37 | procedure Sair1Click(Sender: TObject); |
@@ -41,6 +42,7 @@ | ||
41 | 42 | procedure APEVMessage(var Msg: tagMSG; var Handled: Boolean); |
42 | 43 | procedure FDTASaldosdiaGetText(Sender: TField; var Text: string; DisplayText: Boolean); |
43 | 44 | procedure FDTASaldossaldoGetText(Sender: TField; var Text: string; DisplayText: Boolean); |
45 | + procedure FDTASaldosSaldoMensalGetText(Sender: TField; var Text: string; DisplayText: Boolean); | |
44 | 46 | private |
45 | 47 | { Private declarations } |
46 | 48 | FLoggedUserName: String; |
@@ -48,6 +50,7 @@ | ||
48 | 50 | procedure Reset; |
49 | 51 | procedure OpenTables; |
50 | 52 | procedure DoMonthBalance(AMes: Byte; AAno: Word; ASaldos: TSaldos); |
53 | + procedure AtualizarSaldos(AAnoInicial: Word = 0; AMesInicial: Byte = 0); | |
51 | 54 | public |
52 | 55 | { Public declarations } |
53 | 56 | function LimparCPF(ACPF: String): String; |
@@ -57,7 +60,10 @@ | ||
57 | 60 | procedure EuJaExisto; |
58 | 61 | procedure AplicarFiltro; |
59 | 62 | procedure PreencherComboAnos; |
60 | - procedure ObterSaldos(AAnoInicial: Word = 0; AMesInicial: Byte = 0); | |
63 | + procedure ObterSaldoGlobal; | |
64 | + procedure ObterSaldoMensal; | |
65 | + procedure AtualizarSaldoAtual; | |
66 | + procedure AtualizarSaldoGlobal; | |
61 | 67 | |
62 | 68 | property LoggedUserName: String read FLoggedUserName; |
63 | 69 | end; |
@@ -87,6 +93,51 @@ | ||
87 | 93 | FORMPrincipal.Close; |
88 | 94 | end; |
89 | 95 | |
96 | +procedure TDAMOPrincipal.ObterSaldoGlobal; | |
97 | +begin | |
98 | + FORMPrincipal.PNBBSaldoGlobal.Font.Color := clWhite; | |
99 | + | |
100 | + FDTASaldos.Filtered := False; | |
101 | + try | |
102 | + if FDTASaldosSaldoMensal.Value > 0 then | |
103 | + begin | |
104 | + FORMPrincipal.PNBBSaldoGlobal.Caption := FormatDateTime(' hh:nn',FDTASaldosSaldoMensal.Value / 24 / 60); | |
105 | + FORMPrincipal.PNBBSaldoGlobal.Font.Color := clLime; | |
106 | + end | |
107 | + else | |
108 | + begin | |
109 | + FORMPrincipal.PNBBSaldoGlobal.Caption := FormatDateTime('-hh:nn',FDTASaldosSaldoMensal.Value / 24 / 60); | |
110 | + FORMPrincipal.PNBBSaldoGlobal.Font.Color := clRed; | |
111 | + end | |
112 | + finally | |
113 | + FDTASaldos.Filtered := True; | |
114 | + end; | |
115 | +end; | |
116 | + | |
117 | +procedure TDAMOPrincipal.ObterSaldoMensal; | |
118 | +begin | |
119 | + FORMPrincipal.PNBBSaldoDoMes.Font.Color := clWhite; | |
120 | + | |
121 | + // Por conta deste ser um campo agregado, precisamos verificar se existem | |
122 | + // dados sendo exibidos no dataset, pois ele termina somando todos os | |
123 | + // registros quando o dataset filtrado fica vazio | |
124 | + if (FDTASaldos.RecordCount > 0) and (not FDTASaldosSaldoMensal.IsNull) then | |
125 | + begin | |
126 | + if FDTASaldosSaldoMensal.Value > 0 then | |
127 | + begin | |
128 | + FORMPrincipal.PNBBSaldoDoMes.Caption := FormatDateTime(' hh:nn',FDTASaldosSaldoMensal.Value / 24 / 60); | |
129 | + FORMPrincipal.PNBBSaldoDoMes.Font.Color := clLime; | |
130 | + end | |
131 | + else | |
132 | + begin | |
133 | + FORMPrincipal.PNBBSaldoDoMes.Caption := FormatDateTime('-hh:nn',FDTASaldosSaldoMensal.Value / 24 / 60); | |
134 | + FORMPrincipal.PNBBSaldoDoMes.Font.Color := clRed; | |
135 | + end | |
136 | + end | |
137 | + else | |
138 | + FORMPrincipal.PNBBSaldoDoMes.Caption := ' 00:00'; | |
139 | +end; | |
140 | + | |
90 | 141 | procedure TDAMOPrincipal.Reset; |
91 | 142 | var |
92 | 143 | H: Word; |
@@ -189,18 +240,41 @@ | ||
189 | 240 | Result := StringReplace(Result,'-','',[rfReplaceAll]); |
190 | 241 | end; |
191 | 242 | |
192 | -procedure TDAMOPrincipal.ObterSaldos(AAnoInicial: Word = 0; AMesInicial: Byte = 0); | |
243 | +procedure TDAMOPrincipal.AtualizarSaldoAtual; | |
193 | 244 | begin |
194 | - FullBalance(FORMPrincipal.Handle | |
195 | - ,Configuracoes.Ambiente = aProducao | |
196 | - ,LimparCPF(Configuracoes.CPF) | |
197 | - ,FORMPrincipal.LAEDSenha.Text // Para não ter que decodificar a senha novamente | |
198 | - ,Configuracoes.Matricula | |
199 | - ,DoMonthBalance | |
200 | - ,AAnoInicial | |
201 | - ,AMesInicial); | |
245 | + if Application.MessageBox('Isso vai atualizar o saldo do mês/ano atualmente '+ | |
246 | + 'sendo exibido com as informações recentes, a partir do sistema de sistema o'+ | |
247 | + 'ficial (Controle de frequência). Isso pode demorar um pouco dependendo do q'+ | |
248 | + 'uão distante o mês se encontra do mês atual. Tem certeza?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES then | |
249 | + AtualizarSaldos(StrToInt(FORMPrincipal.CBBXYears.Text),Succ(FORMPrincipal.TASEMonths.TabIndex)); | |
202 | 250 | end; |
203 | 251 | |
252 | +procedure TDAMOPrincipal.AtualizarSaldoGlobal; | |
253 | +begin | |
254 | + if Application.MessageBox('Isso vai atualizar o saldo global, isto é, o sald'+ | |
255 | + 'o de todos os meses disponíveis desde a implantação do Controle de Frequênc'+ | |
256 | + 'ia. Este procedimento pode demorar alguns minutos. Tem certeza?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES then | |
257 | + AtualizarSaldos; | |
258 | +end; | |
259 | + | |
260 | +procedure TDAMOPrincipal.AtualizarSaldos(AAnoInicial: Word = 0; AMesInicial: Byte = 0); | |
261 | +begin | |
262 | + Screen.Cursor := crHourGlass; | |
263 | + try | |
264 | + FullBalance(FORMPrincipal.Handle | |
265 | + ,Configuracoes.Ambiente = aProducao | |
266 | + ,LimparCPF(Configuracoes.CPF) | |
267 | + ,FORMPrincipal.LAEDSenha.Text // Para não ter que decodificar a senha novamente | |
268 | + ,Configuracoes.Matricula | |
269 | + ,DoMonthBalance | |
270 | + ,AAnoInicial | |
271 | + ,AMesInicial); | |
272 | + finally | |
273 | + FDTASaldos.Refresh; | |
274 | + Screen.Cursor := crDefault; | |
275 | + end; | |
276 | +end; | |
277 | + | |
204 | 278 | procedure TDAMOPrincipal.OpenTables; |
205 | 279 | begin |
206 | 280 | FDTAEventos.Open; |
@@ -233,10 +307,19 @@ | ||
233 | 307 | end; |
234 | 308 | |
235 | 309 | procedure TDAMOPrincipal.DoMonthBalance(AMes: Byte; AAno: Word; ASaldos: TSaldos); |
310 | +var | |
311 | + i: Byte; | |
236 | 312 | begin |
237 | 313 | // A cada execução deste manipulador, nós obtivemos as informações completas |
238 | 314 | // do mês e do ano, portanto podemos apagar todos os registros, pois todos |
239 | 315 | // serão reinseridos |
316 | + FDCO.ExecSQL('delete from saldos where ano = :ano and mes = :mes',[AAno,AMes],[ftWord,ftByte]); | |
317 | + | |
318 | + // O array ASaldos tem 32 elementos. O elemento zero é o saldo do mês, e os | |
319 | + // elementos de 1 até a quantidade de dias no mês possuem o saldo de cada dia. | |
320 | + // Aqui estamos inserido cada um dos saldos disponíveis | |
321 | + for i := 1 to DaysInAMonth(AAno,AMes) do | |
322 | + FDCO.ExecSQL('insert into saldos values(:ano,:mes,:dia,:saldo)',[AAno,AMes,i,ASaldos[i]],[ftWord,ftByte,ftByte,ftSmallint]); | |
240 | 323 | end; |
241 | 324 | |
242 | 325 | procedure TDAMOPrincipal.EuJaExisto; |
@@ -277,6 +360,12 @@ | ||
277 | 360 | Text := FormatDateTime('-hh:nn',Sender.AsInteger / 24 / 60) |
278 | 361 | end; |
279 | 362 | |
363 | +procedure TDAMOPrincipal.FDTASaldosSaldoMensalGetText(Sender: TField; var Text: string; DisplayText: Boolean); | |
364 | +begin | |
365 | + if DisplayText then | |
366 | + ObterSaldoMensal; | |
367 | +end; | |
368 | + | |
280 | 369 | procedure TDAMOPrincipal.TMERTimer(Sender: TObject); |
281 | 370 | var |
282 | 371 | Data: String; |
@@ -8,7 +8,7 @@ | ||
8 | 8 | Vcl.StdCtrls, Vcl.OleCtrls, Vcl.ExtCtrls, Vcl.ComCtrls, |
9 | 9 | KRK.Vcl.ExtCtrls, Vcl.Buttons, UDAMOPrincipal, |
10 | 10 | Vcl.Grids, Vcl.ValEdit, UPngBitBtn, UPngSpeedButton, Data.DB, Vcl.DBGrids, |
11 | - Vcl.Samples.Spin, Vcl.Tabs; | |
11 | + Vcl.Samples.Spin, Vcl.Tabs, Vcl.DBCtrls; | |
12 | 12 | |
13 | 13 | type |
14 | 14 | TWMWTSSessionChange = record |
@@ -52,10 +52,11 @@ | ||
52 | 52 | CBBXYears: TComboBox; |
53 | 53 | LABEAno: TLabel; |
54 | 54 | LABEMonthBalance: TLabel; |
55 | - LABEMonthBalanceValue: TLabel; | |
56 | 55 | LABEGlobalBalance: TLabel; |
57 | - LABEGlobalBalanceValue: TLabel; | |
58 | - Button2: TButton; | |
56 | + PngSpeedButton1: TPngSpeedButton; | |
57 | + PNBBSaldoGlobal: TPngBitBtn; | |
58 | + PNBBSaldoDoMes: TPngBitBtn; | |
59 | + DBText1: TDBText; | |
59 | 60 | procedure BUTNEntradaClick(Sender: TObject); |
60 | 61 | procedure BUTNSaidaClick(Sender: TObject); |
61 | 62 | procedure FormCreate(Sender: TObject); |
@@ -69,7 +70,8 @@ | ||
69 | 70 | procedure TASEMonthsClick(Sender: TObject); |
70 | 71 | procedure FormShow(Sender: TObject); |
71 | 72 | procedure CBBXYearsChange(Sender: TObject); |
72 | - procedure Button2Click(Sender: TObject); | |
73 | + procedure PNBBSaldoDoMesClick(Sender: TObject); | |
74 | + procedure PNBBSaldoGlobalClick(Sender: TObject); | |
73 | 75 | private |
74 | 76 | { Private declarations } |
75 | 77 | FAcaoAutomatica: Boolean; |
@@ -161,11 +163,6 @@ | ||
161 | 163 | end; |
162 | 164 | end; |
163 | 165 | |
164 | -procedure TFORMPrincipal.Button2Click(Sender: TObject); | |
165 | -begin | |
166 | - DAMOPrincipal.ObterSaldos; | |
167 | -end; | |
168 | - | |
169 | 166 | procedure TFORMPrincipal.CBBXYearsChange(Sender: TObject); |
170 | 167 | begin |
171 | 168 | DAMOPrincipal.AplicarFiltro; |
@@ -252,7 +249,7 @@ | ||
252 | 249 | begin |
253 | 250 | TASHCiCo.TabVisible := False; |
254 | 251 | TASHEvents.TabVisible := False; |
255 | -// TASHBalance.TabVisible := False; | |
252 | + TASHBalance.TabVisible := False; | |
256 | 253 | end; |
257 | 254 | end; |
258 | 255 |
@@ -270,6 +267,7 @@ | ||
270 | 267 | procedure TFORMPrincipal.FormShow(Sender: TObject); |
271 | 268 | begin |
272 | 269 | DAMOPrincipal.PreencherComboAnos; |
270 | + DAMOPrincipal.ObterSaldoGlobal; | |
273 | 271 | TASEMonths.TabIndex := Pred(MonthOf(Now)) |
274 | 272 | end; |
275 | 273 |
@@ -283,6 +281,16 @@ | ||
283 | 281 | DAMOPrincipal.CheckStatusAndUpdateGUI(DAMOPrincipal.LimparCPF(KRLECPF.Text),LAEDSenha.Text); |
284 | 282 | end; |
285 | 283 | |
284 | +procedure TFORMPrincipal.PNBBSaldoDoMesClick(Sender: TObject); | |
285 | +begin | |
286 | + DAMOPrincipal.AtualizarSaldoAtual; | |
287 | +end; | |
288 | + | |
289 | +procedure TFORMPrincipal.PNBBSaldoGlobalClick(Sender: TObject); | |
290 | +begin | |
291 | + DAMOPrincipal.AtualizarSaldoGlobal; | |
292 | +end; | |
293 | + | |
286 | 294 | procedure TFORMPrincipal.TASEMonthsClick(Sender: TObject); |
287 | 295 | begin |
288 | 296 | DAMOPrincipal.AplicarFiltro; |