Exemplo n.º 1
0
def enviar_mensaje_registro(viajero, log='Correcto'):
    reserva = viajero.reserva
    vivienda = reserva.vivienda
    ronda = vivienda.entidad.ronda
    html = render_to_string('correo_PN_GC.html', {
        'viajero': viajero,
        'log': log
    })
    #Si es correcto solo recibirán mensaje los propietarios. Si hay errores, el Administrador con el
    #permiso requerido recibirá un correo con el fin de corregir el programa o ayudar al interesado:
    usuarios = usuarios_ronda(ronda)
    if log != 'Correcto':
        logger.info('!=Correcto')
        permiso = Permiso.objects.get(code_nombre='recibe_errores_de_viajeros')
        receptores_ge = usuarios.filter(
            Q(gauser__in=vivienda.propietarios.all())
            | Q(permisos__in=[permiso]))
        receptores = [receptor_ge.gauser for receptor_ge in receptores_ge]
    else:
        receptores = [
            propietario for propietario in vivienda.propietarios.all()
        ]
    emisor = usuarios.get(gauser=vivienda.propietarios.all()[0])
    if log == 'Correcto':
        asunto = 'Efectuado registro de viajero en %s' % vivienda.get_police_display(
        )
        gtexto = 'Registrado en la %s el viajero: %s %s (%s)' % (
            vivienda.get_police_display(), viajero.nombre, viajero.apellido1,
            vivienda.nombre)
        envia_telegram_gausers(gausers=vivienda.propietarios.all(),
                               texto=gtexto)
    elif log == 'Error1':
        asunto = 'Error al hacer el registro de viajero en %s' % vivienda.get_police_display(
        )
        gtexto = 'Error en la comunicación con %s. Se debe hacer el registro manualmente. Viajero: %s %s (%s)' % (
            vivienda.get_police_display(), viajero.nombre, viajero.apellido1,
            vivienda.nombre)
        envia_telegram_gausers(gausers=vivienda.propietarios.all(),
                               texto=gtexto)
    elif log == 'Error2':
        asunto = 'Error al identificarse en web de %s' % vivienda.get_police_display(
        )
        gtexto = 'Error al hacer el login en la web de la %s. Viajero: %s %s (%s)' % (
            vivienda.get_police_display(), viajero.nombre, viajero.apellido1,
            vivienda.nombre)
        envia_telegram_gausers(gausers=vivienda.propietarios.all(),
                               texto=gtexto)
    elif log == 'Error3':
        asunto = 'Error registro GAUSS - Policía Nacional o Guardia Civil sin configurar'
        gtexto = 'Error. Debes indicar en GAUSS si el registro se hace en Policía Nacional o Guardia Civil. Vivienda: %s' % (
            viajero.reserva.vivienda.nombre)
        envia_telegram_gausers(gausers=vivienda.propietarios.all(),
                               texto=gtexto)
    elif log == 'Error4':
        asunto = 'Error con registro de viajero en GAUSS'
        gtexto = 'Error durante el grabado del viajero. Hacer el registro manualmente. Viajero: %s %s (%s)' % (
            viajero.nombre, viajero.apellido1, vivienda.nombre)
        envia_telegram_gausers(gausers=vivienda.propietarios.all(),
                               texto=gtexto)
    else:
        asunto = 'Error en registro VUT'
        envia_telegram_gausers(gausers=vivienda.propietarios.all(),
                               texto=asunto)
    etiqueta = 'error-vut%s' % ronda.id
    encolar_mensaje(emisor=emisor,
                    receptores=receptores,
                    asunto=asunto,
                    html=html,
                    etiqueta=etiqueta)
    logger.info(asunto)
    return True
Exemplo n.º 2
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.º 3
0
def no_exentos(politica, total=1000):
    no_ex = []
    # importes = list(map(float, re.findall(r"[-+]?\d*\.\d+|\d+", politica.descuentos)))
    # Hacemos una secuencia de importes añadiendo el último valor lo suficientemente grande como para
    # asegurar que el número de hermanos es superado. Por ejemplo si importes es [30,20,15], después
    # de la siguiente líneas sería [30,20,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
    # importes = importes + [importes[-1] for i in range(20)]
    importes = politica.array_cuotas
    exentos_id = politica.exentos.all().values_list('id', flat=True)
    usuarios = usuarios_ronda(politica.entidad.ronda, cargos=[politica.cargo]).exclude(gauser__id__in=exentos_id)
    usuarios_id = []
    n = 0
    for usuario in usuarios:
        if usuario.id not in usuarios_id:
            n += 1
            if politica.tipo == 'hermanos':
                familiares = usuario.unidad_familiar
                deudores = familiares.filter(id__in=usuarios)
                if deudores.count() > 1:
                    deudor = 'Familia %s' % deudores[0].gauser.last_name
                else:
                    deudor = deudores[0].gauser.get_full_name()
                usuarios_id += list(deudores.values_list('id', flat=True))
                n_cs = familiares.values_list('num_cuenta_bancaria', flat=True)
                deudores_str = ', '.join(deudores.values_list('gauser__first_name', flat=True))
            elif politica.tipo == 'fija':
                deudores = [usuario]
                deudor = usuario.gauser.get_full_name()
                usuarios_id += [usuario.id]
                n_cs = [usuario.num_cuenta_bancaria]
                # deudores_str = ', '.join(deudores.values_list('gauser__first_name', flat=True))
            elif politica.tipo == 'vut':
                viviendas = Vivienda.objects.filter(propietarios__in=[usuario.gauser],
                                                    entidad=usuario.ronda.entidad)
                deudores = [usuario] * viviendas.count()
                usuarios_id += [usuario.id]
                n_cs = [usuario.num_cuenta_bancaria]
                deudores_str = '%s viviendas gestionadas por %s' % (viviendas.count(),
                                                                    usuario.gauser.get_full_name())
                deudor = usuario.gauser.get_full_name()
            else:
                deudores = []
                usuarios_id += [usuario.id]
                n_cs = []
                deudores_str = ''
                concepto = ''
                deudor = ''

            try:
                cuenta_banca = [n_c.replace(' ', '') for n_c in n_cs if len(str(n_c)) > 18][0]
                estilo, title = "", "Cuenta bancaria: " + str(cuenta_banca)
            except:
                estilo, title = "color:red", "No hay cuenta bancaria asignada"
            if len(deudores) > 0:
                no_ex.append({'title': title, 'estilo': estilo, 'concepto': politica.concepto,
                              'deudor': deudor, 'cantidad': str(sum(importes[:len(deudores)]))})
                # no_ex.append('<span title="%s" style="%s">%s %s (%s)dddd</span>' % (
                #     title, estilo, concepto, deudores[0].gauser.last_name, str(sum(importes[:len(deudores)]))))
            if n == total:
                break
    return no_ex
