django-forms-workflows 0.64.0__tar.gz → 0.64.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/PKG-INFO +1 -1
  2. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/forms.py +14 -38
  3. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/approve.html +10 -43
  4. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/submission_detail.html +10 -47
  5. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/submission_pdf.html +6 -0
  6. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/views.py +7 -5
  7. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/pyproject.toml +1 -1
  8. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/CHANGELOG.md +0 -0
  9. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/LICENSE +0 -0
  10. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/README.md +0 -0
  11. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/__init__.py +0 -0
  12. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/admin.py +0 -0
  13. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/api_urls.py +0 -0
  14. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/api_views.py +0 -0
  15. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/apps.py +0 -0
  16. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/callback_registry.py +0 -0
  17. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/conditions.py +0 -0
  18. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/context_processors.py +0 -0
  19. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/data_sources/__init__.py +0 -0
  20. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/data_sources/base.py +0 -0
  21. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/data_sources/database_source.py +0 -0
  22. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/data_sources/ldap_source.py +0 -0
  23. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/data_sources/user_source.py +0 -0
  24. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/diff_views.py +0 -0
  25. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/email_backends/__init__.py +0 -0
  26. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/email_backends/gmail_api.py +0 -0
  27. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/form_builder_urls.py +0 -0
  28. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/form_builder_views.py +0 -0
  29. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/__init__.py +0 -0
  30. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/api_handler.py +0 -0
  31. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/base.py +0 -0
  32. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/database_handler.py +0 -0
  33. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/email_handler.py +0 -0
  34. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/executor.py +0 -0
  35. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/file_handler.py +0 -0
  36. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/handlers/ldap_handler.py +0 -0
  37. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/history.py +0 -0
  38. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/ldap_backend.py +0 -0
  39. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/create_default_templates.py +0 -0
  40. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/pull_forms.py +0 -0
  41. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/push_forms.py +0 -0
  42. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/seed_farm_demo.py +0 -0
  43. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/seed_pcn_form.py +0 -0
  44. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/seed_prefill_sources.py +0 -0
  45. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/sync_ldap_profiles.py +0 -0
  46. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/sync_ldap_users.py +0 -0
  47. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/management/commands/test_db_connection.py +0 -0
  48. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0001_initial.py +0 -0
  49. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0002_prefillsource_alter_formfield_prefill_source_and_more.py +0 -0
  50. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0003_postsubmissionaction.py +0 -0
  51. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0004_formtemplate.py +0 -0
  52. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0005_advanced_conditional_logic.py +0 -0
  53. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0006_workflowdefinition_visual_workflow_data_and_more.py +0 -0
  54. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0007_add_userprofile_ldap_enhancements.py +0 -0
  55. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0008_add_file_workflow_models.py +0 -0
  56. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0009_add_formfield_readonly.py +0 -0
  57. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0010_add_prefillsource_template_fields.py +0 -0
  58. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0011_postsubmissionaction_email_body_template_and_more.py +0 -0
  59. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0012_add_approval_step_fields.py +0 -0
  60. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0013_add_database_query_key.py +0 -0
  61. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0014_add_form_category.py +0 -0
  62. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0015_add_workflowstage_staged_approvals.py +0 -0
  63. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0016_add_pdf_generation.py +0 -0
  64. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0017_add_notification_batching.py +0 -0
  65. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0018_add_form_category_parent.py +0 -0
  66. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0019_add_ldap_group_profile.py +0 -0
  67. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0020_add_bulk_export_field.py +0 -0
  68. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0021_alter_pendingnotification_scheduled_for_and_more.py +0 -0
  69. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0022_add_bulk_pdf_export.py +0 -0
  70. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0023_add_performance_indexes.py +0 -0
  71. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0024_add_allow_resubmit.py +0 -0
  72. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0025_workflowstage_approve_label.py +0 -0
  73. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0026_alter_formfield_width.py +0 -0
  74. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0027_formsubmission_form_data_gin.py +0 -0
  75. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0028_workflowstagegroupconfig.py +0 -0
  76. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0029_formfield_workflow_stage_fk_drop_groupconfig.py +0 -0
  77. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0030_formfield_phone_type.py +0 -0
  78. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0031_sub_workflows.py +0 -0
  79. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0032_approved_pending_detached_sub_workflow.py +0 -0
  80. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0033_add_reject_parent_to_subworkflowdefinition.py +0 -0
  81. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0034_add_notificationlog.py +0 -0
  82. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0035_migrate_prefill_source_strings.py +0 -0
  83. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0036_add_workflowstage_auto_created.py +0 -0
  84. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0037_migrate_flat_workflows_to_staged.py +0 -0
  85. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0038_remove_legacy_prefill_source_and_approval_step.py +0 -0
  86. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0039_update_help_text.py +0 -0
  87. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0040_migrate_deprecated_features.py +0 -0
  88. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0041_remove_deprecated_fields.py +0 -0
  89. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0042_add_sub_workflow_section_label.py +0 -0
  90. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0043_fix_form_data_decimal_encoding.py +0 -0
  91. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0044_remove_subworkflowinstance_label.py +0 -0
  92. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0045_stageapprovalgroup_workflow_name_label.py +0 -0
  93. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0046_workflow_definition_one_to_many.py +0 -0
  94. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0047_add_hide_approval_history.py +0 -0
  95. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0048_workflowdefinition_trigger_conditions_and_more.py +0 -0
  96. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0049_formfield_multifile_type.py +0 -0
  97. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0050_workflowdefinition_collapse_parallel_stages.py +0 -0
  98. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0051_formdefinition_is_listed.py +0 -0
  99. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0052_dynamic_assignee_and_form_field_notifications.py +0 -0
  100. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0053_stageformfieldnotification_static_emails.py +0 -0
  101. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0054_rename_approved_pending_to_pending_approval.py +0 -0
  102. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0055_add_send_back.py +0 -0
  103. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0056_calculated_formula_spreadsheet.py +0 -0
  104. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0057_add_currency_field_type.py +0 -0
  105. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0058_rename_assignee_email_field_add_lookup_type.py +0 -0
  106. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0059_add_multiselect_list_field_type.py +0 -0
  107. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0060_alter_workflowstage_assignee_lookup_type_helptext.py +0 -0
  108. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0061_add_country_us_state_field_types.py +0 -0
  109. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0062_add_batch_import_to_formdefinition.py +0 -0
  110. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0063_formdefinition_api_enabled_apitoken.py +0 -0
  111. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0064_add_reviewer_groups.py +0 -0
  112. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0065_workflownotification.py +0 -0
  113. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0066_add_notify_submitter_to_workflownotification.py +0 -0
  114. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0067_migrate_legacy_notify_flags.py +0 -0
  115. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0068_drop_legacy_notify_fields.py +0 -0
  116. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0069_add_signature_field_type.py +0 -0
  117. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0070_workflowstage_allow_edit_form_data.py +0 -0
  118. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0071_alter_pendingnotification_notification_type.py +0 -0
  119. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0072_add_change_history.py +0 -0
  120. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0073_add_stage_notify_assignee_on_final_decision.py +0 -0
  121. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0074_add_notification_rule.py +0 -0
  122. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0075_migrate_to_notification_rules.py +0 -0
  123. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0076_update_notification_event_choices.py +0 -0
  124. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0077_drop_legacy_notification_models.py +0 -0
  125. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0078_allow_anonymous_submissions.py +0 -0
  126. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0079_webhookendpoint_webhookdeliverylog.py +0 -0
  127. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0080_add_rating_matrix_address_slider_fields_and_form_controls.py +0 -0
  128. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0081_add_success_page_fields.py +0 -0
  129. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0082_add_document_template_model.py +0 -0
  130. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0083_workflowdefinition_start_trigger.py +0 -0
  131. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0084_add_shared_option_list.py +0 -0
  132. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0085_add_payment_system.py +0 -0
  133. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0086_add_embed_enabled.py +0 -0
  134. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0087_notificationrule_use_triggering_stage.py +0 -0
  135. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0088_notificationrule_body_template_and_events.py +0 -0
  136. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/0089_workflowstage_hide_comment_field.py +0 -0
  137. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/migrations/__init__.py +0 -0
  138. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/models.py +0 -0
  139. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/payments/__init__.py +0 -0
  140. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/payments/base.py +0 -0
  141. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/payments/registry.py +0 -0
  142. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/payments/stripe_provider.py +0 -0
  143. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/payments/views.py +0 -0
  144. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/reporting_views.py +0 -0
  145. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/signals.py +0 -0
  146. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/sso_backends.py +0 -0
  147. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/sso_urls.py +0 -0
  148. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/sso_views.py +0 -0
  149. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/api/swagger-ui-bundle.js +0 -0
  150. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/api/swagger-ui.css +0 -0
  151. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/css/forms.css +0 -0
  152. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/js/dfw-embed.js +0 -0
  153. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/js/form-builder.js +0 -0
  154. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/js/form-enhancements.js +0 -0
  155. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/js/payment-stripe.js +0 -0
  156. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/js/signature-pad.js +0 -0
  157. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/static/django_forms_workflows/js/workflow-builder.js +0 -0
  158. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/sync_api.py +0 -0
  159. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/sync_views.py +0 -0
  160. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/tasks.py +0 -0
  161. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/_sync_diff.html +0 -0
  162. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/diff_forms.html +0 -0
  163. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/form_builder.html +0 -0
  164. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/formdef_change_form.html +0 -0
  165. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/formdefinition/change_list.html +0 -0
  166. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/sync_import.html +0 -0
  167. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/sync_pull.html +0 -0
  168. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/sync_push.html +0 -0
  169. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/admin/django_forms_workflows/workflow_builder.html +0 -0
  170. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/_category_node.html +0 -0
  171. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/_field_value.html +0 -0
  172. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/_form_data_rows.html +0 -0
  173. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/analytics_dashboard.html +0 -0
  174. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/api/docs.html +0 -0
  175. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/approval_inbox.html +0 -0
  176. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/base.html +0 -0
  177. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/batch_import_result.html +0 -0
  178. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/completed_approvals.html +0 -0
  179. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/discard_draft_confirm.html +0 -0
  180. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/embed_base.html +0 -0
  181. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/embed_success.html +0 -0
  182. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/form_categories.html +0 -0
  183. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/form_embed.html +0 -0
  184. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/form_list.html +0 -0
  185. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/form_submit.html +0 -0
  186. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/my_submissions.html +0 -0
  187. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/payment_collect.html +0 -0
  188. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/payment_error.html +0 -0
  189. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/public_submission_confirmation.html +0 -0
  190. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/rate_limited.html +0 -0
  191. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/reassign_task.html +0 -0
  192. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/resubmit_confirm.html +0 -0
  193. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/sso/login.html +0 -0
  194. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/sub_workflow_detail.html +0 -0
  195. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/submission_bulk_pdf.html +0 -0
  196. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/submission_success.html +0 -0
  197. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/django_forms_workflows/withdraw_confirm.html +0 -0
  198. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/approval_notification.html +0 -0
  199. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/approval_reminder.html +0 -0
  200. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/approval_request.html +0 -0
  201. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/email_styles.html +0 -0
  202. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/escalation_notification.html +0 -0
  203. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/notification_digest.html +0 -0
  204. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/rejection_notification.html +0 -0
  205. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/emails/submission_notification.html +0 -0
  206. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templates/registration/login.html +0 -0
  207. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templatetags/__init__.py +0 -0
  208. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/templatetags/forms_workflows_tags.py +0 -0
  209. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/urls.py +0 -0
  210. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/utils.py +0 -0
  211. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/workflow_builder_views.py +0 -0
  212. {django_forms_workflows-0.64.0 → django_forms_workflows-0.64.2}/django_forms_workflows/workflow_engine.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-forms-workflows
