Ejemplo n.º 1
0
def comprar_y_vender(request):
    g_e = request.session['gauser_extra']

    if request.method == 'POST':
        if request.POST['action'] == 'introduce_articulo':
            codigo = pass_generator(size=35)
            articulo = Articulo(vendedor=g_e.gauser, entidad=g_e.ronda.entidad, estado='DISPONIBLE',
                                codigo=codigo)
        elif request.POST['action'] == 'modifica_articulo':
            articulo = Articulo.objects.get(id=request.POST['id_articulo'])
        form = Articulo_Form(request.POST, instance=articulo)
        if form.is_valid():
            articulo = form.save()
            articulo.categorias.clear()
            if request.POST['categorias']:
                id_categorias = list(filter(None, request.POST['categorias'].split(',')))
                categorias = Categoria_objeto.objects.filter(id__in=id_categorias)
                articulo.categorias.add(*categorias)
            articulo.fotos.clear()
            if request.POST['fotos_existentes']:
                id_fotos = list(filter(None, request.POST['fotos_existentes'].split(',')))
                fotos_existentes = Foto_objeto.objects.filter(id__in=id_fotos)
                articulo.fotos.add(*fotos_existentes)
            for input_file, object_file in request.FILES.items():
                for fichero in request.FILES.getlist(input_file):
                    if fichero.content_type in ['image/png', 'image/gif', 'image/jpeg']:
                        foto = Foto_objeto.objects.create(entidad=g_e.ronda.entidad, fichero=fichero,
                                                          content_type=fichero.content_type)
                        articulo.fotos.add(foto)
                        foto_url = RUTA_BASE + foto.fichero.url
                        os.system('convert %s -resize 400x %s' % (foto_url, foto_url))
                    else:
                        crear_aviso(request, False,
                                    u'Tipo de imagen: %s, no permitido (sólo jpeg, png y gif)' % (
                                        fichero.content_type))
        else:
            crear_aviso(request, False, form.errors)

    articulos = Articulo.objects.filter(~Q(estado='VENDIDO'), Q(entidad=g_e.ronda.entidad))
    respuesta = {
        'iconos':
            ({'tipo': 'button', 'nombre': 'check', 'texto': 'Aceptar', 'title': 'Aceptar los cambios realizados',
              'permiso': 'libre'},
             {'tipo': 'button', 'nombre': 'plus', 'texto': 'Añadir', 'title': 'Añadir un nuevo artículo o servicio',
              'permiso': 'libre'},
             {'tipo': 'button', 'nombre': 'list-alt', 'texto': 'Artículos', 'title': 'Mostrar la lista de artículos',
              'permiso': 'libre'},
             ),
        'formname': 'compraventa',
        'articulos': articulos,
        'avisos': Aviso.objects.filter(usuario=request.session["gauser_extra"], aceptado=False),
    }
    return render(request, "compra_y_venta.html", respuesta)
Ejemplo n.º 2
0
def documento_seguridad(request):
    g_e = request.session["gauser_extra"]
    doc_seguridad = render_to_string('doc_seguridad_general.html', {},
                                     request=request)
    try:
        estructura_lopd = Estructura_lopd.objects.get(
            entidad=g_e.ronda.entidad)
        estructura_lopd.doc_seguridad = doc_seguridad
        estructura_lopd.save()
    except:
        estructura_lopd = Estructura_lopd.objects.create(
            entidad=g_e.ronda.entidad,
            doc_seguridad=doc_seguridad,
            encargado_tratamiento=
            "Sistemas de Gestión Aumentada (NIF: 18034131S)")
    if request.method == 'POST':
        if request.POST['action'] == 'genera_pdf':
            crear_aviso(
                request, True, request.META['PATH_INFO'] +
                ' POST genera PDF del documento de seguridad')

            fichero = 'Documento_Seguridad_%s' % (g_e.ronda.entidad.id)
            fich = html_to_pdf(request,
                               doc_seguridad,
                               fichero=fichero,
                               media=MEDIA_LOPD,
                               title=u'Doc_Seguridad',
                               tipo='doc')
            response = HttpResponse(fich, content_type='application/pdf')
            response[
                'Content-Disposition'] = 'attachment; filename=' + fichero + '.pdf'
            return response

    return render(
        request, "documento_seguridad.html", {
            'formname':
            'documento_seguridad',
            'iconos': ({
                'nombre': 'file-pdf-o',
                'texto': 'PDF',
                'title': 'Generar PDF del documento',
                'permiso': 'm70'
            }, ),
            'estructura_lopd':
            estructura_lopd,
            'avisos':
            Aviso.objects.filter(usuario=request.session["gauser_extra"],
                                 aceptado=False),
        })
