Skip to content

Commit

Permalink
add structure
Browse files Browse the repository at this point in the history
  • Loading branch information
felixrindt committed Aug 26, 2024
1 parent 4bcc680 commit a22b855
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 6 deletions.
10 changes: 4 additions & 6 deletions ephios/plugins/complexsignup/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,23 +66,21 @@ def update(self, instance, validated_data):

# Perform deletions.
for object_id, obj in object_mapping.items():
if self.should_delete(obj, data_mapping):
if self.should_delete(object_id, data_mapping):
obj.delete()
return ret

def should_delete(self, obj, data_mapping):
def should_delete(self, object_id, data_mapping):
raise NotImplementedError()


class DeleteFlagBulkUpdateListSerializer(BulkUpdateListSerializer):
def should_delete(self, obj, data_mapping):
object_id = getattr(obj, self.identification_field)
def should_delete(self, object_id, data_mapping):
return object_id in data_mapping and data_mapping[object_id].get("deleted", False)


class DeleteAbsentBulkUpdateListSerializer(BulkUpdateListSerializer):
def should_delete(self, obj, data_mapping):
object_id = getattr(obj, self.identification_field)
def should_delete(self, object_id, data_mapping):
return object_id not in data_mapping


Expand Down
14 changes: 14 additions & 0 deletions ephios/plugins/complexsignup/signals.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django.dispatch import receiver

from ephios.core.signals import register_shift_structures
from ephios.plugins.complexsignup.signup import ComplexShiftStructure


@receiver(
register_shift_structures,
dispatch_uid="ephios.plugins.complexsignup.signals.register_complex_shift_structures",
)
def register_complex_shift_structures(sender, **kwargs):
return [
ComplexShiftStructure,
]
44 changes: 44 additions & 0 deletions ephios/plugins/complexsignup/signup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from django import forms
from django.utils.translation import gettext_lazy as _
from django_select2.forms import ModelSelect2Widget

from ephios.core.signup.forms import SignupConfigurationForm
from ephios.core.signup.structure.base import BaseShiftStructure
from ephios.plugins.baseshiftstructures.structure.common import MinimumAgeMixin
from ephios.plugins.complexsignup.models import BuildingBlock


class ComplexConfigurationForm(SignupConfigurationForm):
building_block = forms.ModelChoiceField(
widget=ModelSelect2Widget(
model=BuildingBlock,
search_fields=["name"],
),
queryset=BuildingBlock.objects.all(),
)

template_name = "complexsignup/configuration_form.html"

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)


class ComplexShiftStructure(
MinimumAgeMixin,
BaseShiftStructure,
):
slug = "complex"
verbose_name = _("Preconfigured Structure")
description = _("Use preconfigured elements to build a custom structure.")
shift_state_template_name = "complexsignup/shift_state.html"
configuration_form_class = ComplexConfigurationForm

def get_shift_state_context_data(self, request, **kwargs):
"""
Additionally to the context of the event detail view, provide context for rendering `shift_state_template_name`.
"""
kwargs = super().get_shift_state_context_data(request, **kwargs)
kwargs["main_block"] = BuildingBlock.objects.filter(
id=self.configuration.building_block
).first()
return kwargs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{% load i18n %}
{% load crispy_forms_filters %}

<p>
<a href="{% url "complexsignup:blocks_editor" %}"
class="btn btn-sm btn-primary"
target="_blank">
{% translate "Edit blocks" %}
</a>
</p>

{{ form|crispy }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{% load i18n %}

<div class="mb-3">
{% include "complexsignup/shift_state_block.html" with current=main_block %}
</div>

{% with stats=shift.get_signup_stats %}
<span class="pe-1">
<strong>{{ stats.confirmed_count }}{% if stats.max_count %}/{{ stats.max_count }}{% endif %}</strong>
{% translate "Total" context "participation count" %}
</span>
{% endwith %}

{% if disposition_url %}
<div class="mt-1">
<a href="{{ disposition_url }}" class="btn btn-sm btn-info">{% translate "Disposition" %}</a>
</div>
{% endif %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<div class="card mb-3 text-bg-light">
<div class="card-body">
<h5 class="card-title">{{ current }}</h5>
{% if current.block_type == "composite" %}
{% for sub_block in current.sub_blocks.all %}
{% include "complexsignup/shift_state_block.html" with current=sub_block %}
{% endfor %}
{% else %}
<ul class="mb-0">
{% for pos in current.positions.all %}
<li>{{ pos }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>

0 comments on commit a22b855

Please sign in to comment.