3
- Version: 0.64.0
3
+ Version: 0.64.2
4
4
  Summary: Enterprise-grade, database-driven form builder with approval workflows and external data integration
5
5
  License: LGPL-3.0-only
6
6
  License-File: LICENSE
@@ -1413,15 +1413,15 @@ class ApprovalStepForm(forms.Form):
1413
1413
  FormFields belong to it.
1414
1414
  """
1415
1415
  if self.approval_task.workflow_stage_id:
1416
- qs = (
1417
- self.form_definition.fields.exclude(field_type="section")
1418
- .filter(workflow_stage_id=self.approval_task.workflow_stage_id)
1419
- .order_by("order")
1420
- )
1416
+ qs = self.form_definition.fields.filter(
1417
+ workflow_stage_id=self.approval_task.workflow_stage_id
1418
+ ).order_by("order")
1421
1419
  else:
1422
1420
  # Workflow with no stages — no stage-specific fields to show.
1423
1421
  qs = self.form_definition.fields.none()
1424
1422
  for field_def in qs:
1423
+ if field_def.field_type == "section":
1424
+ continue # sections are visual-only; handled in _build_layout_fields
1425
1425
  self._add_field(field_def)
1426
1426
 
1427
1427
  def _add_field(self, field_def):
@@ -1845,41 +1845,17 @@ class ApprovalStepForm(forms.Form):
1845
1845
  def _setup_layout(self):
1846
1846
  """Setup Crispy Forms layout."""
1847
1847
  self.helper = FormHelper()
1848
- self.helper.form_method = "post"
1849
- self.helper.form_class = "needs-validation"
1848
+ self.helper.form_tag = False
1850
1849
 
1851
- layout_fields = []
1850
+ # Only layout fields for the current approval stage. Submission
1851
+ # data is rendered separately by the template (via _form_data_rows).
1852
1852
  stage_id = self.approval_task.workflow_stage_id
1853
-
1854
- # Separate fields into current stage vs other (read-only) groups
1855
- current_stage_defs = []
1856
- other_defs = []
1857
- for field_def in self.form_definition.fields.order_by("order"):
1858
- if field_def.workflow_stage_id == stage_id:
1859
- current_stage_defs.append(field_def)
1860
- else:
1861
- other_defs.append(field_def)
1862
-
1863
- # Add submitted data section first (read-only)
1864
- if other_defs:
1865
- layout_fields.append(
1866
- HTML('<h3 class="mb-3">Submitted Information (Read-Only)</h3>')
1867
- )
1868
- layout_fields.extend(self._build_layout_fields(other_defs))
1869
-
1870
- # Add current stage fields section with width support
1871
- current_stage_fields = self._build_layout_fields(current_stage_defs)
1872
- if current_stage_fields:
1873
- layout_fields.append(HTML('<hr class="my-4">'))
1874
- step_name = self.approval_task.step_name or "Review"
1875
- layout_fields.append(
1876
- HTML(f'<h3 class="mb-3">{step_name} - Your Input</h3>')
1877
- )
1878
- layout_fields.extend(current_stage_fields)
1879
-
1880
- self.helper.layout = Layout(*layout_fields)
1881
- self.helper.form_id = f"approval_form_{self.submission.pk}"
1882
- self.helper.attrs = {"novalidate": True}
1853
+ current_stage_defs = [
1854
+ f
1855
+ for f in self.form_definition.fields.order_by("order")
1856
+ if f.workflow_stage_id == stage_id
1857
+ ]
1858
+ self.helper.layout = Layout(*self._build_layout_fields(current_stage_defs))
1883
1859
 
1884
1860
  def get_updated_form_data(self):
1885
1861
  """