Exemplo n.º 4
0
def has_usuarios_ronda(
        subentidad,
        ronda):  # Comprueba si la subentidad tiene ususarios de esta ronda
    g_es = usuarios_ronda(ronda, subentidades=[subentidad])
    return g_es.count() > 0
Exemplo n.º 5
0
def configura_materias_pendientes(request):
    g_e = request.session['gauser_extra']
    if request.method == 'GET' and request.is_ajax():
        action = request.GET['action']
        if action == 'select_profesor':
            items = []
            # items = [{'id': u.id, 'text': u.gauser.last_name} for u in usuarios_ronda(g_e.ronda, subentidades=False)]
            texto = request.GET['search']
            q = (Q(gauser__first_name__icontains=texto)
                 | Q(gauser__last_name__icontains=texto)) & Q(
                     subentidades__clave_ex='docente')
            for u in usuarios_ronda(g_e.ronda, subentidades=False).filter(q):
                items.append({
                    'id':
                    u.id,
                    'text':
                    '%s, %s' % (u.gauser.last_name, u.gauser.first_name)
                })
            return JsonResponse({'ok': True, 'items': items})
    if request.method == 'POST' and request.is_ajax():
        action = request.POST['action']
        if action == 'open_accordion':
            curso = Curso.objects.get(id=request.POST['id'], ronda=g_e.ronda)
            matriculas = Matricula.objects.filter(
                ge__ronda=g_e.ronda,
                estado='PE',
                ge__gauser_extra_estudios__grupo__cursos=curso)
            html = render_to_string(
                'configura_materias_pendientes_curso_content.html',
                {'matriculas': matriculas})
            return JsonResponse({'ok': True, 'html': html})
        elif action == 'select_profesor':
            try:
                matricula = Matricula.objects.get(ge__ronda=g_e.ronda,
                                                  id=request.POST['matricula'])
                evaluador = Gauser_extra.objects.get(
                    ronda=g_e.ronda,
                    id=request.POST['profesor'],
                    subentidades__clave_ex='docente')
                matricula.evaluador = evaluador
                matricula.save()
                return JsonResponse({'ok': True})
            except:
                return JsonResponse({'ok': False})
    elif request.method == 'POST':
        if request.POST['action'] == 'upload_file_matriculas':
            try:
                n_files = int(request.POST['n_files'])
                for i in range(n_files):
                    fichero = request.FILES['fichero_xhr' + str(i)]
                    if fichero.content_type == 'application/vnd.ms-excel':
                        CargaMasiva.objects.create(ronda=g_e.ronda,
                                                   fichero=fichero,
                                                   tipo='PENDIENTES')
                carga_masiva_from_excel.delay()
                return JsonResponse({'ok': True})
            except:
                return JsonResponse({'ok': False})
    try:
        carga = CargaMasiva.objects.filter(ronda=g_e.ronda,
                                           tipo='PENDIENTES',
                                           cargado=True).latest('id')
    except:
        carga = CargaMasiva.objects.none()
    respuesta = {
        'formname': 'configura_materias_pendientes',
        'cursos': Curso.objects.filter(ronda=g_e.ronda),
        'avisos': Aviso.objects.filter(usuario=g_e, aceptado=False),
        'carga': carga
    }
    return render(request, "configura_materias_pendientes.html", respuesta)
