From 3c50abf40479ddc127e5c54fa5445c10fb38800f Mon Sep 17 00:00:00 2001 From: mohamad Date: Sun, 19 Jul 2026 15:03:27 +0330 Subject: [PATCH] fix: change chexbox positions --- apps/projects/admin.py | 66 +++++--------- apps/projects/models.py | 1 + static/css/project-brief-admin.css | 89 +++++++++++++++++++ .../projects/projectbrief/change_form.html | 21 +++++ 4 files changed, 131 insertions(+), 46 deletions(-) create mode 100644 static/css/project-brief-admin.css create mode 100644 templates/admin/projects/projectbrief/change_form.html diff --git a/apps/projects/admin.py b/apps/projects/admin.py index e4e2627..a3da480 100644 --- a/apps/projects/admin.py +++ b/apps/projects/admin.py @@ -51,14 +51,24 @@ class ProjectBriefAdmin(admin.ModelAdmin): ( "Brief", { + "description": ( + "Each field has its own lock and website visibility controls. " + "Lock prevents client edits; Show on website includes the field " + "on the public card when the project is published." + ), "fields": ( "client", - "title", - "category", + "locked", + "show_on_website", + ("title", "lock_title", "show_title_on_website"), + ("category", "lock_category", "show_category_on_website"), "description", - "budget_range", - "desired_deadline", + ("lock_description", "show_description_on_website"), + ("budget_range", "lock_budget_range", "show_budget_on_website"), + ("desired_deadline", "lock_desired_deadline", "show_deadline_on_website"), "reference_links", + ("lock_reference_links", "show_references_on_website"), + ("lock_attachments", "show_attachments_on_website"), ), }, ), @@ -75,34 +85,13 @@ class ProjectBriefAdmin(admin.ModelAdmin): }, ), ( - "Client editing locks", + "Website showcase overrides", { "description": ( - "Lock individual fields so the client cannot change them while " - "the brief is still editable. 'Lock entire project' blocks all " - "client edits regardless of status." + "Optional public-facing content. Leave blank to fall back to the " + "brief field values above." ), "fields": ( - "locked", - "lock_title", - "lock_category", - "lock_description", - "lock_budget_range", - "lock_desired_deadline", - "lock_reference_links", - "lock_attachments", - ), - }, - ), - ( - "Website showcase", - { - "description": ( - "Control whether this project appears on the public website and " - "which fields are visible on the website card." - ), - "fields": ( - "show_on_website", "public_title", "public_summary", "public_tags", @@ -112,28 +101,13 @@ class ProjectBriefAdmin(admin.ModelAdmin): ), }, ), - ( - "Website field visibility", - { - "description": ( - "Each field can be independently shown or hidden on the website card." - ), - "fields": ( - "show_title_on_website", - "show_category_on_website", - "show_description_on_website", - "show_budget_on_website", - "show_deadline_on_website", - "show_references_on_website", - "show_attachments_on_website", - ), - "classes": ("collapse",), - }, - ), ) inlines = [ProjectBriefAttachmentInline, ProjectInternalNoteInline] date_hierarchy = "submitted_at" + class Media: + css = {"all": ("css/project-brief-admin.css",)} + def save_formset(self, request, form, formset, change): instances = formset.save(commit=False) for instance in instances: diff --git a/apps/projects/models.py b/apps/projects/models.py index 7c67160..9ddb37a 100644 --- a/apps/projects/models.py +++ b/apps/projects/models.py @@ -93,6 +93,7 @@ class ProjectBrief(models.Model): ) locked = models.BooleanField( default=False, + verbose_name="Lock project", help_text="Lock the whole project so the client cannot edit it at all.", ) lock_title = models.BooleanField(default=False, help_text="Lock title for the client.") diff --git a/static/css/project-brief-admin.css b/static/css/project-brief-admin.css new file mode 100644 index 0000000..70838a1 --- /dev/null +++ b/static/css/project-brief-admin.css @@ -0,0 +1,89 @@ +#projectbrief_form .project-brief-fieldset > .form-row.multi-field { + display: grid; + grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); + gap: 1rem 1.25rem; + align-items: start; + padding-top: 0.75rem; + border-top: 1px solid #e5e7eb; +} + +#projectbrief_form .project-brief-fieldset > .form-row.multi-field:first-of-type { + border-top: none; +} + +#projectbrief_form .project-brief-field-header { + display: grid; + grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); + gap: 1rem 1.25rem; + margin: 0.75rem 0 0.25rem; + padding: 0.5rem 0; + border-bottom: 2px solid #cbd5e1; + font-size: 0.75rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + color: #64748b; +} + +#projectbrief_form .project-brief-field-header span:nth-child(2), +#projectbrief_form .project-brief-field-header span:nth-child(3) { + text-align: left; +} + +#projectbrief_form .project-brief-fieldset .field-lock_title, +#projectbrief_form .project-brief-fieldset .field-lock_category, +#projectbrief_form .project-brief-fieldset .field-lock_description, +#projectbrief_form .project-brief-fieldset .field-lock_budget_range, +#projectbrief_form .project-brief-fieldset .field-lock_desired_deadline, +#projectbrief_form .project-brief-fieldset .field-lock_reference_links, +#projectbrief_form .project-brief-fieldset .field-lock_attachments, +#projectbrief_form .project-brief-fieldset .field-show_title_on_website, +#projectbrief_form .project-brief-fieldset .field-show_category_on_website, +#projectbrief_form .project-brief-fieldset .field-show_description_on_website, +#projectbrief_form .project-brief-fieldset .field-show_budget_on_website, +#projectbrief_form .project-brief-fieldset .field-show_deadline_on_website, +#projectbrief_form .project-brief-fieldset .field-show_references_on_website, +#projectbrief_form .project-brief-fieldset .field-show_attachments_on_website { + padding-top: 0.15rem; +} + +#projectbrief_form .project-brief-fieldset .field-lock_title label, +#projectbrief_form .project-brief-fieldset .field-lock_category label, +#projectbrief_form .project-brief-fieldset .field-lock_description label, +#projectbrief_form .project-brief-fieldset .field-lock_budget_range label, +#projectbrief_form .project-brief-fieldset .field-lock_desired_deadline label, +#projectbrief_form .project-brief-fieldset .field-lock_reference_links label, +#projectbrief_form .project-brief-fieldset .field-lock_attachments label, +#projectbrief_form .project-brief-fieldset .field-show_title_on_website label, +#projectbrief_form .project-brief-fieldset .field-show_category_on_website label, +#projectbrief_form .project-brief-fieldset .field-show_description_on_website label, +#projectbrief_form .project-brief-fieldset .field-show_budget_on_website label, +#projectbrief_form .project-brief-fieldset .field-show_deadline_on_website label, +#projectbrief_form .project-brief-fieldset .field-show_references_on_website label, +#projectbrief_form .project-brief-fieldset .field-show_attachments_on_website label { + font-size: 0.78rem; + font-weight: 600; + color: #475569; +} + +#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_description, +#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_reference_links, +#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_attachments, +#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_description_on_website, +#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_references_on_website, +#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_attachments_on_website { + display: inline-block; + width: calc(50% - 0.75rem); + vertical-align: top; + margin-right: 1rem; +} + +#projectbrief_form .field-description textarea, +#projectbrief_form .field-reference_links textarea { + max-width: 100%; +} + +#projectbrief_form .field-lock_attachments .help, +#projectbrief_form .field-show_attachments_on_website .help { + margin-top: 0.25rem; +} diff --git a/templates/admin/projects/projectbrief/change_form.html b/templates/admin/projects/projectbrief/change_form.html new file mode 100644 index 0000000..2240c2c --- /dev/null +++ b/templates/admin/projects/projectbrief/change_form.html @@ -0,0 +1,21 @@ +{% extends "admin/change_form.html" %} + +{% block field_sets %} +{{ block.super }} + +{% endblock %}