Skip to content

Commit

Permalink
Merge pull request nemesiscodex#98 from nemesiscodex/dncp_estados_res…
Browse files Browse the repository at this point in the history
…umen

Dncp estados resumen
  • Loading branch information
nemesiscodex committed Jun 5, 2015
2 parents 4ff4fc9 + 483c635 commit 3b3d4f0
Show file tree
Hide file tree
Showing 3 changed files with 191 additions and 48 deletions.
207 changes: 166 additions & 41 deletions openfonacide/resumen.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,21 @@ def generar_query(params):
periodo = params.get('anios')
ubicaciones = params.get('ubicaciones')
prioridades = params.get('prioridades')
estados = params.get('estado')
dncp = params.get('dncp')

if periodo is None:
periodo = '2015'

if estados is None:
estados = {'estado': None, 'informes': False}
else:
if not estados.get('estado') or estados.get('estado') not in ('priorizado', 'planificado', 'adjudicado', 'terminado'):
estados['estado'] = None

if dncp is None:
dncp = {'adjudicaciones': False, 'planificaciones': False}

if prioridades is None:
prioridades = {'aulas': True, 'mobiliarios': True, 'sanitarios': True, 'otros': True}

Expand All @@ -26,66 +39,106 @@ def generar_query(params):
ret_beneficiarios_pedidos = Queue()
ret_top_establecimientos = Queue()
ret_tipo_requerimiento = Queue()
p1 = Process(target=elegibles, args=(periodo, prioridades, ubicaciones, ret_elegibles))
p1 = Process(target=elegibles, args=(periodo, prioridades, ubicaciones, estados, dncp, ret_elegibles))
p1.start()
p2 = Process(target=beneficiarios_pedidos, args=(periodo, prioridades, ubicaciones, ret_beneficiarios_pedidos))
p2 = Process(target=beneficiarios_pedidos, args=(periodo, prioridades, ubicaciones, estados, dncp, ret_beneficiarios_pedidos))
p2.start()
p3 = Process(target=top_establecimientos, args=(periodo, prioridades, ubicaciones, ret_top_establecimientos))
p3.start()
p4 = Process(target=tipo_requerimiento, args=(periodo, prioridades, ubicaciones, ret_tipo_requerimiento))
# p3 = Process(target=top_establecimientos, args=(periodo, prioridades, ubicaciones, ret_top_establecimientos))
# p3.start()
p4 = Process(target=tipo_requerimiento, args=(periodo, prioridades, ubicaciones, estados, dncp, ret_tipo_requerimiento))
p4.start()
p1.join()
p2.join()
p3.join()
# p3.join()
p4.join()
dict_prioridades['estados'] = estados
dict_prioridades['ubicaciones'] = ubicaciones
dict_prioridades['prioridades'] = prioridades
dict_prioridades['periodo'] = periodo
dict_prioridades['dncp'] = dncp
dict_prioridades['elegibles'] = ret_elegibles.get()
dict_prioridades['beneficiarios'] = ret_beneficiarios_pedidos.get()
dict_prioridades['top_establecimientos'] = ret_top_establecimientos.get()
# dict_prioridades['top_establecimientos'] = ret_top_establecimientos.get()
dict_prioridades['tipo_requerimiento'] = ret_tipo_requerimiento.get()
return dict_prioridades


def elegibles(periodo, prioridades, ubicaciones, ret):
def elegibles(periodo, prioridades, ubicaciones, estados, dncp, ret):
query = 'SELECT count(DISTINCT codigo_institucion) FROM ('
cursor = connection.cursor()
estado = estados.get('estado')
documentos = estados.get('informes')

query_join_institucion = ' JOIN openfonacide_institucion inst ON inst.codigo_institucion = %s.codigo_institucion '

query_dncp = ''
if dncp.get('adjudicaciones'):
query_dncp += ' JOIN openfonacide_institucion_adjudicaciones adju ON adju.institucion_id = inst.id '
if dncp.get('planificaciones'):
query_dncp += ' JOIN openfonacide_institucion_planificaciones planif ON planif.institucion_id = inst.id '

if len(query_dncp) > 0:
query_dncp = query_join_institucion + query_dncp

query_estado = ''
if estado and estado.lower() in ('priorizado', 'planificado', 'adjudicado', 'terminado'):
query_estado = " AND lower(estado_de_obra) = '%s' " % estado