Exemplo n.º 6
0
 def destinatarios(self):
     usuarios = usuarios_ronda(
         self.entidad.ronda,
         cargos=[self.cargo]).exclude(gauser__in=self.exentos.all())
     dicts_destinatarios = []
     if self.tipo == 'hermanos':
         usuarios_analizados = []
         for u in usuarios:
             if u not in usuarios_analizados:
                 familiares = u.unidad_familiar
                 usuarios_analizados.extend(familiares)
                 familiares_gauser = familiares.values_list('gauser__id',
                                                            flat=True)
                 deudores = familiares.filter(id__in=usuarios)
                 num = deudores.count()
                 texto = ', '.join(
                     deudores.values_list('gauser__first_name', flat=True))
                 try:
                     # fecha_18 = datetime.today() - timedelta(days=18*365.25)
                     # oa = OrdenAdeudo.objects.filter(politica=self, gauser__id__in=familiares_gauser,
                     #                                 fecha_firma__isnull=False, gauser__nacimiento__lte=fecha_18)[0]
                     oa = OrdenAdeudo.objects.filter(
                         politica=self,
                         gauser__id__in=familiares_gauser,
                         fecha_firma__isnull=False)[0]
                 except:
                     oa = OrdenAdeudo.objects.none()
                 dicts_destinatarios.append({
                     'oa': oa,
                     'ge': u,
                     'num': num,
                     'texto': texto
                 })
     elif self.tipo == 'vut':
         for u in usuarios:
             viviendas = Vivienda.objects.filter(gpropietario=u.gauser,
                                                 borrada=False,
                                                 entidad=u.ronda.entidad)
             num = viviendas.count()
             texto = '%d viviendas gestionadas por %s' % (
                 num, u.gauser.get_full_name())
             if num > 0:
                 try:
                     oa = OrdenAdeudo.objects.get(politica=self,
                                                  fecha_firma__isnull=False,
                                                  gauser=u.gauser)
                 except:
                     oa = OrdenAdeudo.objects.none()
                 dicts_destinatarios.append({
                     'oa': oa,
                     'ge': u,
                     'num': num,
                     'texto': texto
                 })
     else:  # Esta será la opción relacionada con la cuota tipo "fija"
         for u in usuarios:
             num = 1
             texto = '%s' % (u.gauser.get_full_name())
             try:
                 oa = OrdenAdeudo.objects.get(politica=self,
                                              fecha_firma__isnull=False,
                                              gauser=u.gauser)
             except:
                 oa = OrdenAdeudo.objects.none()
             dicts_destinatarios.append({
                 'oa': oa,
                 'ge': u,
                 'num': num,
                 'texto': texto
             })
     return dicts_destinatarios
