Exemple #1
0
 def carga_docentes(self):
     ges = self.plantillaxls_set.all().values('docente', 'x_docente', 'dni', 'email', 'puesto', 'x_puesto',
                                              'x_departamento').distinct()
     x_docentes = []
     docentes = []
     cargo = self.carga_cargo_g_docente()
     for ge in ges:
         if not ge['x_docente'] in x_docentes:
             x_docentes.append(ge['x_docente'])
             last_name, first_name = ge['docente'].split(', ')
             clave_ex, dni, puesto, x_puesto, x_departamento, email = ge['x_docente'], genera_nie(ge['dni']), ge[
                 'puesto'], ge['x_puesto'], ge['x_departamento'], ge['email']
             try:
                 gauser = Gauser.objects.get(dni=dni)
             except Exception as msg:
                 log = 'Error: %s. dni %s - email %s' % (str(msg), dni, email)
                 LogCarga.objects.create(g_e=self.g_e, log=log)
                 try:
                     gex = Gauser_extra.objects.get(clave_ex=clave_ex, ronda=self.ronda_centro)
                     gauser = gex.gauser
                     gauser.set_password(pass_generator(size=9))
                     log = 'Sin embargo existe g_e con clave_x: %s - %s' % (clave_ex, gex)
                     logger.warning(log)
                     LogCarga.objects.create(g_e=self.g_e, log=log)
                 except:
                     gauser = Gauser.objects.create_user(pass_generator(size=9), email=email, last_login=now(),
                                                         password=pass_generator(size=9))
                     log = 'Creado usuario: %s' % (gauser)
                     LogCarga.objects.create(g_e=self.g_e, log=log)
                     # try:
                         # gauser = Gauser.objects.get(email=email)
                         # gauser.set_password(pass_generator(size=9))
                         # log = 'Sin embargo existe usuario con email: %s - %s' % (email, gauser)
                         # logger.warning(log)
                         # LogCarga.objects.create(g_e=self.g_e, log=log)
                     # except:
                         # gauser = Gauser.objects.create_user(pass_generator(size=9), email=email, last_login=now(),
                         #                                         password=pass_generator(size=9))
                         # log = 'Creado usuario: %s' % (gauser)
                         # LogCarga.objects.create(g_e=self.g_e, log=log)
             try:
                 gauser.dni = dni
                 gauser.first_name = first_name[0:29]
                 gauser.last_name = last_name[0:29]
                 gauser.email = email
                 gauser.save()
                 gex = self.get_gex_docente(gauser, clave_ex, puesto, x_puesto, x_departamento, cargo)
                 if gex:
                     docentes.append(gex)
             except Exception as msg:
                 LogCarga.objects.create(g_e=self.g_e, log=str(msg))
     return docentes
Exemple #2
0
def update_fichero_attached(instance, filename):
    nombre = filename.rpartition('.')
    instance.fich_name = filename
    fichero = pass_generator(size=20) + '.' + nombre[2]
    return '/'.join(
        ['actas',
         str(instance.acta.convocatoria.entidad.code), fichero])
Exemple #3
0
def update_fichero_documental(instance, filename):
    nombre = filename.partition('.')
    instance.fich_name = filename.rpartition('/')[2].replace(' ', '_')
    nombre = pass_generator(size=20) + '.' + nombre[2]
    return '/'.join(
        ['documentos',
         str(instance.propietario.ronda.entidad.code), nombre])
Exemple #4
0
def update_fichero(instance, filename):
    nombre, dot, ext = filename.rpartition('.')
    instance.fich_name = filename
    fichero = pass_generator(size=20) + '.' + ext
    return '/'.join([
        'inspeccion',
        str(instance.informe.inspector.ronda.entidad.code), fichero
    ])
Exemple #5
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)
Exemple #6
0
def enviar_correo(etiqueta=Etiqueta.objects.none(),
                  asunto=None,
                  texto_html=None,
                  receptores=Gauser.objects.none(),
                  emisor=None,
                  entidad=Entidad.objects.none()):
    if not receptores:
        return False, 'No hay definidos destinatarios'
    if not emisor:
        if not entidad:
            return False, 'No hay definido ni un emisor, ni la entidad de emisión'
        else:
            try:
                emisor = Gauser_extra.objects.get(ronda=entidad.ronda,
                                                  gauser__username='******')
            except:
                return False, 'No ha sido posible definir un emisor'
    if texto_html:
        soup = BeautifulSoup(texto_html, 'html.parser')
        texto = soup.get_text()
    else:
        return False, 'El mensaje no contiene texto'
    if not etiqueta or type(etiqueta) != Etiqueta:
        etiqueta = Etiqueta.objects.create(nombre=pass_generator(
            9, 'abcdefghijkmnopqrs0123456789'),
                                           propietario=emisor)
    if not asunto:
        asunto = 'Mensaje de %s' % (emisor.gauser.get_full_name())
    mensaje = Mensaje.objects.create(emisor=emisor,
                                     fecha=datetime.now(),
                                     asunto=asunto,
                                     mensaje=texto_html,
                                     mensaje_texto=texto)
    mensaje.etiquetas.add(etiqueta)
    try:
        mensaje.receptores.add(*receptores)
    except:
        return False, 'Los receptores deben ser del tipo Gauser'
    crea_mensaje_cola(mensaje)
    return True, 'Enviado correctamente'
