feat Permitir editar cualquier proyecto a los gestores.

Incluso si está presentado.
parent 0f42129c
Pipeline #527 failed with stage
in 1 second
# Generated by Django 3.0.2 on 2020-02-07 08:19
from django.apps import apps as django_apps
from django.db import migrations, models
def add_permission_to_group(apps, schema_editor):
group = apps.get_model("auth", "Group")
permission = apps.get_model("auth", "Permission")
gestores = group.objects.get(name="Gestores")
ver_proyecto = permission.objects.get(codename="editar_proyecto")
gestores.permissions.add(ver_proyecto)
def geo_post_migrate_signal(apps, schema_editor):
"""Emit the post-migrate signal during the migration.
Permissions are not actually created during or after an individual migration,
but are triggered by a post-migrate signal which is sent after the
`python manage.py migrate` command completes successfully.
This is necessary because this permission is used later in this migration.
"""
indo_config = django_apps.get_app_config("indo")
models.signals.post_migrate.send(
sender=indo_config,
app_config=indo_config,
verbosity=2,
interactive=False,
using=schema_editor.connection.alias,
)
class Migration(migrations.Migration):
dependencies = [("indo", "0005_auto_20200203_1316")]
operations = [
migrations.AlterModelOptions(
name="proyecto",
options={
"permissions": [
(
"listar_proyectos",
"Puede ver el listado de todos los proyectos.",
),
("ver_proyecto", "Puede ver cualquier proyecto."),
(
"editar_proyecto",
"Puede editar cualquier proyecto en cualquier momento.",
),
]
},
),
migrations.RunPython(geo_post_migrate_signal),
migrations.RunPython(add_permission_to_group),
]
......@@ -483,6 +483,10 @@ class Proyecto(models.Model):
permissions = [
("listar_proyectos", _("Puede ver el listado de todos los proyectos.")),
("ver_proyecto", _("Puede ver cualquier proyecto.")),
(
"editar_proyecto",
_("Puede editar cualquier proyecto en cualquier momento."),
),
]
def __str__(self):
......
......@@ -192,7 +192,9 @@ class InvitacionView(LoginRequiredMixin, ChecksMixin, CreateView):
def test_func(self):
# TODO: Comprobar estado del proyecto, fecha.
return self.es_coordinador(self.kwargs["proyecto_id"])
return self.es_coordinador(
self.kwargs["proyecto_id"]
) or self.request.user.has_perm("indo.editar_proyecto")
class ParticipanteAceptarView(LoginRequiredMixin, RedirectView):
......@@ -298,7 +300,9 @@ class ParticipanteDeleteView(LoginRequiredMixin, ChecksMixin, DeleteView):
return reverse_lazy("proyecto_detail", args=[self.object.proyecto.id])
def test_func(self):
return self.es_coordinador(self.get_object().proyecto.id)
return self.es_coordinador(
self.get_object().proyecto.id
) or self.request.user.has_perm("indo.editar_proyecto")
class ProyectoCreateView(LoginRequiredMixin, ChecksMixin, CreateView):
......@@ -406,7 +410,9 @@ class ProyectoDetailView(LoginRequiredMixin, ChecksMixin, DetailView):
context["permitir_edicion"] = (
self.es_coordinador(self.object.id) and self.object.en_borrador()
)
) or self.request.user.has_perm("indo.editar_proyecto")
context["es_editor"] = self.request.user.has_perm("indo.editar_proyecto")
return context
......@@ -692,6 +698,7 @@ class ProyectoUpdateFieldView(LoginRequiredMixin, ChecksMixin, UpdateView):
self.kwargs["campo"] == "visto_bueno_estudio"
and self.es_coordinador_estudio(self.kwargs["pk"])
)
or self.request.user.has_perm("indo.editar_proyecto")
)
......
......@@ -216,7 +216,7 @@
<span class="fas fa-step-backward"></span> {% trans 'Retroceder' %}
</a>
{% if permitir_edicion %}
{% if permitir_edicion and not es_editor %}
<button class="btn btn-danger" data-toggle="modal" data-target="#anularModal" type="button">
<span class="fas fa-trash-alt"></span> {% trans 'Anular' %}
</button>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment