def grupos_actividad(self): sub_alumnos = Subentidad.objects.get(entidad=self.organizador.entidad, clave_ex='alumnos') alumnos_entidad = usuarios_de_gauss(self.organizador.entidad, subentidades=[sub_alumnos]) grupos_entidad = alumnos_entidad.order_by('grupo__nombre').values_list('grupo__nombre', flat=True).distinct() grupos_incluidos = self.nombre_grupos_incluidos grupos_alumnos = [] for g in grupos_incluidos: alumnos = alumnos_entidad.filter(grupo__nombre__icontains=g) grupos_alumnos.append({'grupo': g, 'alumnos': alumnos}) return {'grupos_entidad': grupos_entidad, 'grupos_incluidos': grupos_incluidos, 'grupos_alumnos': grupos_alumnos}
def lista_socios(request): if request.is_ajax(): g_e = request.session['gauser_extra'] politica = Politica_cuotas.objects.get(id=request.POST['id']) # Dependiendo de los perfiles del emisor tendrá unos socios u otros: socios = {} socios_grupo = usuarios_de_gauss(g_e.ronda.entidad) # socios_grupo = Gauser_extra.objects.filter( entidad = g_e.ronda.entidad, ronda = g_e.ronda ).exclude(gauser__username = '******') perfil_elegido = politica.perfil educandos = socios_grupo.filter(perfiles__in=[perfil_elegido]) subentidades = Subentidad.objects.filter(entidad=g_e.ronda.entidad, perfil=perfil_elegido, fecha_expira__gt=date.today()) for subentidad in subentidades: educandos_rama = educandos.filter(subentidades__in=[subentidad]).distinct() if len(educandos_rama) > 0: socios[subentidad.nombre] = educandos_rama # if perfil_elegido.id == 70: # educandos = socios_grupo.filter(perfiles__id__in=[70]) # subentidades = Subentidad.objects.filter(entidad=g_e.ronda.entidad, perfil_id=70) # for subentidad in subentidades: # educandos_rama = educandos.filter(subentidades__in=[subentidad]).distinct() # if len(educandos_rama) > 0: # socios[subentidad.nombre] = educandos_rama # elif perfil_elegido.id == 75: # socios['Voluntarios'] = socios_grupo.filter(perfiles__id__in=[75]) # elif perfil_elegido.id == 80: # educandos = socios_grupo.filter(perfiles__id__in=[70]) # subentidades = Subentidad.objects.filter(entidad=g_e.ronda.entidad, perfil__in=[45, 50, 55, 60, 65]) # for subentidad in subentidades: # perfil = subentidad.perfil # educandos_rama = educandos.filter(perfiles__in=[perfil, ]).distinct() # padres_id = list( # set(itertools.chain.from_iterable(educandos_rama.values_list('tutor1__id', 'tutor2__id')))) # socios['Padres y Madres de ' + subentidad.nombre] = Gauser_extra.objects.filter( # id__in=padres_id).distinct() # elif perfil_elegido.id == 85: # socios['Socios adultos'] = socios_grupo.filter(perfiles__id__in=[85]) socios_exentos = politica.exentos.all().values_list('id', flat=True) html = render_to_string("list_exentos.html", {'socios': socios, 'socios_exentos': socios_exentos, 'politica': politica, }, request=request) return HttpResponse(html)
def sancionar_conductas_ajax(request): if request.method == 'POST' and request.is_ajax(): g_e = request.session['gauser_extra'] sub_alumnos = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='alumnos') action = request.POST['action'] if action == 'buscar_usuarios': texto = request.POST['q'] usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_alumnos]) filtrados = usuarios.filter( Q(gauser__first_name__icontains=texto) | Q(gauser__last_name__icontains=texto)) options = [] for u in filtrados: options.append({ 'id': u.id, 'text': u.gauser.get_full_name() + ' (' + u.gauser_extra_estudios.grupo.nombre + ')' }) return JsonResponse(options, safe=False) elif action == 'seleccionar_usuario': try: try: sancionado = Gauser_extra.objects.get( ronda=g_e.ronda, id=request.POST['user']) except Exception as e: return JsonResponse({'ok': False, 'mensaje': str(e)}) Informe_sancionador.objects.filter(sancionado=sancionado, fichero='').delete() # try: # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente') # except Exception as e: # return JsonResponse({'ok': False, 'mensaje': str(e)}) # docentes = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes]) cargo = Cargo.objects.get(entidad=g_e.ronda.entidad, clave_cargo='g_docente') docentes = Gauser_extra.objects.filter(ronda=g_e.ronda, cargos__in=[cargo]) inf_actual = Informe_sancionador.objects.create( sancionado=sancionado, sancionador=g_e, fecha_incidente=date.today()) html = render_to_string( 'sancionar_conductas_datos_sancionado.html', { 'inf_actual': inf_actual, 'docentes': docentes, 'g_e': g_e }) return JsonResponse({'ok': True, 'html': html}) except Exception as e: return JsonResponse({'ok': False, 'mensaje': str(e)}) elif action == 'cargar_informe': try: # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente') # docentes = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes]) cargo = Cargo.objects.get(entidad=g_e.ronda.entidad, clave_cargo='g_docente') docentes = Gauser_extra.objects.filter(ronda=g_e.ronda, cargos__in=[cargo]) inf_actual = Informe_sancionador.objects.get( id=request.POST['informe'], sancionado__ronda=g_e.ronda) html = render_to_string( 'sancionar_conductas_datos_sancionado.html', { 'inf_actual': inf_actual, 'docentes': docentes, 'g_e': g_e }) return JsonResponse({'ok': True, 'html': html}) except: return JsonResponse({'ok': False}) elif action == 'check_conductas': try: informe = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['inf_actual']) conductas_borrar = informe.conductas.filter( tipo=request.POST['tipo']) informe.conductas.remove(*conductas_borrar) conductas = Conducta.objects.filter( entidad=g_e.ronda.entidad, id__in=request.POST.getlist('conductas[]')) informe.conductas.add(*conductas) sanciones_id = conductas.values_list('tipo', flat=True) return JsonResponse({ 'ok': True, 'sanciones': list(set(sanciones_id)) }) except: return JsonResponse({'ok': False}) elif action == 'check_sanciones': try: informe = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['inf_actual']) sanciones_borrar = informe.sanciones.filter( tipo=request.POST['tipo']) informe.sanciones.remove(*sanciones_borrar) sanciones = Sancion.objects.filter( entidad=g_e.ronda.entidad, id__in=request.POST.getlist('sanciones[]')) informe.sanciones.add(*sanciones) expulsion = informe.sanciones.filter( expulsion=True).count() > 0 return JsonResponse({'ok': True, 'expulsion': expulsion}) except: return JsonResponse({'ok': False}) elif action == 'describe_conducta': try: informe = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['inf_actual']) informe.texto_motivo = request.POST['texto'] informe.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif action == 'describe_sancion': try: informe = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['inf_actual']) informe.texto_sancion = request.POST['texto'] informe.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif action == 'change_tutor': try: inf_actual = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['inf_actual']) tutor = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['tutor']) sancionado = inf_actual.sancionado sancionado.gauser_extra_estudios.tutor = tutor sancionado.gauser_extra_estudios.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif action == 'change_sancionador': try: inf_actual = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['inf_actual']) sancionador = Gauser_extra.objects.get( ronda=g_e.ronda, id=request.POST['sancionador']) inf_actual.sanciones.clear() inf_actual.sancionador = sancionador inf_actual.save() inf_actual.fechaexpulsion_set.all().delete() sanciones_cnc = Sancion.objects.filter( tipo='CNC', entidad=g_e.ronda.entidad) sanciones_gpc = Sancion.objects.filter( tipo='GPC', entidad=g_e.ronda.entidad) lista_sanciones_cnc = render_to_string( "lista_de_sanciones.html", { 'sanciones': sanciones_cnc, 'sancionador': sancionador, 'inf_actual': inf_actual }) lista_sanciones_gpc = render_to_string( "lista_de_sanciones.html", { 'sanciones': sanciones_gpc, 'sancionador': sancionador, 'inf_actual': inf_actual }) return JsonResponse({ 'ok': True, 'cnc': lista_sanciones_cnc, 'gpc': lista_sanciones_gpc }) except: return JsonResponse({'ok': False}) elif action == 'fecha_informe': try: informe = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['informe']) informe.fecha_incidente = datetime.strptime( request.POST['valor'], '%d/%m/%Y') informe.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif action == 'fechas_expulsion': try: informe = Informe_sancionador.objects.get( sancionado__ronda=g_e.ronda, id=request.POST['informe']) informe.fechaexpulsion_set.all().delete() for fecha in request.POST.getlist('fechas[]'): FechaExpulsion.objects.create(informe=informe, fecha=datetime.strptime( fecha, '%d/%m/%Y')) return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) # elif action == 'fecha_fin': # try: # informe = Informe_sancionador.objects.get(sancionado__ronda=g_e.ronda, id=request.POST['informe']) # informe.fecha_fin = datetime.strptime(request.POST['valor'], '%d/%m/%Y') # informe.save() # return JsonResponse({'ok': True}) # except: # return JsonResponse({'ok': False}) elif request.POST['action'] == 'borrar_informe': informe = Informe_sancionador.objects.get( id=request.POST['informe'], sancionado__ronda=g_e.ronda) if informe.sancionador == g_e or g_e.has_permiso( 'borra_informes_sancionadores'): informe.fichero.delete() informe.delete() return JsonResponse({'ok': True}) else: return JsonResponse({'ok': False}) elif action == 'open_accordion_s': informe = Informe_sancionador.objects.get( id=request.POST['informe'], sancionado__ronda=g_e.ronda) sanciones = Sancion.objects.filter(tipo=request.POST['tipo'], entidad=g_e.ronda.entidad) sancionador = Gauser_extra.objects.get( id=request.POST['sancionador'], ronda=g_e.ronda) data = render_to_string( "lista_de_sanciones.html", { 'sanciones': sanciones, 'sancionador': sancionador, 'inf_actual': informe }) return HttpResponse(data) elif action == 'open_accordion_c': informe = Informe_sancionador.objects.get( id=request.POST['informe'], sancionado__ronda=g_e.ronda) conductas = Conducta.objects.filter(tipo=request.POST['tipo'], entidad=g_e.ronda.entidad) data = render_to_string("lista_de_conductas.html", { 'conductas': conductas, 'inf_actual': informe }) return HttpResponse(data)
def number_no_exentos(politica): exentos_id = politica.exentos.all().values_list('id', flat=True) return usuarios_de_gauss(politica.entidad, cargos=[politica.cargo]).exclude(gauser__id__in=exentos_id).count()
def ajax_informe_seguimiento(request): g_e = request.session['gauser_extra'] if request.is_ajax(): logger.info('%s, %s' % (g_e, request.POST['action'])) if request.POST['action'] == 'buscar_usuarios_destino': q = request.POST['q'].split() Q_total = Q(gauser__isnull=False) for texto in q: Q_parcial = Q(gauser__first_name__icontains=texto) | Q( gauser__last_name__icontains=texto) Q_total = Q_total & Q_parcial # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente') # usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes]) cargo = Cargo.objects.get(entidad=g_e.ronda.entidad, clave_cargo='g_docente') usuarios = Gauser_extra.objects.filter(ronda=g_e.ronda, cargos__in=[cargo]) filtrados = usuarios.filter(Q_total) options = [] for u in filtrados: options.append({'id': u.id, 'text': u.gauser.get_full_name()}) return JsonResponse(options, safe=False) elif request.POST['action'] == 'buscar_usuario': q = request.POST['q'].split() Q_total = Q(gauser__isnull=False) for texto in q: Q_parcial = Q(gauser__first_name__icontains=texto) | Q( gauser__last_name__icontains=texto) Q_total = Q_total & Q_parcial & ~Q( id__in=request.POST.getlist('ges_informes_abiertos[]')) sub_alumnos = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='alumnos') usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_alumnos]) filtrados = usuarios.filter(Q_total) options = [] for u in filtrados: try: grupo_nombre = u.gauser_extra_estudios.grupo.nombre except: grupo_nombre = 'Sin grupo asignado' options.append({ 'id': u.id, 'text': u.gauser.get_full_name() + ' (' + grupo_nombre + ')' }) return JsonResponse(options, safe=False) elif request.POST['action'] == 'get_informes_usuario': usuario = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['usuario']) informes = Informe_seguimiento.objects.filter( Q(usuario=usuario), ~Q(id__in=request.POST.getlist('ges_informes_cerrados[]'))) # data = render_to_string('informes_seguimiento_accordion.html', {'informes': informes, 'g_e': g_e}) # return JsonResponse({'html': data, 'ok': True, 'usuario_nombre': usuario.gauser.get_full_name()}) # usuario = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['usuario']) # informes = Informe_tareas.objects.filter(Q(usuario=usuario), # ~Q(id__in=request.POST.getlist('ges_informes_cerrados[]'))) crea_informe = False ge_informes = [] for i in informes: if g_e in i.usuarios_destino.all() or g_e.has_permiso( 've_informes_seguimiento'): ge_informes.append(i) con_crea_informe1 = g_e in usuario.gauser_extra_estudios.grupo.tutores con_crea_informe2 = g_e in usuario.gauser_extra_estudios.grupo.cotutores con_crea_informe3 = g_e.has_permiso( 'solicita_informes_seguimiento') if con_crea_informe1 or con_crea_informe2 or con_crea_informe3: crea_informe = True if len(ge_informes) > 0: data = render_to_string('informes_seguimiento_accordion.html', { 'informes': ge_informes, 'g_e': g_e }) else: data = False return JsonResponse({ 'html': data, 'ok': True, 'usuario_nombre': usuario.gauser.get_full_name(), 'crea_informe': crea_informe }) elif request.POST['action'] == 'solicitar_informe': usuario = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['usuario_id']) if (g_e in usuario.gauser_extra_estudios.grupo.tutores ) or g_e.has_permiso('solicita_informes_seguimiento') or ( g_e in usuario.gauser_extra_estudios.grupo.cotutores): try: informe = Informe_seguimiento.objects.get( usuario=usuario, deadline__gte=date.today()) html = False except: texto_solicitud = 'Hola, voy a tener una reunión para hablar de {0}. Por favor, responde a ' \ 'las siguientes preguntas'.format(usuario.gauser.get_full_name()) deadline = date.today() + timedelta(days=7) informe = Informe_seguimiento.objects.create( usuario=usuario, solicitante=g_e, deadline=deadline, texto_solicitud=texto_solicitud, fecha=datetime.today()) try: grupo = usuario.gauser_extra_estudios.grupo ges = set(grupo.sesion_set.all().values_list( 'g_e', flat=True)) informe.usuarios_destino.add(*ges) except: pass html = render_to_string( 'informes_seguimiento_accordion.html', { 'informes': [informe], 'g_e': g_e }) return JsonResponse({ 'html': html, 'ok': True, 'informe': informe.id }) else: return JsonResponse({'ok': False}) elif request.POST['action'] == 'open_accordion': # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente') # docentes = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes]) cargo = Cargo.objects.get(entidad=g_e.ronda.entidad, clave_cargo='g_docente') docentes = Gauser_extra.objects.filter(ronda=g_e.ronda, cargos__in=[cargo]) informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) data = render_to_string( 'informe_seguimiento_accordion_content.html', { 'informe': informe, 'g_e': g_e, 'docentes': docentes, 'preguntas': preguntas_base }) return HttpResponse(data) elif request.POST['action'] == 'deadline': try: informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.deadline = datetime.strptime(request.POST['deadline'], '%d/%m/%Y').date() informe.save() estado = 'closed' if informe.deadline < date.today( ) else 'open' return JsonResponse({ 'ok': True, 'estado': estado, 'inf': informe.id }) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'del_informe_seguimiento': try: informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.delete() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'del_participacion_informe_seguimiento': try: informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.usuarios_destino.remove(g_e) return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'texto_solicitud': try: informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.texto_solicitud = request.POST['texto'] informe.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.POST[ 'action'] == 'mod_usuarios_destino' and g_e.has_permiso( 'solicita_informes_seguimiento'): informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) usuarios = Gauser_extra.objects.filter( ronda=g_e.ronda, id__in=request.POST.getlist('usuarios[]')) informe.usuarios_destino.clear() informe.usuarios_destino.add(*usuarios) return JsonResponse({ 'ok': True, 'n': informe.usuarios_destino.all().count() }) elif request.POST['action'] == 'aviso_informe_seguimiento': informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) asunto = render_to_string('informe_seguimiento_mail_asunto.html', {'informe': informe}) texto = render_to_string('informe_seguimiento_mail.html', {'informe': informe}) receptores = [] for ge in informe.usuarios_destino.all(): if ge.respuesta_set.filter(pregunta__informe=informe).count( ) != informe.pregunta_set.all().count(): Aviso.objects.create(usuario=ge, aviso=texto, fecha=datetime.now(), aceptado=False, link='/informes_seguimiento') receptores.append(ge.gauser) encolar_mensaje(emisor=g_e, receptores=receptores, asunto=asunto, html=texto) return JsonResponse({'ok': True}) elif request.POST[ 'action'] == 'add_pregunta_informe' and g_e.has_permiso( 'solicita_informes_seguimiento'): informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) n = request.POST['n'] if n == 'nueva': p = Pregunta.objects.create(informe=informe, pregunta='') else: p = Pregunta.objects.create(informe=informe, pregunta=preguntas_base[int(n)]) html = render_to_string( 'informe_seguimiento_accordion_content_pregunta.html', { 'pregunta': p, 'g_e': g_e }) return JsonResponse({'ok': True, 'html': html}) elif request.POST['action'] == 'delete_pregunta': ok = False try: pregunta = Pregunta.objects.get( informe__usuario__ronda=g_e.ronda, id=request.POST['pregunta']) pregunta_id = pregunta.id informe = pregunta.informe if g_e.has_permiso('borra_preguntas_informes_seguimiento' ) or pregunta.informe.solicitante == g_e: pregunta.delete() ok = True n_preguntas = informe.pregunta_set.all().count() return JsonResponse({ 'pregunta': pregunta_id, 'n_preguntas': n_preguntas, 'ok': ok }) except: return JsonResponse({'ok': ok}) elif request.POST['action'] == 'pregunta': try: informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) pregunta = Pregunta.objects.get(informe=informe, id=request.POST['pregunta']) pregunta.pregunta = request.POST['texto'] pregunta.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'respuesta_a_pregunta': try: informe = Informe_seguimiento.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) responde = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['ge']) pregunta = Pregunta.objects.get(informe=informe, id=request.POST['pregunta']) try: respuesta, c = Respuesta.objects.get_or_create( informe=informe, usuario=responde, pregunta=pregunta) except: Respuesta.objects.filter(informe=informe, usuario=responde, pregunta=pregunta).delete() respuesta = Respuesta.objects.create(informe=informe, usuario=responde, pregunta=pregunta) respuesta.respuesta = request.POST['respuesta'] respuesta.save() return JsonResponse({ 'ok': True, 'n': informe.num_usuarios_respondido }) except: return JsonResponse({'ok': False}) else: logger.info(u'%s, acción no permitida' % (g_e)) return HttpResponse(False) else: return HttpResponse(status=400)
def ajax_informe_tareas(request): g_e = request.session['gauser_extra'] if request.is_ajax(): logger.info('%s, %s' % (g_e, request.POST['action'])) if request.POST['action'] == 'buscar_usuarios_destino': q = request.POST['q'].split() Q_total = Q(gauser__isnull=False) for texto in q: Q_parcial = Q(gauser__first_name__icontains=texto) | Q( gauser__last_name__icontains=texto) Q_total = Q_total & Q_parcial # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente') # usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes]) cargo = Cargo.objects.get(entidad=g_e.ronda.entidad, clave_cargo='g_docente') usuarios = Gauser_extra.objects.filter(ronda=g_e.ronda, cargos__in=[cargo]) filtrados = usuarios.filter(Q_total) options = [] for u in filtrados: options.append({'id': u.id, 'text': u.gauser.get_full_name()}) return JsonResponse(options, safe=False) elif request.POST['action'] == 'buscar_usuario': q = request.POST['q'].split() Q_total = Q(gauser__isnull=False) for texto in q: Q_parcial = Q(gauser__first_name__icontains=texto) | Q( gauser__last_name__icontains=texto) Q_total = Q_total & Q_parcial & ~Q( id__in=request.POST.getlist('ges_informes_abiertos[]')) sub_alumnos = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='alumnos') usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_alumnos]) filtrados = usuarios.filter(Q_total) options = [] for u in filtrados: try: grupo_nombre = u.gauser_extra_estudios.grupo.nombre except: grupo_nombre = 'Sin grupo asignado' options.append({ 'id': u.id, 'text': u.gauser.get_full_name() + ' (' + grupo_nombre + ')' }) return JsonResponse(options, safe=False) elif request.POST['action'] == 'get_informes_usuario': usuario = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['usuario']) informes = Informe_tareas.objects.filter( Q(usuario=usuario), ~Q(id__in=request.POST.getlist('ges_informes_cerrados[]'))) crea_informe = False ge_informes = [] for i in informes: if g_e in i.usuarios_destino.all() or g_e.has_permiso( 've_informes_tareas'): ge_informes.append(i) if (g_e in usuario.gauser_extra_estudios.grupo.tutores) or ( g_e in usuario.gauser_extra_estudios.grupo.cotutores ) or g_e.has_permiso('solicita_informes_tareas'): crea_informe = True if len(ge_informes) > 0: data = render_to_string('informes_tareas_accordion.html', { 'informes': ge_informes, 'g_e': g_e }) else: data = False return JsonResponse({ 'html': data, 'ok': True, 'usuario_nombre': usuario.gauser.get_full_name(), 'crea_informe': crea_informe }) elif request.POST['action'] == 'solicitar_informe': usuario = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['usuario_id']) if (g_e in usuario.gauser_extra_estudios.grupo.tutores ) or g_e.has_permiso('solicita_informes_tareas') or ( g_e in usuario.gauser_extra_estudios.grupo.cotutores): try: informe = Informe_tareas.objects.get( usuario=usuario, deadline__gte=date.today()) html = False except: t = 'el alumno' if usuario.gauser.sexo == 'H' else 'la alumna' texto_solicitud = 'Hola, {0} {1} ... '.format( t, usuario.gauser.get_full_name()) deadline = date.today() + timedelta(days=7) informe = Informe_tareas.objects.create( usuario=usuario, solicitante=g_e, fecha=datetime.today(), texto_solicitud=texto_solicitud, deadline=deadline) try: grupo = usuario.gauser_extra_estudios.grupo ges = set(grupo.sesion_set.all().values_list( 'g_e', flat=True)) informe.usuarios_destino.add(*ges) except: pass html = render_to_string('informes_tareas_accordion.html', { 'informes': [informe], 'g_e': g_e }) return JsonResponse({ 'html': html, 'ok': True, 'informe': informe.id }) else: return JsonResponse({'ok': False}) elif request.POST['action'] == 'open_accordion': informe = Informe_tareas.objects.get(usuario__ronda=g_e.ronda, id=request.POST['informe']) data = render_to_string('informe_tareas_accordion_content.html', { 'informe': informe, 'g_e': g_e }) return HttpResponse(data) elif request.POST['action'] == 'deadline': try: informe = Informe_tareas.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.deadline = datetime.strptime(request.POST['deadline'], '%d/%m/%Y').date() informe.save() estado = 'closed' if informe.deadline < date.today( ) else 'open' return JsonResponse({ 'ok': True, 'estado': estado, 'inf': informe.id }) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'del_informe_tareas': try: informe = Informe_tareas.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.delete() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'texto_solicitud': try: informe = Informe_tareas.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) informe.texto_solicitud = request.POST['texto'] informe.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.POST[ 'action'] == 'mod_usuarios_destino' and g_e.has_permiso( 'solicita_informes_tareas'): informe = Informe_tareas.objects.get( usuario__entidad=g_e.ronda.entidad, usuario__ronda=g_e.ronda, id=request.POST['informe']) usuarios = Gauser_extra.objects.filter( ronda=g_e.ronda, id__in=request.POST.getlist('usuarios[]')) informe.usuarios_destino.clear() informe.usuarios_destino.add(*usuarios) return JsonResponse({ 'ok': True, 'n': informe.usuarios_destino.all().count() }) elif request.POST['action'] == 'aviso_informe_tareas': informe = Informe_tareas.objects.get(usuario__ronda=g_e.ronda, id=request.POST['informe']) asunto = render_to_string('informe_tareas_mail_asunto.html', {'informe': informe}) texto = render_to_string('informe_tareas_mail.html', {'informe': informe}) receptores = [] for ge in informe.usuarios_destino.all(): if ge.tarea_propuesta_set.filter(informe=informe).count() == 0: Aviso.objects.create(usuario=ge, aviso=texto, fecha=datetime.now(), aceptado=False, link='/informes_tareas') receptores.append(ge.gauser) encolar_mensaje(emisor=g_e, receptores=receptores, asunto=asunto, html=texto) return JsonResponse({'ok': True}) elif request.POST['action'] == 'update_texto_tarea': try: informe = Informe_tareas.objects.get( usuario__ronda=g_e.ronda, id=request.POST['informe']) tarea, c = Tarea_propuesta.objects.get_or_create( usuario=g_e, informe=informe) if c: tarea.fecha = datetime.today() tarea.texto_tarea = request.POST['texto'] tarea.save() return JsonResponse({ 'ok': True, 'respuestas': informe.tarea_propuesta_set.all().count() }) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'remove_file': file_tarea = Fichero_tarea.objects.get(id=request.POST['id']) os.remove(RUTA_BASE + file_tarea.fichero.url) file_tarea.delete() return JsonResponse({'ok': True, 'id': request.POST['id']}) elif request.POST['action'] == 'upload_fichero_tarea': informe = Informe_tareas.objects.get(usuario__ronda=g_e.ronda, id=request.POST['informe']) tarea = Tarea_propuesta.objects.get(usuario=g_e, informe=informe) n_files = int(request.POST['n_files']) ficheros = [] for i in range(n_files): fichero = request.FILES['fichero_xhr' + str(i)] fichero_tarea = Fichero_tarea.objects.create( tarea=tarea, fichero=fichero, content_type=fichero.content_type) ficheros.append({ 'file_name': fichero_tarea.fich_name, 'url': fichero_tarea.fichero.url, 'id': fichero_tarea.id }) return JsonResponse({'ficheros': ficheros}) else: return HttpResponse(status=400)
def ajax_mensajes(request): # from django.core import serializers # if request.is_ajax(): # No se puede emplear is_ajax() porque la peticion del archivo no es reconocida como ajax g_e = request.session['gauser_extra'] if request.method == 'POST': if request.POST['action'] == 'ver_mensaje': mensaje = Mensaje.objects.get(pk=request.POST['id']) try: Leido.objects.get(lector=request.session['gauser_extra'], mensaje=mensaje) except: Leido.objects.create(lector=request.session['gauser_extra'], mensaje=mensaje) data = render_to_string( 'reveal_contenido_correo.html', { 'mensaje': mensaje, 'formname': request.POST['formname'], 'tipo': request.POST['tipo'], 'numero': int(request.POST['numero']), 'numero_max': int(request.POST['numero_max']) }) # return HttpResponse(serializers.serialize('json', mensaje)) # return HttpResponse((serializers.serialize('json', mensaje), serializers.serialize('json', mensaje[0].adjuntos.all()))) return HttpResponse(data) if request.POST['action'] == 'borrar_mensajes': ids = map(int, filter(None, request.POST['ids'].split( ','))) # El filter es para eliminar los elementos vacíos mensajes = Mensaje.objects.filter(id__in=ids) for mensaje in mensajes: Borrado.objects.create(eraser=g_e, mensaje=mensaje) return HttpResponse() if request.POST['action'] == 'pagination_enviados': id = int(request.POST['id']) paso = int(request.session['num_items_page']) inicio = (id - 1) * paso fin = id * paso borrados = Borrado.objects.filter(eraser=g_e).values_list( 'mensaje__id', flat=True) mensajes = Mensaje.objects.filter( Q(emisor=g_e) & ~Q(pk__in=borrados)).order_by('-fecha') data = render_to_string("list_enviados.html", { 'mensajes': mensajes[inicio:fin], 'importantes': Importante.objects.filter(mensaje__in=mensajes).values_list( 'mensaje__id', flat=True), 'pagination': paginar(mensajes.count(), paso, c=id), }, request=request) return HttpResponse(data) if request.POST['action'] == 'pagination_recibidos': id = int(request.POST['id']) paso = int(request.session['num_items_page']) inicio = (id - 1) * paso fin = id * paso borrados = Borrado.objects.filter(eraser=g_e).values_list( 'mensaje__id', flat=True) mensajes = Mensaje.objects.filter( Q(receptores__in=[g_e.gauser]) & ~Q(pk__in=borrados)).order_by('-fecha') data = render_to_string("list_recibidos.html", { 'mensajes': mensajes[inicio:fin], 'importantes': Importante.objects.filter(mensaje__in=mensajes).values_list( 'mensaje__id', flat=True), 'leidos': Leido.objects.filter(mensaje__in=mensajes, lector=g_e).values_list('mensaje__id', flat=True), 'pagination': paginar(mensajes.count(), paso, c=id), }, request=request) return HttpResponse(data) if request.POST['action'] == 'receptores_subentidad': datos = request.POST['subentidad'].split('___') subentidad = Subentidad.objects.filter( id=datos[1], fecha_expira__gt=datetime.today()) g_es = usuarios_de_gauss(g_e.ronda.entidad, subentidades=subentidad) g_es = g_es.filter(activo=True) if datos[0] == 'padres': tutores_id = g_es.values_list('tutor1', 'tutor2') g_es = Gauser_extra.objects.filter( id__in=[e for l in tutores_id for e in l]).distinct() receptores = g_es.values_list('gauser__id', 'gauser__last_name', 'gauser__first_name') keys = ('id', 'text') # from django.core import serializers # data = serializers.serialize('json', socios2, fields=('gauser__first_name', 'id')) return HttpResponse( json.dumps([ dict(zip(keys, (row[0], '%s, %s' % (row[1], row[2])))) for row in receptores ])) if request.method == 'GET': if request.GET['action'] == 'receptores': texto = request.GET['q'] socios = usuarios_ronda(g_e.ronda) socios_contain_texto = socios.filter( Q(gauser__first_name__icontains=texto) | Q(gauser__last_name__icontains=texto)).values_list( 'gauser__id', 'gauser__last_name', 'gauser__first_name') keys = ('id', 'text') return HttpResponse( json.dumps([ dict(zip(keys, (row[0], '%s, %s' % (row[1], row[2])))) for row in socios_contain_texto ]))
def usuarios_en_subentidad(subentidad): entidad = subentidad.entidad return usuarios_de_gauss(entidad=entidad, subentidades=[subentidad])
def usuarios_con_cargo(cargo): entidad = cargo.entidad return usuarios_de_gauss(entidad=entidad, cargos=[cargo])
def calendario_ajax(request): if request.is_ajax(): g_e = request.session['gauser_extra'] if request.POST['action'] == 'buscar_invitados': texto = request.POST['q'] usuarios = usuarios_de_gauss(g_e.ronda.entidad) usuarios_contain_texto = usuarios.filter( Q(gauser__first_name__icontains=texto) | Q(gauser__last_name__icontains=texto)).values_list( 'gauser__id', 'gauser__last_name', 'gauser__first_name') keys = ('id', 'last_name', 'first_name') return JsonResponse([dict(zip(keys, row)) for row in usuarios_contain_texto], safe=False) elif request.POST['action'] == 'show_evento': id = request.POST['id'] vevent = Vevent.objects.get(id=id) usuario = '' if g_e.gauser in vevent.propietarios.all(): usuario = 'Propietario' elif g_e.has_cargos([1]): usuario = 'Cargo' elif g_e.gauser in vevent.invitados.all(): usuario = 'Invitado' informe = render_to_string('evento_informar.html', {'vevent': vevent, 'usuario': usuario}) data = {'title': vevent.summary, 'texto': informe, 'usuario': usuario} return JsonResponse(data) elif request.POST['action'] == 'renderizado': fecha = datetime.strptime(request.POST['fecha'], '%d/%m/%Y') vista = request.POST['vista'] direction = int(request.POST['direction']) if vista == 'month': # Dependiendo de nextslide será un mes positivo o negativo one_month = relativedelta(months=direction) fecha = fecha + one_month mes = calendar.Calendar().monthdatescalendar(fecha.year, fecha.month) vevents = vevents_month(g_e, fecha) # Vevent.objects.filter( # Q(subentidades__in=g_e.subentidades_hijos()) | Q(invitados__in=[g_e.gauser]) | Q( # propietarios__in=[g_e.gauser]), # Q(dtstart__month=fecha.month) | Q(dtend__month=fecha.month)).distinct() renderizado = render_to_string('calendario_month.html', {'mes': mes, 'vevents': vevents}) if vista == 'agenda': mes1 = relativedelta(months=direction) mes2 = relativedelta(months=(direction + 1)) m1 = calendar.Calendar().monthdatescalendar((fecha + mes1).year, (fecha + mes1).month) m2 = calendar.Calendar().monthdatescalendar((fecha + mes2).year, (fecha + mes2).month)[1:] meses = m1 + m2 fecha = fecha + mes1 vevents = vevents_agenda(g_e, fecha, meses) # Vevent.objects.filter( # Q(subentidades__in=g_e.subentidades_hijos()) | Q(invitados__in=[g_e.gauser]) | Q( # propietarios__in=[g_e.gauser]), dtend__gte=fecha, # dtstart__lte=meses[-1][-1]).distinct() renderizado = render_to_string('calendario_agenda.html', {'vevents': vevents, 'meses': meses}) return JsonResponse({'renderizado': renderizado, 'fecha': fecha.strftime('%d/%m/%Y')}) elif request.POST['action'] == 'more_vevents': one_day = relativedelta(days=1) fecha = datetime.strptime(request.POST['fecha'], '%d/%m/%Y') + one_day m1 = calendar.Calendar().monthdatescalendar(fecha.year, fecha.month)[1:] meses = m1 vevents = vevents_agenda(g_e, fecha, meses) # Vevent.objects.filter( # Q(subentidades__in=g_e.subentidades_hijos()) | Q(invitados__in=[g_e.gauser]) | Q( # propietarios__in=[g_e.gauser]), dtend__gte=fecha, # dtstart__lte=meses[-1][-1]).distinct() renderizado = render_to_string('calendario_agenda.html', {'vevents': vevents, 'meses': meses}) return JsonResponse({'renderizado': renderizado, 'fecha': fecha.strftime('%d/%m/%Y')}) # elif request.POST['action'] == 'crea_evento': # dtstart = datetime.strptime(request.POST['fecha'], '%d/%m/%Y') # data = render_to_string('evento_crear.html', { # 'form': VeventForm(initial={'dtstart': dtstart}), # 'subentidades': Subentidad.objects.filter(entidad=g_e.ronda.entidad, fecha_expira__gt=datetime.today()), # 'invitados': Gauser_extra.objects.filter(entidad=g_e.ronda.entidad, ronda=g_e.ronda.entidad.ronda), # }, request=request) # return HttpResponse(data) # elif request.POST['action'] == 'edita_evento': # vevent = Vevent.objects.get(id=request.POST['id']) # data = render_to_string('evento_editar.html', { # 'form': VeventForm(initial=to_dict(vevent)), # 'subentidades': Subentidad.objects.filter(entidad=g_e.ronda.entidad, fecha_expira__gt=datetime.today()), # 'invitados': Gauser_extra.objects.filter(entidad=g_e.ronda.entidad, ronda=g_e.ronda.entidad.ronda), # }, request=request) # return HttpResponse(data) # elif request.POST['action'] == 'grabar_evento': # form = VeventForm(request.POST) # if form.is_valid(): # vevent = form.save() # vevent.propietarios.add(g_e.gauser) # crear_aviso(request, True, "Se crea el evento con id %s" % (vevent.id)) # invitados = Gauser.objects.filter(id__in=[g_e.gauser.id] + list(request.POST.getlist('invitados'))) # for invitado in invitados: # vevent.invitados.add(invitado) # subentidades = Subentidad.objects.filter(id__in=request.POST.getlist('subentidades'), fecha_expira__gt=datetime.today()) # for subentidad in subentidades: # vevent.subentidades.add(subentidad) # vevent.entidad = g_e.ronda.entidad # vevent.save() # # Preparamos instrucciones para mandar un correo a los usuarios afectados # try: # etiqueta = Etiqueta.objects.get(nombre='vevent' + str(vevent.id)) # except: # etiqueta = Etiqueta.objects.create(nombre='vevent' + str(vevent.id), propietario=g_e) # asunto = vevent.summary # texto_html = render_to_string('evento_informar_mail.html', # {'vevent': vevent, 'actualizador': g_e, 'tipo': 'Nuevo'}) # mensaje = Mensaje.objects.create(emisor=g_e, fecha=datetime.now(), asunto=asunto, mensaje=texto_html) # mensaje.etiquetas.add(etiqueta) # for g in vevent.invitados.all(): # mensaje.receptores.add(g) # for g in vevent.propietarios.all(): # mensaje.receptores.add(g) # for ge in Gauser_extra.objects.filter(ronda=g_e.ronda, subentidades__in=vevent.subentidades.all()): # if ge.edad < 18: # for miembro_familia in ge.unidad_familiar: # if miembro_familia.edad > 18: # mensaje.receptores.add(miembro_familia.gauser) # mensaje.receptores.add(ge.gauser) # crea_mensaje_cola(mensaje) # # En este punto se han encolado los correos electrónicos. Se enviarán según kronos # return HttpResponse('') # else: # errores = form.errors # data = '' # if 'summary' in errores: # data += '<b>Nombre del evento</b> es un campo obligatorio.<br>' # if 'dtstart' in errores: # data += '<b>Inicio</b> es un campo obligatorio con la forma: dd/mm/yyyy hh:mm<br>' # data += '<i>Por ejemplo, un evento que comience el 3 de mayo de 2018 a las 9:35, debería ' # data += 'escribirse:<br></i> 03/05/2018 09:35<br>' # return HttpResponse(data) # elif request.POST['action'] == 'actualizar_evento': # vevent = Vevent.objects.get(id=request.POST['id_evento'], propietarios__in=[g_e.gauser, ]) # form = VeventForm(request.POST, instance=vevent) # if form.is_valid(): # for variable in ['summary', 'location', 'description']: # setattr(vevent, variable, request.POST[variable]) # for variable in ['dtstart', 'dtend']: # setattr(vevent, variable, datetime.strptime(request.POST[variable], '%d/%m/%Y %H:%M')) # vevent.entidad = g_e.ronda.entidad # vevent.save() # crear_aviso(request, True, "Se actualiza el evento con id %s" % (vevent.id)) # invitados = Gauser.objects.filter(id__in=request.POST.getlist('invitados')) # for invitado in invitados: # vevent.invitados.add(invitado) # subentidades = Subentidad.objects.filter(id__in=request.POST.getlist('subentidades'), fecha_expira__gt=datetime.today()) # for subentidad in subentidades: # vevent.subentidades.add(subentidad) # # Preparamos instrucciones para mandar un correo a los usuarios afectados # try: # etiqueta = Etiqueta.objects.get(nombre='vevent' + str(vevent.id)) # except: # etiqueta = Etiqueta.objects.create(nombre='vevent' + str(vevent.id), propietario=g_e) # asunto = u'Actualización del evento: ' + vevent.summary # texto_html = render_to_string('evento_informar_mail.html', # {'vevent': vevent, 'actualizador': g_e, 'tipo': 'Actualizado'}) # mensaje = Mensaje.objects.create(emisor=g_e, fecha=datetime.now(), asunto=asunto, mensaje=texto_html) # mensaje.etiquetas.add(etiqueta) # for g in vevent.invitados.all(): # mensaje.receptores.add(g) # for g in vevent.propietarios.all(): # mensaje.receptores.add(g) # for ge in Gauser_extra.objects.filter(ronda=g_e.ronda, subentidades__in=vevent.subentidades.all()): # mensaje.receptores.add(ge.gauser) # crea_mensaje_cola(mensaje) # # En este punto se han encolado los correos electrónicos. Se enviarán según kronos # return HttpResponse('') # else: # errores = form.errors # data = '' # if 'summary' in errores: # data += '<b>Nombre del evento</b> es un campo obligatorio.<br>' # if 'dtstart' in errores: # data += '<b>Inicio</b> es un campo obligatorio con la forma: dd/mm/yyyy hh:mm<br>' # data += '<i>Por ejemplo, un evento que comience el 3 de mayo de 2018 a las 9:35, debería ' # data += 'escribirse:<br></i> 03/05/2018 09:35<br>' # return HttpResponse(data) elif request.POST['action'] == 'mes': fecha = datetime.strptime(request.POST['fecha'], '%d/%m/%Y') mes = calendar.Calendar().monthdatescalendar(fecha.year, fecha.month) vevents = vevents_month(g_e, fecha) # Vevent.objects.filter( # Q(subentidades__in=g_e.subentidades_hijos()) | Q(invitados__in=[g_e.gauser]), # Q(dtstart__month=fecha.month) | Q(dtend__month=fecha.month)).distinct() renderizado = render_to_string('calendario_month.html', {'mes': mes, 'vevents': vevents}) return HttpResponse(renderizado) elif request.POST['action'] == 'agenda': fecha = datetime.strptime(request.POST['fecha'], '%d/%m/%Y') mes = relativedelta(months=1) m1 = calendar.Calendar().monthdatescalendar(fecha.year, fecha.month) m2 = calendar.Calendar().monthdatescalendar((fecha + mes).year, (fecha + mes).month)[1:] meses = m1 + m2 vevents = vevents_agenda(g_e, fecha, meses) # Vevent.objects.filter( # Q(subentidades__in=g_e.subentidades_hijos()) | Q(invitados__in=[g_e.gauser]), dtend__gte=fecha, # dtstart__lte=meses[-1][-1]).distinct() renderizado = render_to_string('calendario_agenda.html', {'vevents': vevents, 'meses': meses}) return HttpResponse(renderizado)
def ajax_absentismo(request): g_e = request.session['gauser_extra'] if request.is_ajax(): logger.info('%s, %s' % (g_e, request.POST['action'])) if request.POST['action'] == 'buscar_actuado': texto = request.POST['q'] sub_alumnos = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='alumnos') usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_alumnos]) filtrados = usuarios.filter(Q(gauser__first_name__icontains=texto) | Q(gauser__last_name__icontains=texto)) options = [] for u in filtrados: options.append({'id': u.id, 'text': u.gauser.get_full_name() + ' (' + u.gauser_extra_estudios.grupo.nombre + ')'}) return JsonResponse(options, safe=False) elif request.POST['action'] == 'get_expedientado': expedientado = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['expedientado']) expediente, creado = ExpedienteAbsentismo.objects.get_or_create(expedientado=expedientado) if creado: exs = ExpedienteAbsentismo.objects.filter(director__iregex=r'[a-z]+', presidente__iregex=r'[a-z]+', expedientado__ronda=g_e.ronda) if exs.count() > 0: expediente.director, expediente.presidente = exs[0].director, exs[0].presidente else: expediente.director, expediente.presidente = ' ', ' ' expediente.save() n_actuaciones = expediente.actuacion_set.all().count() if n_actuaciones == 0: return JsonResponse( {'ok': False, 'user': expedientado.gauser.get_full_name(), 'user_id': expedientado.id}) else: data = render_to_string('absentismo_accordion.html', {'expediente': expediente}) return JsonResponse({'html': data, 'ok': True}) elif request.POST['action'] == 'create_actuacion' and g_e.has_permiso('crea_actuacion_absentismo'): expediente = ExpedienteAbsentismo.objects.get(expedientado__ronda=g_e.ronda, expedientado__id=request.POST['expedientado']) Actuacion.objects.create(expediente=expediente, contacto=' ', fecha=date.today(), faltas=12, observaciones='Esta actuación ha sido creada por defecto por GAUSS. El número de faltas, la persona de contacto y las observaciones las tienes que modicar para adecuarlas a tu situación.', realizada_por=g_e) data = render_to_string('absentismo_accordion.html', {'expediente': expediente}) return JsonResponse({'html': data, 'ok': True}) elif request.POST['action'] == 'open_accordion': # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente') # docentes = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes]) cargo = Cargo.objects.get(entidad=g_e.ronda.entidad, clave_cargo='g_docente') docentes = Gauser_extra.objects.filter(ronda=g_e.ronda, cargos__in=[cargo]) expediente = ExpedienteAbsentismo.objects.get(expedientado__ronda=g_e.ronda, id=request.POST['expediente']) data = render_to_string('absentismo_accordion_content.html', {'expediente': expediente, 'g_e': g_e, 'docentes': docentes}) return HttpResponse(data) elif request.POST['action'] == 'add_actuacion_absentismo' and g_e.has_permiso('crea_actuacion_absentismo'): expediente = ExpedienteAbsentismo.objects.get(expedientado__ronda=g_e.ronda, id=request.POST['expediente']) actuacion = Actuacion.objects.create(expediente=expediente, contacto=' ', fecha=date.today(), faltas=80, observaciones='Estas son las observaciones de la actuación', realizada_por=g_e) n_actuaciones = expediente.actuacion_set.all().count() html = render_to_string('absentismo_accordion_content_actuacion.html', {'actuacion': actuacion, 'g_e': g_e}) return JsonResponse({'html': html, 'n_actuaciones': n_actuaciones}) elif request.POST['action'] == 'delete_actuacion': ok = False try: actuacion = Actuacion.objects.get(expediente__expedientado__ronda=g_e.ronda, id=request.POST['actuacion']) expediente = actuacion.expediente if g_e.has_permiso('borra_actuacion_absentismo') or actuacion.realizada_por == g_e: actuacion.delete() ok = True n_actuaciones = expediente.actuacion_set.all().count() expediente_id = expediente.id if n_actuaciones == 0: expediente.delete() return JsonResponse({'expediente': expediente_id, 'n_actuaciones': n_actuaciones, 'ok': ok}) except: return JsonResponse({'ok': ok}) elif request.POST['action'] == 'update_tutor': try: expediente = ExpedienteAbsentismo.objects.get(expedientado__ronda=g_e.ronda, id=request.POST['expediente']) tutor = Gauser_extra.objects.get(ronda=g_e.ronda, id=request.POST['tutor']) expediente.expedientado.gauser_extra_estudios.tutor = tutor expediente.expedientado.gauser_extra_estudios.save() return HttpResponse(True) except: return HttpResponse(False) elif request.POST['action'] == 'update_configura': ok = False try: expediente = ExpedienteAbsentismo.objects.get(expedientado__ronda=g_e.ronda, id=request.POST['expediente']) setattr(expediente, request.POST['campo'], request.POST['valor']) if g_e.has_permiso('configura_expediente_absentismo'): expediente.save() ok = True return HttpResponse(ok) except: return HttpResponse(False) elif request.POST['action'] == 'update_configura_matricula': ok = False try: expediente = ExpedienteAbsentismo.objects.get(expedientado__ronda=g_e.ronda, id=request.POST['expediente']) expediente.matricula = not expediente.matricula if g_e.has_permiso('configura_expediente_absentismo'): expediente.save() ok = True return JsonResponse( {'ok': ok, 'texto': ['No', 'Sí'][expediente.matricula], 'expediente': expediente.id}) except: return JsonResponse({'ok': False}) elif request.POST['action'] == 'update_observaciones': ok = False try: actuacion = Actuacion.objects.get(expediente__expedientado__ronda=g_e.ronda, id=request.POST['actuacion']) actuacion.observaciones = request.POST['texto'] if g_e.has_permiso('edita_actuacion_absentismo') or actuacion.realizada_por == g_e: actuacion.save() ok = True return HttpResponse(ok) except: return HttpResponse(False) elif request.POST['action'] == 'update_fecha': ok = False try: actuacion = Actuacion.objects.get(expediente__expedientado__ronda=g_e.ronda, id=request.POST['actuacion']) actuacion.fecha = datetime.strptime(request.POST['fecha'], '%d-%m-%Y') if g_e.has_permiso('edita_actuacion_absentismo') or actuacion.realizada_por == g_e: actuacion.save() ok = True return HttpResponse(ok) except: return HttpResponse(False) elif request.POST['action'] == 'update_faltas': ok = True try: actuacion = Actuacion.objects.get(expediente__expedientado__ronda=g_e.ronda, id=request.POST['actuacion']) actuacion.faltas = int(request.POST['faltas']) if g_e.has_permiso('edita_actuacion_absentismo') or actuacion.realizada_por == g_e: actuacion.save() ok = True return HttpResponse(ok) except: return HttpResponse(False) elif request.POST['action'] == 'update_contacto': ok = False try: actuacion = Actuacion.objects.get(expediente__expedientado__ronda=g_e.ronda, id=request.POST['actuacion']) actuacion.contacto = request.POST['contacto'] if g_e.has_permiso('edita_actuacion_absentismo') or actuacion.realizada_por == g_e: actuacion.save() ok = True error = '' else: error = 'Esta actuación no es tuya y no tienes permiso para modificar el contacto' return JsonResponse({'ok': ok, 'error': error}) except Exception as e: return JsonResponse({'ok': False, 'error': repr(e)}) else: logger.info('%s, acción no permitida' % (g_e)) return HttpResponse(False) else: return HttpResponse(status=400)