Ejemplo n.º 3
0
def responsables_lopd(request):
    g_e = request.session["gauser_extra"]
    try:
        estructura_lopd = Estructura_lopd.objects.get(
            entidad=g_e.ronda.entidad)
    except:
        doc_seguridad = render_to_string('doc_seguridad_general.html', {},
                                         request=request)
        estructura_lopd = Estructura_lopd.objects.create(
            entidad=g_e.ronda.entidad,
            doc_seguridad=doc_seguridad,
            encargado_tratamiento=
            "Sistemas de Gestión Aumentada (NIF: 18034131S)")
    if request.method == 'POST':
        crear_aviso(request, True, request.META['PATH_INFO'] + ' POST')
        form = Estructura_lopdForm(request.POST)
        if form.is_valid():
            form = Estructura_lopdForm(request.POST, instance=estructura_lopd)
            form.save()
            crear_aviso(
                request, False,
                u'<p>Estructura de LOPD modificada/guardada correctamente.</p>'
            )
        else:
            crear_aviso(request, False, form.errors)
            form = Estructura_lopdForm(request.POST)
    else:
        crear_aviso(request, True, request.META['PATH_INFO'])
        form = Estructura_lopdForm(instance=estructura_lopd)

    # cargos_entidad = Cargo.objects.filter(entidad=g_e.ronda.entidad)
    # cargos = Gauser_extra.objects.filter(cargos__in = cargos_entidad)
    hoy = datetime.date.today()
    fecha_minima = datetime.datetime(hoy.year, hoy.month, hoy.day)
    cargos = Gauser_extra.objects.filter(ronda=g_e.ronda,
                                         gauser__nacimiento__lte=fecha_minima)
    return render(
        request, "responsables_lopd.html", {
            'formname':
            'estructura_lopd',
            'iconos': ({
                'nombre': 'check',
                'texto': 'Aceptar',
                'title': 'Aceptar los cambios realizados',
                'permiso': 'modifica_responsables_fichero'
            }, ),
            'form':
            form,
            'estructura_lopd':
            estructura_lopd,
            'cargos':
            cargos,
            'avisos':
            Aviso.objects.filter(usuario=request.session["gauser_extra"],
                                 aceptado=False),
        })
Ejemplo n.º 4
0
def firmar_orden_adeudo(request, id_oa):
    g_e = request.session['gauser_extra']
    if request.method == 'POST' and request.is_ajax():
        if request.POST['action'] == 'guarda_firma':
            try:
                orden_adeudo = OrdenAdeudo.objects.get(id=request.POST['orden_adeudo'], gauser=g_e.gauser)
                firma_data = request.POST['firma']
                format, imgstr = firma_data.split(';base64,')
                ext = format.split('/')[-1]
                orden_adeudo.firma = ContentFile(base64.b64decode(imgstr), name='temp.' + ext)
                orden_adeudo.fecha_firma = date.today()
                orden_adeudo.save()
                orden_adeudo.texto_firmado = render_to_string('orden_adeudo2pdf.html', {'orden': orden_adeudo,
                                                                                        'firma_data': firma_data})
                orden_adeudo.save()
                crear_aviso(request, False, 'Orden de adeudo firmada correctamente.')
                return JsonResponse({'ok': True})
            except:
                crear_aviso(request, False, 'Se ha producido un error en tu solicitud.')
                return JsonResponse({'ok': False})
    try:
        orden_firma = OrdenAdeudo.objects.get(gauser=g_e.gauser, politica__entidad=g_e.ronda.entidad,
                                              fecha_firma__isnull=True, id=id_oa)
    except:
        crear_aviso(request, False, 'Se ha producido un error en tu solicitud.')
        return redirect('/mis_ordenes_adeudo/')
    return render(request, "firmar_orden_adeudo.html",
                  {
                      'formname': 'firmar_orden_adeudo',
                      'orden_firma': orden_firma
                  })
Ejemplo n.º 5
0
def confidencialidad(request):
    g_e = request.session["gauser_extra"]
    doc_seguridad = render_to_string('doc_seguridad_general.html', {},
                                     request=request)
    try:
        estructura_lopd = Estructura_lopd.objects.get(
            entidad=g_e.ronda.entidad)
        estructura_lopd.doc_seguridad = doc_seguridad
        estructura_lopd.save()
    except:
        estructura_lopd = Estructura_lopd.objects.create(
            entidad=g_e.ronda.entidad,
            doc_seguridad=doc_seguridad,
            encargado_tratamiento=
            "Sistemas de Gestión Aumentada (NIF: 18034131S)")
    if request.method == 'POST':
        if request.POST['action'] == 'aceptar':
            tipo = request.POST['contrato']
            texto_html = {
                'CONF':
                render_to_string('confidencialidad_personal.html', {
                    'estructura_lopd': estructura_lopd,
                },
                                 request=request)
            }
            crear_aviso(
                request, True, request.META['PATH_INFO'] +
                ' Firma contrato de confidencialidad')

            fichero = 'Contrato_%s_%s' % (tipo, g_e.gauser.username)
            fich = html_to_pdf(request,
                               texto_html[tipo],
                               fichero=fichero,
                               media=MEDIA_LOPD + str(g_e.ronda.entidad.code) +
                               '/',
                               title=u'Firma de confidencialidad de %s' %
                               (g_e.gauser.get_full_name()))

            doc = Ges_documental.objects.create(
                propietario=g_e,
                nombre='Contrato de confidencialidad de %s' %
                (g_e.gauser.get_full_name()),
                texto=texto_html[tipo],
                fichero=File(fich),
                content_type='application/pdf')
            cargos = Cargo.objects.filter(entidad=g_e.ronda.entidad,
                                          nivel__in=[1, 2])
            doc.cargos.add(*cargos)
            fich.close()

    return render(
        request, "contratos_confidencialidad.html", {
            'formname':
            'confidencialidad',
            'iconos': ({
                'nombre': 'check',
                'texto': 'Aceptar',
                'title': 'Enviar la solicitud a los interesados',
                'permiso': 'm70i20'
            }, ),
            'estructura_lopd':
            estructura_lopd,
            'avisos':
            Aviso.objects.filter(usuario=request.session["gauser_extra"],
                                 aceptado=False),
        })