@@ -232,51 +232,18 @@
232
232
  {% if section.fields %}
233
233
  <table class="table table-bordered table-sm mb-0">
234
234
  {% for field in section.fields %}
235
- <tr>
236
- <th style="width: 30%;">{{ field.label }}</th>
237
- <td>
238
- {% if field.value.url %}
239
- {% if field.value.content_type and 'image' in field.value.content_type %}
240
- <div class="mb-2">
241
- <img src="{{ field.value.url }}" alt="{{ field.value.filename }}" class="img-fluid" style="max-width: 400px; max-height: 400px;">
242
- </div>
243
- {% endif %}
244
- <a href="{{ field.value.url }}" target="_blank" class="btn btn-sm btn-outline-primary">
245
- <i class="bi bi-download"></i> {{ field.value.filename }}
246
- </a>
247
- <small class="text-muted ms-2">
248
- {% if field.value.size %}({{ field.value.size|filesizeformat }}){% endif %}
249
- </small>
250
- {% elif field.value.path %}
251
- <span class="text-muted">{{ field.value.filename }}</span>
252
- <small class="text-muted ms-2">(File stored but URL unavailable)</small>
253
- {% elif field.value|is_signature %}
254
- <img src="{{ field.value }}" alt="Signature" class="img-fluid" style="max-width: 400px; max-height: 160px; border: 1px solid #dee2e6; border-radius: .375rem;">
255
- {% elif field.value.0.filename %}
256
- <ul class="list-unstyled mb-0">
257
- {% for f in field.value %}
258
- <li class="mb-1">
259
- {% if f.url %}
260
- {% if f.content_type and 'image' in f.content_type %}
261
- <div class="mb-1">
262
- <img src="{{ f.url }}" alt="{{ f.filename }}" class="img-fluid" style="max-width: 200px; max-height: 200px;">
263
- </div>
264
- {% endif %}
265
- <a href="{{ f.url }}" target="_blank" class="btn btn-sm btn-outline-primary">
266
- <i class="bi bi-download"></i> {{ f.filename }}
267
- </a>
268
- <small class="text-muted ms-2">{% if f.size %}({{ f.size|filesizeformat }}){% endif %}</small>
269
- {% else %}
270
- <span class="text-muted">{{ f.filename }}</span>
271
- {% endif %}
272
- </li>
273
- {% endfor %}
274
- </ul>
275
- {% else %}
276
- {{ field.value }}
277
- {% endif %}
235
+ {% if field.type == 'section' %}
236
+ <tr class="table-light">
237
+ <td colspan="2" class="pt-3 pb-2 px-3">
238
+ <h5 class="mb-0">{{ field.label }}</h5>
278
239
  </td>
