* adds Ema model (basically Compensation inherited)
* adds index view for EMAs
* fixes drop-down link bug for menu 'More' in navbar
* refactors some more forms to use process_request()
* adds modified attribute to BaseResource for easy last_modified check
* adds setting of modified attribute in all places where UserAction.EDITED is added to log
* adds EMA_ACCOUNT_IDENTIFIER_LENGTH and EMA_ACCOUNT_IDENTIFIER_TEMPLATE to ema/settings.py
* adds EmaAdmin to ema/admin.py
* fixes wrong title in intervention detail view html for revocations
* adds support for subtitle variable to BaseTable and generic_index.html
* drops next_version attribute from models
* adds/updates translations
* adds default ordering for UserActionLogEntry
   * removes extra ordering in log modal rendering
This commit is contained in:
mipel
2021-08-19 13:02:31 +02:00
parent b2f3094214
commit 510d77422a
34 changed files with 675 additions and 315 deletions

View File

@@ -203,6 +203,8 @@ class EditInterventionForm(NewInterventionForm):
action=UserAction.EDITED
)
self.instance.log.add(user_action)
self.instance.modified = user_action
self.instance.save()
return self.instance
@@ -381,6 +383,8 @@ class NewRevocationForm(BaseModalForm):
document=document,
created=created_action,
)
self.instance.modified = edited_action
self.instance.save()
self.instance.log.add(edited_action)
self.instance.legal.revocation = revocation
self.instance.legal.save()
@@ -553,6 +557,8 @@ class NewWithdrawForm(BaseModalForm):
action=UserAction.CREATED
)
self.instance.log.add(user_action_edit)
self.instance.modified = user_action_edit
self.instance.save()
# Create withdraw depending on Intervention or EcoAccount as the initial instance
if self.is_intervention_initially:

View File

@@ -21,9 +21,9 @@ class ResponsibilityData(UuidModel):
Holds intervention data about responsible organizations and their file numbers for this case
"""
registration_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+")
registration_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+", blank=True)
registration_file_number = models.CharField(max_length=1000, blank=True, null=True)
conservation_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+")
conservation_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+", blank=True)
conservation_file_number = models.CharField(max_length=1000, blank=True, null=True)
handler = models.CharField(max_length=500, null=True, blank=True, help_text="Refers to 'Eingriffsverursacher'")
@@ -115,9 +115,6 @@ class Intervention(BaseObject):
related_name="+"
)
# Holds which intervention is simply a newer version of this dataset
next_version = models.ForeignKey("Intervention", null=True, blank=True, on_delete=models.DO_NOTHING)
# Users having access on this object
users = models.ManyToManyField(User, help_text="Users having access (data shared with)")
access_token = models.CharField(

View File

@@ -50,7 +50,7 @@ class InterventionTable(BaseTable):
lm = tables.Column(
verbose_name=_("Last edit"),
orderable=True,
accessor="created__timestamp",
accessor="modified__timestamp",
)
"""
# ToDo: Decide to keep actions column or to dismiss them
@@ -164,23 +164,3 @@ class InterventionTable(BaseTable):
icn_class="fas fa-edit rlp-r-inv" if has_access else "far fa-edit",
)
return format_html(html)
def render_ac(self, value, record):
"""
Renders possible actions for this record, such as delete.
"""
intervention = _("Intervention")
html = ""
html += self.render_open_btn(
_("Open {}").format(intervention),
reverse("intervention:open", args=(record.id,))
)
html += self.render_edit_btn(
_("Edit {}").format(intervention),
reverse("intervention:edit", args=(record.id,)),
)
html += self.render_delete_btn(
_("Delete {}").format(intervention),
reverse("intervention:remove", args=(record.id,)),
)
return format_html(html)

View File

@@ -94,7 +94,7 @@
<th scope="row">{% trans 'Binding on' %}</th>
<td class="align-middle">{{intervention.legal.binding_date|default_if_none:""}}</td>
</tr>
<tr {% if intervention.legal.revocation %}class="alert alert-danger" title="{% trans 'Missing' %}" {% endif %}>
<tr {% if intervention.legal.revocation %}class="alert alert-danger" title="{% trans 'Exists' %}" {% endif %}>
<th scope="row">{% trans 'Revocation' %}</th>
<td class="align-middle">{{intervention.legal.revocation.date|naturalday|default_if_none:""}}</td>
</tr>

View File

@@ -33,9 +33,6 @@ def index_view(request: HttpRequest):
# Filtering by user access is performed in table filter inside of InterventionTableFilter class
interventions = Intervention.objects.filter(
deleted=None, # not deleted
next_version=None, # only newest versions
).order_by(
"-created__timestamp"
)
table = InterventionTable(
request=request,
@@ -273,22 +270,10 @@ def create_share_view(request: HttpRequest, id: str):
"""
intervention = get_object_or_404(Intervention, id=id)
form = ShareInterventionForm(request.POST or None, instance=intervention, request=request)
if request.method == "POST":
if form.is_valid():
form.save()
messages.info(
request,
_("Share settings updated")
)
return redirect(request.META.get("HTTP_REFERER", "home"))
elif request.method == "GET":
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, form.template, context)
else:
raise NotImplementedError
return form.process_request(
request,
msg_success=_("Share settings updated")
)
@login_required
@@ -324,28 +309,10 @@ def new_revocation_view(request: HttpRequest, id: str):
"""
intervention = get_object_or_404(Intervention, id=id)
form = NewRevocationForm(request.POST or None, request.FILES or None, instance=intervention, user=request.user)
if request.method == "POST":
if form.is_valid():
form.save()
messages.info(
request,
_("Revocation added")
)
else:
messages.error(
request,
FORM_INVALID,
extra_tags="danger",
)
return redirect(request.META.get("HTTP_REFERER", "home"))
elif request.method == "GET":
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, form.template, context)
else:
raise NotImplementedError
return form.process_request(
request,
msg_success=_("Revocation added")
)
@login_required
@@ -365,7 +332,7 @@ def log_view(request: HttpRequest, id: str):
context = {
"modal_body_template": body_template,
"log": intervention.log.all().order_by("-timestamp"),
"log": intervention.log.all(),
"modal_title": _("Log"),
}
context = BaseContext(request, context).context