Exemple #7
0
def carga_masiva_tipo_DOCENTES_RACIMA(carga):
    gauss = Gauser.objects.get(username='******')
    errores = {}
    f = carga.fichero.read()
    book = xlrd.open_workbook(file_contents=f)
    sheet = book.sheet_by_index(0)
    # Get the keys from line 5 of excel file:
    dict_names = {}
    for col_index in range(sheet.ncols):
        dict_names[sheet.cell(4, col_index).value] = col_index
    for row_index in range(5, sheet.nrows):
        try:
            code_entidad = int(
                sheet.cell(row_index, dict_names['Código']).value)
            entidad = Entidad.objects.get(code=code_entidad)
            try:
                cargo = Cargo.objects.get(entidad=entidad,
                                          clave_cargo='g_docente',
                                          borrable=False)
            except:
                cargo = Cargo.objects.create(entidad=entidad,
                                             clave_cargo='g_docente',
                                             borrable=False,
                                             cargo='Docente')
            dni = genera_nie(
                str(sheet.cell(row_index, dict_names['DNI']).value))
            nombre = sheet.cell(row_index, dict_names['Nombre docente']).value
            apellidos = sheet.cell(row_index,
                                   dict_names['Apellidos docente']).value
            email = sheet.cell(row_index, dict_names['Correo-e']).value
            username = sheet.cell(row_index, dict_names['Usuario']).value
            clave_ex = str(
                sheet.cell(row_index, dict_names['X_DOCENTE']).value).strip()
            puesto = str(sheet.cell(row_index,
                                    dict_names['Puesto']).value).strip()
            tipo_personal = str(
                sheet.cell(row_index,
                           dict_names['Tipo personal']).value).strip()
            jornada_contratada = str(
                sheet.cell(row_index,
                           dict_names['Jornada contratada']).value).strip()
            try:
                try:
                    gauser = Gauser.objects.get(dni=dni)
                    gauser.email = email
                    gauser.username = username
                except:
                    gauser = Gauser.objects.get(username=username)
                    gauser.email = email
                    gauser.dni = dni
            except:
                gauser = Gauser.objects.create_user(
                    username,
                    email=email,
                    last_login=now(),
                    dni=dni,
                    password=pass_generator(size=9))
                # try:
                #     gauser = Gauser.objects.create_user(username, email=email, last_login=now(),
                #                                         password=pass_generator(size=9))
                # except:
                #     usuario = crear_nombre_usuario(nombre, apellidos)
                #     gauser = Gauser.objects.create_user(usuario, email=email, last_login=now(),
                #                                         password=pass_generator(size=9))
            # if 'larioja.edu.es' in email.split('@')[1]:
            #     gauser.username = email.split('@')[0]
            gauser.first_name = nombre
            gauser.last_name = apellidos
            # gauser.dni = dni
            gauser.save()
            gauser_extra, c = Gauser_extra.objects.get_or_create(
                ronda=entidad.ronda, gauser=gauser)
            gauser_extra.clave_ex = clave_ex
            gauser_extra.activo = True
            gauser_extra.puesto = puesto
            gauser_extra.tipo_personal = tipo_personal
            gauser_extra.jornada_contratada = jornada_contratada
            gauser_extra.cargos.add(cargo)
            gauser_extra.save()
        except Exception as msg:
            apellidos = slugify(
                sheet.cell(row_index, dict_names['Apellidos docente']).value)
            errores[row_index] = {'error': str(msg), 'apellidos': apellidos}
            logger.info('Error carga general docentes %s -- %s' %
                        (str(apellidos), msg))
    return HttpResponse(errores)
Exemple #8
0
def code_grupo():
    return pass_generator(10)
Exemple #9
0
def update_fichero_carga_masiva(instance, filename):
    nombre = filename.partition('.')
    nombre = '%s_%s.%s' % (str(
        instance.ronda.entidad.code), pass_generator(), nombre[2])
    return os.path.join("carga_masiva/", nombre)
