• R/O
  • SSH
  • HTTPS

cico: Commit


Commit MetaInfo

Revisión7 (tree)
Tiempo2019-12-14 06:07:49
Autorderekwildstar

Log Message

Criada função que detecta se o usuário está dentro ou fora (IsCheckedIn)
Desenvolvidas (mas ainda não usadas) duas consultas para incrementar o cico online

Cambiar Resumen

Diferencia incremental

--- trunk/client/src/cicoda/UDAMOPrincipal.pas (revision 6)
+++ trunk/client/src/cicoda/UDAMOPrincipal.pas (revision 7)
@@ -10,7 +10,7 @@
1010 FireDAC.VCLUI.Wait, Data.DB, FireDAC.Comp.Client, FireDAC.Phys.SQLite,
1111 FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, FireDAC.Stan.Param,
1212 FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet,
13- Soap.InvokeRegistry, Soap.Rio, Soap.SOAPHTTPClient;
13+ Soap.InvokeRegistry, Soap.Rio, Soap.SOAPHTTPClient, UCiCo;
1414
1515 type
1616 TTipoDeResposta = (tdrFalha,tdrAviso,tdrSucesso);
@@ -41,6 +41,7 @@
4141 procedure GUIToConfig;
4242 procedure ConnectToDataBase;
4343 procedure Responder(AMensagemAProcessar: TMensagemAProcessar; ATexto: string; ATipoDeResposta: TTipoDeResposta);
44+ function IsCheckedIn(ACheckInChecOutInfo: TCheckInChecOutInfo): Boolean;
4445 public
4546 { Public declarations }
4647 procedure RealizarProcessamentoDeMensagens;
@@ -49,7 +50,7 @@
4950 implementation
5051
5152 uses
52- UFORMPrincipal, MaskUtils, Windows, DateUtils, UCiCo, UConfiguracoes;
53+ UFORMPrincipal, MaskUtils, Windows, DateUtils, UConfiguracoes;
5354
5455 const
5556 TIMEOUT_INTERVAL = 60; // segundos
@@ -231,6 +232,16 @@
231232 end;
232233 end;
233234
235+// Retorna true se o estado atual for Checked-In (Se o funcionário está dentro)
236+// Retorna false se o estado atual for Checked-Out (Se o funcionário está fora)
237+function TDAMOPrincipal.IsCheckedIn(ACheckInChecOutInfo: TCheckInChecOutInfo): Boolean;
238+begin
239+ // 1. Histórico > 0 e Último registro = ci => True (Checked-In)
240+ // 2. Histórico > 0 e Último registro = co => False (Checked-Out)
241+ // 3. Histórico = 0 => False (Checked-Out)
242+ Result := (Length(ACheckInChecOutInfo.History) > 0) and (ACheckInChecOutInfo.History[High(ACheckInChecOutInfo.History)].Direction = 'ci')
243+end;
244+
234245 procedure TDAMOPrincipal.ProcessarMensagens;
235246 var
236247 MAP: TMensagemAProcessar;
@@ -261,7 +272,7 @@
261272 // de frequência, permitindo assim o envio de uma mensagem que
262273 // duplicaria a situação do usuário (dois registros de entrada). Caso
263274 // isso aconteça...
264- if (Length(CHI.History) > 0) and (CHI.History[High(CHI.History)].Direction = 'ci') then
275+ if IsCheckedIn(CHI) then
265276 begin
266277 // ...envia uma mensagem de aviso a respeito do Check-In já ter sido
267278 // realizado anteriormente e logo na sequencia uma segunda mensagem,
@@ -298,7 +309,7 @@
298309 // de frequência, permitindo assim o envio de uma mensagem que
299310 // duplicaria a situação do usuário (dois registros de saída). Caso
300311 // isso aconteça...
301- if (Length(CHI.History) > 0) and (CHI.History[High(CHI.History)].Direction = 'co') then
312+ if not IsCheckedIn(CHI) then
302313 begin
303314 // ...envia uma mensagem de aviso a respeito do Check-Out já ter
304315 // sido realizado anteriormente e logo na sequencia uma segunda
--- trunk/server/cico.php (revision 6)
+++ trunk/server/cico.php (revision 7)
@@ -47,51 +47,103 @@
4747 } else if (isset($_POST["ss"])) {
4848
4949 } else if (isset($_POST["ms"])) {
50- if (file_exists("./db/cico.db")) {
51- $db = new PDO("sqlite:./db/cico.db",null,null,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
52- try {
53- $sql = <<<EOS
54- select id as idrequisicao
55- , null as idresposta
56- , de
57- , para
58- , envio
59- , mensagem
60- , processada
61- from mensagens
62- where de = '$cpfmatricula'
63-union
64- select idpai as idrequisicao
65- , id as idresposta
66- , de
67- , para
68- , envio
69- , mensagem
70- , null as processada
71- from mensagens
72- where para = '$cpfmatricula'
73-EOS;
74- $resultSet = $db->query($sql);
75- $resposta = <<<EOH
76- <table class="status" border="1">
77- <tr>
78- <td>idrequisicao</td><td>idresposta</td><td>de</td><td>para</td><td>envio</td><td>mensagem</td><td>processada</td>
79- </tr>
80-EOH;
81- while ($row = $resultSet->fetchObject()) {
82- $resposta .= <<<EOH
83- <tr>
84- <td>{$row->idrequisicao}</td><td>{$row->idresposta}</td><td>{$row->de}</td><td>{$row->para}</td><td>{$row->envio}</td><td>{$row->mensagem}</td><td>{$row->processada}</td>
85- </tr>
86-EOH;
87- }
88- $resposta .= <<<EOH
89- </table>
90-EOH;
91- } finally {
92- $db = null;
93- }
94- }
50+
51+
52+/*
53+ último status confirmado. Se nada for retornado, nenhum status foi confirmado
54+ e consequentemente o status atual é indefinido
55+ removendo a condição de feito mostra um historico geral de mensagens
56+ processadas (é necessário remover o order by e o limit)
57+ select men.id as idRequisicao
58+ , men.de as idUsuario
59+ , men.mensagem as requisicao
60+ , men.envio as enviadaEm
61+ , men2.id as idResposta
62+ , men2.mensagem as resposta
63+ , men2.envio as respondidaEm
64+ from mensagens men
65+ join mensagens men2 on men.id = men2.idpai
66+ where men.de = '023227194121842951'
67+ and men.processada = 1
68+ and men2.mensagem = 'Feito!' -- remova pra obter um historico geral
69+order by men.id desc
70+ limit 1
71+
72+
73+ última mensagem em aberto, ou seja, ainda sem resposta. remover order by e
74+ limit retorna uma visão geral da última mensagem que ainda não foi respondida,
75+ incluindo todos os erros
76+ select men.id as idRequisicao
77+ , men.de as idUsuario
78+ , men.mensagem as requisicao
79+ , men.envio as enviadaEm
80+ , men2.id as idResposta
81+ , men2.mensagem as resposta
82+ , men2.envio as respondidaEm
83+ from mensagens men
84+ join mensagens men2 on men.id = men2.idpai
85+ where men.de = '023227194151842951'
86+ and men.processada = 0
87+order by men2.id desc
88+ limit 1
89+
90+*/
91+
92+
93+// O bloco abaixo mostra todo o histórico de mensagens, talvez seja
94+// interressante mostrar isso em forma de árvore, já que uma mensagem pode receber várias respostas
95+// if (file_exists("./db/cico.db")) {
96+// $db = new PDO("sqlite:./db/cico.db",null,null,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
97+// try {
98+// $sql = <<<EOS
99+// select id as idrequisicao
100+// , null as idresposta
101+// , de
102+// , para
103+// , envio
104+// , mensagem
105+// , processada
106+// from mensagens
107+// where de = '$cpfmatricula'
108+//union
109+// select idpai as idrequisicao
110+// , id as idresposta
111+// , de
112+// , para
113+// , envio
114+// , mensagem
115+// , null as processada
116+// from mensagens
117+// where para = '$cpfmatricula'
118+//EOS;
119+// $resultSet = $db->query($sql);
120+// $resposta = <<<EOH
121+// <table class="status" border="1">
122+// <tr>
123+// <td>idrequisicao</td><td>idresposta</td><td>de</td><td>para</td><td>envio</td><td>mensagem</td><td>processada</td>
124+// </tr>
125+//EOH;
126+// while ($row = $resultSet->fetchObject()) {
127+// $resposta .= <<<EOH
128+// <tr>
129+// <td>{$row->idrequisicao}</td><td>{$row->idresposta}</td><td>{$row->de}</td><td>{$row->para}</td><td>{$row->envio}</td><td>{$row->mensagem}</td><td>{$row->processada}</td>
130+// </tr>
131+//EOH;
132+// }
133+// $resposta .= <<<EOH
134+// </table>
135+//EOH;
136+// } finally {
137+// $db = null;
138+// }
139+// }
140+
141+
142+
143+
144+
145+
146+
95147 }
96148 }
97149 } else {
Show on old repository browser