Exemplo n.º 7
0
def documentos(request):
    for d in Ges_documental.objects.all():
        try:
            d.etiquetas.add(d.etiqueta)
        except:
            pass
        try:
            d.entidad = d.propietario.ronda.entidad
            d.save()
        except:
            pass
    g_e = request.session['gauser_extra']
    if request.method == 'POST':
        if request.POST['action'] == 'ver_formulario_subir' and g_e.has_permiso(
                'sube_archivos'):
            try:
                etiquetas = Etiqueta_documental.objects.filter(
                    entidad=g_e.ronda.entidad)
                html = render_to_string("documentos_fieldset_subir.html",
                                        {'etiquetas': etiquetas})
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'sube_archivo':
            n_files = int(request.POST['n_files'])
            if g_e.has_permiso('sube_archivos'):
                try:
                    docs = []
                    for i in range(n_files):
                        fichero = request.FILES['fichero_xhr' + str(i)]
                        doc = Ges_documental.objects.create(
                            propietario=g_e,
                            content_type=fichero.content_type,
                            nombre=fichero.name,
                            fichero=fichero)
                        # etiquetas = Etiqueta_documental.objects.filter(id__in=request.POST['etiquetas'].split(','),
                        #                                                entidad=g_e.ronda.entidad)
                        # doc.etiquetas.add(*etiquetas)
                        Compartir_Ges_documental.objects.create(
                            gauser=g_e.gauser, documento=doc, permiso='rwx')
                        docs.append(doc)
                    html = render_to_string('documentos_table_tr.html', {
                        'docs': docs,
                        'g_e': g_e
                    })
                    return JsonResponse({
                        'ok': True,
                        'html': html,
                        'mensaje': False
                    })
                except:
                    return JsonResponse({
                        'ok': False,
                        'mensaje': 'Se ha producido un error.'
                    })
            else:
                mensaje = 'No tienes permiso para subir archivos.'
                return JsonResponse({'ok': False, 'mensaje': mensaje})
        elif request.POST['action'] == 'borrar_documento':
            try:
                doc = Ges_documental.objects.get(id=request.POST['doc'],
                                                 borrado=False)
                if 'x' in doc.permisos(g_e):
                    try:
                        doc.compartir_ges_documental_set.filter(
                            gauser=g_e.gauser).delete()
                        if Compartir_Ges_documental.objects.filter(
                                documento=doc).count() == 0:
                            doc.borrado = True
                            doc.save()
                        m = 'Se ha borrado tu acceso personal al archivo.<br>Si todavía lo vieras es porque está compartido con un cargo que tienes asignado o una sección a la que perteneces.'
                        return JsonResponse({'ok': True, 'mensaje': m})
                    except:
                        m = 'Archivo no borrado. <br>Lo sigues viendo porque está compartido con un cargo que tienes asignado o una sección a la que perteneces.'
                        return JsonResponse({'ok': True, 'mensaje': m})
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes permisos para borrar el documento.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'borrar_doc_completamente':
            try:
                doc = Ges_documental.objects.get(id=request.POST['doc'],
                                                 borrado=False)
                if doc.propietario.ronda.entidad == g_e.ronda.entidad:
                    if g_e.has_permiso('borra_cualquier_archivo'):
                        doc.borrado = True
                        doc.save()
                        cgds = doc.compartir_ges_documental_set.all()
                        ss = Subentidad.objects.filter(id__in=set(
                            cgds.values_list('subentidad__id', flat=True)))
                        cs = Cargo.objects.filter(id__in=set(
                            cgds.values_list('cargo__id', flat=True)))
                        interesados = usuarios_ronda(g_e.ronda,
                                                     subentidades=ss,
                                                     cargos=cs)
                        q1 = Q(id__in=interesados.values_list('gauser__id',
                                                              flat=True))
                        q2 = Q(id__in=set(
                            cgds.values_list('gauser__id', flat=True)))
                        receptores = Gauser.objects.filter(q1, q2)
                        asunto = 'Se ha eliminado el archivo %s' % (doc.nombre)
                        texto = render_to_string(
                            'documentos_correo_archivo_borrado.html', {
                                'doc': doc,
                                'emisor': g_e
                            })
                        ok, m = enviar_correo(asunto=asunto,
                                              texto_html=texto,
                                              emisor=g_e,
                                              receptores=receptores)
                        if not ok:
                            aviso = '<br>Sin embargo, no se ha podido informar a los afectados.<br>(<i>%s</i>)' % m
                            crear_aviso(request, True, aviso)
                        else:
                            aviso = ''
                        mensaje = 'Durante los próximos 30 días puede ser recuperado por el administrador del sistema.'
                        return JsonResponse({
                            'ok': True,
                            'mensaje': mensaje + aviso
                        })
                    else:
                        return JsonResponse({
                            'ok':
                            False,
                            'mensaje':
                            'No tienes permisos para borrar el documento.'
                        })
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No borrado. El archivo no pertenece a esta entidad.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'descargar_doc':
            try:
                docs = documentos_ge(request)
                d = docs.get(id=request.POST['documento'])
                nombre, dot, ext = d.fich_name.rpartition(
                    '.')  # slugify(d.fich_name.rpartition('.')[0])
                response = HttpResponse(d.fichero, content_type=d.content_type)
                response[
                    'Content-Disposition'] = 'attachment; filename=%s.%s' % (
                        slugify(d.nombre), ext)
                return response
            except:
                crear_aviso(request, False,
                            'Error. No se ha podido descargar el archivo.')
        elif request.POST[
                'action'] == 'ver_formulario_crear_etiqueta' and g_e.has_permiso(
                    'crea_carpetas'):
            try:
                etiquetas = Etiqueta_documental.objects.filter(
                    entidad=g_e.ronda.entidad)
                html = render_to_string("documentos_fieldset_etiqueta.html",
                                        {'etiquetas': etiquetas})
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        elif request.POST[
                'action'] == 'ver_formulario_editar_carpeta' and g_e.has_permiso(
                    'edita_carpetas'):
            try:
                etiquetas = Etiqueta_documental.objects.filter(
                    entidad=g_e.ronda.entidad)
                e = Etiqueta_documental.objects.get(
                    id=request.POST['etiqueta'])
                html = render_to_string(
                    "documentos_fieldset_etiqueta_editar.html", {
                        'etiquetas': etiquetas,
                        'etiqueta': e
                    })
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'modifica_etiqueta' and g_e.has_permiso(
                'edita_carpetas'):
            try:
                nombre = request.POST['nombre']
                try:
                    Etiqueta_documental.objects.get(entidad=g_e.ronda.entidad,
                                                    nombre__iexact=nombre)
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'Ya existe una etiqueta/carpeta con ese nombre.'
                    })
                except:
                    e = Etiqueta_documental.objects.get(
                        id=request.POST['etiqueta'])
                    e.nombre = nombre
                    try:
                        e.padre = Etiqueta_documental.objects.get(
                            id=request.POST['padre'])
                    except:
                        e.padre = None
                    e.save()
                    docs = documentos_ge(request)
                    html = render_to_string('documentos_table_tr.html', {
                        'docs': docs,
                        'g_e': g_e
                    })
                    return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'ver_formulario_buscar':
            try:
                etiquetas = Etiqueta_documental.objects.filter(
                    entidad=g_e.ronda.entidad)
                html = render_to_string("documentos_fieldset_buscar.html", {
                    'etiquetas': etiquetas,
                    'g_e': g_e
                })
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'crea_etiqueta' and g_e.has_permiso(
                'crea_carpetas'):
            try:
                nombre = request.POST['nombre']
                try:
                    e = Etiqueta_documental.objects.get(
                        entidad=g_e.ronda.entidad, nombre__iexact=nombre)
                    return JsonResponse({
                        'ok': False,
                        'mensaje':
                        'Ya existe una etiqueta/carpeta con ese nombre.',
                        'id_etiqueta': e.id,
                        'texto_etiqueta': e.etiquetas_text
                    })
                except:
                    if request.POST['padre']:
                        padre = Etiqueta_documental.objects.get(
                            entidad=g_e.ronda.entidad,
                            id=request.POST['padre'])
                        e = Etiqueta_documental.objects.create(
                            entidad=g_e.ronda.entidad,
                            padre=padre,
                            nombre=nombre)
                    else:
                        e = Etiqueta_documental.objects.create(
                            entidad=g_e.ronda.entidad, nombre=nombre)
                    return JsonResponse({
                        'ok': True,
                        'id_etiqueta': e.id,
                        'texto_etiqueta': e.etiquetas_text
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'borra_etiqueta' and g_e.has_permiso(
                'borra_cualquier_carpeta'):
            try:
                Etiqueta_documental.objects.get(
                    entidad=g_e.ronda.entidad,
                    id=request.POST['etiqueta']).delete()
                docs = documentos_ge(request)
                html = render_to_string('documentos_table_tr.html', {
                    'docs': docs,
                    'g_e': g_e
                })
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'update_page':
            try:
                docs = documentos_ge(request)
                paginator = Paginator(docs, 15)
                buscar = {'0': False, '1': True}[request.POST['buscar']]
                docs_paginados = paginator.page(int(request.POST['page']))
                html = render_to_string('documentos_table.html', {
                    'docs': docs_paginados,
                    'g_e': g_e,
                    'buscar': buscar
                })
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        # elif request.POST['action'] == 'busca_docs_manual':
        #     try:
        #         buscar
        #         docs_search = documentos_ge(request)
        #         html = render_to_string('documentos_table_tr.html', {'docs': docs_search, 'g_e': g_e, 'buscar': True})
        #         return JsonResponse({'ok': True, 'html': html})
        #     except:
        #         return JsonResponse({'ok': False})
        elif request.POST['action'] == 'ver_formulario_editar':
            try:
                doc = Ges_documental.objects.get(id=request.POST['doc'],
                                                 borrado=False)
                if g_e.has_permiso(
                        'edita_todos_archivos') or 'w' in doc.permisos(g_e):
                    etiquetas = Etiqueta_documental.objects.filter(
                        entidad=g_e.ronda.entidad)
                    payload = {'g_e': g_e, 'etiquetas': etiquetas, 'd': doc}
                    # html = render_to_string("documentos_table_tr_archivo_edit.html", payload)
                    html = render_to_string("documentos_fieldset_edit.html",
                                            payload)
                    return JsonResponse({'ok': True, 'html': html})
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes los permisos necesarios.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'update_nombre_archivo':
            try:
                doc = Ges_documental.objects.get(entidad=g_e.ronda.entidad,
                                                 id=request.POST['id'],
                                                 borrado=False)
                permisos_ge = doc.permisos(g_e)
                if 'w' in permisos_ge or 'x' in permisos_ge or g_e.has_permiso(
                        'edita_todos_archivos'):
                    doc.nombre = request.POST['nombre']
                    doc.save()
                    return JsonResponse({'ok': True})
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes los permisos necesarios'
                    })
            except:
                return JsonResponse({
                    'ok': False,
                    'mensaje': 'Se ha producido un error'
                })
        elif request.POST['action'] == 'update_etiquetas_archivo':
            # doc = Ges_documental.objects.get(entidad=g_e.ronda.entidad, id=request.POST['doc'], borrado=False)
            # permisos_ge = doc.permisos(g_e)
            # if 'w' in permisos_ge or 'x' in permisos_ge or g_e.has_permiso('edita_carpetas'):
            #     etiqueta = Etiqueta_documental.objects.get(id=request.POST['etiqueta'], entidad=g_e.ronda.entidad)
            #     doc.etiquetas.add(etiqueta)
            #     html = render_to_string('documentos_list_etiquetas.html',
            #                             {'etiquetas': doc.etiquetas.all(), 'd': doc, 'g_e': g_e})
            #     return JsonResponse({'ok': True, 'html': html})
            try:
                doc = Ges_documental.objects.get(entidad=g_e.ronda.entidad,
                                                 id=request.POST['id'],
                                                 borrado=False)
                permisos_ge = doc.permisos(g_e)
                if 'w' in permisos_ge or 'x' in permisos_ge or g_e.has_permiso(
                        'edita_carpetas'):
                    etiqueta = Etiqueta_documental.objects.get(
                        id=request.POST['etiqueta'], entidad=g_e.ronda.entidad)
                    doc.etiquetas.add(etiqueta)
                    html = render_to_string('documentos_list_etiquetas.html', {
                        'etiquetas': doc.etiquetas.all(),
                        'd': doc,
                        'g_e': g_e
                    })
                    return JsonResponse({'ok': True, 'html': html})
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes los permisos necesarios.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'update_permiso_archivo':
            try:
                cgd = Compartir_Ges_documental.objects.get(
                    documento__entidad=g_e.ronda.entidad,
                    id=request.POST['id'],
                    documento__borrado=False)
                permisos_ge = cgd.documento.permisos(g_e)
                if 'w' in permisos_ge or 'x' in permisos_ge or g_e.has_permiso(
                        'edita_todos_archivos'):
                    cgd.permiso = request.POST['permiso']
                    cgd.save()
                    html_tr = render_to_string(
                        "documentos_table_tr_archivo_compartidocon.html",
                        {'d': cgd.documento})
                    return JsonResponse({
                        'ok': True,
                        'html_tr': html_tr,
                        'doc': cgd.documento.id
                    })
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes los permisos necesarios.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'desasigna_etiquetas_archivo':
            try:
                doc = Ges_documental.objects.get(entidad=g_e.ronda.entidad,
                                                 id=request.POST['doc'],
                                                 borrado=False)
                permisos_ge = doc.permisos(g_e)
                if 'w' in permisos_ge or 'x' in permisos_ge or g_e.has_permiso(
                        'edita_todos_archivos'):
                    etiqueta = Etiqueta_documental.objects.get(
                        id=request.POST['etiqueta'], entidad=g_e.ronda.entidad)
                    doc.etiquetas.remove(etiqueta)
                    html = render_to_string('documentos_list_etiquetas.html', {
                        'etiquetas': doc.etiquetas.all(),
                        'd': doc,
                        'g_e': g_e
                    })
                    return JsonResponse({'ok': True, 'html': html})
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes los permisos necesarios.'
                    })
            except:
                return JsonResponse({'ok': False})
        # elif request.POST['action'] == 'update_archivo':
        #     html = ''
        #     try:
        #         valor = request.POST['valor']
        #         campo = request.POST['campo']
        #         if request.POST['modelo'] == 'Ges_documental':
        #             doc = Ges_documental.objects.get(entidad=g_e.ronda.entidad, id=request.POST['id'], borrado=False)
        #             permisos_ge = doc.permisos(g_e)
        #             if 'w' in permisos_ge or 'x' in permisos_ge:
        #                 if campo == 'etiquetas':
        #                     etiqueta = Etiqueta_documental.objects.get(id=valor, entidad=g_e.ronda.entidad)
        #                     doc.etiquetas.add(etiqueta)
        #                     html = render_to_string('documentos_list_etiquetas.html',
        #                                             {'etiquetas': doc.etiquetas.all()})
        #                 else:
        #                     setattr(doc, campo, valor)
        #                     doc.save()
        #                 return JsonResponse({'ok': True, 'html': html, 'campo': campo})
        #             else:
        #                 return JsonResponse({'ok': False, 'mensaje': 'No tienes los permisos necesarios.'})
        #         else:
        #             cgd = Compartir_Ges_documental.objects.get(id=request.POST['id'])
        #             doc = cgd.documento
        #             if valor in doc.permisos(g_e):
        #                 cgd.permiso = valor
        #                 cgd.save()
        #                 return JsonResponse({'ok': True, 'campo': campo})
        #             else:
        #                 return JsonResponse({'ok': False, 'mensaje': 'No tienes los permisos necesarios.'})
        #     except:
        #         return JsonResponse({'ok': False})

        elif request.POST['action'] == 'update_new_permiso':
            try:
                doc = Ges_documental.objects.get(id=request.POST['doc'],
                                                 borrado=False)
                if 'w' in doc.permisos(g_e) or g_e.has_permiso(
                        'edita_todos_archivos'):
                    ges, cs, ss = decode_selectgcs(
                        [request.POST['seleccionados']], g_e.ronda)
                    for ge in ges:
                        Compartir_Ges_documental.objects.get_or_create(
                            documento=doc, gauser=ge.gauser)
                    for c in cs:
                        Compartir_Ges_documental.objects.get_or_create(
                            documento=doc, cargo=c)
                    for s in ss:
                        Compartir_Ges_documental.objects.get_or_create(
                            documento=doc, subentidad=s)
                    html = render_to_string(
                        "documentos_fieldset_edit_permisos.html", {
                            'd': doc,
                            'g_e': g_e
                        })
                    html_tr = render_to_string(
                        "documentos_table_tr_archivo_compartidocon.html",
                        {'d': doc})
                    return JsonResponse({
                        'ok': True,
                        'html': html,
                        'doc': doc.id,
                        'html_tr': html_tr
                    })
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes permisos para compartir el archivo.'
                    })
            except:
                return JsonResponse({
                    'ok':
                    False,
                    'mensaje':
                    'No existe el archivo solicitado.'
                })
        elif request.POST['action'] == 'borrar_permiso_archivo':
            try:
                cgd = Compartir_Ges_documental.objects.get(
                    id=request.POST['cgd'])
                doc = cgd.documento
                if 'w' in doc.permisos(g_e) or g_e.has_permiso(
                        'edita_todos_archivos'):
                    cgd.delete()
                    return JsonResponse({
                        'ok': True,
                        'cgd': request.POST['cgd']
                    })
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes permisos para borrar compartido.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'fieldset_archivo_editar_close':
            try:
                doc = Ges_documental.objects.get(id=request.POST['doc'],
                                                 borrado=False)
                if 'w' in doc.permisos(g_e) or g_e.has_permiso(
                        'edita_todos_archivos'):
                    html = render_to_string('documentos_table_tr_archivo.html',
                                            {
                                                'd': doc,
                                                'g_e': g_e
                                            })
                    return JsonResponse({
                        'ok': True,
                        'html': html,
                        'doc': doc.id
                    })
                else:
                    return JsonResponse({
                        'ok':
                        False,
                        'mensaje':
                        'No tienes permisos para editar el archivo.'
                    })
            except:
                return JsonResponse({'ok': False})
        elif request.POST['action'] == 'get_etiquetas':
            try:
                etiquetas = Etiqueta_documental.objects.filter(
                    entidad=g_e.ronda.entidad)
                html = render_to_string(
                    "documentos_fieldset_subir_select_etiquetas.html",
                    {'etiquetas': etiquetas})
                return JsonResponse({'ok': True, 'html': html})
            except:
                return JsonResponse({'ok': False})
        else:
            return JsonResponse({
                'ok': False,
                'mensaje': 'Solicitud incorrecta.'
            })

    # -----------
    # for d in Ges_documental.objects.all():
    #     for sub in d.acceden.all():
    #         Compartir_Ges_documental.objects.get_or_create(subentidad=sub, documento=d)
    #     for car in d.cargos.all():
    #         Compartir_Ges_documental.objects.get_or_create(cargo=car, documento=d)
    #     for p in d.permiso_ges_documental_set.all():
    #         c, v = Compartir_Ges_documental.objects.get_or_create(gauser=p.gauser, documento=d)
    #         if 'x' in p.permiso:
    #             c.permiso = 'rwx'
    #         elif 'w' in p.permiso:
    #             c.permiso = 'rw'
    #         else:
    #             c.permiso = 'r'
    #         c.save()
    # -----------
    Etiqueta_documental.objects.get_or_create(entidad=g_e.ronda.entidad,
                                              nombre='General')
    paginator = Paginator(documentos_ge(request), 15)
    return render(
        request, "documentos.html", {
            'iconos': (
                {
                    'tipo': 'button',
                    'nombre': 'plus',
                    'texto': 'Añadir',
                    'permiso': 'sube_archivos',
                    'title': 'Anadir un nuevo documento'
                },
                {
                    'tipo': 'button',
                    'nombre': 'folder',
                    'texto': 'Nueva',
                    'permiso': 'crea_carpetas',
                    'title': 'Crear una nueva carpeta/etiqueta'
                },
                {
                    'tipo':
                    'button',
                    'nombre':
                    'search',
                    'texto':
                    'Buscar/Filtrar',
                    'permiso':
                    'libre',
                    'title':
                    'Busca/Filtra resultados entre los diferentes archivos'
                },
            ),
            'g_e':
            g_e,
            'docs':
            paginator.page(1),
            'formname':
            'documentos',
            'avisos':
            Aviso.objects.filter(usuario=g_e, aceptado=False),
        })
