Skip to content

Commit 65ffcdc

Browse files
committed
Improve WF builder
1 parent 844e002 commit 65ffcdc

File tree

6 files changed

+1958
-4
lines changed

6 files changed

+1958
-4
lines changed

django_forms_workflows/admin.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ class FormDefinitionAdmin(admin.ModelAdmin):
149149
"version",
150150
"created_at",
151151
"form_builder_link",
152+
"workflow_builder_link",
152153
"clone_link",
153154
)
154155
list_filter = ("is_active", "requires_login")
@@ -165,12 +166,25 @@ def form_builder_link(self, obj):
165166
url = reverse('admin:form_builder_edit', args=[obj.pk])
166167
return format_html(
167168
'<a href="{}" class="button" target="_blank">'
168-
'<i class="bi bi-pencil-square"></i> Visual Builder'
169+
'<i class="bi bi-pencil-square"></i> Form Builder'
169170
'</a>',
170171
url
171172
)
172173
return "-"
173-
form_builder_link.short_description = "Visual Builder"
174+
form_builder_link.short_description = "Form Builder"
175+
176+
def workflow_builder_link(self, obj):
177+
"""Display a link to the visual workflow builder"""
178+
if obj.pk:
179+
url = reverse('admin:workflow_builder', args=[obj.pk])
180+
return format_html(
181+
'<a href="{}" class="button" target="_blank">'
182+
'<i class="bi bi-diagram-3"></i> Workflow'
183+
'</a>',
184+
url
185+
)
186+
return "-"
187+
workflow_builder_link.short_description = "Workflow Builder"
174188

175189
def clone_link(self, obj):
176190
"""Display a link to clone the form"""
@@ -266,11 +280,12 @@ def clone_forms(self, request, queryset):
266280
clone_forms.short_description = "Clone selected forms"
267281

268282
def get_urls(self):
269-
"""Add custom URLs for the form builder"""
283+
"""Add custom URLs for the form builder and workflow builder"""
270284
urls = super().get_urls()
271-
from . import form_builder_views
285+
from . import form_builder_views, workflow_builder_views
272286

273287
custom_urls = [
288+
# Form Builder URLs
274289
path(
275290
'builder/new/',
276291
self.admin_site.admin_view(form_builder_views.form_builder_view),
@@ -311,6 +326,22 @@ def get_urls(self):
311326
self.admin_site.admin_view(form_builder_views.form_builder_clone),
312327
name='form_builder_api_clone'
313328
),
329+
# Workflow Builder URLs
330+
path(
331+
'<int:form_id>/workflow/',
332+
self.admin_site.admin_view(workflow_builder_views.workflow_builder_view),
333+
name='workflow_builder'
334+
),
335+
path(
336+
'workflow/api/load/<int:form_id>/',
337+
self.admin_site.admin_view(workflow_builder_views.workflow_builder_load),
338+
name='workflow_builder_load'
339+
),
340+
path(
341+
'workflow/api/save/',
342+
self.admin_site.admin_view(workflow_builder_views.workflow_builder_save),
343+
name='workflow_builder_save'
344+
),
314345
]
315346
return custom_urls + urls
316347

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Generated by Django 5.2.7 on 2025-11-01 19:06
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("django_forms_workflows", "0005_advanced_conditional_logic"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="workflowdefinition",
15+
name="visual_workflow_data",
16+
field=models.JSONField(
17+
blank=True,
18+
help_text="Visual workflow builder layout (nodes and connections)",
19+
null=True,
20+
),
21+
),
22+
migrations.AlterField(
23+
model_name="postsubmissionaction",
24+
name="action_type",
25+
field=models.CharField(
26+
choices=[
27+
("database", "Database Update"),
28+
("ldap", "LDAP Update"),
29+
("api", "API Call"),
30+
("email", "Email Notification"),
31+
("custom", "Custom Handler"),
32+
],
33+
max_length=20,
34+
),
35+
),
36+
]

django_forms_workflows/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,13 @@ class WorkflowDefinition(models.Model):
505505
help_text='JSON: [{"form_field": "field_name", "db_target": "{{ db.schema.table.column }}", "update_condition": "always"}]',
506506
)
507507

508+
# Visual Workflow Builder Data
509+
visual_workflow_data = models.JSONField(
510+
blank=True,
511+
null=True,
512+
help_text="Visual workflow builder layout (nodes and connections)"
513+
)
514+
508515
class Meta:
509516
verbose_name = "Workflow Definition"
510517
verbose_name_plural = "Workflow Definitions"
@@ -525,6 +532,7 @@ class PostSubmissionAction(models.Model):
525532
("database", "Database Update"),
526533
("ldap", "LDAP Update"),
527534
("api", "API Call"),
535+
("email", "Email Notification"),
528536
("custom", "Custom Handler"),
529537
]
530538

0 commit comments

Comments
 (0)