query_documentos = ''
if documentos:
query_documentos = ' AND documento IS NOT NULL '

union = False
if prioridades.get('mobiliarios'):
query += ('SELECT DISTINCT codigo_institucion '
query += ('SELECT DISTINCT m.codigo_institucion '
'FROM openfonacide_mobiliario m '
'JOIN openfonacide_establecimiento es on m.codigo_establecimiento = es.codigo_establecimiento '
'WHERE m.periodo = \''+periodo + '\' ')
'JOIN openfonacide_establecimiento es on m.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'm'
query += ('WHERE m.periodo = \''+periodo + '\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if prioridades.get('aulas'):
if union:
query+= ' UNION '
query += ('SELECT DISTINCT codigo_institucion '
query += ('SELECT DISTINCT au.codigo_institucion '
'FROM openfonacide_espacio au '
'JOIN openfonacide_establecimiento es on au.codigo_establecimiento = es.codigo_establecimiento '
'WHERE au.periodo = \''+periodo + '\' '
'JOIN openfonacide_establecimiento es on au.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'au'
query += ('WHERE au.periodo = \''+periodo + '\' '
'AND au.nombre_espacio IS NULL ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if prioridades.get('otros'):
if union:
query+= ' UNION '
query += ('SELECT DISTINCT codigo_institucion '
query += ('SELECT DISTINCT o.codigo_institucion '
'FROM openfonacide_espacio o '
'JOIN openfonacide_establecimiento es on o.codigo_establecimiento = es.codigo_establecimiento '
'WHERE o.periodo = \''+periodo + '\' '
'JOIN openfonacide_establecimiento es on o.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'o'
query += ('WHERE o.periodo = \''+periodo + '\' '
'AND o.nombre_espacio IS NOT NULL ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if prioridades.get('sanitarios'):
if union:
query+= ' UNION '
query += ('SELECT DISTINCT codigo_institucion '
query += ('SELECT DISTINCT sa.codigo_institucion '
'FROM openfonacide_sanitario sa '
'JOIN openfonacide_establecimiento es on sa.codigo_establecimiento = es.codigo_establecimiento '
'WHERE sa.periodo = \''+periodo + '\' ')
'JOIN openfonacide_establecimiento es on sa.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'sa'
query += ('WHERE sa.periodo = \''+periodo + '\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
query += ') otros'
Expand All @@ -100,10 +153,32 @@ def elegibles(periodo, prioridades, ubicaciones, ret):
return


def beneficiarios_pedidos(periodo, prioridades, ubicaciones, ret):
def beneficiarios_pedidos(periodo, prioridades, ubicaciones, estados, dncp, ret):
union = False
cursor = connection.cursor()

estado = estados.get('estado')
documentos = estados.get('informes')

query_estado = ''
if estado and estado.lower() in ('priorizado', 'planificado', 'adjudicado', 'terminado'):
query_estado = " AND lower(estado_de_obra) = '%s' " % estado

query_documentos = ''
if documentos:
query_documentos = ' AND documento IS NOT NULL '

query_join_institucion = ' JOIN openfonacide_institucion inst ON inst.codigo_institucion = %s.codigo_institucion '

query_dncp = ''
if dncp.get('adjudicaciones'):
query_dncp += ' JOIN openfonacide_institucion_adjudicaciones adju ON adju.institucion_id = inst.id '
if dncp.get('planificaciones'):
query_dncp += ' JOIN openfonacide_institucion_planificaciones planif ON planif.institucion_id = inst.id '

if len(query_dncp) > 0:
query_dncp = query_join_institucion + query_dncp

query = ''
if prioridades.get('mobiliarios'):
query += ('SELECT \'Mobiliarios\' AS tipo, '
Expand All @@ -112,8 +187,12 @@ def beneficiarios_pedidos(periodo, prioridades, ubicaciones, ret):
'sum(CAST(numero_beneficiados AS INT)) AS beneficiados, '
'round(sum(CAST(numero_beneficiados AS INT)) / sum(CAST(cantidad_requerida AS FLOAT))) AS promedio '
'FROM openfonacide_mobiliario m '
'JOIN openfonacide_establecimiento es on m.codigo_establecimiento = es.codigo_establecimiento '
'WHERE cantidad_requerida ~ E\'^\\\\d+$\' AND numero_beneficiados ~ E\'^\\\\d+$\' AND periodo = \''+periodo+'\' ')
'JOIN openfonacide_establecimiento es on m.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'm'
query += ('WHERE cantidad_requerida ~ E\'^\\\\d+$\' AND numero_beneficiados ~ E\'^\\\\d+$\' AND m.periodo = \''+periodo+'\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if prioridades.get('aulas'):
Expand All @@ -125,10 +204,14 @@ def beneficiarios_pedidos(periodo, prioridades, ubicaciones, ret):
'sum(CAST(numero_beneficiados AS INT)) AS beneficiados, '
'round(sum(CAST(numero_beneficiados AS INT)) / sum(CAST(cantidad_requerida AS FLOAT))) AS promedio '
'FROM openfonacide_espacio au '
'JOIN openfonacide_establecimiento es on au.codigo_establecimiento = es.codigo_establecimiento '
'WHERE '
'JOIN openfonacide_establecimiento es on au.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'au'
query += ('WHERE '
'cantidad_requerida ~ E\'^\\\\d+$\' AND numero_beneficiados ~ E\'^\\\\d+$\' '
'AND periodo = \''+periodo+'\' AND nombre_espacio IS NULL ')
'AND au.periodo = \''+periodo+'\' AND nombre_espacio IS NULL ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if prioridades.get('otros'):
Expand All @@ -140,10 +223,14 @@ def beneficiarios_pedidos(periodo, prioridades, ubicaciones, ret):
'sum(CAST(numero_beneficiados AS INT)) AS beneficiados, '
'round(sum(CAST(numero_beneficiados AS INT)) / sum(CAST(cantidad_requerida AS FLOAT))) AS promedio '
'FROM openfonacide_espacio o '
'JOIN openfonacide_establecimiento es on o.codigo_establecimiento = es.codigo_establecimiento '
'WHERE '
'JOIN openfonacide_establecimiento es on o.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'o'
query += ('WHERE '
'cantidad_requerida ~ E\'^\\\\d+$\' AND numero_beneficiados ~ E\'^\\\\d+$\' '
'AND periodo = \''+periodo+'\' AND nombre_espacio IS NOT NULL ')
'AND o.periodo = \''+periodo+'\' AND nombre_espacio IS NOT NULL ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if prioridades.get('sanitarios'):
Expand All @@ -155,8 +242,12 @@ def beneficiarios_pedidos(periodo, prioridades, ubicaciones, ret):
'sum(CAST(numero_beneficiados AS INT)) AS beneficiados, '
'round(sum(CAST(numero_beneficiados AS INT)) / sum(CAST(cantidad_requerida AS FLOAT))) AS promedio '
'FROM openfonacide_sanitario sa '
'JOIN openfonacide_establecimiento es on sa.codigo_establecimiento = es.codigo_establecimiento '
'WHERE cantidad_requerida ~ E\'^\\\\d+$\' AND numero_beneficiados ~ E\'^\\\\d+$\' AND periodo = \''+periodo+'\' ')
'JOIN openfonacide_establecimiento es on sa.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'sa'
query += ('WHERE cantidad_requerida ~ E\'^\\\\d+$\' AND numero_beneficiados ~ E\'^\\\\d+$\' AND sa.periodo = \''+periodo+'\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
union = True
if query == '':
Expand Down Expand Up @@ -232,19 +323,45 @@ def top_establecimientos(periodo, prioridades, ubicaciones, ret):
ret.put(results)


def tipo_requerimiento(periodo, prioridades, ubicaciones, ret):
def tipo_requerimiento(periodo, prioridades, ubicaciones, estados, dncp, ret):
query = ''
cursor = connection.cursor()
union = False
estado = estados.get('estado')
documentos = estados.get('informes')

query_estado = ''
if estado and estado.lower() in ('priorizado', 'planificado', 'adjudicado', 'terminado'):
query_estado = " AND lower(estado_de_obra) = '%s' " % estado

query_documentos = ''
if documentos:
query_documentos = ' AND documento IS NOT NULL '

query_join_institucion = ' JOIN openfonacide_institucion inst ON inst.codigo_institucion = %s.codigo_institucion '

query_dncp = ''
if dncp.get('adjudicaciones'):
query_dncp += ' JOIN openfonacide_institucion_adjudicaciones adju ON adju.institucion_id = inst.id '
if dncp.get('planificaciones'):
query_dncp += ' JOIN openfonacide_institucion_planificaciones planif ON planif.institucion_id = inst.id '

if len(query_dncp) > 0:
query_dncp = query_join_institucion + query_dncp

if prioridades.get('otros'):
query += ('SELECT \'otros\' AS tipo, '
'count(*) AS pedidos, '
'sum(CAST(cantidad_requerida AS INT)) AS requerida, '
'tipo_requerimiento_infraestructura '
'FROM openfonacide_espacio o '
'JOIN openfonacide_establecimiento es on o.codigo_establecimiento = es.codigo_establecimiento '
'WHERE nombre_espacio IS NOT NULL AND cantidad_requerida ~ E\'^\\\\d+$\' '
'AND periodo = \'' + periodo + '\' ')
'JOIN openfonacide_establecimiento es on o.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'o'
query += ('WHERE nombre_espacio IS NOT NULL AND cantidad_requerida ~ E\'^\\\\d+$\' '
'AND o.periodo = \'' + periodo + '\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
query += ' GROUP BY tipo_requerimiento_infraestructura '
union = True
Expand All @@ -256,9 +373,13 @@ def tipo_requerimiento(periodo, prioridades, ubicaciones, ret):
'sum(CAST(cantidad_requerida AS INT)) AS requerida, '
'tipo_requerimiento_infraestructura '
'FROM openfonacide_espacio au '
'JOIN openfonacide_establecimiento es on au.codigo_establecimiento = es.codigo_establecimiento '
'WHERE nombre_espacio IS NULL AND cantidad_requerida ~ E\'^\\\\d+$\' '
'AND periodo = \'' + periodo + '\' ')
'JOIN openfonacide_establecimiento es on au.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'au'
query += ('WHERE nombre_espacio IS NULL AND cantidad_requerida ~ E\'^\\\\d+$\' '
'AND au.periodo = \'' + periodo + '\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
query += 'GROUP BY tipo_requerimiento_infraestructura '
union = True
Expand All @@ -270,9 +391,13 @@ def tipo_requerimiento(periodo, prioridades, ubicaciones, ret):
'sum(CAST(cantidad_requerida AS INT)) AS requerida, '
'tipo_requerimiento_infraestructura '
'FROM openfonacide_sanitario sa '
'JOIN openfonacide_establecimiento es on sa.codigo_establecimiento = es.codigo_establecimiento '
'WHERE cantidad_requerida ~ E\'^\\\\d+$\' '
'AND periodo = \'' + periodo + '\' ')
'JOIN openfonacide_establecimiento es on sa.codigo_establecimiento = es.codigo_establecimiento ')
if len(query_dncp) > 0:
query += query_dncp % 'sa'
query += ('WHERE cantidad_requerida ~ E\'^\\\\d+$\' '
'AND sa.periodo = \'' + periodo + '\' ')
query += query_estado
query += query_documentos
query += generar_query_ubicaciones(ubicaciones, 'es')
query += 'GROUP BY tipo_requerimiento_infraestructura '
if query == '':
Expand Down
10 changes: 7 additions & 3 deletions static/js/frontend.ResumenController.js
Original file line number Diff line number Diff line change
Expand Up @@ -287,15 +287,19 @@
$scope.filterObject = {};
$scope.data = {};
$scope.departamentoSelected = '';
$scope.estadosSeleccionados = {
estado: '',
informes: false
};
$scope.prioridadesSeleccionadas = {
sanitarios: false,
aulas: false,
mobiliarios: false,
otros: false
};
$scope.dncpSeleccionadas = {
adjudicados: false,
informes: false
planificaciones: false,
adjudicaciones: false
};

$scope.ubicacionesSeleccionadas = [];
Expand All @@ -321,7 +325,7 @@
resumen.dncp = $scope.dncpSeleccionadas;
}
if($scope.estadoCheck){
resumen.estado = $scope.estadosSelected;
resumen.estado = $scope.estadosSeleccionados;
}

backEnd.resumen.get({params: resumen}, function(data){
Expand Down
Loading

0 comments on commit 3b3d4f0

Please sign in to comment.