Ejemplo n.º 6
0
def inventario_soportes(request):
    g_e = request.session['gauser_extra']
    form = Soporte_lopdForm()
    if request.method == 'POST':
        if request.POST['action'] == 'guardar_soporte':
            soporte = Soporte_lopd(entidad=g_e.ronda.entidad)
            form = Soporte_lopdForm(request.POST, instance=soporte)
            if form.is_valid():
                soporte = form.save()
                crear_aviso(request, True,
                            u'Soporte guardado: %s' % (soporte.nombre))
            else:
                crear_aviso(request, False, form.errors)

        if request.POST['action'] == 'borrar_soporte':
            soportes_id = request.POST['id_soporte'].split(',')
            soportes = Soporte_lopd.objects.filter(id__in=soportes_id)
            for soporte in soportes:
                if g_e.has_cargos([1, 2]):
                    soporte.delete()
                    crear_aviso(request, True,
                                u'Se borra soporte: %s' % (soporte.nombre))
                else:
                    crear_aviso(
                        request, False,
                        u'No tienes permisos para borrar el soporte: %s.' %
                        (soporte.nombre))

    soportes = Soporte_lopd.objects.filter(
        entidad=g_e.ronda.entidad).order_by('-creado')
    return render(
        request, "soportes_lopd.html", {
            'iconos': (
                {
                    'tipo': 'button',
                    'nombre': 'check',
                    'texto': 'Aceptar',
                    'permiso': 'modifica_inventario_soportes',
                    'title': 'Grabar el soporte introducido'
                },
                {
                    'tipo': 'button',
                    'nombre': 'plus',
                    'texto': 'Anadir',
                    'permiso': 'modifica_inventario_soportes',
                    'title': 'Anadir un nuevo soporte'
                },
                {
                    'tipo': 'button',
                    'nombre': 'trash-o',
                    'texto': 'Borrar',
                    'permiso': 'modifica_inventario_soportes',
                    'title': 'Eliminar el soporte seleccionado'
                },
                {
                    'tipo': 'button',
                    'nombre': 'list-alt',
                    'texto': 'Lista',
                    'permiso': 'modifica_inventario_soportes',
                    'title': 'Volver a mostrar la lista de soportes'
                },
            ),
            'form':
            form,
            'formname':
            'soportes',
            'soportes':
            soportes,
            'avisos':
            Aviso.objects.filter(usuario=g_e, aceptado=False),
        })
Ejemplo n.º 7
0
def incidencias_lopd(request):
    g_e = request.session["gauser_extra"]
    incidencias = Incidencia_lopd.objects.filter(
        emisor_incidencia__ronda=g_e.ronda,
        resuelta=False).order_by('-fecha_emite')
    incidencias_solved = Incidencia_lopd.objects.filter(
        emisor_incidencia__ronda=g_e.ronda,
        resuelta=True).order_by('-fecha_emite')
    estructura_lopd = Estructura_lopd.objects.filter(entidad=g_e.ronda.entidad)
    form_emitir = Incidencia_lopdForm()
    form_resolver = ResuelveIncidencia_lopdForm()
    if request.method == 'POST':
        if request.POST['action'] == 'graba_incidencia':
            incidencia = Incidencia_lopd(emisor_incidencia=g_e)
            form = Incidencia_lopdForm(request.POST, instance=incidencia)
            if form.is_valid():
                form.save()
                crear_aviso(
                    request, True, request.META['PATH_INFO'] +
                    ' Se graba una nueva incidencia LOPD')
            else:
                crear_aviso(request, False, form.errors)

        if request.POST['action'] == 'resuelve_incidencia':
            incidencia = Incidencia_lopd.objects.get(
                id=request.POST['id_incidencia'])
            form = ResuelveIncidencia_lopdForm(request.POST,
                                               instance=incidencia)
            if form.is_valid():
                form.save()
                incidencia.resuelta = True
                incidencia.resolvedor = g_e
                incidencia.fecha_resuelve = datetime.date.today()
                incidencia.save()
                crear_aviso(
                    request, True, request.META['PATH_INFO'] +
                    ' Se graba una nueva incidencia LOPD')
            else:
                crear_aviso(request, False, form.errors)

        if request.POST['action'] == 'mostrar_incidencia':
            if request.is_ajax():
                incidencia = Incidencia_lopd.objects.get(
                    id=request.POST['id_incidencia'])
                return HttpResponse(incidencia.incidencia)

    return render(
        request, "incidencias_lopd.html", {
            'formname':
            'documento_seguridad',
            'iconos': (
                {
                    'tipo': 'button',
                    'nombre': 'check',
                    'texto': 'Aceptar',
                    'permiso': 'm70',
                    'title': 'Guardar los cambios realizados'
                },
                {
                    'tipo': 'button',
                    'nombre': 'plus',
                    'texto': 'Anadir',
                    'permiso': 'm70',
                    'title': 'Añadir una nueva incidencia LOPD'
                },
                {
                    'tipo': 'button',
                    'nombre': 'trash-o',
                    'texto': 'Borrar',
                    'permiso': 'resuelve_incidencias_lopd',
                    'title': 'Eliminar la incidencia seleccionada'
                },
                {
                    'tipo': 'button',
                    'nombre': 'list-alt',
                    'texto': 'Lista',
                    'permiso': 'm70',
                    'title': 'Volver a mostrar la lista de incidencias'
                },
            ),
            'form_emitir':
            form_emitir,
            'estructura_lopd':
            estructura_lopd,
            'form_resolver':
            form_resolver,
            'incidencias':
            incidencias,
            'incidencias_solved':
            incidencias_solved,
            'avisos':
            Aviso.objects.filter(usuario=request.session["gauser_extra"],
                                 aceptado=False),
        })