Exemplo n.º 8
0
def ajax_politica_cuotas(request):
    if request.is_ajax():
        g_e = request.session['gauser_extra']
        if request.method == 'POST':
            if request.POST['action'] == 'open_accordion':
                politica = Politica_cuotas.objects.get(id=request.POST['id'])
                remesas_emitidas = Remesa_emitida.objects.filter(visible=True, politica=politica)
                paginator= Paginator(remesas_emitidas, 5)
                html = render_to_string('politica_cuotas_accordion_content.html',
                                        {'politica': politica, 'g_e': g_e, 'remitidas': paginator.page(1)})
                return JsonResponse({'ok': True, 'html': html})
            elif request.POST['action'] == 'crear_politica':
                try:
                    if g_e.has_permiso('crea_politica_cuotas'):
                        politica = Politica_cuotas.objects.create(entidad=g_e.ronda.entidad, tipo_cobro='MEN',
                                                                  concepto='Cuota mensual', cuota='0')
                        html = render_to_string("politica_cuotas_accordion.html", {'politicas': [politica]})
                        return JsonResponse({'ok': True, 'html': html})
                    else:
                        return JsonResponse({'ok': False, 'mensaje': 'No tienes permisos para borrar la política'})
                except:
                    return JsonResponse({'ok': False, 'mensaje': 'Tu petición no ha podido ser atendida.'})
            elif request.POST['action'] == 'borrar_politica':
                try:
                    if g_e.has_permiso('borra_politica_cuotas'):
                        politica = Politica_cuotas.objects.get(id=request.POST['politica'], entidad=g_e.ronda.entidad)
                        politica_id = politica.id
                        politica.delete()
                        return JsonResponse({'ok': True, 'politica': politica_id})
                    else:
                        return JsonResponse({'ok': False, 'mensaje': 'No tienes permisos para borrar la política'})
                except:
                    return JsonResponse({'ok': False, 'mensaje': 'Tu petición no ha podido ser atendida.'})
            elif request.POST['action'] == 'update_page':
                try:
                    politica = Politica_cuotas.objects.get(id=request.POST['politica'])
                    total_remesas_emitidas = Remesa_emitida.objects.filter(visible=True, politica=politica)
                    paginator = Paginator(total_remesas_emitidas, 5)
                    remitidas = paginator.page(int(request.POST['page']))
                    html = render_to_string('remesas_emitidas.html', {'remitidas': remitidas, 'politica': politica})
                    return JsonResponse({'ok': True, 'html': html, 'politica': politica.id})
                except:
                    return JsonResponse({'ok': False})
            elif request.POST['action'] == 'borrar_remesa_emitida':
                try:
                    if g_e.has_permiso('borra_politica_cuotas'):
                        remesa = Remesa_emitida.objects.get(id=request.POST['id'])
                        if remesa.creado.date() < (date.today() - timedelta(1000)):
                            remesa.delete()
                        else:
                            remesa.visible = False
                            remesa.save()
                        politica = Politica_cuotas.objects.get(id=request.POST['politica'])
                        total_remesas_emitidas = Remesa_emitida.objects.filter(visible=True, politica=politica)
                        paginator = Paginator(total_remesas_emitidas, 5)
                        remitidas = paginator.page(int(request.POST['page']))
                        html = render_to_string('remesas_emitidas.html', {'remitidas': remitidas, 'politica': politica})
                        return JsonResponse({'ok': True, 'html': html, 'politica': politica.id})
                    else:
                        return JsonResponse({'ok': False, 'mensaje': 'No tienes permisos para borrar la remesa'})
                except:
                    return JsonResponse({'ok': False})
            elif request.POST['action'] == 'update_exentos':
                try:
                    politica = Politica_cuotas.objects.get(id=request.POST['politica'], entidad=g_e.ronda.entidad)
                    if g_e.has_permiso('crea_politica_cuotas') or g_e.has_permiso('edita_politica_cuotas'):
                        exentos = Gauser_extra.objects.filter(ronda=g_e.ronda,
                                                                 id__in=request.POST.getlist('exentos[]'))
                        exentos_gauser = Gauser.objects.filter(id__in=exentos.values_list('gauser__id', flat=True))
                        politica.exentos.clear()
                        politica.exentos.add(*exentos_gauser)
                        politica.save()
                        return JsonResponse({'ok': True, 'exentos': exentos_gauser.count()})
                except:
                    return JsonResponse({'ok': False})
            elif request.POST['action'] == 'update_campo_text':
                try:
                    politica = Politica_cuotas.objects.get(id=request.POST['politica'], entidad=g_e.ronda.entidad)
                    if g_e.has_permiso('crea_politica_cuotas') or g_e.has_permiso('edita_politica_cuotas'):
                        setattr(politica, request.POST['campo'], request.POST['valor'])
                        politica.save()
                        return JsonResponse({'ok': True})
                except:
                    return JsonResponse({'ok': False})
            elif request.POST['action'] == 'update_campo_select':
                try:
                    politica = Politica_cuotas.objects.get(id=request.POST['politica'], entidad=g_e.ronda.entidad)
                    if g_e.has_permiso('crea_politica_cuotas') or g_e.has_permiso('edita_politica_cuotas'):
                        campo = request.POST['campo']
                        valor = request.POST['valor']
                        if campo == 'cargo':
                            valor = Cargo.objects.get(entidad=g_e.ronda.entidad, id=request.POST['valor'])
                        setattr(politica, campo, valor)
                        politica.save()
                        return JsonResponse({'ok': True})
                except:
                    return JsonResponse({'ok': False})
            # elif request.POST['action'] == 'cargar_no_exentos':
            #     politica = Politica_cuotas.objects.get(id=request.POST['id'])
            #     num = int(request.POST['num'])
            #     data = render_to_string("no_exentos.html", {'numero': num, 'politica': politica})
            #     return HttpResponse(data)
            # elif request.POST['action'] == 'cargar_exentos':
            #     politica = Politica_cuotas.objects.get(id=request.POST['id'])
            #     num = int(request.POST['num'])
            #     data = render_to_string("exentos.html", {'numero': num, 'politica': politica})
            #     return HttpResponse(data)
            elif request.POST['action'] == 'generar_remesas':
                # Para validar el xml generado
                # http://www.mobilefish.com/services/sepa_xml_validation/sepa_xml_validation.php
                politica = Politica_cuotas.objects.get(id=request.POST['politica'])
                if politica.tipo == 'extraord':
                    politica.concepto = request.POST['concepto']
                    politica.cuota = request.POST['cuota']
                    politica.save()
                    usuarios = usuarios_ronda(g_e.ronda).filter(id__in=request.POST.getlist('usuarios[]'))
                    destinatarios = []
                    for u in usuarios:
                        num = 1
                        texto = '%s' % (u.gauser.get_full_name())
                        try:
                            oa = OrdenAdeudo.objects.get(politica=politica, fecha_firma__isnull=False, gauser=u.gauser)
                        except:
                            oa = OrdenAdeudo.objects.none()
                        destinatarios.append({'oa': oa, 'ge': u, 'num': num, 'texto': texto})
                else:
                    destinatarios = politica.destinatarios
                grupo = pass_generator(size=15, chars='abcdefghijkmnopqrstuvwxyz1234567890')
                remesa_emitida = Remesa_emitida.objects.create(grupo=grupo, politica=politica)
                # array_coutas identifica los enteros y floats almacenados en cuota
                # que pueden estar separados por espacios, comas, ... o cualquier secuencia de caracteres:
                importes = politica.array_cuotas
                # Proporciona una secuencia de importes añadiendo el último valor lo suficientemente grande como para
                # asegurar que el número elementos sobre los que se aplica la cuota es superado.
                # Por ejemplo si importes es [30,20,15], después de ser procesado con array_cutoas
                # sería [30,20,15,15,15,15,15,15,15,15,15,15,15,15,...,15,15,15,15,15] con el 15 prolongado mil veces

                datos = create_remesas_info_xls(remesa_emitida, destinatarios)
                remesa_emitida.ctrlsum = datos['ctrlsum']
                remesa_emitida.nboftxs = datos['nboftxs']
                remesa_emitida.reqdcolltndt = date.today() + timedelta(days=4)
                remesa_emitida.save()
                xml = render_to_string("xml_gauss.xml",
                                       {'remesa_emitida': remesa_emitida, 'destinatarios': destinatarios})
                fichero = '%s.xml' % (remesa_emitida.grupo)
                ruta = MEDIA_CONTABILIDAD + str(g_e.ronda.entidad.code) + '/'
                xmlfile = open(ruta + '/' + fichero, "w+")
                xmlfile.write(xml)
                xmlfile.close()
                total_remesas_emitidas = Remesa_emitida.objects.filter(visible=True, politica=politica)
                paginator = Paginator(total_remesas_emitidas, 5)
                html = render_to_string('remesas_emitidas.html', {'remitidas': paginator.page(1), 'politica': politica})
                return JsonResponse({'ok': True, 'html': html, 'politica': politica.id})