def enviar_mensaje_registro(viajero, log='Correcto'): reserva = viajero.reserva vivienda = reserva.vivienda ronda = vivienda.entidad.ronda html = render_to_string('correo_PN_GC.html', { 'viajero': viajero, 'log': log }) #Si es correcto solo recibirán mensaje los propietarios. Si hay errores, el Administrador con el #permiso requerido recibirá un correo con el fin de corregir el programa o ayudar al interesado: usuarios = usuarios_ronda(ronda) if log != 'Correcto': logger.info('!=Correcto') permiso = Permiso.objects.get(code_nombre='recibe_errores_de_viajeros') receptores_ge = usuarios.filter( Q(gauser__in=vivienda.propietarios.all()) | Q(permisos__in=[permiso])) receptores = [receptor_ge.gauser for receptor_ge in receptores_ge] else: receptores = [ propietario for propietario in vivienda.propietarios.all() ] emisor = usuarios.get(gauser=vivienda.propietarios.all()[0]) if log == 'Correcto': asunto = 'Efectuado registro de viajero en %s' % vivienda.get_police_display( ) gtexto = 'Registrado en la %s el viajero: %s %s (%s)' % ( vivienda.get_police_display(), viajero.nombre, viajero.apellido1, vivienda.nombre) envia_telegram_gausers(gausers=vivienda.propietarios.all(), texto=gtexto) elif log == 'Error1': asunto = 'Error al hacer el registro de viajero en %s' % vivienda.get_police_display( ) gtexto = 'Error en la comunicación con %s. Se debe hacer el registro manualmente. Viajero: %s %s (%s)' % ( vivienda.get_police_display(), viajero.nombre, viajero.apellido1, vivienda.nombre) envia_telegram_gausers(gausers=vivienda.propietarios.all(), texto=gtexto) elif log == 'Error2': asunto = 'Error al identificarse en web de %s' % vivienda.get_police_display( ) gtexto = 'Error al hacer el login en la web de la %s. Viajero: %s %s (%s)' % ( vivienda.get_police_display(), viajero.nombre, viajero.apellido1, vivienda.nombre) envia_telegram_gausers(gausers=vivienda.propietarios.all(), texto=gtexto) elif log == 'Error3': asunto = 'Error registro GAUSS - Policía Nacional o Guardia Civil sin configurar' gtexto = 'Error. Debes indicar en GAUSS si el registro se hace en Policía Nacional o Guardia Civil. Vivienda: %s' % ( viajero.reserva.vivienda.nombre) envia_telegram_gausers(gausers=vivienda.propietarios.all(), texto=gtexto) elif log == 'Error4': asunto = 'Error con registro de viajero en GAUSS' gtexto = 'Error durante el grabado del viajero. Hacer el registro manualmente. Viajero: %s %s (%s)' % ( viajero.nombre, viajero.apellido1, vivienda.nombre) envia_telegram_gausers(gausers=vivienda.propietarios.all(), texto=gtexto) else: asunto = 'Error en registro VUT' envia_telegram_gausers(gausers=vivienda.propietarios.all(), texto=asunto) etiqueta = 'error-vut%s' % ronda.id encolar_mensaje(emisor=emisor, receptores=receptores, asunto=asunto, html=html, etiqueta=etiqueta) logger.info(asunto) return True
def ajax_mensajes(request): # from django.core import serializers # if request.is_ajax(): # No se puede emplear is_ajax() porque la peticion del archivo no es reconocida como ajax g_e = request.session['gauser_extra'] if request.method == 'POST': if request.POST['action'] == 'ver_mensaje': mensaje = Mensaje.objects.get(pk=request.POST['id']) try: Leido.objects.get(lector=request.session['gauser_extra'], mensaje=mensaje) except: Leido.objects.create(lector=request.session['gauser_extra'], mensaje=mensaje) data = render_to_string( 'reveal_contenido_correo.html', { 'mensaje': mensaje, 'formname': request.POST['formname'], 'tipo': request.POST['tipo'], 'numero': int(request.POST['numero']), 'numero_max': int(request.POST['numero_max']) }) # return HttpResponse(serializers.serialize('json', mensaje)) # return HttpResponse((serializers.serialize('json', mensaje), serializers.serialize('json', mensaje[0].adjuntos.all()))) return HttpResponse(data) if request.POST['action'] == 'borrar_mensajes': ids = map(int, filter(None, request.POST['ids'].split( ','))) # El filter es para eliminar los elementos vacíos mensajes = Mensaje.objects.filter(id__in=ids) for mensaje in mensajes: Borrado.objects.create(eraser=g_e, mensaje=mensaje) return HttpResponse() if request.POST['action'] == 'pagination_enviados': id = int(request.POST['id']) paso = int(request.session['num_items_page']) inicio = (id - 1) * paso fin = id * paso borrados = Borrado.objects.filter(eraser=g_e).values_list( 'mensaje__id', flat=True) mensajes = Mensaje.objects.filter( Q(emisor=g_e) & ~Q(pk__in=borrados)).order_by('-fecha') data = render_to_string("list_enviados.html", { 'mensajes': mensajes[inicio:fin], 'importantes': Importante.objects.filter(mensaje__in=mensajes).values_list( 'mensaje__id', flat=True), 'pagination': paginar(mensajes.count(), paso, c=id), }, request=request) return HttpResponse(data) if request.POST['action'] == 'pagination_recibidos': id = int(request.POST['id']) paso = int(request.session['num_items_page']) inicio = (id - 1) * paso fin = id * paso borrados = Borrado.objects.filter(eraser=g_e).values_list( 'mensaje__id', flat=True) mensajes = Mensaje.objects.filter( Q(receptores__in=[g_e.gauser]) & ~Q(pk__in=borrados)).order_by('-fecha') data = render_to_string("list_recibidos.html", { 'mensajes': mensajes[inicio:fin], 'importantes': Importante.objects.filter(mensaje__in=mensajes).values_list( 'mensaje__id', flat=True), 'leidos': Leido.objects.filter(mensaje__in=mensajes, lector=g_e).values_list('mensaje__id', flat=True), 'pagination': paginar(mensajes.count(), paso, c=id), }, request=request) return HttpResponse(data) if request.POST['action'] == 'receptores_subentidad': datos = request.POST['subentidad'].split('___') subentidad = Subentidad.objects.filter( id=datos[1], fecha_expira__gt=datetime.today()) g_es = usuarios_de_gauss(g_e.ronda.entidad, subentidades=subentidad) g_es = g_es.filter(activo=True) if datos[0] == 'padres': tutores_id = g_es.values_list('tutor1', 'tutor2') g_es = Gauser_extra.objects.filter( id__in=[e for l in tutores_id for e in l]).distinct() receptores = g_es.values_list('gauser__id', 'gauser__last_name', 'gauser__first_name') keys = ('id', 'text') # from django.core import serializers # data = serializers.serialize('json', socios2, fields=('gauser__first_name', 'id')) return HttpResponse( json.dumps([ dict(zip(keys, (row[0], '%s, %s' % (row[1], row[2])))) for row in receptores ])) if request.method == 'GET': if request.GET['action'] == 'receptores': texto = request.GET['q'] socios = usuarios_ronda(g_e.ronda) socios_contain_texto = socios.filter( Q(gauser__first_name__icontains=texto) | Q(gauser__last_name__icontains=texto)).values_list( 'gauser__id', 'gauser__last_name', 'gauser__first_name') keys = ('id', 'text') return HttpResponse( json.dumps([ dict(zip(keys, (row[0], '%s, %s' % (row[1], row[2])))) for row in socios_contain_texto ]))
def no_exentos(politica, total=1000): no_ex = [] # importes = list(map(float, re.findall(r"[-+]?\d*\.\d+|\d+", politica.descuentos))) # Hacemos una secuencia de importes añadiendo el último valor lo suficientemente grande como para # asegurar que el número de hermanos es superado. Por ejemplo si importes es [30,20,15], después # de la siguiente líneas sería [30,20,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] # importes = importes + [importes[-1] for i in range(20)] importes = politica.array_cuotas exentos_id = politica.exentos.all().values_list('id', flat=True) usuarios = usuarios_ronda(politica.entidad.ronda, cargos=[politica.cargo]).exclude(gauser__id__in=exentos_id) usuarios_id = [] n = 0 for usuario in usuarios: if usuario.id not in usuarios_id: n += 1 if politica.tipo == 'hermanos': familiares = usuario.unidad_familiar deudores = familiares.filter(id__in=usuarios) if deudores.count() > 1: deudor = 'Familia %s' % deudores[0].gauser.last_name else: deudor = deudores[0].gauser.get_full_name() usuarios_id += list(deudores.values_list('id', flat=True)) n_cs = familiares.values_list('num_cuenta_bancaria', flat=True) deudores_str = ', '.join(deudores.values_list('gauser__first_name', flat=True)) elif politica.tipo == 'fija': deudores = [usuario] deudor = usuario.gauser.get_full_name() usuarios_id += [usuario.id] n_cs = [usuario.num_cuenta_bancaria] # deudores_str = ', '.join(deudores.values_list('gauser__first_name', flat=True)) elif politica.tipo == 'vut': viviendas = Vivienda.objects.filter(propietarios__in=[usuario.gauser], entidad=usuario.ronda.entidad) deudores = [usuario] * viviendas.count() usuarios_id += [usuario.id] n_cs = [usuario.num_cuenta_bancaria] deudores_str = '%s viviendas gestionadas por %s' % (viviendas.count(), usuario.gauser.get_full_name()) deudor = usuario.gauser.get_full_name() else: deudores = [] usuarios_id += [usuario.id] n_cs = [] deudores_str = '' concepto = '' deudor = '' try: cuenta_banca = [n_c.replace(' ', '') for n_c in n_cs if len(str(n_c)) > 18][0] estilo, title = "", "Cuenta bancaria: " + str(cuenta_banca) except: estilo, title = "color:red", "No hay cuenta bancaria asignada" if len(deudores) > 0: no_ex.append({'title': title, 'estilo': estilo, 'concepto': politica.concepto, 'deudor': deudor, 'cantidad': str(sum(importes[:len(deudores)]))}) # no_ex.append('<span title="%s" style="%s">%s %s (%s)dddd</span>' % ( # title, estilo, concepto, deudores[0].gauser.last_name, str(sum(importes[:len(deudores)])))) if n == total: break return no_ex
def has_usuarios_ronda( subentidad, ronda): # Comprueba si la subentidad tiene ususarios de esta ronda g_es = usuarios_ronda(ronda, subentidades=[subentidad]) return g_es.count() > 0
def configura_materias_pendientes(request): g_e = request.session['gauser_extra'] if request.method == 'GET' and request.is_ajax(): action = request.GET['action'] if action == 'select_profesor': items = [] # items = [{'id': u.id, 'text': u.gauser.last_name} for u in usuarios_ronda(g_e.ronda, subentidades=False)] texto = request.GET['search'] q = (Q(gauser__first_name__icontains=texto) | Q(gauser__last_name__icontains=texto)) & Q( subentidades__clave_ex='docente') for u in usuarios_ronda(g_e.ronda, subentidades=False).filter(q): items.append({ 'id': u.id, 'text': '%s, %s' % (u.gauser.last_name, u.gauser.first_name) }) return JsonResponse({'ok': True, 'items': items}) if request.method == 'POST' and request.is_ajax(): action = request.POST['action'] if action == 'open_accordion': curso = Curso.objects.get(id=request.POST['id'], ronda=g_e.ronda) matriculas = Matricula.objects.filter( ge__ronda=g_e.ronda, estado='PE', ge__gauser_extra_estudios__grupo__cursos=curso) html = render_to_string( 'configura_materias_pendientes_curso_content.html', {'matriculas': matriculas}) return JsonResponse({'ok': True, 'html': html}) elif action == 'select_profesor': try: matricula = Matricula.objects.get(ge__ronda=g_e.ronda, id=request.POST['matricula']) evaluador = Gauser_extra.objects.get( ronda=g_e.ronda, id=request.POST['profesor'], subentidades__clave_ex='docente') matricula.evaluador = evaluador matricula.save() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) elif request.method == 'POST': if request.POST['action'] == 'upload_file_matriculas': try: n_files = int(request.POST['n_files']) for i in range(n_files): fichero = request.FILES['fichero_xhr' + str(i)] if fichero.content_type == 'application/vnd.ms-excel': CargaMasiva.objects.create(ronda=g_e.ronda, fichero=fichero, tipo='PENDIENTES') carga_masiva_from_excel.delay() return JsonResponse({'ok': True}) except: return JsonResponse({'ok': False}) try: carga = CargaMasiva.objects.filter(ronda=g_e.ronda, tipo='PENDIENTES', cargado=True).latest('id') except: carga = CargaMasiva.objects.none() respuesta = { 'formname': 'configura_materias_pendientes', 'cursos': Curso.objects.filter(ronda=g_e.ronda), 'avisos': Aviso.objects.filter(usuario=g_e, aceptado=False), 'carga': carga } return render(request, "configura_materias_pendientes.html", respuesta)
def destinatarios(self): usuarios = usuarios_ronda( self.entidad.ronda, cargos=[self.cargo]).exclude(gauser__in=self.exentos.all()) dicts_destinatarios = [] if self.tipo == 'hermanos': usuarios_analizados = [] for u in usuarios: if u not in usuarios_analizados: familiares = u.unidad_familiar usuarios_analizados.extend(familiares) familiares_gauser = familiares.values_list('gauser__id', flat=True) deudores = familiares.filter(id__in=usuarios) num = deudores.count() texto = ', '.join( deudores.values_list('gauser__first_name', flat=True)) try: # fecha_18 = datetime.today() - timedelta(days=18*365.25) # oa = OrdenAdeudo.objects.filter(politica=self, gauser__id__in=familiares_gauser, # fecha_firma__isnull=False, gauser__nacimiento__lte=fecha_18)[0] oa = OrdenAdeudo.objects.filter( politica=self, gauser__id__in=familiares_gauser, fecha_firma__isnull=False)[0] except: oa = OrdenAdeudo.objects.none() dicts_destinatarios.append({ 'oa': oa, 'ge': u, 'num': num, 'texto': texto }) elif self.tipo == 'vut': for u in usuarios: viviendas = Vivienda.objects.filter(gpropietario=u.gauser, borrada=False, entidad=u.ronda.entidad) num = viviendas.count() texto = '%d viviendas gestionadas por %s' % ( num, u.gauser.get_full_name()) if num > 0: try: oa = OrdenAdeudo.objects.get(politica=self, fecha_firma__isnull=False, gauser=u.gauser) except: oa = OrdenAdeudo.objects.none() dicts_destinatarios.append({ 'oa': oa, 'ge': u, 'num': num, 'texto': texto }) else: # Esta será la opción relacionada con la cuota tipo "fija" for u in usuarios: num = 1 texto = '%s' % (u.gauser.get_full_name()) try: oa = OrdenAdeudo.objects.get(politica=self, fecha_firma__isnull=False, gauser=u.gauser) except: oa = OrdenAdeudo.objects.none() dicts_destinatarios.append({ 'oa': oa, 'ge': u, 'num': num, 'texto': texto }) return dicts_destinatarios
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), })
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})