Ejemplo n.º 8
0
def derechos_arco(request):
    g_e = request.session["gauser_extra"]
    doc_seguridad = render_to_string('doc_seguridad_general.html', {},
                                     request=request)
    try:
        estructura_lopd = Estructura_lopd.objects.get(
            entidad=g_e.ronda.entidad)
        estructura_lopd.doc_seguridad = doc_seguridad
        estructura_lopd.save()
    except:
        estructura_lopd = Estructura_lopd.objects.create(
            entidad=g_e.ronda.entidad,
            doc_seguridad=doc_seguridad,
            encargado_tratamiento=
            "Sistemas de Gestión Aumentada (NIF: 18034131S)")
    if request.method == 'POST':
        if request.POST['action'] == 'aceptar':
            tipo = request.POST['derecho']
            tipos_incidencia = dict(TIPOS_INCIDENCIA)
            texto_html = {
                'DEAC':
                render_to_string('derecho_acceso.html', {
                    'estructura_lopd': estructura_lopd,
                },
                                 request=request),
                'DERE':
                render_to_string(
                    'derecho_rectificacion.html', {
                        'estructura_lopd': estructura_lopd,
                        'datos_rectificar': request.POST['datos_rectificar']
                    },
                    request=request),
                'DECA':
                render_to_string('derecho_cancelacion.html', {
                    'estructura_lopd': estructura_lopd,
                },
                                 request=request),
                'DEOP':
                render_to_string('derecho_oposicion.html', {
                    'estructura_lopd': estructura_lopd,
                },
                                 request=request)
            }
            crear_aviso(
                request, True,
                request.META['PATH_INFO'] + ' Ejerce derecho de ' + tipo)
            incidencia = Incidencia_lopd.objects.create(
                emisor_incidencia=g_e, tipo=tipo, incidencia=texto_html[tipo])
            for input_file, object_file in request.FILES.items():
                for fichero in request.FILES.getlist(input_file):
                    archivo = Fichero_incidencia.objects.create(
                        propietario=g_e, fichero=fichero)
                    incidencia.ficheros.add(archivo)

            fichero = 'Incidencia_%s' % (incidencia.id)
            attach = ''
            for archivo in incidencia.ficheros.all():
                attach += MEDIA_INCIDENCIAS_LOPD + str(
                    g_e.ronda.entidad.code) + '/' + archivo.filename() + ' '
            fich = html_to_pdf(request,
                               texto_html[tipo],
                               fichero=fichero,
                               media=MEDIA_INCIDENCIAS_LOPD +
                               str(g_e.ronda.entidad.code) + '/',
                               title=u'Incidencia LOPD generada por %s' %
                               (g_e.gauser.get_full_name()),
                               attach=attach)

            doc = Ges_documental.objects.create(propietario=g_e,
                                                nombre='Incidencia: %s' %
                                                (tipos_incidencia[tipo]),
                                                texto=texto_html[tipo],
                                                fichero=File(fich),
                                                content_type='application/pdf')
            cargos = Cargo.objects.filter(entidad=g_e.ronda.entidad,
                                          nivel__in=[1, 2])
            doc.cargos.add(*cargos)
            fich.close()

    return render(
        request, "derechos_arco.html", {
            'formname':
            'derechos_arco',
            'iconos': ({
                'nombre': 'check',
                'texto': 'Aceptar',
                'title': 'Enviar la solicitud a los interesados',
                'permiso': 'm70i20'
            }, ),
            'estructura_lopd':
            estructura_lopd,
            'avisos':
            Aviso.objects.filter(usuario=request.session["gauser_extra"],
                                 aceptado=False),
        })
