From 57bcc35da47e20c5739ece48e8b9fa24e151d5fa Mon Sep 17 00:00:00 2001 From: Fedor Date: Sun, 8 Nov 2026 18:32:02 +0300 Subject: [PATCH 1/3] Restore project-based program submissions on dev --- assets/users/user_CV/Mont-Bold.ttf | Bin 0 -> 143196 bytes assets/users/user_CV/Mont-Light.ttf | Bin 0 -> 145024 bytes docker-compose.dev-ci.yml | 3 + partner_programs/admin.py | 21 ++- partner_programs/admin_certificate_fonts.py | 122 +++++++++++++++++ partner_programs/attention_views.py | 8 +- partner_programs/certificate_views.py | 56 +++++++- partner_programs/forms.py | 15 +- .../migrations/0043_project_copy_form.py | 45 ++++++ partner_programs/models.py | 36 +++++ partner_programs/permissions.py | 27 +++- partner_programs/program_launch_views.py | 8 +- partner_programs/project_form.py | 32 +++++ partner_programs/serializers/attention.py | 4 + .../serializers/attention_actions.py | 5 + partner_programs/serializers/fields.py | 1 + .../services/attention_actions.py | 31 +++-- partner_programs/services/case_fields.py | 16 ++- partner_programs/services/certificates.py | 129 +++++++++++++++--- partner_programs/services/management_form.py | 58 +++++++- .../services/management_project_actions.py | 23 +++- partner_programs/services/program_launch.py | 92 +++++++++---- partner_programs/services/project_apply.py | 64 ++++++++- partner_programs/services/project_fields.py | 56 +++++++- partner_programs/services/project_filters.py | 6 +- partner_programs/solution_api.py | 15 +- partner_programs/tasks.py | 1 + partner_programs/tests/test_certificates.py | 62 ++++++++- partner_programs/tests/test_program_launch.py | 32 ++++- partner_programs/tests/test_project_apply.py | 53 +++++++ partner_programs/views.py | 55 +++++++- procollab/settings.py | 2 + .../migrations/0036_neutral_default_images.py | 27 ++++ projects/models.py | 27 ++-- projects/permissions.py | 12 +- projects/serializers.py | 65 +++++++-- projects/team_policy.py | 15 +- projects/team_service.py | 8 +- projects/validators.py | 10 -- projects/views.py | 96 +++++-------- .../admin/certificate_fonts.html | 10 ++ .../admin/program_manager_change_form.html | 1 + .../admin/programs_change_form.html | 1 + 43 files changed, 1141 insertions(+), 209 deletions(-) create mode 100644 assets/users/user_CV/Mont-Bold.ttf create mode 100644 assets/users/user_CV/Mont-Light.ttf create mode 100644 partner_programs/admin_certificate_fonts.py create mode 100644 partner_programs/migrations/0043_project_copy_form.py create mode 100644 partner_programs/project_form.py create mode 100644 projects/migrations/0036_neutral_default_images.py create mode 100644 templates/partner_programs/admin/certificate_fonts.html diff --git a/assets/users/user_CV/Mont-Bold.ttf b/assets/users/user_CV/Mont-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4952bac447131b5cf1cc165432c4e75550c4eb7d GIT binary patch literal 143196 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 literal 0 HcmV?d00001 diff --git a/docker-compose.dev-ci.yml b/docker-compose.dev-ci.yml index 77de9869..1058d9cd 100644 --- a/docker-compose.dev-ci.yml +++ b/docker-compose.dev-ci.yml @@ -14,6 +14,8 @@ services: environment: HOST: 0.0.0.0 EXPERT_WORKSPACE_FRONTEND_URL: https://dev.procollab.ru + PROGRAM_SOLUTIONS_ENABLED: ${PROGRAM_SOLUTIONS_ENABLED:-false} + PROJECT_DEFAULT_PACK_URL: https://dev.procollab.ru/assets/project-defaults ports: - "127.0.0.1:8000:8000" @@ -34,6 +36,7 @@ services: - .env environment: EXPERT_WORKSPACE_FRONTEND_URL: https://dev.procollab.ru + PROGRAM_SOLUTIONS_ENABLED: ${PROGRAM_SOLUTIONS_ENABLED:-false} command: bash ./scripts/celery.sh depends_on: - redis diff --git a/partner_programs/admin.py b/partner_programs/admin.py index 11ace654..77633333 100644 --- a/partner_programs/admin.py +++ b/partner_programs/admin.py @@ -30,6 +30,7 @@ from partner_programs.services.case_fields import case_field_has_values from partner_programs.admin_registration import ProgramRegistrationAdminMixin from partner_programs.admin_publication import ProgramPublicationAdminMixin +from partner_programs.admin_certificate_fonts import ProgramCertificateFontsAdminMixin from partner_programs.program_dates import ( DATE_FIELDS, program_date_errors, @@ -53,7 +54,10 @@ class PartnerProgramFieldInline(admin.TabularInline): @admin.register(PartnerProgram) class PartnerProgramAdmin( - ProgramPublicationAdminMixin, ProgramRegistrationAdminMixin, admin.ModelAdmin + ProgramPublicationAdminMixin, + ProgramRegistrationAdminMixin, + ProgramCertificateFontsAdminMixin, + admin.ModelAdmin, ): class PartnerProgramAdminForm(forms.ModelForm): confirm_reopen = forms.BooleanField( @@ -130,6 +134,7 @@ class Meta: "is_competitive", "legacy_team_min_size", "legacy_team_max_size", + "project_sections", "projects_availability", "publish_projects_after_finish", "max_project_rates", @@ -398,13 +403,18 @@ def get_deleted_objects(self, objs, request): objs, request ) for obj in objs: + from partner_programs.project_form import protected_project_field from partner_programs.solution_forms import answer_count - if case_field_has_values(obj) or ( - obj.partner_program.solution_storage_mode == "solution" - and answer_count(obj) + if ( + protected_project_field(obj) + or case_field_has_values(obj) + or ( + obj.partner_program.solution_storage_mode == "solution" + and answer_count(obj) + ) ): - protected.append(f"Используемое поле кейса: {obj}") + protected.append(f"Стандартное поле или поле с ответами: {obj}") return deleted, counts, permissions_needed, protected list_display = ( @@ -414,6 +424,7 @@ def get_deleted_objects(self, objs, request): "label", "field_type", "is_required", + "is_visible", "show_filter", ) list_filter = ("partner_program",) diff --git a/partner_programs/admin_certificate_fonts.py b/partner_programs/admin_certificate_fonts.py new file mode 100644 index 00000000..be039f86 --- /dev/null +++ b/partner_programs/admin_certificate_fonts.py @@ -0,0 +1,122 @@ +from copy import deepcopy + +from django import forms +from django.contrib import messages +from django.core.exceptions import PermissionDenied +from django.db import transaction +from django.shortcuts import get_object_or_404, redirect +from django.template.response import TemplateResponse +from django.urls import path, reverse +from rest_framework.exceptions import ValidationError + +from partner_programs.certificate_models import ( + ProgramCertificateAsset, + ProgramCertificateConfig, +) +from partner_programs.services import certificates + + +class CertificateFontsForm(forms.Form): + element = forms.ChoiceField( + label="Текстовый элемент", + choices=[ + ("name", "Имя участника"), + ("title", "Заголовок"), + ("subtitle", "Подзаголовок"), + ("program", "Название программы"), + ("date", "Дата выдачи"), + ("number", "Номер сертификата"), + ("director", "Имя директора"), + ("position", "Должность"), + ], + ) + font = forms.ChoiceField(label="Шрифт") + upload = forms.FileField( + label="Загрузить шрифт для выбранного элемента", + required=False, + widget=forms.ClearableFileInput(attrs={"accept": ".ttf,.otf"}), + help_text="TTF или OTF до 2 МБ.", + ) + revision = forms.IntegerField(widget=forms.HiddenInput()) + + def __init__(self, *args, program, config, **kwargs): + super().__init__(*args, **kwargs) + self.fields["revision"].initial = config.revision + self.fields["font"].choices = [ + ("mont", "Mont"), + ("mont-regular", "Mont Regular"), + ("mont-light", "Mont Light"), + ("mont-bold", "Mont Bold"), + ("pt-serif", "PT Serif"), + ("lobster", "Lobster"), + *[ + (f"custom-{pk}", name) + for pk, name in ProgramCertificateAsset.objects.filter( + program=program, kind="font" + ).values_list("pk", "name") + ], + ] + self.fields["font"].initial = config.draft["layout"]["name"].get( + "font_family", "mont" + ) + + +class ProgramCertificateFontsAdminMixin: + def get_urls(self): + return [ + path( + "/certificate-fonts/", + self.admin_site.admin_view(self.certificate_fonts), + name="partner_programs_partnerprogram_certificate_fonts", + ), + *super().get_urls(), + ] + + def certificate_fonts(self, request, object_id): + program = get_object_or_404(self.get_queryset(request), pk=object_id) + if not self.has_change_permission(request, program): + raise PermissionDenied + config = certificates.config_for(program) + form = CertificateFontsForm( + request.POST or None, request.FILES or None, program=program, config=config + ) + if request.method == "POST" and form.is_valid(): + try: + with transaction.atomic(): + type(program).objects.select_for_update().get(pk=program.pk) + current = ProgramCertificateConfig.objects.select_for_update().get( + pk=config.pk + ) + data = form.cleaned_data + if current.revision != data["revision"]: + raise ValidationError("Шаблон уже изменен. Обновите страницу.") + font = data["font"] + if data["upload"]: + font = f"custom-{certificates.upload_font(program, data['upload']).pk}" + draft = deepcopy(current.draft) + draft["layout"][data["element"]]["font_family"] = font + current.draft = certificates.validate_draft( + program, draft, current.draft + ) + current.revision += 1 + current.save(update_fields=["draft", "revision"]) + except ValidationError as error: + form.add_error(None, " ".join(map(str, error.detail))) + else: + self.message_user(request, "Шрифт элемента сохранен.", messages.SUCCESS) + return redirect( + "admin:partner_programs_partnerprogram_certificate_fonts", object_id + ) + return TemplateResponse( + request, + "partner_programs/admin/certificate_fonts.html", + { + **self.admin_site.each_context(request), + "title": "Шрифты сертификата", + "program": program, + "form": form, + "change_url": reverse( + "admin:partner_programs_partnerprogram_change", args=[object_id] + ), + }, + ) diff --git a/partner_programs/attention_views.py b/partner_programs/attention_views.py index b2c38b8e..29014d4c 100644 --- a/partner_programs/attention_views.py +++ b/partner_programs/attention_views.py @@ -36,7 +36,13 @@ def post(self, request, pk, category, action): if action == "reminders": response = Response( confirm_reminder( - program, category, request.user, serializer.validated_data["token"] + program, + category, + request.user, + serializer.validated_data["token"], + excluded_recipient_ids=serializer.validated_data[ + "excluded_recipient_ids" + ], ) ) elif action == "reminder-preview": diff --git a/partner_programs/certificate_views.py b/partner_programs/certificate_views.py index 9510cd01..5d65b3a0 100644 --- a/partner_programs/certificate_views.py +++ b/partner_programs/certificate_views.py @@ -72,7 +72,8 @@ def post(self, request, pk): def get(self, request, pk, asset_id): program = managed_program(pk, request.user) asset = get_object_or_404(ProgramCertificateAsset, pk=asset_id, program=program) - response = HttpResponse(bytes(asset.content), content_type="image/png") + content_type = "font/sfnt" if asset.kind == "font" else "image/png" + response = HttpResponse(bytes(asset.content), content_type=content_type) response["Cache-Control"] = "private, no-store" response["X-Content-Type-Options"] = "nosniff" return response @@ -93,6 +94,7 @@ def post(self, request, pk): program.name, "ПРОБНЫЙ", timezone.localtime(), + program_id=program.pk, ) return pdf_response(content, "certificate-preview") @@ -384,6 +386,7 @@ def current_certificate_pdf(program, config, row, public_base_url): program.name, str(row.pk).upper(), timezone.localtime(row.created_at), + program_id=program.pk, ) row.batch = service.manual_batch(program, draft, public_base_url, "refresh") row.rendered_batch = row.batch @@ -430,13 +433,21 @@ def post(self, request, pk): program = managed_program(pk, request.user, lock=True) config = service.config_for(program) - revision_check(config, request.data) rows = ( selected_rows(program, request.data) .select_for_update(of=("self",)) .select_related("batch", "rendered_batch", "program") .defer(None) ) + published_only = serializers.BooleanField(default=False).run_validation( + request.data.get("published_only", False) + ) + if not published_only: + revision_check(config, request.data) + if published_only and rows.filter(pdf__isnull=True).exists(): + raise ValidationError( + "Сначала подготовьте PDF для всех выбранных участников." + ) if rows.filter(status__in=["pending", "generating", "sending"]).exists(): raise ValidationError( "Дождитесь завершения обработки выбранных сертификатов." @@ -444,11 +455,19 @@ def post(self, request, pk): output = tempfile.SpooledTemporaryFile(max_size=8 * 1024 * 1024) try: with zipfile.ZipFile(output, "w", zipfile.ZIP_DEFLATED) as archive: + names = set() for row in rows.iterator(chunk_size=20): - content = current_certificate_pdf( - program, config, row, request.build_absolute_uri("/").rstrip("/") + content = ( + bytes(row.pdf) + if published_only + else current_certificate_pdf( + program, + config, + row, + request.build_absolute_uri("/").rstrip("/"), + ) ) - archive.writestr(f"certificate-{row.pk}.pdf", content) + archive.writestr(certificate_archive_name(row.name, names), content) output.seek(0) except Exception: output.close() @@ -466,16 +485,39 @@ def get(self, request, pk): output = tempfile.SpooledTemporaryFile(max_size=8 * 1024 * 1024) with zipfile.ZipFile(output, "w", zipfile.ZIP_DEFLATED) as archive: + names = set() for row in ( - rows.filter(pdf__isnull=False).only("pk", "pdf").iterator(chunk_size=50) + rows.filter(pdf__isnull=False) + .only("pk", "name", "pdf") + .iterator(chunk_size=50) ): - archive.writestr(f"certificate-{row.pk}.pdf", bytes(row.pdf)) + archive.writestr( + certificate_archive_name(row.name, names), bytes(row.pdf) + ) output.seek(0) response = FileResponse(output, as_attachment=True, filename="certificates.zip") response["Cache-Control"] = "private, no-store" return response +def certificate_archive_name(name, used): + import re + from pathlib import PureWindowsPath + from unicodedata import normalize + + stem = re.sub(r'[\\/:*?"<>|\x00-\x1f\x7f]', "_", normalize("NFC", name)) + stem = stem[:120].strip(" .") or "Сертификат" + if PureWindowsPath(stem).is_reserved(): + stem = "Сертификат " + stem + filename = stem + ".pdf" + suffix = 2 + while filename.casefold() in used: + filename = f"{stem} ({suffix}).pdf" + suffix += 1 + used.add(filename.casefold()) + return filename + + class MyCertificatesView(ManagementBase): def get(self, request, pk): rows = ProgramCertificate.objects.filter( diff --git a/partner_programs/forms.py b/partner_programs/forms.py index 0a40a95c..012f6c24 100644 --- a/partner_programs/forms.py +++ b/partner_programs/forms.py @@ -4,6 +4,7 @@ from django.forms.models import BaseInlineFormSet from partner_programs.services.case_fields import case_field_has_values +from partner_programs.project_form import protected_project_field from partner_programs.services.field_values import ( FIELD_VALUES_FROZEN_MESSAGE, program_field_values_are_frozen, @@ -18,14 +19,20 @@ def clean(self): for form in self.deleted_forms: from partner_programs.solution_forms import answer_count - if case_field_has_values(form.instance) or ( - form.instance.pk - and form.instance.partner_program.solution_storage_mode == "solution" - and answer_count(form.instance) + field = form.instance + if not field.pk: + continue + if case_field_has_values(field) or ( + field.partner_program.solution_storage_mode == "solution" + and answer_count(field) ): raise ValidationError( "Нельзя удалить системное поле с выбранными кейсами." ) + if protected_project_field(field): + raise ValidationError( + "Стандартное поле или поле с ответами можно скрыть." + ) class ProgramFieldValueInlineFormSet(BaseInlineFormSet): diff --git a/partner_programs/migrations/0043_project_copy_form.py b/partner_programs/migrations/0043_project_copy_form.py new file mode 100644 index 00000000..4aef70f5 --- /dev/null +++ b/partner_programs/migrations/0043_project_copy_form.py @@ -0,0 +1,45 @@ +# Generated by Django 5.2.18 on 2026-11-08 14:32 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("partner_programs", "0042_partnerprogram_tag_optional"), + ("projects", "0035_interface_copy"), + ] + + operations = [ + migrations.AddField( + model_name="partnerprogram", + name="project_sections", + field=models.JSONField( + blank=True, default=dict, verbose_name="Разделы проекта в программе" + ), + ), + migrations.AddField( + model_name="partnerprogramfield", + name="is_visible", + field=models.BooleanField(default=True, verbose_name="Показывать в форме"), + ), + migrations.AddField( + model_name="partnerprogramproject", + name="source_project", + field=models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="program_copies", + to="projects.project", + verbose_name="Исходный проект", + ), + ), + migrations.AddField( + model_name="partnerprogramproject", + name="submitted_form", + field=models.JSONField(blank=True, editable=False, null=True), + ), + ] diff --git a/partner_programs/models.py b/partner_programs/models.py index d055a1fd..19f1df93 100644 --- a/partner_programs/models.py +++ b/partner_programs/models.py @@ -149,6 +149,9 @@ class PartnerProgram(models.Model): verbose_name="Максимум участников legacy-команды", help_text="NULL — без максимума. Ожидающие приглашения резервируют места.", ) + project_sections = models.JSONField( + default=dict, blank=True, verbose_name="Разделы проекта в программе" + ) city = models.TextField( verbose_name="Город", ) @@ -298,6 +301,17 @@ class PartnerProgram(models.Model): def clean(self): super().clean() self.validate_solution_template_change() + from partner_programs.project_form import PROJECT_SECTIONS + + if not isinstance(self.project_sections, dict) or any( + key not in PROJECT_SECTIONS or not isinstance(value, bool) + for key, value in self.project_sections.items() + ): + raise ValidationError( + { + "project_sections": "Укажите доступные разделы и значения true или false." + } + ) for field in ("legacy_team_min_size", "legacy_team_max_size"): value = getattr(self, field) if value is not None and value < 1: @@ -518,6 +532,16 @@ class PartnerProgramProject(models.Model): project = models.ForeignKey( Project, on_delete=models.CASCADE, related_name="program_links" ) + source_project = models.ForeignKey( + Project, + null=True, + blank=True, + editable=False, + on_delete=models.SET_NULL, + related_name="program_copies", + verbose_name="Исходный проект", + ) + submitted_form = models.JSONField(null=True, blank=True, editable=False) datetime_created = models.DateTimeField(auto_now_add=True) datetime_updated = models.DateTimeField(auto_now=True) submitted = models.BooleanField(default=False, verbose_name="Проект сдан") @@ -584,6 +608,17 @@ def save(self, *args, **kwargs): self.project = context.project self.partner_program = context.programs[self.partner_program_id] self.clean() + fields = kwargs.get("update_fields") + if ( + self.submitted + and self.submitted_form is None + and (fields is None or "submitted" in fields) + ): + from partner_programs.services.project_fields import form_snapshot + + self.submitted_form = form_snapshot(self) + if fields is not None: + kwargs["update_fields"] = {*fields, "submitted_form"} return super().save(*args, **kwargs) @transaction.atomic @@ -638,6 +673,7 @@ class PartnerProgramField(models.Model): label = models.CharField(max_length=256, verbose_name="Отображаемое название") field_type = models.CharField(max_length=20, choices=FIELD_TYPES) is_required = models.BooleanField(default=False) + is_visible = models.BooleanField(default=True, verbose_name="Показывать в форме") purpose = models.CharField(max_length=24, default="other") position = models.PositiveIntegerField(default=0) validation = models.JSONField(default=dict, blank=True) diff --git a/partner_programs/permissions.py b/partner_programs/permissions.py index 46005509..2e0ccc4c 100644 --- a/partner_programs/permissions.py +++ b/partner_programs/permissions.py @@ -1,5 +1,6 @@ from functools import wraps +from django.conf import settings from rest_framework.exceptions import NotFound, PermissionDenied from rest_framework.permissions import BasePermission, SAFE_METHODS @@ -10,9 +11,7 @@ def can_create_program(user) -> bool: return bool( - user - and user.is_authenticated - and user.has_perm(PROGRAM_CREATION_PERMISSION) + user and user.is_authenticated and user.has_perm(PROGRAM_CREATION_PERMISSION) ) @@ -27,6 +26,19 @@ def has_permission(self, request, view): return True +def active_programs(queryset): + if not settings.PROGRAM_SOLUTIONS_ENABLED: + return queryset.exclude(solution_storage_mode="solution") + return queryset + + +class SolutionFlowEnabled(BasePermission): + def has_permission(self, request, view): + if not settings.PROGRAM_SOLUTIONS_ENABLED: + raise NotFound() + return True + + class ProgramDraftVisibility(BasePermission): """One boundary for every program route, after DRF authentication.""" @@ -46,6 +58,15 @@ def has_permission(self, request, view): program = PartnerProgram.objects.filter(pk=pk).first() if pk else None # Reuse this read in read-only views, never for transactional writes. view.visibility_program = program + if ( + program + and program.solution_storage_mode == "solution" + and not settings.PROGRAM_SOLUTIONS_ENABLED + ): + setattr( + getattr(request, "_request", request), "_program_draft_response", True + ) + raise NotFound() if program is None or not program.draft: return True setattr(getattr(request, "_request", request), "_program_draft_response", True) diff --git a/partner_programs/program_launch_views.py b/partner_programs/program_launch_views.py index 8a0a33de..5b2c4ac1 100644 --- a/partner_programs/program_launch_views.py +++ b/partner_programs/program_launch_views.py @@ -6,7 +6,11 @@ from partner_programs.management_views import ManagementBase from partner_programs.models import PartnerProgram from partner_programs.pagination import ProgramAttentionPagination -from partner_programs.permissions import can_create_program, require_create_program +from partner_programs.permissions import ( + active_programs, + can_create_program, + require_create_program, +) from partner_programs.serializers.management import StrictFieldsMixin from partner_programs.services import program_launch as service from partner_programs.services.management import management_data @@ -42,7 +46,7 @@ class ManagedProgramsView(ManagementBase): def get(self, request): form = ManagedProgramsQuery(data=request.query_params) form.is_valid(raise_exception=True) - rows = PartnerProgram.objects.all() + rows = active_programs(PartnerProgram.objects.all()) if not (request.user.is_staff or request.user.is_superuser): rows = rows.filter(managers=request.user) if form.validated_data["search"]: diff --git a/partner_programs/project_form.py b/partner_programs/project_form.py new file mode 100644 index 00000000..89620198 --- /dev/null +++ b/partner_programs/project_form.py @@ -0,0 +1,32 @@ +"""The form of a Project copy belongs to its program.""" + +from partner_programs.constants import PROGRAM_CASE_FIELD_NAME + +PROJECT_SECTIONS = ("partners", "achievements", "vacancies", "program_data") +PROJECT_FIELDS = { + "project_description": "description", + "project_presentation": "presentation_address", +} + + +def project_sections(program): + return {key: program.project_sections.get(key, True) for key in PROJECT_SECTIONS} + + +def visible_project_fields(program): + fields = program.fields.filter(is_visible=True).order_by("pk") + if not project_sections(program)["program_data"]: + fields = fields.filter(name__in=(PROGRAM_CASE_FIELD_NAME, "project_description")) + return fields + + +def field_value(link, field, values): + attribute = PROJECT_FIELDS.get(field.name) + return getattr(link.project, attribute) if attribute else values.get(field.pk) + + +def protected_project_field(field): + return ( + field.name in PROJECT_FIELDS + or field.values.filter(value_text__regex=r"\S").exists() + ) diff --git a/partner_programs/serializers/attention.py b/partner_programs/serializers/attention.py index 1a80d5f3..84ad91a2 100644 --- a/partner_programs/serializers/attention.py +++ b/partner_programs/serializers/attention.py @@ -100,6 +100,10 @@ class ProgramAttentionProjectSerializer(serializers.Serializer): reason_label = serializers.SerializerMethodField() assignments_total = serializers.IntegerField(allow_null=True) assignments_completed = serializers.IntegerField(allow_null=True) + experts = serializers.SerializerMethodField() + + def get_experts(self, link): + return self.context.get("experts_by_project", {}).get(link.project_id, []) def get_reason(self, link): """Причина следует из общего статуса и реальных назначений, не из лимита.""" diff --git a/partner_programs/serializers/attention_actions.py b/partner_programs/serializers/attention_actions.py index 32c0600d..c052e861 100644 --- a/partner_programs/serializers/attention_actions.py +++ b/partner_programs/serializers/attention_actions.py @@ -40,3 +40,8 @@ class AttentionActionSerializer(serializers.Serializer): class AttentionConfirmationSerializer(serializers.Serializer): token = serializers.CharField(max_length=1000000) + excluded_recipient_ids = serializers.ListField( + child=serializers.IntegerField(min_value=1), + max_length=MAX_SELECTION, + default=list, + ) diff --git a/partner_programs/serializers/fields.py b/partner_programs/serializers/fields.py index 35d67041..aac69a5c 100644 --- a/partner_programs/serializers/fields.py +++ b/partner_programs/serializers/fields.py @@ -51,6 +51,7 @@ def _get_validator(self, field: PartnerProgramField): "select": self._validate_select, "radio": self._validate_radio, "file": self._validate_file, + "url": self._validate_file, } try: return validators[field.field_type] diff --git a/partner_programs/services/attention_actions.py b/partner_programs/services/attention_actions.py index 46e5f721..f0caa331 100644 --- a/partner_programs/services/attention_actions.py +++ b/partner_programs/services/attention_actions.py @@ -197,14 +197,21 @@ def preview_reminder(program, category, actor, payload): "token": token, "selected_count": len(rows), "recipient_count": len(available), - "without_assignments_count": len(rows) - len(assigned_sources) - if category in ("projects-awaiting-evaluation", SOLUTION_AWAITING) - else 0, + "without_assignments_count": ( + len(rows) - len(assigned_sources) + if category in ("projects-awaiting-evaluation", SOLUTION_AWAITING) + else 0 + ), "unavailable_count": len(targets) - len(available), "preview_text": preview_text, "recipients": [ - {"user_id": t["user_id"], "full_name": person_name(users[t["user_id"]])} - for t in available[:20] + { + "user_id": target["user_id"], + "full_name": person_name(users[target["user_id"]]), + "email": users[target["user_id"]].email, + "avatar": users[target["user_id"]].avatar, + } + for target in available ], "expires_in": PREVIEW_TTL, } @@ -254,7 +261,7 @@ def fresh_targets(program, category, ids, snapshot): return rows, result -def confirm_reminder(program, category, actor, token): +def confirm_reminder(program, category, actor, token, *, excluded_recipient_ids=()): try: data = signing.loads(token, salt=SALT, max_age=PREVIEW_TTL) except signing.BadSignature: @@ -269,6 +276,12 @@ def confirm_reminder(program, category, actor, token): raise ValidationError( {"detail": "Предпросмотр относится к другому списку или пользователю."} ) + excluded = set(excluded_recipient_ids) + if excluded - {target["user_id"] for target in data["targets"]}: + raise ValidationError({"detail": "Получатель не входит в список напоминаний."}) + snapshot = [target for target in data["targets"] if target["user_id"] not in excluded] + if not snapshot: + raise ValidationError({"detail": "Оставьте хотя бы одного получателя."}) with transaction.atomic(): # Serialize confirmations for the same program; token UUID is the durable # idempotency key, including when the client loses the HTTP response. @@ -278,16 +291,14 @@ def confirm_reminder(program, category, actor, token): ).first() if existing: return existing.result - rows, targets = fresh_targets( - program, category, data["source_ids"], data["targets"] - ) + rows, targets = fresh_targets(program, category, data["source_ids"], snapshot) users = CustomUser.objects.in_bulk([t["user_id"] for t in targets]) targets = [ t for t in targets if users.get(t["user_id"]) and users[t["user_id"]].email ] result = { "created_count": len(targets), - "skipped_count": len(data["targets"]) - len(targets), + "skipped_count": len(snapshot) - len(targets), } batch = ProgramAttentionReminderBatch.objects.create( id=data["request_id"], diff --git a/partner_programs/services/case_fields.py b/partner_programs/services/case_fields.py index e533ef06..562aad50 100644 --- a/partner_programs/services/case_fields.py +++ b/partner_programs/services/case_fields.py @@ -49,6 +49,8 @@ def validate_program_case_configuration(field): errors["field_type"] = "Системный кейс должен быть полем select." if not field.is_required: errors["is_required"] = "Кейс обязателен перед сдачей проекта." + if not field.is_visible: + errors["is_visible"] = "Кейс должен быть доступен в форме сдачи." if not field.show_filter: errors["show_filter"] = "Системный кейс должен быть доступен для фильтрации." options = ( @@ -64,9 +66,9 @@ def validate_program_case_configuration(field): errors["options"] = "Укажите хотя бы один кейс без пустых вариантов." options = [] elif len({value.strip().casefold() for value in options}) != len(options): - errors[ - "options" - ] = "Варианты кейсов не должны повторяться (без учета регистра и внешних пробелов)." + errors["options"] = ( + "Варианты кейсов не должны повторяться (без учета регистра и внешних пробелов)." + ) if field.pk: used = set(field.values.values_list("value_text", flat=True).distinct()) if used - set(options): @@ -89,6 +91,14 @@ def validate_case_before_submission(program_project, *, for_update=True): """Lock config inside the caller's transaction; validate this link only.""" field = get_program_case_field(program_project.partner_program, for_update=for_update) if field is None: + program = program_project.partner_program + if program.is_competitive and program.program_format in ( + "case_championship", + "hackathon", + ): + raise ValidationError( + "Организатор еще не настроил кейсы или треки программы." + ) return value = ( program_project.field_values.filter(field=field) diff --git a/partner_programs/services/certificates.py b/partner_programs/services/certificates.py index 16e9754a..5690c933 100644 --- a/partner_programs/services/certificates.py +++ b/partner_programs/services/certificates.py @@ -29,6 +29,14 @@ logger = logging.getLogger(__name__) CERTIFICATE_FONTS = { "mont": ("Mont", "Mont-Regular.ttf", "Mont-SemiBold.ttf", 600), + "mont-regular": ( + "Certificate Mont Regular", + "Mont-Regular.ttf", + "Mont-Regular.ttf", + 400, + ), + "mont-light": ("Certificate Mont Light", "Mont-Light.ttf", "Mont-Light.ttf", 400), + "mont-bold": ("Certificate Mont Bold", "Mont-Bold.ttf", "Mont-Bold.ttf", 400), "pt-serif": ("Certificate PT Serif", "PTSerif-Regular.ttf", "PTSerif-Bold.ttf", 700), "lobster": ("Certificate Lobster", "Lobster-Regular.ttf", "Lobster-Regular.ttf", 400), } @@ -175,6 +183,20 @@ def assets_for(program, draft): return result +def uploaded_fonts(program_id, draft): + keys = {box.get("font_family", "") for box in draft["layout"].values()} + ids = {int(key.removeprefix("custom-")) for key in keys if key.startswith("custom-")} + if not ids: + return {} + rows = ProgramCertificateAsset.objects.filter( + program_id=program_id, kind="font", pk__in=ids + ) + fonts = {f"custom-{asset.pk}": asset for asset in rows} + if len(fonts) != len(ids): + raise ValidationError("Шрифт не найден в этой программе.") + return fonts + + def state(program): config = config_for(program) batch = ( @@ -186,6 +208,14 @@ def state(program): return { "revision": config.revision, "draft": normalized_draft(config.draft), + "fonts": [ + asset_data(asset) + for asset in ProgramCertificateAsset.objects.filter( + program=program, kind="font" + ) + .defer("content") + .order_by("pk") + ], "assets": { key: asset_data(value) for key, value in assets_for(program, config.draft).items() @@ -193,14 +223,16 @@ def state(program): "eligible_counts": { a: recipient_users(program, a).count() for a in ("all", "submitted") }, - "batch": { - "id": batch.pk, - "active": batch.active, - "issue_at": batch.issue_at, - "initialized_at": batch.initialized_at, - } - if batch - else None, + "batch": ( + { + "id": batch.pk, + "active": batch.active, + "issue_at": batch.issue_at, + "initialized_at": batch.initialized_at, + } + if batch + else None + ), } @@ -255,6 +287,8 @@ def manual_batch(program, draft, public_base_url, action): def upload_asset(program, kind, upload): + if kind == "font": + return upload_font(program, upload) if kind not in ("background", "signature") or not upload: raise ValidationError("Выберите фон или подпись и файл.") if upload.size > 10 * 1024 * 1024: @@ -298,6 +332,33 @@ def upload_asset(program, kind, upload): ) +@transaction.atomic +def upload_font(program, upload): + if not upload or upload.size > 2 * 1024 * 1024: + raise ValidationError("Выберите файл шрифта TTF или OTF размером до 2 МБ.") + name = Path(upload.name).name[:255] + content = upload.read() + try: + if (Path(name).suffix.lower(), content[:4]) not in ( + (".ttf", b"\x00\x01\x00\x00"), + (".otf", b"OTTO"), + ): + raise ValueError() + font = ImageFont.truetype(io.BytesIO(content), 40) + font.getlength("Имя участника") + except (OSError, ValueError) as error: + raise ValidationError( + "Не удалось прочитать шрифт. Загрузите файл TTF или OTF." + ) from error + type(program).objects.select_for_update().get(pk=program.pk) + fonts = ProgramCertificateAsset.objects.filter(program=program, kind="font") + if fonts.count() >= 24: + raise ValidationError("Можно загрузить до 24 шрифтов на программу.") + return fonts.create( + program=program, kind="font", name=name, content=content, width=0, height=0 + ) + + def validate_draft(program, draft, previous=None): """The API owns allowed geometry and substitutions, not arbitrary HTML/CSS.""" from rest_framework import serializers @@ -308,8 +369,9 @@ class Element(serializers.Serializer): width = serializers.FloatField(min_value=2, max_value=100) height = serializers.FloatField(min_value=1, max_value=100) font_size = serializers.FloatField(min_value=8, max_value=72) - font_family = serializers.ChoiceField( - choices=list(CERTIFICATE_FONTS), required=False + font_family = serializers.RegexField( + r"^(?:mont(?:-regular|-light|-bold)?|pt-serif|lobster|custom-[1-9][0-9]{0,17})\Z", + required=False, ) class Draft(serializers.Serializer): @@ -384,6 +446,7 @@ class Draft(serializers.Serializer): "Доступные подстановки: {name}, {program}, {date}, {number}." ) assets_for(program, data) + uploaded_fonts(program.pk, data) return normalized_draft(dict(data)) @@ -394,7 +457,9 @@ def certificate_font_key(box): def certificate_font_path(key, bold): filename = CERTIFICATE_FONTS[key][2 if bold else 1] - directory = "assets/users/user_CV" if key == "mont" else "assets/certificates/fonts" + directory = ( + "assets/users/user_CV" if key.startswith("mont") else "assets/certificates/fonts" + ) return Path(settings.BASE_DIR) / directory / filename @@ -407,9 +472,10 @@ def page_dimensions(orientation="landscape"): return (210, 297) if orientation == "portrait" else (297, 210) -def fit_certificate_text(value, box, bold=False, orientation="landscape"): +def fit_certificate_text(value, box, bold=False, orientation="landscape", font=None): """Подгоняем реальные строки выбранного шрифта без обрезки ФИО.""" - font = certificate_font(bold, certificate_font_key(box)) + if font is None: + font = certificate_font(bold, certificate_font_key(box)) page_width, page_height = ( (793.7, 1122) if orientation == "portrait" else (1122, 793.7) ) @@ -451,16 +517,28 @@ def fits(text): return size, lines_at(size) -def render_pdf(snapshot, assets, name, program_name, number, issued_at): +def render_pdf( + snapshot, assets, name, program_name, number, issued_at, *, program_id=None +): from weasyprint import HTML from weasyprint.text.fonts import FontConfiguration from weasyprint.urls import URLFetcher, URLFetcherResponse orientation = snapshot.get("orientation", "landscape") page_width, page_height = page_dimensions(orientation) + fonts = uploaded_fonts(program_id, snapshot) + custom_faces = { + key: ImageFont.truetype(io.BytesIO(bytes(asset.content)), 1000) + for key, asset in fonts.items() + } class CertificateURLFetcher(URLFetcher): def fetch(self, url, headers=None): + custom = fonts.get(url.removeprefix("certificate-font:")) + if custom and url.startswith("certificate-font:"): + return URLFetcherResponse( + url, bytes(custom.content), {"Content-Type": "font/sfnt"} + ) for key in CERTIFICATE_FONTS: for bold, weight in ((False, "regular"), (True, "bold")): if url == f"certificate-font:{key}:{weight}": @@ -505,11 +583,17 @@ def src(asset): ) else: value = values[key] - family = certificate_font_key(box) - family_name, _, _, bold_weight = CERTIFICATE_FONTS[family] - weight = bold_weight if key in ("name", "title") else 400 + custom_key = box.get("font_family") + custom_font = custom_faces.get(custom_key) + bold = key in ("name", "title") + if custom_font: + family_name, weight = custom_key, 400 + else: + family = certificate_font_key(box) + family_name, _, _, bold_weight = CERTIFICATE_FONTS[family] + weight = bold_weight if bold else 400 size, lines = fit_certificate_text( - value, box, key in ("name", "title"), orientation + value, box, bold, orientation, font=custom_font ) content = "
".join(escape(line) for line in lines) elements.append( @@ -518,6 +602,10 @@ def src(asset): ) html = ( '