Exemple #10
0
def correo(request):
    g_e = request.session['gauser_extra']
    sub_accesibles = Subentidad.objects.filter(
        entidad=g_e.ronda.entidad, fecha_expira__gt=datetime.today())
    car_accesibles = Cargo.objects.filter(entidad=g_e.ronda.entidad)

    mensaje = None
    receptores = None
    tipo_respuesta = None
    adjuntos = None
    usa_mensaje = ''
    if request.method == 'GET':
        if 'm' in request.GET:
            # try:
            m = Mensaje.objects.get(id=request.GET['m'])
            socios_mensaje = list(m.receptores.all().values_list('id',
                                                                 flat=True))
            socios_mensaje.append(m.emisor.gauser.id)
            socios_mensaje = Gauser.objects.filter(id__in=socios_mensaje)

            if g_e.gauser not in socios_mensaje:
                mensaje = None
                crear_aviso(
                    request,
                    False,
                    'No eres ni emisor, ni receptor del mensaje indicado',
                    link='/correo/')
            else:
                tipo_respuesta = request.GET['t']
                # socios_mensaje = socios_mensaje.values_list('id', 'last_name', 'first_name')
                keys = ('id', 'text')
                if tipo_respuesta == 'responder':
                    receptores = json.dumps([{
                        'id':
                        m.emisor.gauser.id,
                        'text':
                        '%s, %s' %
                        (m.emisor.gauser.last_name, m.emisor.gauser.first_name)
                    }])
                    mensaje = Mensaje(
                        emisor=m.emisor,
                        asunto='Re: ' + m.asunto,
                        mensaje=
                        '<br><br>______<br><span class="wysiwyg-color-gray">' +
                        m.mensaje + '</span>')
                elif tipo_respuesta == 'responder_todos':
                    receptores = json.dumps([
                        dict(
                            zip(keys, (row.id, "%s, %s" %
                                       (row.last_name, row.first_name))))
                        for row in socios_mensaje
                    ])
                    mensaje = Mensaje(
                        emisor=m.emisor,
                        asunto='Re: ' + m.asunto,
                        mensaje=
                        '<br><br>______<br><span class="wysiwyg-color-gray">' +
                        m.mensaje + '</span>')
                elif tipo_respuesta == 'reenviar':
                    receptores = None
                    mensaje = Mensaje(emisor=m.emisor,
                                      asunto=m.asunto,
                                      mensaje=m.mensaje)
                    adjuntos = m.adjuntos.all()
                    # except:
                    # crear_aviso(request,False,'Solicitud incorrecta')

    form1 = MensajeForm(prefix="mensaje", instance=mensaje)

    if request.method == 'POST':
        if request.POST['action'] == 'mail':
            etiqueta = Etiqueta.objects.create(propietario=g_e,
                                               nombre='___' +
                                               pass_generator(size=15))
            if request.POST['usa_mensaje'] != '':
                mensaje = Mensaje.objects.get(id=request.POST['usa_mensaje'])
            else:
                mensaje = Mensaje(emisor=g_e,
                                  fecha=datetime.now(),
                                  tipo='mail')
            form1 = MensajeForm(request.POST,
                                prefix="mensaje",
                                instance=mensaje)
            if form1.is_valid():
                mensaje = form1.save()
                receptores = Gauser.objects.filter(
                    id__in=request.POST['mensaje-receptores'].split(','))
                mensaje.receptores.add(*receptores)
                mensaje.etiquetas.add(etiqueta)
                crear_aviso(request, True,
                            request.META['PATH_INFO'] + ' Manda correo ')
                for input_file, object_file in request.FILES.items():
                    for fichero in request.FILES.getlist(input_file):
                        adjunto = Adjunto.objects.create(
                            propietario=g_e,
                            fichero=fichero,
                            content_type=fichero.content_type)
                        mensaje.adjuntos.add(adjunto)
                if request.POST['tipo_respuesta'] == 'reenviar':
                    ids = map(
                        int,
                        filter(None,
                               request.POST['adjuntos_reenviados'].split(',')))
                    adjuntos = Adjunto.objects.filter(id__in=ids)
                    mensaje.adjuntos.add(*adjuntos)
                form1 = MensajeForm(prefix="mensaje")
                # direcciones = list(
                #     mensaje.receptores.all().values_list('email', flat=True))  # receptores son tipo Gauser
                # if 'autoenvio' in request.POST:
                #     direcciones.append(g_e.gauser.email)
                # direcciones = ['*****@*****.**']
                # c = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']
                # direcciones = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']
                crea_mensaje_cola(mensaje)
                crear_aviso(
                    request, False,
                    'El envío puede tardar varios minutos. Recibirás un aviso cuando finalice.'
                )

                #     nom = mensaje.emisor.alias if mensaje.emisor.alias else mensaje.emisor.gauser.get_full_name()
                #     texto_mensaje = render_to_string('template_correo.html', {'mensaje': mensaje, },
                #                                      request=request)
                #     # email = EmailMessage(mensaje.asunto, texto_mensaje.encode('utf-8'),
                #     # '%s <%s>' % (nom, mensaje.emisor.gauser.email), bcc=direcciones,
                #     #                      headers={'Reply-To': mensaje.emisor.gauser.email})
                #     email = EmailMessage(mensaje.asunto, texto_mensaje.encode('utf-8'),
                #                          '%s <*****@*****.**>' % (nom), bcc=direcciones,
                #                          headers={'Reply-To': mensaje.emisor.gauser.email})
                #     for adjunto in mensaje.adjuntos.all():
                #         email.attach_file(adjunto.fichero.url.replace('/media/adjuntos/', MEDIA_ADJUNTOS))
                #     email.content_subtype = "html"
                #     email.send()
                #     crear_aviso(request, False, 'Correo enviado correctamente.')
                # else:
                #     crear_aviso(request, False, form1.errors)

        if request.POST['action'] == 'telegram':
            etiqueta = Etiqueta.objects.create(propietario=g_e,
                                               nombre='___' +
                                               pass_generator(size=15))
            mensaje = Mensaje(emisor=g_e,
                              fecha=datetime.now(),
                              tipo='telegram')
            form1 = MensajeForm(request.POST,
                                prefix="mensaje",
                                instance=mensaje)
            if form1.is_valid():
                mensaje = form1.save()
                mensaje.etiquetas.add(etiqueta)
                for filename, fichero in request.FILES.iteritems():
                    adjunto = Adjunto.objects.create(propietario=g_e,
                                                     fichero=fichero)
                    mensaje.adjuntos.add(adjunto)
                form1 = MensajeForm(prefix="mensaje")

                # Para crear un nuevo Telegram hay que borrar el directorio ~/.telegram

                # http://geekytheory.com/tutorial-raspberry-pi-uso-de-telegram-con-python/
                # http://pexpect.sourceforge.net/doc/
                # You can read everything up to the EOF without generating an exception by using the expect(pexpect.EOF).
                # In this case everything the child has output will be available in the before property.

                # Crea el contacto, abre la conexión y espera a que Telegram se haya inicializado
                contacto = "Juanjo_Martín"
                telegram = pexpect.spawn(
                    '/home/juanjo/Telegram/tg/telegram -k /home/juanjo/Telegram/tg/tg.pub'
                )
                telegram.expect('0m> ')

                ruta_file_text = MEDIA_FILES + str(g_e.id) + 'prueba.txt'
                file_text = open(ruta_file_text, 'w')
                file_text.write(
                    html2text.html2text(mensaje.mensaje).encode('utf8'))
                file_text.close()
                # send_text <peer> <text-file-name> - sends text file as plain messages
                telegram.sendline('send_text ' + contacto + ' ' +
                                  ruta_file_text)

                telegram.sendline('quit')

                os.remove(ruta_file_text)
                crear_aviso(request, False, 'Mensaje enviado correctamente.')
            else:
                crear_aviso(request, False, form1.errors)

    return render(
        request, "correo.html", {
            'iconos': (
                {
                    'tipo': 'button',
                    'nombre': 'send-o',
                    'texto': 'Telegram',
                    'permiso': 'enviar_actasssss',
                    'title': 'Enviar mensaje a través de Telegram'
                },
                {
                    'tipo': 'button2',
                    'nombre': 'envelope-o',
                    'nombre2': 'share',
                    'texto': 'Enviar',
                    'title': 'Enviar correo electrónico',
                    'permiso': 'acceso_redactar_mensaje'
                },
            ),
            'form1':
            form1,
            'formname':
            'correo',
            'avisos':
            Aviso.objects.filter(usuario=g_e, aceptado=False),
            'sub_accesibles':
            sub_accesibles,
            'car_accesibles':
            car_accesibles,
            'mensaje':
            mensaje,
            'receptores':
            receptores,
            'adjuntos':
            adjuntos,
            'tipo_respuesta':
            tipo_respuesta,
            'usa_mensaje':
            usa_mensaje,
        })