Ejemplo n.º 9
0
def sancionar_conductas(request):
    g_e = request.session['gauser_extra']

    inf_actual = None
    if request.method == 'POST' and not request.is_ajax():
        if request.POST['action'] == 'genera_pdf':
            doc_ie = 'Configuración de informes sancionadores de alumnos'
            dce = get_dce(entidad=g_e.ronda.entidad, nombre=doc_ie)
            informe = Informe_sancionador.objects.get(
                sancionado__ronda=g_e.ronda, id=request.POST['inf_actual'])
            coherente, mensaje = informe.is_coherente
            if coherente:
                if informe.fichero:
                    os.remove(informe.fichero.path)
                listar_conductas, informes, expulsiones = False, None, None
                if 'listar_conductas' in request.POST:
                    listar_conductas = True
                    informes = Informe_sancionador.objects.filter(
                        sancionado=informe.sancionado)
                    sanciones_expulsion = Sancion.objects.filter(
                        entidad=g_e.ronda.entidad, expulsion=True)
                    expulsiones = informes.filter(
                        sanciones__in=sanciones_expulsion)
                # Código para enviar correo
                asunto = render_to_string(
                    'informe_sancionador_mail_asunto.html',
                    {'informe': informe})
                texto = render_to_string('informe_sancionador_mail.html',
                                         {'informe': informe})
                permisos = ['recibe_mensajes_aviso_informes_sancionadores']
                cargos = Cargo.objects.filter(
                    permisos__code_nombre__in=permisos,
                    entidad=g_e.ronda.entidad).distinct()
                try:
                    tutor = informe.sancionado.gauser_extra_estudios.tutor.id
                    q = Q(permisos__code_nombre__in=permisos) | Q(
                        cargos__in=cargos) | Q(id=tutor)
                except:
                    q = Q(permisos__code_nombre__in=permisos) | Q(
                        cargos__in=cargos)
                receptores = Gauser_extra.objects.filter(
                    Q(activo=True), Q(ronda=g_e.ronda),
                    q).values_list('gauser__id', flat=True).distinct()
                try:
                    # Comprobamos si un mensaje igual se ha mandado ya
                    Mensaje.objects.get(emisor=g_e,
                                        asunto=asunto,
                                        mensaje=texto)
                except:
                    mc = Mensaje_cola.objects.filter(mensaje__emisor=g_e,
                                                     mensaje__asunto=asunto,
                                                     enviado=False)
                    if mc.count() > 0:
                        mc[0].mensaje.delete()
                        mc.delete()
                    encolar_mensaje(emisor=g_e,
                                    receptores=receptores,
                                    asunto=asunto,
                                    html=texto,
                                    etiqueta='is%s' % informe.id)
                # Fin de código para enviar correo
                texto_html = render_to_string(
                    'is2pdf.html', {
                        'informe': informe,
                        'MEDIA_ANAGRAMAS': MEDIA_ANAGRAMAS,
                        'listar_conductas': listar_conductas,
                        'expulsiones': expulsiones,
                        'informes': informes
                    })
                nombre = '%s_%s.pdf' % (
                    slugify(informe.sancionado.gauser.get_full_name()),
                    timezone.localtime(
                        informe.created).strftime('%d-%m-%Y_%H%M'))
                url_pdf = MEDIA_CONVIVENCIA + '%s/%s' % (
                    g_e.ronda.entidad.code, nombre)
                pdfkit.from_string(texto_html, url_pdf, dce.get_opciones)
                fich = open(url_pdf, 'rb')
                informe.texto_html = texto_html
                nombre_fichero = 'convivencia/%s/%s' % (g_e.ronda.entidad.code,
                                                        nombre)
                informe.fichero.save(nombre_fichero, File(fich))
                fich.close()
                informe.save()
                response = HttpResponse(informe.fichero,
                                        content_type='application/pdf')
                response[
                    'Content-Disposition'] = 'attachment; filename=%s' % nombre
                return response
            else:
                inf_actual = informe
                crear_aviso(request, False, '<ul>%s</ul>' % mensaje)
        if request.POST['action'] == 'descargar_informe':
            informe = Informe_sancionador.objects.get(
                sancionado__ronda=g_e.ronda, id=request.POST['inf_descargar'])
            filename = informe.fichero.name.split('/')[-1]
            response = HttpResponse(informe.fichero,
                                    content_type='application/pdf')
            response[
                'Content-Disposition'] = 'attachment; filename=%s' % filename
            return response

    informes = Informe_sancionador.objects.filter(Q(sancionador=g_e),
                                                  ~Q(fichero=''))
    informes_como_tutor = Informe_sancionador.objects.filter(
        Q(sancionado__gauser_extra_estudios__tutor=g_e),
        ~Q(fichero='')).exclude(id__in=informes)
    respuesta = {
        'iconos': ({
            'tipo': 'button',
            'nombre': 'file-pdf-o',
            'texto': 'Generar',
            'title': 'Generar informe sancionador',
            'permiso': 'genera_informe_sancionador'
        }, ),
        'formname':
        'gestionar_conductas',
        'conductas':
        Conducta.objects.filter(entidad=g_e.ronda.entidad),
        'sanciones':
        Sancion.objects.filter(entidad=g_e.ronda.entidad),
        'informes':
        informes,
        'informes_como_tutor':
        informes_como_tutor,
        'inf_actual':
        inf_actual,
        'avisos':
        Aviso.objects.filter(usuario=g_e, aceptado=False),
    }
    return render(request, "sancionar_conductas.html", respuesta)
