django-forms-workflows 0.71.2__tar.gz → 0.72.0__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 (216) hide show
  1. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/CHANGELOG.md +46 -0
  2. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/PKG-INFO +1 -1
  3. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/sync_api.py +27 -27
  4. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/approve.html +1 -0
  5. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/pyproject.toml +1 -1
  6. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/LICENSE +0 -0
  7. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/README.md +0 -0
  8. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/__init__.py +0 -0
  9. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/admin.py +0 -0
  10. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/api_urls.py +0 -0
  11. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/api_views.py +0 -0
  12. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/apps.py +0 -0
  13. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/callback_registry.py +0 -0
  14. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/conditions.py +0 -0
  15. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/context_processors.py +0 -0
  16. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/data_sources/__init__.py +0 -0
  17. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/data_sources/base.py +0 -0
  18. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/data_sources/database_source.py +0 -0
  19. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/data_sources/ldap_source.py +0 -0
  20. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/data_sources/user_source.py +0 -0
  21. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/diff_views.py +0 -0
  22. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/email_backends/__init__.py +0 -0
  23. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/email_backends/gmail_api.py +0 -0
  24. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/form_builder_urls.py +0 -0
  25. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/form_builder_views.py +0 -0
  26. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/forms.py +0 -0
  27. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/__init__.py +0 -0
  28. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/api_handler.py +0 -0
  29. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/base.py +0 -0
  30. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/database_handler.py +0 -0
  31. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/email_handler.py +0 -0
  32. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/executor.py +0 -0
  33. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/file_handler.py +0 -0
  34. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/handlers/ldap_handler.py +0 -0
  35. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/history.py +0 -0
  36. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/ldap_backend.py +0 -0
  37. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/create_default_templates.py +0 -0
  38. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/pull_forms.py +0 -0
  39. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/push_forms.py +0 -0
  40. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/seed_farm_demo.py +0 -0
  41. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/seed_pcn_form.py +0 -0
  42. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/seed_prefill_sources.py +0 -0
  43. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/sync_ldap_profiles.py +0 -0
  44. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/sync_ldap_users.py +0 -0
  45. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/management/commands/test_db_connection.py +0 -0
  46. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0001_initial.py +0 -0
  47. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0002_prefillsource_alter_formfield_prefill_source_and_more.py +0 -0
  48. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0003_postsubmissionaction.py +0 -0
  49. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0004_formtemplate.py +0 -0
  50. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0005_advanced_conditional_logic.py +0 -0
  51. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0006_workflowdefinition_visual_workflow_data_and_more.py +0 -0
  52. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0007_add_userprofile_ldap_enhancements.py +0 -0
  53. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0008_add_file_workflow_models.py +0 -0
  54. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0009_add_formfield_readonly.py +0 -0
  55. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0010_add_prefillsource_template_fields.py +0 -0
  56. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0011_postsubmissionaction_email_body_template_and_more.py +0 -0
  57. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0012_add_approval_step_fields.py +0 -0
  58. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0013_add_database_query_key.py +0 -0
  59. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0014_add_form_category.py +0 -0
  60. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0015_add_workflowstage_staged_approvals.py +0 -0
  61. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0016_add_pdf_generation.py +0 -0
  62. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0017_add_notification_batching.py +0 -0
  63. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0018_add_form_category_parent.py +0 -0
  64. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0019_add_ldap_group_profile.py +0 -0
  65. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0020_add_bulk_export_field.py +0 -0
  66. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0021_alter_pendingnotification_scheduled_for_and_more.py +0 -0
  67. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0022_add_bulk_pdf_export.py +0 -0
  68. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0023_add_performance_indexes.py +0 -0
  69. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0024_add_allow_resubmit.py +0 -0
  70. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0025_workflowstage_approve_label.py +0 -0
  71. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0026_alter_formfield_width.py +0 -0
  72. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0027_formsubmission_form_data_gin.py +0 -0
  73. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0028_workflowstagegroupconfig.py +0 -0
  74. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0029_formfield_workflow_stage_fk_drop_groupconfig.py +0 -0
  75. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0030_formfield_phone_type.py +0 -0
  76. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0031_sub_workflows.py +0 -0
  77. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0032_approved_pending_detached_sub_workflow.py +0 -0
  78. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0033_add_reject_parent_to_subworkflowdefinition.py +0 -0
  79. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0034_add_notificationlog.py +0 -0
  80. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0035_migrate_prefill_source_strings.py +0 -0
  81. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0036_add_workflowstage_auto_created.py +0 -0
  82. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0037_migrate_flat_workflows_to_staged.py +0 -0
  83. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0038_remove_legacy_prefill_source_and_approval_step.py +0 -0
  84. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0039_update_help_text.py +0 -0
  85. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0040_migrate_deprecated_features.py +0 -0
  86. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0041_remove_deprecated_fields.py +0 -0
  87. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0042_add_sub_workflow_section_label.py +0 -0
  88. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0043_fix_form_data_decimal_encoding.py +0 -0
  89. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0044_remove_subworkflowinstance_label.py +0 -0
  90. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0045_stageapprovalgroup_workflow_name_label.py +0 -0
  91. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0046_workflow_definition_one_to_many.py +0 -0
  92. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0047_add_hide_approval_history.py +0 -0
  93. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0048_workflowdefinition_trigger_conditions_and_more.py +0 -0
  94. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0049_formfield_multifile_type.py +0 -0
  95. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0050_workflowdefinition_collapse_parallel_stages.py +0 -0
  96. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0051_formdefinition_is_listed.py +0 -0
  97. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0052_dynamic_assignee_and_form_field_notifications.py +0 -0
  98. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0053_stageformfieldnotification_static_emails.py +0 -0
  99. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0054_rename_approved_pending_to_pending_approval.py +0 -0
  100. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0055_add_send_back.py +0 -0
  101. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0056_calculated_formula_spreadsheet.py +0 -0
  102. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0057_add_currency_field_type.py +0 -0
  103. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0058_rename_assignee_email_field_add_lookup_type.py +0 -0
  104. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0059_add_multiselect_list_field_type.py +0 -0
  105. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0060_alter_workflowstage_assignee_lookup_type_helptext.py +0 -0
  106. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0061_add_country_us_state_field_types.py +0 -0
  107. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0062_add_batch_import_to_formdefinition.py +0 -0
  108. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0063_formdefinition_api_enabled_apitoken.py +0 -0
  109. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0064_add_reviewer_groups.py +0 -0
  110. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0065_workflownotification.py +0 -0
  111. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0066_add_notify_submitter_to_workflownotification.py +0 -0
  112. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0067_migrate_legacy_notify_flags.py +0 -0
  113. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0068_drop_legacy_notify_fields.py +0 -0
  114. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0069_add_signature_field_type.py +0 -0
  115. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0070_workflowstage_allow_edit_form_data.py +0 -0
  116. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0071_alter_pendingnotification_notification_type.py +0 -0
  117. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0072_add_change_history.py +0 -0
  118. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0073_add_stage_notify_assignee_on_final_decision.py +0 -0
  119. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0074_add_notification_rule.py +0 -0
  120. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0075_migrate_to_notification_rules.py +0 -0
  121. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0076_update_notification_event_choices.py +0 -0
  122. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0077_drop_legacy_notification_models.py +0 -0
  123. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0078_allow_anonymous_submissions.py +0 -0
  124. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0079_webhookendpoint_webhookdeliverylog.py +0 -0
  125. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0080_add_rating_matrix_address_slider_fields_and_form_controls.py +0 -0
  126. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0081_add_success_page_fields.py +0 -0
  127. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0082_add_document_template_model.py +0 -0
  128. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0083_workflowdefinition_start_trigger.py +0 -0
  129. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0084_add_shared_option_list.py +0 -0
  130. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0085_add_payment_system.py +0 -0
  131. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0086_add_embed_enabled.py +0 -0
  132. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0087_notificationrule_use_triggering_stage.py +0 -0
  133. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0088_notificationrule_body_template_and_events.py +0 -0
  134. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0089_workflowstage_hide_comment_field.py +0 -0
  135. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0090_alter_stageapprovalgroup_options_and_more.py +0 -0
  136. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0091_add_uuid_fields.py +0 -0
  137. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/0092_add_user_notification_preference.py +0 -0
  138. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/migrations/__init__.py +0 -0
  139. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/models.py +0 -0
  140. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/payments/__init__.py +0 -0
  141. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/payments/base.py +0 -0
  142. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/payments/registry.py +0 -0
  143. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/payments/stripe_provider.py +0 -0
  144. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/payments/views.py +0 -0
  145. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/reporting_views.py +0 -0
  146. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/signals.py +0 -0
  147. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/sso_backends.py +0 -0
  148. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/sso_urls.py +0 -0
  149. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/sso_views.py +0 -0
  150. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/api/swagger-ui-bundle.js +0 -0
  151. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/api/swagger-ui.css +0 -0
  152. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/css/forms.css +0 -0
  153. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/js/dfw-embed.js +0 -0
  154. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/js/form-builder.js +0 -0
  155. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/js/form-enhancements.js +0 -0
  156. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/js/payment-stripe.js +0 -0
  157. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/js/signature-pad.js +0 -0
  158. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/static/django_forms_workflows/js/workflow-builder.js +0 -0
  159. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/sync_views.py +0 -0
  160. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/tasks.py +0 -0
  161. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/_sync_diff.html +0 -0
  162. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/diff_forms.html +0 -0
  163. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/form_builder.html +0 -0
  164. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/formdef_change_form.html +0 -0
  165. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/formdefinition/change_list.html +0 -0
  166. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/sync_import.html +0 -0
  167. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/sync_pull.html +0 -0
  168. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/sync_push.html +0 -0
  169. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/admin/django_forms_workflows/workflow_builder.html +0 -0
  170. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/_category_node.html +0 -0
  171. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/_field_value.html +0 -0
  172. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/_form_data_rows.html +0 -0
  173. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/analytics_dashboard.html +0 -0
  174. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/api/docs.html +0 -0
  175. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/approval_inbox.html +0 -0
  176. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/base.html +0 -0
  177. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/batch_import_result.html +0 -0
  178. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/completed_approvals.html +0 -0
  179. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/discard_draft_confirm.html +0 -0
  180. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/embed_base.html +0 -0
  181. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/embed_success.html +0 -0
  182. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/form_categories.html +0 -0
  183. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/form_embed.html +0 -0
  184. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/form_list.html +0 -0
  185. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/form_submit.html +0 -0
  186. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/my_submissions.html +0 -0
  187. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/notification_preferences.html +0 -0
  188. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/payment_collect.html +0 -0
  189. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/payment_error.html +0 -0
  190. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/public_submission_confirmation.html +0 -0
  191. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/rate_limited.html +0 -0
  192. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/reassign_task.html +0 -0
  193. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/resubmit_confirm.html +0 -0
  194. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/sso/login.html +0 -0
  195. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/sub_workflow_detail.html +0 -0
  196. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/submission_bulk_pdf.html +0 -0
  197. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/submission_detail.html +0 -0
  198. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/submission_pdf.html +0 -0
  199. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/submission_success.html +0 -0
  200. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/django_forms_workflows/withdraw_confirm.html +0 -0
  201. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/approval_notification.html +0 -0
  202. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/approval_reminder.html +0 -0
  203. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/approval_request.html +0 -0
  204. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/email_styles.html +0 -0
  205. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/escalation_notification.html +0 -0
  206. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/notification_digest.html +0 -0
  207. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/rejection_notification.html +0 -0
  208. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/emails/submission_notification.html +0 -0
  209. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templates/registration/login.html +0 -0
  210. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templatetags/__init__.py +0 -0
  211. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/templatetags/forms_workflows_tags.py +0 -0
  212. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/urls.py +0 -0
  213. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/utils.py +0 -0
  214. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/views.py +0 -0
  215. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/workflow_builder_views.py +0 -0
  216. {django_forms_workflows-0.71.2 → django_forms_workflows-0.72.0}/django_forms_workflows/workflow_engine.py +0 -0