279
240
  </tr>
241
+ {% else %}
242
+ <tr>
243
+ <th style="width: 30%; vertical-align: top;">{{ field.label }}</th>
244
+ <td>{% include "django_forms_workflows/_field_value.html" with entry=field %}</td>
245
+ </tr>
246
+ {% endif %}
280
247
  {% endfor %}
281
248
  </table>
282
249
  {% else %}
@@ -149,55 +149,18 @@
149
149
  <div class="px-3 pb-3">
150
150
  <table class="table table-bordered table-sm mb-0">
151
151
  {% for field in section.fields %}
152
- <tr>
153
- <th style="width: 30%;">{{ field.label }}</th>
154
- <td>
155
- {% if field.value.url %}
156
- {# Single file upload with URL #}
157
- {% if field.value.content_type and 'image' in field.value.content_type %}
158
- <div class="mb-2">
159
- <img src="{{ field.value.url }}" alt="{{ field.value.filename }}" class="img-fluid" style="max-width: 400px; max-height: 400px;">
160
- </div>
161
- {% endif %}
162
- <a href="{{ field.value.url }}" target="_blank" class="btn btn-sm btn-outline-primary">
163
- <i class="bi bi-download"></i> {{ field.value.filename }}
164
- </a>
165
- <small class="text-muted ms-2">
166
- {% if field.value.size %}({{ field.value.size|filesizeformat }}){% endif %}
167
- </small>
168
- {% elif field.value.path %}
169
- {# Single file with path but no URL #}
170
- <span class="text-muted">{{ field.value.filename }}</span>
171
- <small class="text-muted ms-2">(File stored but URL unavailable)</small>
172
- {% elif field.value|is_signature %}
173
- {# Signature — inline base64 image #}
174
- <img src="{{ field.value }}" alt="Signature" class="img-fluid" style="max-width: 400px; max-height: 160px; border: 1px solid #dee2e6; border-radius: .375rem;">
175
- {% elif field.value.0.filename %}
176
- {# Multi-file upload: list of file dicts #}
177
- <ul class="list-unstyled mb-0">
178
- {% for f in field.value %}
179
- <li class="mb-1">
180
- {% if f.url %}
181
- {% if f.content_type and 'image' in f.content_type %}
182
- <div class="mb-1">
183
- <img src="{{ f.url }}" alt="{{ f.filename }}" class="img-fluid" style="max-width: 200px; max-height: 200px;">
184
- </div>
185
- {% endif %}
186
- <a href="{{ f.url }}" target="_blank" class="btn btn-sm btn-outline-primary">
187
- <i class="bi bi-download"></i> {{ f.filename }}
188
- </a>
189
- <small class="text-muted ms-2">{% if f.size %}({{ f.size|filesizeformat }}){% endif %}</small>
190
- {% else %}
191
- <span class="text-muted">{{ f.filename }}</span>
192
- {% endif %}
193
- </li>
194
- {% endfor %}
195
- </ul>
196
- {% else %}
197
- {{ field.value }}
198
- {% endif %}
152
+ {% if field.type == 'section' %}
153
+ <tr class="table-light">
154
+ <td colspan="2" class="pt-3 pb-2 px-3">
155
+ <h5 class="mb-0">{{ field.label }}</h5>
199
156
  </td>
200
157
  </tr>
158
+ {% else %}
159
+ <tr>
160
+ <th style="width: 30%; vertical-align: top;">{{ field.label }}</th>
161
+ <td>{% include "django_forms_workflows/_field_value.html" with entry=field %}</td>
162
+ </tr>
163
+ {% endif %}
201
164
  {% endfor %}
202
165
  </table>
203
166
  </div>
@@ -284,10 +284,16 @@
284
284
  </colgroup>
285
285
  <tbody>
286
286
  {% for field in section.fields %}
287
+ {% if field.type == 'section' %}
288
+ <tr>
289
+ <td colspan="4" class="step-section-header">{{ field.label }}</td>
290
+ </tr>
291
+ {% else %}
287
292
  <tr>
288
293
  <th>{{ field.label }}</th>
289
294
  <td colspan="3">{% with v=field.value %}{% if v|is_signature %}<img src="{{ v }}" style="max-width:360px;max-height:120px;">{% elif v.filename %}{{ v.filename }}{% else %}{{ v }}{% endif %}{% endwith %}</td>
290
295
  </tr>
296
+ {% endif %}
291
297
  {% endfor %}
292
298
  </tbody>
293
299
  </table>
@@ -3208,12 +3208,11 @@ def _build_approval_step_sections(submission):
3208
3208
 
3209
3209
  # Fields keyed by workflow_stage_id. Store enough metadata to resolve
3210
3210
  # choice labels (select/radio/multiselect/checkboxes) at display time.
3211
+ # Section headers are included so they render in completed-step displays.
3211
3212
  fields_by_stage: dict = defaultdict(list)
3212
- for field in (
3213
- submission.form_definition.fields.filter(workflow_stage__isnull=False)
3214
- .exclude(field_type="section")
3215
- .order_by("order")
3216
- ):
3213
+ for field in submission.form_definition.fields.filter(
3214
+ workflow_stage__isnull=False
3215
+ ).order_by("order"):
3217
3216
  fields_by_stage[field.workflow_stage_id].append(
3218
3217
  {
3219
3218
  "label": field.field_label,
@@ -3248,6 +3247,9 @@ def _build_approval_step_sections(submission):
3248
3247
 
3249
3248
  visible_fields = []
3250
3249
  for f in field_defs:
3250
+ if f.get("field_type") == "section":
3251
+ visible_fields.append({"label": f["label"], "type": "section"})
3252
+ continue
3251
3253
  lookup_key = f"{f['key']}_{swi_index}" if swi_index else f["key"]
3252
3254
  if lookup_key in form_data:
3253
3255
  raw_value = form_data[lookup_key]
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-forms-workflows"
3
- version = "0.64.0"
3
+ version = "0.64.2"
4
4
  description = "Enterprise-grade, database-driven form builder with approval workflows and external data integration"
5
5
  license = "LGPL-3.0-only"
6
6
  readme = "README.md"