Skip to content

Commit 433c1df

Browse files
committed
reformulación completa de fn6B0
1 parent d090a15 commit 433c1df

1 file changed

Lines changed: 63 additions & 184 deletions

File tree

  • ede/ede/validation_functions/fn6_registro_control_mensual

ede/ede/validation_functions/fn6_registro_control_mensual/fn6B0.py

Lines changed: 63 additions & 184 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,15 @@ def fn6B0(conn, return_dict):
2424
]
2525
"""
2626
_r = False
27-
_rightList = []
27+
asistencias_tachadas = []
2828
try:
29-
_rightList = ejecutar_sql(conn, """--sql
30-
WITH RECURSIVE cte_Attendance (RoleAttendanceEventId, OrganizationPersonRoleId, RUN, Fecha, RecordEndDateTime) AS (
31-
SELECT
29+
asistencias_tachadas = ejecutar_sql(conn, """--sql
30+
SELECT
3231
rae.RoleAttendanceEventId
3332
,rae.OrganizationPersonRoleId
3433
,pid.Identifier as 'RUN'
3534
,rae.Date
36-
,rae.RecordEndDateTime
35+
,rae.RecordEndDateTime,*
3736
FROM RoleAttendanceEvent rae
3837
JOIN OrganizationPersonRole opr
3938
on rae.OrganizationPersonRoleId = opr.OrganizationPersonRoleId
@@ -49,93 +48,29 @@ def fn6B0(conn, return_dict):
4948
ON opr.RoleId = rol_e.RoleId
5049
AND rol_e.Name IN ('Estudiante')
5150
WHERE
52-
rae.RecordEndDateTime IS NOT NULL
53-
AND
54-
rae.RecordStartDateTime IS NOT NULL
55-
AND
56-
rae.oprIdRatificador IS NULL
57-
AND
58-
rae.firmaRatificador IS NULL
59-
AND
60-
rae.fechaRatificador IS NULL
61-
AND
62-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
63-
rae.Date REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
64-
AND
65-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
66-
rae.digitalRandomKeyDate REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
67-
68-
UNION ALL
69-
70-
SELECT
71-
rae.RoleAttendanceEventId
72-
,rae.OrganizationPersonRoleId
73-
,pid.Identifier as 'RUN'
74-
,rae.Date, rae.RecordEndDateTime
75-
FROM RoleAttendanceEvent rae
76-
JOIN cte_Attendance cte
77-
ON cte.RecordEndDateTime = rae.Date
78-
AND cte.OrganizationPersonRoleId = rae.OrganizationPersonRoleId
51+
rae.RecordEndDateTime IS NOT NULL
7952
AND rae.RecordStartDateTime IS NOT NULL
80-
JOIN OrganizationPersonRole opr
81-
on rae.OrganizationPersonRoleId = opr.OrganizationPersonRoleId
82-
JOIN RefAttendanceEventType raet
83-
ON rae.RefAttendanceEventTypeId = raet.RefAttendanceEventTypeId
84-
AND raet.Code IN ('DailyAttendance','ClassSectionAttendance')
85-
JOIN PersonIdentifier pid
86-
ON opr.personid = pid.personid
87-
JOIN RefPersonIdentificationSystem rpis
88-
ON pid.RefPersonIdentificationSystemId = rpis.RefPersonIdentificationSystemId
89-
AND rpis.Code IN ('RUN')
90-
JOIN role rol_e
91-
ON opr.RoleId = rol_e.RoleId
92-
AND rol_e.Name IN ('Estudiante')
93-
JOIN OrganizationPersonRole opr_ratificador
94-
ON rae.oprIdRatificador = opr_ratificador.OrganizationPersonRoleId
95-
JOIN role rol_ratificador
96-
ON opr_ratificador.RoleId = rol_ratificador.RoleId
97-
AND rol_ratificador.Name IN ('Encargado de la asistencia','Director(a)')
98-
WHERE
99-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
100-
rae.Date REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
101-
AND
102-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
103-
rae.digitalRandomKeyDate REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
104-
AND
105-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
106-
rae.fechaRatificador REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
107-
AND
108-
-- Agrega a la lista todos los registros que no cumplan con la expresión regular
109-
rae.digitalRandomKey REGEXP '^[0-9]{6}([-]{1}[0-9kK]{1})?$'
110-
AND
111-
-- Agrega a la lista todos los registros que no cumplan con la expresión regular
112-
rae.firmaRatificador REGEXP '^[0-9]{6}([-]{1}[0-9kK]{1})?$'
113-
114-
)
115-
SELECT
116-
group_concat(RoleAttendanceEventId) as 'roleAttendanceEventIds'
117-
,OrganizationPersonRoleId
118-
,RUN
119-
,min(Fecha) as 'PRIMERA_FECHA_REGISTRADA'
120-
,max(fecha) as 'ULTIMA_FECHA_REGISTRADA'
121-
FROM cte_Attendance
12253
""")
123-
except:
124-
logger.info(f"Resultado: {_rightList} -> {str(e)}")
125-
126-
_errorsList = []
54+
except Exception as e:
55+
logger.info(f"S/Datos")
56+
return_dict[getframeinfo(currentframe()).function] = True
57+
logger.info(f"{current_process().name} finalizando...")
58+
logger.info(f"Resultado: {asistencias_tachadas} -> {str(e)}")
59+
return True
60+
if len(asistencias_tachadas) == 0:
61+
logger.info(f"S/Datos")
62+
return_dict[getframeinfo(currentframe()).function] = True
63+
logger.info(f"{current_process().name} finalizando...")
64+
return True
65+
asistencias_correctamente_corregidas = []
12766
try:
128-
_errorsList = ejecutar_sql(conn, """--sql
129-
SELECT *
130-
FROM RoleAttendanceEvent rae
131-
JOIN (
132-
WITH RECURSIVE cte_Attendance (RoleAttendanceEventId, OrganizationPersonRoleId, RUN, Fecha, RecordEndDateTime) AS (
133-
SELECT
67+
asistencias_correctamente_corregidas = ejecutar_sql(conn, """--sql
68+
SELECT
13469
rae.RoleAttendanceEventId
13570
,rae.OrganizationPersonRoleId
13671
,pid.Identifier as 'RUN'
13772
,rae.Date
138-
,rae.RecordEndDateTime
73+
,rae.RecordEndDateTime,*
13974
FROM RoleAttendanceEvent rae
14075
JOIN OrganizationPersonRole opr
14176
on rae.OrganizationPersonRoleId = opr.OrganizationPersonRoleId
@@ -150,123 +85,67 @@ def fn6B0(conn, return_dict):
15085
JOIN role rol_e
15186
ON opr.RoleId = rol_e.RoleId
15287
AND rol_e.Name IN ('Estudiante')
88+
JOIN RoleAttendanceEvent raeReal
89+
ON raeReal.Date = rae.RecordEndDateTime --para conectar la asistencia errada con la real
90+
JOIN OrganizationPersonRole opr_ratificador
91+
ON rae.oprIdRatificador = opr_ratificador.OrganizationPersonRoleId
92+
JOIN role rol_ratificador
93+
ON opr_ratificador.RoleId = rol_ratificador.RoleId
94+
AND rol_ratificador.Name IN ('Encargado de la asistencia','Director(a)')
15395
WHERE
15496
rae.RecordEndDateTime IS NOT NULL
155-
AND
156-
rae.RecordStartDateTime IS NOT NULL
157-
AND
158-
rae.oprIdRatificador IS NULL
159-
AND
160-
rae.firmaRatificador IS NULL
161-
AND
162-
rae.fechaRatificador IS NULL
97+
AND rae.RecordStartDateTime IS NOT NULL
98+
AND rae.oprIdRatificador IS NOT NULL
99+
AND rae.firmaRatificador IS NOT NULL
100+
AND rae.fechaRatificador IS NOT NULL
163101
AND
164102
-- Agrega a la lista todos los registros que cumplen con la expresión regular
165103
rae.Date REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
166104
AND
167105
-- Agrega a la lista todos los registros que cumplen con la expresión regular
168106
rae.digitalRandomKeyDate REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
169-
170-
UNION ALL
171-
172-
SELECT
173-
rae.RoleAttendanceEventId
174-
,rae.OrganizationPersonRoleId
175-
,pid.Identifier as 'RUN'
176-
,rae.Date, rae.RecordEndDateTime
177-
FROM RoleAttendanceEvent rae
178-
JOIN cte_Attendance cte
179-
ON cte.RecordEndDateTime = rae.Date
180-
AND cte.OrganizationPersonRoleId = rae.OrganizationPersonRoleId
181-
AND rae.RecordStartDateTime IS NOT NULL
182-
JOIN OrganizationPersonRole opr
183-
on rae.OrganizationPersonRoleId = opr.OrganizationPersonRoleId
184-
JOIN RefAttendanceEventType raet
185-
ON rae.RefAttendanceEventTypeId = raet.RefAttendanceEventTypeId
186-
AND raet.Code IN ('DailyAttendance','ClassSectionAttendance')
187-
JOIN PersonIdentifier pid
188-
ON opr.personid = pid.personid
189-
JOIN RefPersonIdentificationSystem rpis
190-
ON pid.RefPersonIdentificationSystemId = rpis.RefPersonIdentificationSystemId
191-
AND rpis.Code IN ('RUN')
192-
JOIN role rol_e
193-
ON opr.RoleId = rol_e.RoleId
194-
AND rol_e.Name IN ('Estudiante')
195-
JOIN OrganizationPersonRole opr_ratificador
196-
ON rae.oprIdRatificador = opr_ratificador.OrganizationPersonRoleId
197-
JOIN role rol_ratificador
198-
ON opr_ratificador.RoleId = rol_ratificador.RoleId
199-
AND rol_ratificador.Name IN ('Encargado de la asistencia','Director(a)')
200-
WHERE
201-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
202-
rae.Date REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
203107
AND
204-
-- Agrega a la lista todos los registros que cumplen con la expresión regular
205-
rae.digitalRandomKeyDate REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
206-
AND
207108
-- Agrega a la lista todos los registros que cumplen con la expresión regular
208109
rae.fechaRatificador REGEXP '^(19|2[0-9])[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])([T ])(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?((\+|\-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))$'
209110
AND
210111
-- Agrega a la lista todos los registros que no cumplan con la expresión regular
211112
rae.digitalRandomKey REGEXP '^[0-9]{6}([-]{1}[0-9kK]{1})?$'
212113
AND
213114
-- Agrega a la lista todos los registros que no cumplan con la expresión regular
214-
rae.firmaRatificador REGEXP '^[0-9]{6}([-]{1}[0-9kK]{1})?$'
215-
216-
)
217-
SELECT
218-
group_concat(RoleAttendanceEventId) as 'roleAttendanceEventIds'
219-
,OrganizationPersonRoleId
220-
,RUN
221-
,min(Fecha) as 'PRIMERA_FECHA_REGISTRADA'
222-
,max(fecha) as 'ULTIMA_FECHA_REGISTRADA'
223-
FROM cte_Attendance
224-
) result ON (result.roleAttendanceEventIds) NOT LIKE '%' || rae.RoleAttendanceEventId || '%'
225-
LEFT JOIN OrganizationPersonRole opr
226-
on rae.OrganizationPersonRoleId = opr.OrganizationPersonRoleId
227-
LEFT JOIN RefAttendanceEventType raet
228-
ON rae.RefAttendanceEventTypeId = raet.RefAttendanceEventTypeId
229-
AND raet.Code IN ('DailyAttendance','ClassSectionAttendance')
230-
LEFT JOIN role rol_e
231-
ON opr.RoleId = rol_e.RoleId
232-
AND rol_e.Name IN ('Estudiante')
233-
WHERE
234-
rae.RecordEndDateTime IS NOT NULL
235-
OR
236-
rae.oprIdRatificador IS NOT NULL
237-
OR
238-
rae.firmaRatificador IS NOT NULL
239-
OR
240-
rae.fechaRatificador IS NOT NULL
241-
OR
242-
rae.RecordStartDateTime != Date
243-
""")
115+
rae.firmaRatificador REGEXP '^[0-9]{6}([-]{1}[0-9kK]{1})?$'
116+
""")
244117
except:
245-
logger.info(f"Resultado: {_errorsList} -> {str(e)}")
118+
logger.error(f"NO se pudo ejecutar la consulta de entrega de informaciÓn: {str(e)}")
119+
logger.error(f"Rechazado")
120+
return_dict[getframeinfo(currentframe()).function] = False
121+
logger.info(f"{current_process().name} finalizando...")
122+
return False
246123