Ejemplo n.º 10
0
def uniformes(request):
    g_e = request.session['gauser_extra']
    hijos = Gauser_extra.objects.filter(Q(ronda=g_e.ronda),
                                        Q(tutor1=g_e) | Q(tutor2=g_e))
    uniformes = Uniforme.objects.filter(
        Q(solicitante__entidad=g_e.ronda.entidad),
        Q(entregado=False) | Q(pagado=False)).order_by('tipo')
    uniformes_solicitados = Uniforme.objects.filter(
        Q(solicitante=g_e) | Q(gauser_extra__in=hijos)).distinct()

    if request.method == 'POST':
        if request.POST['action'] == 'aceptar':
            uniforme = Uniforme(solicitante=g_e, pagado=False, entregado=False)
            form = UniformeForm(request.POST, instance=uniforme)
            if form.is_valid():
                form.save()
                crear_aviso(
                    request, False,
                    'Tu solicitud de uniforme ha sido guardada correctamente')
            else:
                crear_aviso(request, False, form.errors)
        if request.POST['action'] == 'mod_pedidos':
            pagados_id = request.POST.getlist('pagados')
            ids = map(int, filter(None, pagados_id))
            for uniforme in uniformes.filter(id__in=ids):
                uniforme.pagado = True
                uniforme.save()
            entregados_id = request.POST.getlist('entregados')
            ids = map(int, filter(None, entregados_id))
            for uniforme in uniformes.filter(id__in=ids):
                uniforme.entregado = True
                uniforme.save()

        if request.POST['action'] == 'genera_pdf':
            fichero = 'Uniformidad_%s_%s' % (g_e.ronda.entidad.id,
                                             g_e.ronda.id)
            c = render_to_string('uniformes2pdf.html',
                                 {'uniformes': uniformes},
                                 request=request)
            fich = html_to_pdf(request,
                               c,
                               fichero=fichero,
                               media=MEDIA_VESTUARIOS,
                               title=u'Solicitudes de uniformes')
            response = HttpResponse(fich, content_type='application/pdf')
            response[
                'Content-Disposition'] = 'attachment; filename=' + fichero + '.pdf'
            return response

        if request.POST['action'] == 'borrar_uniforme':
            uniformes_id = request.POST.getlist('uniforme_id')
            ids = map(int, filter(None, uniformes_id))
            Uniforme.objects.filter(id__in=ids).delete()

    form = UniformeForm()
    respuesta = {
        'iconos': (
            {
                'tipo': 'button',
                'nombre': 'check',
                'texto': 'Aceptar',
                'title': 'Aceptar los cambios realizados',
                'permiso': 'libre'
            },
            {
                'tipo': 'button',
                'nombre': 'list-alt',
                'texto': 'Solicitudes',
                'title': 'Ver la lista de pedidos',
                'permiso': 've_lista_uniformes'
            },
            {
                'tipo': 'button',
                'nombre': 'file-pdf-o',
                'texto': 'PDF',
                'title': 'Genera pdf con la lista de pedidos',
                'permiso': 've_lista_uniformes'
            },
            {
                'tipo': 'button',
                'nombre': 'shopping-cart',
                'texto': 'Pedido',
                'title': 'Mostrar el formulario para realizar pedido',
                'permiso': 've_lista_uniformes'
            },
            {
                'tipo': 'button',
                'nombre': 'trash-o',
                'texto': 'Borrar',
                'title': 'Eliminar el pedido de uniforme indicado',
                'permiso': 'libre'
            },
        ),
        'formname':
        'uniformes',
        'form':
        form,
        'hijos':
        hijos,
        'uniformes':
        uniformes,
        'uniformes_solicitados':
        uniformes_solicitados,
        'avisos':
        Aviso.objects.filter(usuario=request.session["gauser_extra"],
                             aceptado=False),
    }

    return render(request, "uniformes.html", respuesta)