Exemple #11
0
def create_usuario(datos, carga, tipo):
    dni = genera_nie(datos['dni' + tipo]) if len(
        datos['dni' + tipo]) > 6 else 'DNI inventado generar error en el try'
    try:
        gauser = Gauser.objects.get(dni=dni)
        logger.info('Existe Gauser con dni %s' % dni)
    except ObjectDoesNotExist:
        logger.warning('No existe Gauser con dni %s' % dni)
        try:
            gauser_extra = Gauser_extra.objects.get(
                id_entidad=datos['id_socio'], ronda=carga.ronda)
            gauser = gauser_extra.gauser
            logger.warning('Encontrado Gauser y Gauser_extra con id_socio %s' %
                           (datos['id_socio']))
        except ObjectDoesNotExist:
            gauser = None
            logger.warning('No existe Gauser con id_socio %s' %
                           (datos['id_socio']))
        except MultipleObjectsReturned:
            gauser_extra = Gauser_extra.objects.filter(
                id_entidad=datos['id_socio'], ronda=carga.ronda)[0]
            logger.warning(
                'Existen varios Gauser_extra asociados al Gauser encontrado. Se elige %s'
                % (gauser_extra))
            gauser = gauser_extra.gauser
    except MultipleObjectsReturned:
        gauser = Gauser.objects.filter(dni=dni)[0]
        logger.warning('Existen varios Gauser con el mismo DNI. Se elige %s' %
                       (gauser))

    if gauser:
        try:
            gauser_extra = Gauser_extra.objects.get(gauser=gauser,
                                                    ronda=carga.ronda)
            mensaje = 'Existe el g_e %s con el dni %s. No se vuelve a crear fff.' % (
                gauser, dni)
            logger.info(mensaje)
        except ObjectDoesNotExist:
            gauser_extra = None
            logger.warning(
                'No existe Gauser_extra asociado al Gauser %s, deberemos crearlo fff'
                % (gauser))
        except MultipleObjectsReturned:
            ges = Gauser_extra.objects.filter(gauser=gauser, ronda=carga.ronda)
            gauser_extra = ges[0]
            # Podríamos escribir ges.exclude(id=gauser_extra.id).delete(), pero como hay un error porque
            # falta el nregistro en vut_vivienda necesito hacer esta triquiñuela para no duplicar usuarios:
            for ge_borrar in ges.exclude(id=gauser_extra.id):
                try:
                    ge_borrar.delete()
                except:
                    entidad, c = Entidad.objects.get_or_create(
                        code=CODE_CONTENEDOR)
                    ge_borrar.ronda = entidad.ronda
                    ge_borrar.save()
                    logger.warning(
                        'Gauser_extra asociados al Gauser %s, desplazado al contenedor.'
                        % (gauser))
            logger.warning(
                'Varios Gauser_extra asociados al Gauser %s, se borran todos menos uno.'
                % (gauser))
            mensaje = 'Varios Gauser_extra asociados al Gauser %s, se borran todos menos uno.' % (
                gauser)
            logger.info(mensaje)
    else:
        gauser_extra = None

    if not gauser:
        if datos['nombre' + tipo] and datos['apellidos' + tipo]:
            nombre = datos['nombre' + tipo]
            apellidos = datos['apellidos' + tipo]
            usuario = crear_nombre_usuario(nombre, apellidos)
            dni = genera_nie(datos['dni' + tipo])
            gauser = Gauser.objects.create_user(usuario,
                                                email=datos['email' +
                                                            tipo].lower(),
                                                password=pass_generator(),
                                                last_login=now())
            gauser.first_name = string.capwords(nombre.title()[0:28])
            gauser.last_name = string.capwords(apellidos.title()[0:28])
            gdata = {
                'dni': dni,
                'telfij': datos['telefono_fijo' + tipo],
                'sexo': datos['sexo' + tipo],
                'telmov': datos['telefono_movil' + tipo],
                'localidad': datos['localidad' + tipo],
                'address': datos['direccion' + tipo],
                'provincia': get_provincia(datos['provincia' + tipo]),
                'nacimiento': devuelve_fecha(datos['nacimiento' + tipo]),
                'postalcode': datos['cp' + tipo],
                'fecha_alta': devuelve_fecha(datos['fecha_alta' + tipo])
            }
            for key, value in gdata.items():
                setattr(gauser, key, value)
            gauser.save()
        else:
            mensaje = 'No se ha podido crear un usuario porque no se han indicado nombre y apellidos'
            logger.warning(mensaje)
    if gauser and not gauser_extra:
        if 'id_organizacion' + tipo in datos:
            id_organizacion = datos['id_organizacion' + tipo]
        else:
            id_organizacion = datos['id_socio' + tipo]
        gauser_extra = Gauser_extra.objects.create(
            gauser=gauser,
            ronda=carga.ronda,
            activo=True,
            id_entidad=datos['id_socio' + tipo],
            num_cuenta_bancaria=datos['iban' + tipo],
            observaciones=datos['observaciones' + tipo],
            id_organizacion=id_organizacion)
        try:
            asocia_banco_ge(gauser_extra)
        except:
            mensaje = 'El IBAN asociado a %s parece no ser correcto. No se ha podido asociar una entidad bancaria al mismo.' % (
                gauser.first_name.decode('utf8') + ' ' +
                gauser.last_name.decode('utf8'))
            logger.info(mensaje)
    if gauser_extra:
        logger.info('antes de subentidades')
        if datos['subentidades' + tipo]:
            logger.info('entra en subentidades')
            # La siguientes dos líneas no se si funcionarán en python3 debido a que filter en python3 no devuelve
            # una lista. Incluida la conversión list() para evitar errores:
            # http://stackoverflow.com/questions/3845423/remove-empty-strings-from-a-list-of-strings
            subentidades_id = list(
                filter(
                    None, datos['subentidades' + tipo].replace(' ',
                                                               '').split(',')))
            logger.info('entra en subentidades %s' % subentidades_id)
            subentidades = Subentidad.objects.filter(
                id__in=subentidades_id,
                entidad=carga.ronda.entidad,
                fecha_expira__gt=datetime.today())
            gauser_extra.subentidades.add(*subentidades)
        if datos['perfiles' + tipo]:
            logger.info('entra en perfiles')
            cargos_id = list(
                filter(None, datos['perfiles' + tipo].replace(' ',
                                                              '').split(',')))
            cargos = Cargo.objects.filter(id__in=cargos_id,
                                          entidad=carga.ronda.entidad)
            gauser_extra.cargos.add(*cargos)

    if gauser_extra:
        Gauser_extra_estudios.objects.get_or_create(ge=gauser_extra)
    return gauser_extra