247124
try:
248-
_ids = (list([m[0] for m in _rightList if m[0] is not None]))
249-
if(not _errorsList and not _ids):
250-
logger.info(f"S/Datos")
251-
return_dict[getframeinfo(currentframe()).function] = True
252-
logger.info(f"{current_process().name} finalizando...")
253-
return True
254-
255-
if(not _errorsList and _ids):
256-
logger.info(f"APROBADO")
257-
return_dict[getframeinfo(currentframe()).function] = True
258-
logger.info(f"{current_process().name} finalizando...")
259-
return True
125+
if len(asistencias_tachadas) == len(asistencias_correctamente_corregidas):
126+
logger.info(f"Aprobado")
127+
return_dict[getframeinfo(currentframe()).function] = True
128+
logger.info(f"{current_process().name} finalizando...")
129+
return True
130+
else:
131+
_ids_correctos = (list([m[0] for m in asistencias_correctamente_corregidas if m[0] is not None]))
132+
_ids_incorrectos = (list([m[0] for m in asistencias_tachadas if m[0] is not None and m[0] not in _ids_correctos]))
133+
if len(_ids_incorrectos) > 0:
134+
logger.error(f"Los siguientes roleAttendanceEvent Ids estan con problemas: {str(_ids_incorrectos)}")
135+
logger.error(f"Rechazado")
136+
return_dict[getframeinfo(currentframe()).function] = False
137+
logger.info(f"{current_process().name} finalizando...")
138+
return False
139+
else:
140+
logger.error(f"Algo extraño sucedió, favor reportar al foro")
141+
logger.error(f"Rechazado")
142+
return_dict[getframeinfo(currentframe()).function] = False
143+
logger.info(f"{current_process().name} finalizando...")
144+
return False
260145

261-
roleAttendanceEventIds = (list([m[0] for m in _errorsList if m[0] is not None]))
262-
logger.error(f"Los siguientes roleAttendanceEvent Ids estan con problemas: {str(roleAttendanceEventIds)}")
263-
logger.error(f"Rechazado")
264-
return_dict[getframeinfo(currentframe()).function] = False
265-
logger.info(f"{current_process().name} finalizando...")
266-
return False
267146
except Exception as e:
268-
logger.error(f"NO se pudo ejecutar la consulta de entrega de informaciÓn: {str(e)}")
269-
logger.error(f"Rechazado")
270-
return_dict[getframeinfo(currentframe()).function] = False
271-
logger.info(f"{current_process().name} finalizando...")
272-
return False
147+
logger.error(f"NO se pudo ejecutar la consulta de entrega de informaciÓn: {str(e)}")
148+
logger.error(f"Rechazado")
149+
return_dict[getframeinfo(currentframe()).function] = False
150+
logger.info(f"{current_process().name} finalizando...")
151+
return False

0 commit comments

Comments
 (0)