@@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.72.0] - 2026-04-16
11
+
12
+ ### Changed (potentially breaking)
13
+ - **Sync import now matches `FormField.workflow_stage` strictly by
14
+ workflow-stage UUID.** Previously, if the source payload's
15
+ `workflow_stage_uuid` didn't match any destination stage, the importer
16
+ fell back to ``(workflow_index, stage_order)`` — a lookup that is not
17
+ unique when a workflow has parallel or conditional stages sharing the
18
+ same `order`. The fallback silently routed such fields to the wrong
19
+ stage (e.g. fields for an "Admissions Counselor" stage landed on
20
+ "Academic Advisor" because both were configured with `order=1`). The
21
+ fallback is removed: unresolved stage UUIDs now leave `workflow_stage`
22
+ NULL and log a warning.
23
+ - **Root cause also fixed inside the stage-resolution map.** The
24
+ per-import `all_stages_by_uuid` lookup was built from
25
+ `stage_order_maps_by_wf.values()`, which is keyed by `stage.order` and
26
+ therefore collapses stages that share an order value. It's now built
27
+ directly from `WorkflowStage.objects.filter(workflow__form_definition=…)`
28
+ so every destination stage is present in the UUID map regardless of
29
+ order collisions.
30
+
31
+ ### Migration notes
32
+ - **Run `0091_add_uuid_fields` on both source *and* destination before
33
+ upgrading.** That migration (shipped earlier in the 0.68 series)
34
+ backfills `WorkflowStage.uuid` (and the other workflow/form UUID
35
+ fields) for pre-existing rows. Sync imports under 0.72 require those
36
+ UUIDs to be present and to match across environments; otherwise
37
+ fields will import with a NULL `workflow_stage` and will not render
38
+ in stage-scoped sections until re-assigned manually.
39
+ - If your environments were synced with a pre-UUID importer and the
40
+ destination has autogenerated UUIDs that don't match the source, a
41
+ single re-sync of each workflow will converge UUIDs (workflow and
42
+ stage UUID convergence logic already exists in
43
+ `_import_single_workflow`). Run that before updating to 0.72.
44
+
45
+ ## [0.71.3] - 2026-04-16
46
+
47
+ ### Fixed
48
+ - **Currency `$` prefix now renders on the approval page.** `approve.html`
49
+ did not load `form-enhancements.js`, the script that wraps
50
+ `input[data-input-type="currency"]` in a Bootstrap `input-group` with a
51
+ leading `$` addon. Currency fields on approver-filled stages were
52
+ rendering as a plain `0.00` number input. Added the script include so
53
+ the approval form matches the visual treatment already present on the
54
+ form-submit page.
55
+
10
56
  ## [0.71.2] - 2026-04-16