Ejemplo n.º 11
0
def contrato_gauss(request):
    g_e = request.session['gauser_extra']
    try:
        contrato = Contrato_gauss.objects.get(entidad=g_e.ronda.entidad)
    except:
        Gn = g_e.ronda.entidad.get__general_name__display()
        La_entidad = 'La %s' % (
            Gn) if g_e.ronda.entidad.general_name < 100 else 'El %s' % (Gn)
        la_entidad = 'la %s' % (
            Gn) if g_e.ronda.entidad.general_name < 100 else 'el %s' % (Gn)
        a_la_entidad = 'a la %s' % (
            Gn) if g_e.ronda.entidad.general_name < 100 else 'al %s' % (Gn)
        de_la_entidad = 'de la %s' % (
            Gn) if g_e.ronda.entidad.general_name < 100 else 'del %s' % (Gn)

        texto = render_to_string(
            "texto_contrato_gauss.html", {
                'Gn': Gn,
                'La_entidad': La_entidad,
                'la_entidad': la_entidad,
                'de_la_entidad': de_la_entidad,
                'a_la_entidad': a_la_entidad
            })
        contrato = Contrato_gauss.objects.create(entidad=g_e.ronda.entidad,
                                                 firma_entidad=g_e,
                                                 texto=texto)
    if request.method == 'POST':
        if request.POST[
                'action'] == 'guardar_modificaciones' and g_e.has_permiso(
                    'guarda_modificaciones_contrato'):
            form = Contrato_gaussForm(request.POST, instance=contrato)
            if form.is_valid():
                contrato = form.save()
                crear_aviso(
                    request, True,
                    u'Modificación del contrato de la entidad %s guardada.' %
                    (g_e.ronda.entidad.name))
            else:
                crear_aviso(request, False, form.errors)

        if request.POST['action'] == 'subir_contrato' and g_e.has_permiso(
                'puede_subir_contrato'):
            contrato.content_type = request.FILES['fichero'].content_type
            # contrato.save()
            # a = request.FILES['fichero'].content_type
            form = Contrato_gaussForm(request.POST,
                                      request.FILES,
                                      instance=contrato)
            if form.is_valid():
                contrato = form.save()
                crear_aviso(
                    request, True,
                    u'Se ha subido el contrato escaneado de la entidad %s.' %
                    (g_e.ronda.entidad.name))
            else:
                crear_aviso(request, False, form.errors)

        if request.POST['action'] == 'bajar_contrato':
            contrato = Contrato_gauss.objects.get(entidad=g_e.ronda.entidad)
            try:
                fichero = contrato.fichero.read()
                response = HttpResponse(fichero,
                                        content_type=contrato.content_type)
                response['Content-Disposition'] = 'attachment; filename=Contrato_gauss.' + \
                                                  contrato.fichero.url.split('.')[-1]
                return response
            except:
                crear_aviso(
                    request, False,
                    u'Todavía no se ha subido un archivo con el contrato escaneado.'
                )

        if request.POST['action'] == 'obtener_pdf':
            dce = DocConfEntidad.objects.get(entidad=g_e.ronda.entidad,
                                             predeterminado=True)
            contrato = Contrato_gauss.objects.get(entidad=g_e.ronda.entidad)
            fichero = 'Contrato_GAUSS_sin_firmar'
            c = render_to_string('contrato_gauss2pdf.html', {
                'contrato': contrato,
                'MA': MEDIA_ANAGRAMAS
            },
                                 request=request)
            fich = pdfkit.from_string(c, False, dce.get_opciones)
            response = HttpResponse(fich, content_type='application/pdf')
            response[
                'Content-Disposition'] = 'attachment; filename=' + fichero + '.pdf'
            return response

    form = Contrato_gaussForm(instance=contrato)
    return render(
        request, "contrato_gauss.html", {
            'iconos': (
                {
                    'tipo': 'button',
                    'nombre': 'file-pdf-o',
                    'texto': 'PDF',
                    'permiso': 'descarga_contrato_pdf',
                    'title': 'Obtener PDF del contrato'
                },
                {
                    'tipo': 'button',
                    'nombre': 'upload',
                    'texto': 'Subir',
                    'permiso': 'puede_subir_contrato',
                    'title': 'Subir el contrato escaneado con firmas'
                },
                {
                    'tipo': 'button',
                    'nombre': 'download',
                    'texto': 'Descargar',
                    'permiso': 'puede_descargar_contrato',
                    'title': 'Descargar el contrato escaneado con firmas'
                },
                {
                    'tipo': 'button',
                    'nombre': 'check',
                    'texto': 'Guardar',
                    'permiso': 'guarda_modificaciones_contrato',
                    'title': 'Guardar modificaciones del contrato'
                },
            ),
            'form':
            form,
            'formname':
            'contrato_gauss',
            'avisos':
            Aviso.objects.filter(usuario=g_e, aceptado=False),
        })
Ejemplo n.º 12
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),
        })
Ejemplo n.º 13
0
def crea_evento(request):
    g_e = request.session["gauser_extra"]
    vista_actual = request.GET['v']
    if request.method == 'POST':
        form = VeventForm(request.POST)
        if form.is_valid():
            vevent = form.save()
            dtstart = datetime.strptime(request.POST['dtstart'], "%d/%m/%Y %H:%M")
            vevent.entidad = g_e.ronda.entidad
            if 'festivo' in request.POST:
                if request.POST['festivo'] == '0':
                    vevent.festivo = False
                elif request.POST['festivo'] == '1':
                    vevent.festivo = True
            if not vevent.dtend:
                vevent.dtend = datetime.combine(dtstart, datetime.max.time())
            else:
                vevent.dtend = datetime.strptime(request.POST['dtend'], "%d/%m/%Y %H:%M")
            vevent.dtstart = dtstart
            vevent.save()
            crear_aviso(request, True, "Se graba un nuevo evento con id %s" % (vevent.id))
            if request.POST['send_telegram'] == 'true':
                # 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'Nuevo evento: ' + 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()):
                    mensaje.receptores.add(ge.gauser)
                crea_mensaje_cola(mensaje)
            if request.POST['send_correo'] == 'true':
                texto_telegram = render_to_string('evento_informar_telegram.html',
                                                  {'vevent': vevent, 'actualizador': g_e, 'tipo': 'Nuevo'})
                envia_telegram(g_e, texto_telegram, gausers=vevent.invitados.all(),
                               subentidades=vevent.subentidades.all())

            # En este punto se han encolado los correos electrónicos y telegrams. Se enviarán según kronos
            return redirect('/calendario/?fecha=%s&v=%s' % (vevent.dtstart.strftime('%d%m%Y'), vista_actual))
        else:
            errores = form.errors
            data = errores
            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>'
            crear_aviso(request, False, data)

    return render(request, "crea_evento.html",
                  {
                      'iconos':
                          ({'tipo': 'button', 'nombre': 'check', 'texto': 'Aceptar', 'permiso': 'crea_eventos',
                            'title': 'Grabar el nuevo evento/acontecimiento'},
                           {'tipo': 'button', 'nombre': 'arrow-left', 'texto': 'Cancelar',
                            'title': 'Cancelar y volver a ver el calendario', 'permiso': 'crea_eventos'},
                           {'tipo': 'button', 'nombre': 'file-pdf-o', 'texto': 'PDF', 'permiso': 'crea_eventos',
                            'title': 'Genera documento PDF con tus eventos marcados en el calendario'},
                           ),
                      'formname': 'Crea_evento',
                      'avisos': Aviso.objects.filter(usuario=g_e, aceptado=False),
                      'form': VeventForm(),
                      'vista_actual': vista_actual,
                      'subentidades': Subentidad.objects.filter(entidad=g_e.ronda.entidad,
                                                                fecha_expira__gt=datetime.today()),
                      'cargos': Cargo.objects.filter(entidad=g_e.ronda.entidad),
                      'fecha': datetime.strptime(request.GET['f'], '%d%m%Y')
                  })
