Exemplo n.º 1
0
 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}
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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
                ]))
Exemplo n.º 8
0
def usuarios_en_subentidad(subentidad):
    entidad = subentidad.entidad
    return usuarios_de_gauss(entidad=entidad, subentidades=[subentidad])
Exemplo n.º 9
0
def usuarios_con_cargo(cargo):
    entidad = cargo.entidad
    return usuarios_de_gauss(entidad=entidad, cargos=[cargo])
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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)