11
57
 
12
58
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-forms-workflows
3
- Version: 0.71.2
3
+ Version: 0.72.0
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
@@ -982,9 +982,6 @@ def import_form(form_data, conflict="update", category_cache=None):
982
982
  )
983
983
 
984
984
  # ── Workflows (created BEFORE fields so stage FKs can be resolved) ─────────
985
- stage_order_map = {} # order → WorkflowStage, used when creating fields
986
- # Per-workflow stage maps: wf_index → {order → WorkflowStage}
987
- stage_order_maps_by_wf = {}
988
985
  wf_data = form_data.get("workflow")
989
986
  additional_wf_data = form_data.get("additional_workflows", [])
990
987
 
@@ -1002,7 +999,10 @@ def import_form(form_data, conflict="update", category_cache=None):
1002
999
 
1003
1000
  imported_wf_ids = set()
1004
1001
  for wf_idx, wf_payload in enumerate(all_wf_payloads):
1005
- wf_obj, s_map = _import_single_workflow(
1002
+ # _import_single_workflow still returns its legacy stage_order_map
1003
+ # for backwards compat, but we no longer consume it — field FK
1004
+ # resolution below matches purely by stage UUID.
1005
+ wf_obj, _ = _import_single_workflow(
1006
1006
  form_obj,
1007
1007
  wf_payload,
1008
1008
  existing_wfs,
@@ -1010,11 +1010,6 @@ def import_form(form_data, conflict="update", category_cache=None):
1010
1010
  imported_wf_ids,
1011
1011
  )
1012
1012
  imported_wf_ids.add(wf_obj.pk)
1013
- stage_order_maps_by_wf[wf_idx] = s_map
1014
- # Primary workflow's stage map is the default for backward compat
1015
- # (fields without workflow_index fall back to this).
1016
- if wf_idx == 0:
1017
- stage_order_map = s_map
1018
1013
 
1019
1014
  # Now resolve sub-workflow configs (must be done after ALL workflows
1020
1015
  # exist so cross-references can be resolved).
@@ -1066,11 +1061,15 @@ def import_form(form_data, conflict="update", category_cache=None):
1066
1061
  WorkflowDefinition.objects.filter(form_definition=form_obj).delete()
1067
1062
 
1068
1063
  # ── Fields ─────────────────────────────────────────────────────────────────
1069
- # Build a UUID lookup for all stages across all workflows (for field FK resolution)
1070
- all_stages_by_uuid = {}
1071
- for s_map in stage_order_maps_by_wf.values():
1072
- for stage in s_map.values():
1073
- all_stages_by_uuid[str(stage.uuid)] = stage
1064
+ # UUID lookup across every stage on every workflow for this form. Pulled
1065
+ # straight from the DB — NOT from ``stage_order_maps_by_wf`` — because
1066
+ # that map is keyed by ``stage.order`` and collapses parallel/conditional
1067
+ # stages that share the same order (the collision drops one stage's
1068
+ # UUID from the lookup, which caused fields to land on the wrong stage).
1069
+ all_stages_by_uuid = {
1070
+ str(s.uuid): s
1071
+ for s in WorkflowStage.objects.filter(workflow__form_definition=form_obj)
1072
+ }
1074
1073
 
1075
1074
  # Delete existing fields so we get a clean ordered set
1076
1075
  form_obj.fields.all().delete()
@@ -1087,21 +1086,22 @@ def import_form(form_data, conflict="update", category_cache=None):
1087
1086
  field_data.pop("show_if_value", None)
1088
1087
  min_val = field_data.pop("min_value", None)
1089
1088
  max_val = field_data.pop("max_value", None)
1090
- stage_order = field_data.pop("workflow_stage_order", None)
1089
+ # Legacy fallback keys (order / workflow_index) are intentionally
1090
+ # discarded — stage resolution is UUID-only so parallel or
1091
+ # conditional stages at the same order can't be conflated.
1092
+ field_data.pop("workflow_stage_order", None)
1093
+ field_data.pop("workflow_index", None)
1091
1094
  stage_uuid = field_data.pop("workflow_stage_uuid", None)
1092
- wf_index = field_data.pop("workflow_index", None)
1093
-
1094
- # UUID-first stage resolution, then workflow_index + order fallback
1095
- workflow_stage = None
1096
- if stage_uuid:
1097
- workflow_stage = all_stages_by_uuid.get(stage_uuid)
1098
- if workflow_stage is None and stage_order is not None:
1099
- resolved_map = (
1100
- stage_order_maps_by_wf.get(wf_index, stage_order_map)
1101
- if wf_index is not None
1102
- else stage_order_map
1095
+
1096
+ workflow_stage = all_stages_by_uuid.get(stage_uuid) if stage_uuid else None
1097
+ if stage_uuid and workflow_stage is None:
1098
+ logger.warning(
1099
+ "Sync import: field %r references unknown workflow_stage "
1100
+ "uuid=%s on form %s — stage FK left NULL.",
1101
+ field_data.get("field_name"),
1102
+ stage_uuid,
1103
+ form_obj.slug,
1103
1104
  )
1104
- workflow_stage = resolved_map.get(stage_order)
1105
1105
  # Resolve shared option list by slug (if present)
1106
1106
  sol_slug = field_data.pop("shared_option_list_slug", None)
1107
1107
  shared_option_list = None
@@ -531,5 +531,6 @@
531
531
  {% endblock %}
532
532
 
533
533
  {% block extra_js %}
534
+ <script src="{% static 'django_forms_workflows/js/form-enhancements.js' %}"></script>
534
535
  <script src="{% static 'django_forms_workflows/js/signature-pad.js' %}"></script>
535
536
  {% endblock %}
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-forms-workflows"
3
- version = "0.71.2"
3
+ version = "0.72.0"
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"