Ejemplo n.º 14
0
def presupuestos(request):
    g_e = request.session["gauser_extra"]
    if request.method == 'POST':
        if request.POST['action'] == 'pdf_presupuesto':
            dce = get_dce(g_e.ronda.entidad, 'Configuración de informes de contabilidad')
            presupuesto = Presupuesto.objects.get(id=request.POST['id_presupuesto'], entidad=g_e.ronda.entidad)
            partidas = Partida.objects.filter(presupuesto=presupuesto)
            gastos = partidas.filter(tipo='GASTO').aggregate(gasto_total=Sum('cantidad'))
            ingresos = partidas.filter(tipo='INGRE').aggregate(ingreso_total=Sum('cantidad'))
            fichero = 'presupuesto_%s_%s' % (g_e.ronda.entidad.id, presupuesto.id)
            c = render_to_string('presupuesto2pdf.html',
                                 {'presupuesto': presupuesto, 'partidas': partidas, 'gastos': gastos,
                                  'ingresos': ingresos})
            fich = pdfkit.from_string(c, False, dce.get_opciones)
            logger.info('%s, pdf_presupuesto' % g_e)
            response = HttpResponse(fich, content_type='application/pdf')
            response['Content-Disposition'] = 'attachment; filename=' + fichero + '.pdf'
            return response
        elif request.POST['action'] == 'add_presupuesto':
            describir = request.POST['describir']
            describir = 'No hay descripción para este presupesto.' if len(describir) < 5 else describir
            Presupuesto.objects.create(nombre=request.POST['nombre'], describir=describir, entidad=g_e.ronda.entidad)
        elif request.POST['action'] == 'mod_presupuesto':
            presupuesto = Presupuesto.objects.get(id=request.POST['id_presupuesto'], entidad=g_e.ronda.entidad)
            presupuesto.nombre = request.POST['nombre']
            presupuesto.describir = request.POST['describir']
            presupuesto.save()
        elif request.POST['action'] == 'borrar_presupuesto':
            presupuesto = Presupuesto.objects.get(id=request.POST['id_presupuesto'], entidad=g_e.ronda.entidad)
            if Partida.objects.filter(presupuesto=presupuesto).count() == 0:
                presupuesto.delete()
            else:
                crear_aviso(request, False, 'El presupuesto no se puede borrar porque contiene partidas')
        elif request.POST['action'] == 'copiar_presupuesto':
            presupuesto = Presupuesto.objects.get(id=request.POST['id_presupuesto'], entidad=g_e.ronda.entidad)
            p = Presupuesto.objects.create(entidad=g_e.ronda.entidad, nombre=presupuesto.nombre + ' (copia)',
                                           describir=presupuesto.describir)
            partidas = Partida.objects.filter(presupuesto=presupuesto)
            for partida in partidas:
                Partida.objects.create(presupuesto=p, tipo=partida.tipo, nombre=partida.nombre,
                                       cantidad=partida.cantidad)
        elif request.POST['action'] == 'archivar_presupuesto':
            presupuesto = Presupuesto.objects.get(id=request.POST['id_presupuesto'], entidad=g_e.ronda.entidad)
            presupuesto.archivado = True
            presupuesto.save()
        elif request.POST['action'] == 'abrir_presupuesto':
            presupuesto = Presupuesto.objects.get(id=request.POST['id_presupuesto'], entidad=g_e.ronda.entidad)
            presupuesto.archivado = False
            presupuesto.save()

    presupuestos = Presupuesto.objects.filter(entidad=g_e.ronda.entidad)
    return render(request, "presupuestos_list.html",
                  {
                      'formname': 'Presupuestos',
                      'iconos':
                          ({'tipo': 'button', 'nombre': 'check', 'texto': 'Aceptar',
                            'title': 'Aceptar los cambios realizados', 'permiso': 'edita_presupuestos'},
                           {'tipo': 'button', 'nombre': 'plus', 'texto': 'Presupuesto',
                            'title': 'Crear un nuevo presupuesto',
                            'permiso': 'crea_presupuestos'},
                           {'tipo': 'button', 'nombre': 'list-alt', 'texto': 'Presupuestos',
                            'title': 'Mostrar la lista de presupuestos',
                            'permiso': 'edita_presupuestos'},),
                      'presupuestos': presupuestos,
                      'avisos': Aviso.objects.filter(usuario=request.session["gauser_extra"],
                                                     aceptado=False),
                  })