Exemple #12
0
def update_fichero(instance, filename):
    nombre = filename.rpartition('.')
    instance.fich_name = filename
    fichero = pass_generator(size=30) + '.' + nombre[2]
    return '/'.join(['compraventa', str(instance.entidad.code), fichero])
Exemple #13
0
def crea_clave():
    return pass_generator(49)
Exemple #14
0
def mqtt_id_generator():
    generado = pass_generator(size=10,
                              chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
    return 'ID%s' % generado
Exemple #15
0
def update_file(instance, filename):
    nombre = filename.partition('.')
    nombre = '%s.%s' % (pass_generator(size=10), nombre[2])
    return os.path.join('contabilidad/', nombre)
Exemple #16
0
def clave_secreta():
    return pass_generator(size=10)
Exemple #17
0
def mqtt_topic_generator():
    generado = pass_generator(size=10,
                              chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
    return 'DOMOTICA/%s' % generado
Exemple #18
0
def ajax_actividades(request):
    g_e = request.session["gauser_extra"]
    if request.is_ajax():
        if request.method == 'POST':
            if request.POST['action'] == 'remove_file':
                file_actividad = File_actividad.objects.get(
                    code=request.POST['file_code'])
                os.remove(RUTA_BASE + file_actividad.fichero.url)
                file_actividad.delete()
                return HttpResponse(request.POST['file_code'])

            elif request.POST['action'] == 'open_accordion':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                html = render_to_string('actividad_accordion_content.html', {
                    'actividad': actividad,
                    'g_e': g_e
                })
                return JsonResponse({'ok': True, 'html': html})

            elif request.POST['action'] == 'delete_actividad':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                mensaje = ''
                try:
                    evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                uid='extraescolar' +
                                                str(actividad.id))
                    evento.delete()
                    mensaje += 'Se ha borrado el evento del calendario relacionado con la actividad.'
                except:
                    mensaje += '<i class="fa fa-warning"></i> No se ha podido localizar el evento del calendario ' \
                               'relacionado con la actividad.'
                files_actividad = actividad.file_actividad_set.all()
                if actividad.organizador == g_e or g_e.has_permiso(
                        'borra_actividad'):
                    for file_actividad in files_actividad:
                        os.remove(RUTA_BASE + file_actividad.fichero.url)
                        mensaje += '<br>Borrado el archivo %s' % (
                            file_actividad.fichero.url)
                        file_actividad.delete()
                    mensaje += '<br>Se ha borrado la actividad.'
                    actividad.delete()
                return JsonResponse({'mensaje': mensaje, 'ok': True})
            elif request.POST['action'] == 'add_actividad':
                try:
                    actividad = Actividad.objects.create(
                        organizador=g_e,
                        actividad_title='Nueva actividad',
                        description='Este es un resumen de la actividad',
                        fecha_hora_inicio=datetime.now(),
                        fecha_hora_fin=datetime.now())
                    crea_evento_actividad(g_e, actividad)
                    html = render_to_string('actividad_accordion.html',
                                            {'actividades': [actividad]})
                    return JsonResponse({'html': html, 'ok': True})
                except:
                    return JsonResponse({'ok': False})
            elif request.POST['action'] == 'get_actividad':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                return HttpResponse(
                    render_to_string('actividad_accordion.html',
                                     {'actividades': [actividad]}))
            elif request.POST['action'] == 'aceptar_fecha_aprobacion_general':
                try:
                    actividades = Actividad.objects.filter(
                        organizador__ronda__entidad=g_e.ronda.entidad,
                        aprobada=False,
                        organizador__ronda=g_e.ronda)
                    fecha = datetime.strptime(request.POST['fecha'],
                                              '%d-%m-%Y')
                    for actividad in actividades:
                        actividad.aprobada = True
                        actividad.fecha_aprobacion = fecha
                        actividad.save()
                    return JsonResponse({'success': True})
                except:
                    return JsonResponse({'success': False})
            elif request.POST['action'] == 'update_fecha_aprobacion':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    fecha = datetime.strptime(request.POST['fecha'],
                                              '%d-%m-%Y')
                    actividad.fecha_aprobacion = fecha
                    actividad.save()
                    return HttpResponse(True)
                except:
                    return HttpResponse(False)
            elif request.POST['action'] == 'update_fecha_inicio':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    fecha = datetime.strptime(request.POST['fecha'],
                                              '%d-%m-%Y %H:%M')
                    actividad.fecha_hora_inicio = fecha
                    actividad.save()
                    try:
                        evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                    uid='extraescolar' +
                                                    str(actividad.id))
                    except:
                        evento = crea_evento_actividad(g_e, actividad)
                    evento.dtstart = actividad.fecha_hora_inicio
                    evento.save()
                    return HttpResponse(True)
                except:
                    return HttpResponse(False)
            elif request.POST['action'] == 'update_fecha_fin':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    fecha = datetime.strptime(request.POST['fecha'],
                                              '%d-%m-%Y %H:%M')
                    actividad.fecha_hora_fin = fecha
                    actividad.save()
                    try:
                        evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                    uid='extraescolar' +
                                                    str(actividad.id))
                    except:
                        evento = crea_evento_actividad(g_e, actividad)
                    evento.dtend = actividad.fecha_hora_fin
                    evento.save()
                    return HttpResponse(True)
                except:
                    return HttpResponse(False)
            elif request.POST['action'] == 'update_actividad_title':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    actividad.actividad_title = request.POST['actividad_title']
                    actividad.save()
                    try:
                        evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                    uid='extraescolar' +
                                                    str(actividad.id))
                    except:
                        evento = crea_evento_actividad(g_e, actividad)
                    evento.summary = actividad.actividad_title
                    evento.save()
                    return JsonResponse({
                        'success':
                        True,
                        'actividad_title':
                        actividad.actividad_title
                    })
                except:
                    return JsonResponse({'success': False})
            elif request.POST['action'] == 'update_organizador':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    organizador = Gauser_extra.objects.get(
                        id=request.POST['organizador'], ronda=g_e.ronda)
                    actividad.organizador = organizador
                    actividad.save()
                    try:
                        evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                    uid='extraescolar' +
                                                    str(actividad.id))
                    except:
                        evento = crea_evento_actividad(g_e, actividad)
                    description = render_to_string(
                        'actividad_event_description.html',
                        {'actividad': actividad})
                    evento.propietarios.clear()
                    evento.propietarios.add(actividad.organizador.gauser)
                    evento.description = description
                    evento.save()
                    return HttpResponse(True)
                except:
                    return HttpResponse(False)
            elif request.POST['action'] == 'update_colaboradores':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    if 'added[]' in request.POST:
                        ges = Gauser_extra.objects.filter(
                            ronda=g_e.ronda,
                            id__in=request.POST.getlist('added[]'))
                        actividad.colaboradores.add(*ges)
                    if 'removed[]' in request.POST:
                        ges = Gauser_extra.objects.filter(
                            ronda=g_e.ronda,
                            id__in=request.POST.getlist('removed[]'))
                        actividad.colaboradores.remove(*ges)
                    try:
                        evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                    uid='extraescolar' +
                                                    str(actividad.id))
                    except:
                        evento = crea_evento_actividad(g_e, actividad)
                    description = render_to_string(
                        'actividad_event_description.html',
                        {'actividad': actividad})
                    evento.description = description
                    evento.save()
                    return HttpResponse(True)
                except:
                    return HttpResponse(False)
            elif request.POST['action'] == 'update_tramos_horarios':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                try:
                    tramo = Tramo_horario.objects.get(
                        horario__ronda__entidad=g_e.ronda.entidad,
                        id=request.POST['tramo_horario'])
                    if request.POST['operation'] == 'added':
                        actividad.tramos_horarios.add(tramo)
                    else:
                        actividad.tramos_horarios.remove(tramo)
                    try:
                        fin = actividad.tramos_horarios.all().order_by(
                            'fin').last().fin
                    except:
                        fin = \
                            Tramo_horario.objects.filter(horario__ronda=g_e.ronda).order_by('fin').last().fin
                    try:
                        inicio = actividad.tramos_horarios.all().earliest(
                            'inicio').inicio
                    except:
                        inicio = \
                            Tramo_horario.objects.filter(horario__ronda=g_e.ronda).order_by(
                                'inicio')[0].inicio
                    try:
                        evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                    uid='extraescolar' +
                                                    str(actividad.id))
                    except:
                        evento = crea_evento_actividad(g_e, actividad)
                    evento.dtend = datetime.combine(actividad.fecha_fin, fin)
                    evento.dtstart = datetime.combine(actividad.fecha_inicio,
                                                      inicio)
                    evento.save()
                    return HttpResponse(True)
                except:
                    return HttpResponse(False)
            elif request.POST['action'] == 'todos_ninguno':
                try:
                    alumnos_id = request.POST.getlist('alumnos_id[]')
                    alumnos = Gauser_extra.objects.filter(ronda=g_e.ronda,
                                                          id__in=alumnos_id)
                    actividad = Actividad.objects.get(
                        id=request.POST['actividad'],
                        organizador__ronda__entidad=g_e.ronda.entidad)
                    if request.POST['operation'] == 'select_ninguno':
                        actividad.alumnos_incluidos.remove(*alumnos)
                    else:
                        actividad.alumnos_incluidos.add(*alumnos)
                    return JsonResponse({'ok': True})
                except:
                    return JsonResponse({'ok': False})
            elif request.POST['action'] == 'update_alumnos_incluidos':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                ge = Gauser_extra.objects.get(ronda=g_e.ronda,
                                              id=request.POST['alumno'])
                if request.POST['operation'] == 'added':
                    actividad.alumnos_incluidos.add(ge)
                else:
                    actividad.alumnos_incluidos.remove(ge)
                try:
                    evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                uid='extraescolar' +
                                                str(actividad.id))
                except:
                    evento = crea_evento_actividad(g_e, actividad)
                description = render_to_string(
                    'actividad_event_description.html',
                    {'actividad': actividad})
                evento.description = description
                evento.save()
                return HttpResponse(True)
            elif request.POST['action'] == 'update_grupos':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                grupo = Grupo.objects.get(ronda=g_e.ronda,
                                          id=request.POST['grupo'])
                alumnos = Gauser_extra_estudios.objects.filter(
                    grupo=grupo).values_list('ge__id', flat=True)
                if request.POST['operation'] == 'added':
                    actividad.alumnos_incluidos.add(*alumnos)
                    html = render_to_string(
                        'actividad_accordion_content_grupo_alumno.html', {
                            'grupo': grupo,
                            'actividad': actividad
                        })
                    data = {
                        'grupo': 'En este caso, esta variable no se utiliza',
                        'html': html
                    }
                else:
                    actividad.alumnos_incluidos.remove(*alumnos)
                    data = {'grupo': grupo.id, 'html': False}
                try:
                    evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                uid='extraescolar' +
                                                str(actividad.id))
                except:
                    evento = crea_evento_actividad(g_e, actividad)
                description = render_to_string(
                    'actividad_event_description.html',
                    {'actividad': actividad})
                evento.description = description
                evento.save()
                return JsonResponse(data)
            elif request.POST['action'] == 'update_texto_actividad':
                actividad = Actividad.objects.get(
                    id=request.POST['actividad'],
                    organizador__ronda__entidad=g_e.ronda.entidad)
                actividad.description = request.POST['texto']
                actividad.save()
                try:
                    evento = Vevent.objects.get(entidad=g_e.ronda.entidad,
                                                uid='extraescolar' +
                                                str(actividad.id))
                except:
                    evento = crea_evento_actividad(g_e, actividad)
                description = render_to_string(
                    'actividad_event_description.html',
                    {'actividad': actividad})
                evento.description = description
                evento.save()
                return HttpResponse(True)
            elif request.POST['action'] == 'busca_actividades':
                fecha_inicio = datetime.strptime(
                    request.POST['id_fecha_inicio'], '%d-%m-%Y')
                fecha_fin = datetime.strptime(request.POST['id_fecha_fin'],
                                              '%d-%m-%Y')
                texto = request.POST['texto']
                actividades = Actividad.objects.filter(
                    Q(organizador__ronda=g_e.ronda),
                    Q(description__icontains=texto)
                    | Q(organizador__gauser__first_name__icontains=texto)
                    | Q(organizador__gauser__last_name__icontains=texto)
                    | Q(actividad_title__icontains=texto),
                    Q(fecha_hora_inicio__gt=fecha_inicio),
                    Q(fecha_hora_fin__lt=fecha_fin))
                if actividades.count() > 0:
                    html = render_to_string('actividad_accordion.html', {
                        'actividades': actividades,
                        'check': True
                    })
                else:
                    html = '<h3 style="color:red">No se han encontrado resultados</h3>'
                return JsonResponse({'html': html, 'ok': True})
            elif request.POST['action'] == 'paginar_actividades':
                try:
                    actividades = Actividad.objects.filter(
                        organizador__ronda=g_e.ronda)
                    paginator = Paginator(actividades, 25)
                    actividades_page = paginator.page(int(
                        request.POST['page']))
                    html = render_to_string('actividad_accordion.html', {
                        'actividades': actividades_page,
                        'pag': True
                    })
                    return JsonResponse({'ok': True, 'html': html})
                except:
                    return JsonResponse({'ok': False})
        elif request.method == 'GET':
            if request.GET['action'] == 'busca_profesor':
                texto = request.GET['q']
                # sub_docentes = Subentidad.objects.get(entidad=g_e.ronda.entidad, clave_ex='docente')
                # usuarios = usuarios_de_gauss(g_e.ronda.entidad, subentidades=[sub_docentes])
                cargo = Cargo.objects.get(entidad=g_e.ronda.entidad,
                                          clave_cargo='g_docente')
                usuarios = Gauser_extra.objects.filter(ronda=g_e.ronda,
                                                       cargos__in=[cargo])
                usuarios_contain_texto = usuarios.filter(
                    Q(gauser__first_name__icontains=texto)
                    | Q(gauser__last_name__icontains=texto)).values_list(
                        'id', 'gauser__last_name', 'gauser__first_name')
                keys = ('id', 'last_name', 'first_name')
                return HttpResponse(
                    json.dumps([
                        dict(zip(keys, row)) for row in usuarios_contain_texto
                    ]))
            elif request.GET['action'] == 'buscar_extraescolares':
                fecha_inicio = datetime.strptime(
                    request.GET['id_fecha_inicio'], '%d-%m-%Y')
                fecha_fin = datetime.strptime(request.GET['id_fecha_fin'],
                                              '%d-%m-%Y')
                texto = request.GET['q']
                actividades = Actividad.objects.filter(
                    Q(organizador__ronda__entidad=g_e.ronda.entidad),
                    Q(organizador__ronda=g_e.ronda),
                    Q(description__icontains=texto)
                    | Q(organizador__gauser__last_name__icontains=texto)
                    | Q(actividad_title__icontains=texto),
                    Q(fecha_inicio__gt=fecha_inicio),
                    Q(fecha_fin__lt=fecha_fin)).values_list(
                        'id', 'actividad_title')
                pass
                # fecha_inicio = datetime.strptime(request.GET['search_fecha_inicio'], '%d-%m-%Y')
                # fecha_fin = datetime.strptime(request.GET['search_fecha_fin'], '%d-%m-%Y')
                # texto = request.GET['q']
                # actividades = Actividad.objects.filter(Q(organizador__ronda__entidad=g_e.ronda.entidad),
                #                                        Q(organizador__ronda=g_e.ronda),
                #                                        Q(description__icontains=texto) | Q(
                #                                            organizador__gauser__last_name__icontains=texto) | Q(
                #                                            actividad_title__icontains=texto),
                #                                        Q(fecha_inicio__gt=fecha_inicio),
                #                                        Q(fecha_fin__lt=fecha_fin)).values_list('id', 'actividad_title')
                # keys = ('id', 'text')
                # return HttpResponse(json.dumps([dict(zip(keys, row)) for row in actividades]))
    else:
        if request.POST['action'] == 'upload_fichero_extraescolar':
            actividad = Actividad.objects.get(
                id=request.POST['actividad'],
                organizador__ronda__entidad=g_e.ronda.entidad)
            n_files = int(request.POST['n_files'])
            ficheros = []
            for i in range(n_files):
                fichero = request.FILES['fichero_xhr' + str(i)]
                code = pass_generator(20)
                file_actividad = File_actividad.objects.create(
                    actividad=actividad,
                    fichero=fichero,
                    content_type=fichero.content_type,
                    code=code)
                # http: // www.imagemagick.org / discourse - server / viewtopic.php?t = 28069
                # If
                # test = 1, then
                # landscape.If
                # test = 0, then
                # portrait or square
                # CODE: SELECT
                # ALL
                # test = `convert
                # image - format
                # "%[fx:(w/h>1)?1:0]"
                # info:`
                # if [ $test -eq 1]; then
                # convert
                # image - resize
                # 800
                # x
                # result
                # else
                # convert
                # image - resize
                # x800
                # result
                # fi

                ficheros.append({
                    'file_name': file_actividad.fich_name,
                    'url': file_actividad.fichero.url,
                    'code': code
                })
            return JsonResponse({'ficheros': ficheros})
Exemple #19
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})