Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Label : pouvoir uploader un label dans l'admin #946

Merged
merged 2 commits into from
Oct 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,7 @@
SIAE_LOGO_FOLDER_NAME = "siae_logo"
SIAE_IMAGE_FOLDER_NAME = "siae_image"
SIAE_CLIENT_REFERENCE_LOGO_FOLDER_NAME = "client_reference_logo"
LABEL_LOGO_FOLDER_NAME = "label_logo"
USER_IMAGE_FOLDER_NAME = "user_image"
SIAE_EXPORT_FOLDER_NAME = "siae_export"
STAT_EXPORT_FOLDER_NAME = "stat_export"
Expand All @@ -482,6 +483,9 @@
"client_reference_logo": {
"key_path": SIAE_CLIENT_REFERENCE_LOGO_FOLDER_NAME,
},
"label_logo": {
"key_path": LABEL_LOGO_FOLDER_NAME,
},
"user_image": {
"key_path": USER_IMAGE_FOLDER_NAME,
},
Expand Down
28 changes: 26 additions & 2 deletions lemarche/labels/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@
from lemarche.labels.models import Label
from lemarche.utils.admin.admin_site import admin_site
from lemarche.utils.fields import pretty_print_readonly_jsonfield
from lemarche.utils.s3 import S3Upload


@admin.register(Label, site=admin_site)
class LabelAdmin(admin.ModelAdmin):
list_display = ["id", "name", "siae_count_annotated_with_link", "created_at"]
list_display = ["id", "name", "siae_count_annotated_with_link", "has_logo", "created_at"]
search_fields = ["id", "name", "description"]
search_help_text = "Cherche sur les champs : ID, Nom, Description"

readonly_fields = [
"siae_count_annotated_with_link",
"has_logo",
"logo_url_display",
"data_last_sync_date",
"logs_display",
Expand All @@ -29,7 +31,7 @@ class LabelAdmin(admin.ModelAdmin):
"fields": ("name", "slug", "description", "website"),
},
),
("Logo", {"fields": ("logo_url", "logo_url_display")}),
("Logo (voir en bas pour uploader)", {"fields": ("logo_url", "logo_url_display")}),
("Structures", {"fields": ("siae_count_annotated_with_link",)}),
(
"Source de données",
Expand All @@ -44,6 +46,22 @@ class LabelAdmin(admin.ModelAdmin):
("Dates", {"fields": ("created_at", "updated_at")}),
)

change_form_template = "labels/admin_change_form.html"

class Media:
js = (
"https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js",
"vendor/dropzone-5.9.3/dropzone.min.js",
"js/s3_upload.js",
)

def change_view(self, request, object_id, form_url="", extra_context=None):
extra_context = extra_context or {}
s3_upload = S3Upload(kind="label_logo")
extra_context["s3_form_values_label_logo"] = s3_upload.form_values
extra_context["s3_upload_config_label_logo"] = s3_upload.config
return super(LabelAdmin, self).change_view(request, object_id, form_url, extra_context=extra_context)

def get_queryset(self, request):
qs = super().get_queryset(request)
qs = qs.with_siae_stats()
Expand All @@ -61,6 +79,12 @@ def get_prepopulated_fields(self, request, obj=None):
return {"slug": ("name",)}
return {}

def has_logo(self, instance):
return instance.has_logo

has_logo.boolean = True
has_logo.short_description = "Logo ?"

def logo_url_display(self, instance):
if instance.logo_url:
return mark_safe(
Expand Down
4 changes: 4 additions & 0 deletions lemarche/labels/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,7 @@ def save(self, *args, **kwargs):
"""Generate the slug field before saving."""
self.set_slug()
super().save(*args, **kwargs)

@property
def has_logo(self):
return len(self.logo_url) > 0
30 changes: 30 additions & 0 deletions lemarche/templates/labels/admin_change_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{% extends 'admin/change_form.html' %}
{% load static bootstrap4 theme_inclusion %}

{% block after_related_objects %}
{{ block.super }}

{% import_static_JS_theme_inclusion %}

<div class="submit-row">
<div class="form-group">
<label for="logo_form" class="js-display-if-javascript-enabled">Importez votre logo</label>
{% include "storage/s3_upload_form.html" with dropzone_form_id="logo_form" %}
</div>
</div>

{{ s3_form_values_label_logo|json_script:"s3-form-values-label-logo" }}
{{ s3_upload_config_label_logo|json_script:"s3-upload-config-label-logo" }}
<script type="text/javascript">
// init dropzone
s3UploadInit({
dropzoneSelector: "#logo_form",
callbackLocationSelector: "#{{ adminform.form.logo_url.id_for_label }}",
s3FormValuesId: "s3-form-values-label-logo",
s3UploadConfigId: "s3-upload-config-label-logo",
// Not really nice
sentryInternalUrl: "{% url 'pages:sentry_debug' %}",
sentryCsrfToken: "{{ csrf_token }}"
});
</script>
{% endblock %}