@open-mercato/core 0.6.5-develop.4516.1.88e6ab71a9 → 0.6.5-develop.4544.1.71c003c861
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.
- package/.turbo/turbo-build.log +2 -2
- package/AGENTS.md +5 -0
- package/dist/generated/entities/role/index.js +3 -1
- package/dist/generated/entities/role/index.js.map +2 -2
- package/dist/generated/entities/step_instance/index.js +2 -0
- package/dist/generated/entities/step_instance/index.js.map +2 -2
- package/dist/generated/entities/user/index.js +3 -1
- package/dist/generated/entities/user/index.js.map +2 -2
- package/dist/generated/entities/user_task/index.js +2 -0
- package/dist/generated/entities/user_task/index.js.map +2 -2
- package/dist/generated/entities/workflow_branch_instance/index.js +39 -0
- package/dist/generated/entities/workflow_branch_instance/index.js.map +7 -0
- package/dist/generated/entities/workflow_event/index.js +2 -0
- package/dist/generated/entities/workflow_event/index.js.map +2 -2
- package/dist/generated/entities/workflow_instance/index.js +2 -0
- package/dist/generated/entities/workflow_instance/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +1 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +26 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/optimisticLockUi.js +104 -0
- package/dist/helpers/integration/optimisticLockUi.js.map +7 -0
- package/dist/helpers/integration/salesFixtures.js +17 -0
- package/dist/helpers/integration/salesFixtures.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +9 -5
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +17 -9
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
- package/dist/modules/auth/api/roles/acl/route.js +32 -13
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/roles/route.js +3 -1
- package/dist/modules/auth/api/roles/route.js.map +2 -2
- package/dist/modules/auth/api/sidebar/preferences/route.js +71 -3
- package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +42 -19
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +3 -1
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.js +24 -4
- package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +8 -4
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +27 -5
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +6 -2
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/components/AclEditor.js +3 -1
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/data/entities.js +6 -0
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/services/sidebarPreferencesService.js +32 -4
- package/dist/modules/auth/services/sidebarPreferencesService.js.map +2 -2
- package/dist/modules/business_rules/api/rules/route.js +28 -0
- package/dist/modules/business_rules/api/rules/route.js.map +2 -2
- package/dist/modules/business_rules/api/sets/route.js +28 -0
- package/dist/modules/business_rules/api/sets/route.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/[id]/page.js +11 -4
- package/dist/modules/business_rules/backend/rules/[id]/page.js.map +3 -3
- package/dist/modules/business_rules/backend/rules/page.js +20 -11
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/[id]/page.js +11 -4
- package/dist/modules/business_rules/backend/sets/[id]/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +20 -11
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/catalog/api/categories/route.js +2 -0
- package/dist/modules/catalog/api/categories/route.js.map +2 -2
- package/dist/modules/catalog/api/products/route.js +2 -1
- package/dist/modules/catalog/api/products/route.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/categories/[id]/edit/page.js +2 -0
- package/dist/modules/catalog/backend/catalog/categories/[id]/edit/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +94 -40
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js +37 -8
- package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/optionSchemaClient.js.map +2 -2
- package/dist/modules/catalog/commands/variants.js +32 -31
- package/dist/modules/catalog/commands/variants.js.map +2 -2
- package/dist/modules/catalog/components/PriceKindSettings.js +12 -5
- package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductMediaManager.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +5 -3
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/productForm.js.map +2 -2
- package/dist/modules/catalog/components/products/variantForm.js +2 -1
- package/dist/modules/catalog/components/products/variantForm.js.map +2 -2
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.js +5 -0
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/[id]/page.js +6 -3
- package/dist/modules/currencies/backend/currencies/[id]/page.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +18 -11
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/[id]/page.js +1 -0
- package/dist/modules/currencies/backend/exchange-rates/[id]/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +10 -6
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/currencies/commands/currencies.js +7 -5
- package/dist/modules/currencies/commands/currencies.js.map +2 -2
- package/dist/modules/currencies/components/CurrencyFetchingConfig.js +26 -19
- package/dist/modules/currencies/components/CurrencyFetchingConfig.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/roles/[id].js +28 -5
- package/dist/modules/customer_accounts/api/admin/roles/[id].js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/roles.js +4 -2
- package/dist/modules/customer_accounts/api/admin/roles.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/users/[id].js +28 -5
- package/dist/modules/customer_accounts/api/admin/users/[id].js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/users.js +2 -0
- package/dist/modules/customer_accounts/api/admin/users.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +16 -8
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +8 -4
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/domain/page.js +8 -4
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/domain/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +29 -18
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +18 -11
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customers/api/companies/route.js +13 -2
- package/dist/modules/customers/api/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +2 -0
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/people/route.js +11 -2
- package/dist/modules/customers/api/people/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +1 -0
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/config/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +34 -21
- package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +45 -27
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +22 -5
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.js +30 -8
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -0
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +16 -6
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js +62 -39
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +41 -26
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +50 -23
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/commands/addresses.js +16 -14
- package/dist/modules/customers/commands/addresses.js.map +2 -2
- package/dist/modules/customers/commands/companies.js +1 -1
- package/dist/modules/customers/commands/companies.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js +41 -4
- package/dist/modules/customers/commands/interactions.js.map +2 -2
- package/dist/modules/customers/commands/people.js +1 -1
- package/dist/modules/customers/commands/people.js.map +2 -2
- package/dist/modules/customers/commands/personCompanyLinks.js +8 -5
- package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
- package/dist/modules/customers/commands/pipeline-stages.js +13 -11
- package/dist/modules/customers/commands/pipeline-stages.js.map +3 -3
- package/dist/modules/customers/components/AddressFormatSettings.js.map +2 -2
- package/dist/modules/customers/components/DictionarySettings.js +20 -13
- package/dist/modules/customers/components/DictionarySettings.js.map +2 -2
- package/dist/modules/customers/components/DictionarySortSettings.js +4 -0
- package/dist/modules/customers/components/DictionarySortSettings.js.map +2 -2
- package/dist/modules/customers/components/PipelineSettings.js +38 -23
- package/dist/modules/customers/components/PipelineSettings.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivityTimeline.js +1 -1
- package/dist/modules/customers/components/detail/ActivityTimeline.js.map +2 -2
- package/dist/modules/customers/components/detail/AddressesSection.js +4 -0
- package/dist/modules/customers/components/detail/AddressesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +28 -22
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +36 -24
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EmailCardActions.js +5 -0
- package/dist/modules/customers/components/detail/EmailCardActions.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +7 -0
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/ManageTagsDialog.js +34 -22
- package/dist/modules/customers/components/detail/ManageTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +41 -29
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/RoleAssignmentRow.js +14 -8
- package/dist/modules/customers/components/detail/RoleAssignmentRow.js.map +2 -2
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +14 -6
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js +29 -13
- package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/useInteractions.js +77 -35
- package/dist/modules/customers/components/detail/hooks/useInteractions.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +25 -17
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
- package/dist/modules/customers/components/formConfig.js.map +2 -2
- package/dist/modules/customers/data/guards.js +66 -0
- package/dist/modules/customers/data/guards.js.map +7 -0
- package/dist/modules/customers/di.js +37 -0
- package/dist/modules/customers/di.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +11 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
- package/dist/modules/data_sync/api/options.js +4 -4
- package/dist/modules/data_sync/api/options.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/route.js +9 -1
- package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +17 -8
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/components/IntegrationScheduleTab.js +43 -22
- package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-schedule-service.js +9 -0
- package/dist/modules/data_sync/lib/sync-schedule-service.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js +8 -1
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/route.js +17 -1
- package/dist/modules/dictionaries/api/[dictionaryId]/route.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionariesManager.js +31 -10
- package/dist/modules/dictionaries/components/DictionariesManager.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +28 -15
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
- package/dist/modules/directory/api/organizations/route.js +3 -0
- package/dist/modules/directory/api/organizations/route.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/[id]/edit/page.js +2 -0
- package/dist/modules/directory/backend/directory/organizations/[id]/edit/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +9 -5
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/[id]/edit/page.js +7 -3
- package/dist/modules/directory/backend/directory/tenants/[id]/edit/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +8 -4
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/commands/organizations.js +7 -2
- package/dist/modules/directory/commands/organizations.js.map +2 -2
- package/dist/modules/entities/api/records.js +66 -0
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/[recordId]/page.js +1 -0
- package/dist/modules/entities/backend/entities/user/[entityId]/records/[recordId]/page.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +8 -4
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/entities/lib/helpers.js +17 -0
- package/dist/modules/entities/lib/helpers.js.map +2 -2
- package/dist/modules/feature_toggles/api/global/[id]/override/route.js +2 -1
- package/dist/modules/feature_toggles/api/global/[id]/override/route.js.map +2 -2
- package/dist/modules/feature_toggles/api/overrides/route.js +15 -0
- package/dist/modules/feature_toggles/api/overrides/route.js.map +2 -2
- package/dist/modules/feature_toggles/backend/feature-toggles/global/[id]/edit/page.js +15 -14
- package/dist/modules/feature_toggles/backend/feature-toggles/global/[id]/edit/page.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureToggleOverrideCard.js +20 -12
- package/dist/modules/feature_toggles/components/FeatureToggleOverrideCard.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +6 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/formConfig.js +2 -1
- package/dist/modules/feature_toggles/components/formConfig.js.map +2 -2
- package/dist/modules/feature_toggles/components/overrideFormConfig.js +5 -1
- package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +2 -2
- package/dist/modules/feature_toggles/data/validators.js +7 -4
- package/dist/modules/feature_toggles/data/validators.js.map +2 -2
- package/dist/modules/inbox_ops/api/settings/route.js +17 -2
- package/dist/modules/inbox_ops/api/settings/route.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js +13 -8
- package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js.map +2 -2
- package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +9 -4
- package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +18 -11
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/page.js +12 -8
- package/dist/modules/integrations/backend/integrations/page.js.map +2 -2
- package/dist/modules/messages/commands/messages.js +13 -10
- package/dist/modules/messages/commands/messages.js.map +2 -2
- package/dist/modules/perspectives/api/[tableId]/route.js +39 -30
- package/dist/modules/perspectives/api/[tableId]/route.js.map +2 -2
- package/dist/modules/perspectives/services/perspectiveService.js +7 -0
- package/dist/modules/perspectives/services/perspectiveService.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/[id]/page.js +6 -14
- package/dist/modules/planner/backend/planner/availability-rulesets/[id]/page.js.map +3 -3
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +4 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/planner/components/AvailabilityRuleSetForm.js +2 -0
- package/dist/modules/planner/components/AvailabilityRuleSetForm.js.map +2 -2
- package/dist/modules/planner/components/AvailabilityRulesEditor.js +36 -11
- package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
- package/dist/modules/planner/components/AvailabilitySchedule.js +9 -5
- package/dist/modules/planner/components/AvailabilitySchedule.js.map +2 -2
- package/dist/modules/progress/api/jobs/[id]/route.js +7 -1
- package/dist/modules/progress/api/jobs/[id]/route.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +19 -0
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/[id]/edit/page.js +1 -0
- package/dist/modules/resources/backend/resources/resource-types/[id]/edit/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +4 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/[id]/page.js +14 -3
- package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +8 -4
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/resources/components/ResourceCrudForm.js +2 -0
- package/dist/modules/resources/components/ResourceCrudForm.js.map +2 -2
- package/dist/modules/resources/components/ResourceTypeCrudForm.js +1 -0
- package/dist/modules/resources/components/ResourceTypeCrudForm.js.map +2 -2
- package/dist/modules/sales/api/documents/factory.js +7 -2
- package/dist/modules/sales/api/documents/factory.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/[channelId]/edit/page.js +3 -1
- package/dist/modules/sales/backend/sales/channels/[channelId]/edit/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +13 -4
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +16 -4
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +68 -22
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/create/page.js.map +2 -2
- package/dist/modules/sales/commands/documentAddresses.js +181 -2
- package/dist/modules/sales/commands/documentAddresses.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +29 -1
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/commands/returns.js +12 -2
- package/dist/modules/sales/commands/returns.js.map +2 -2
- package/dist/modules/sales/commands/shared.js +15 -0
- package/dist/modules/sales/commands/shared.js.map +2 -2
- package/dist/modules/sales/commands/shipments.js +4 -1
- package/dist/modules/sales/commands/shipments.js.map +2 -2
- package/dist/modules/sales/components/AdjustmentKindSettings.js +19 -11
- package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
- package/dist/modules/sales/components/DocumentNumberSettings.js.map +2 -2
- package/dist/modules/sales/components/OrderEditingSettings.js.map +2 -2
- package/dist/modules/sales/components/PaymentMethodsSettings.js +12 -4
- package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js +12 -4
- package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/StatusSettings.js +18 -11
- package/dist/modules/sales/components/StatusSettings.js.map +2 -2
- package/dist/modules/sales/components/TaxRatesSettings.js +12 -4
- package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
- package/dist/modules/sales/components/channels/ChannelOfferForm.js +47 -16
- package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +8 -4
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AddressesSection.js +44 -25
- package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +43 -23
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +22 -13
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +23 -10
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentDialog.js +29 -14
- package/dist/modules/sales/components/documents/PaymentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +20 -10
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnDialog.js +26 -17
- package/dist/modules/sales/components/documents/ReturnDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +3 -1
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +10 -5
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +21 -7
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +19 -10
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/optimisticLock.js +27 -0
- package/dist/modules/sales/components/documents/optimisticLock.js.map +7 -0
- package/dist/modules/sales/di.js +18 -0
- package/dist/modules/sales/di.js.map +2 -2
- package/dist/modules/shipping_carriers/api/cancel/route.js +2 -2
- package/dist/modules/shipping_carriers/api/cancel/route.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/status-sync.js +8 -1
- package/dist/modules/shipping_carriers/lib/status-sync.js.map +2 -2
- package/dist/modules/staff/api/job-histories.js +11 -2
- package/dist/modules/staff/api/job-histories.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/route.js +11 -4
- package/dist/modules/staff/api/timesheets/time-entries/route.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/[id]/page.js +13 -8
- package/dist/modules/staff/backend/staff/leave-requests/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/[id]/page.js +2 -1
- package/dist/modules/staff/backend/staff/my-leave-requests/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/[id]/page.js +7 -4
- package/dist/modules/staff/backend/staff/team-members/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +4 -2
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/[id]/edit/page.js +1 -0
- package/dist/modules/staff/backend/staff/team-roles/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +4 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +5 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +12 -3
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +4 -1
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +12 -3
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/staff/commands/job-histories.js +40 -3
- package/dist/modules/staff/commands/job-histories.js.map +2 -2
- package/dist/modules/staff/components/LeaveRequestForm.js +1 -0
- package/dist/modules/staff/components/LeaveRequestForm.js.map +2 -2
- package/dist/modules/staff/components/TeamForm.js +1 -0
- package/dist/modules/staff/components/TeamForm.js.map +2 -2
- package/dist/modules/staff/components/TeamMemberForm.js +1 -0
- package/dist/modules/staff/components/TeamMemberForm.js.map +2 -2
- package/dist/modules/staff/components/TeamRoleForm.js +1 -0
- package/dist/modules/staff/components/TeamRoleForm.js.map +2 -2
- package/dist/modules/staff/components/detail/JobHistorySection.js +20 -7
- package/dist/modules/staff/components/detail/JobHistorySection.js.map +2 -2
- package/dist/modules/staff/data/validators.js +7 -1
- package/dist/modules/staff/data/validators.js.map +2 -2
- package/dist/modules/staff/lib/leaveRequestHelpers.js +2 -1
- package/dist/modules/staff/lib/leaveRequestHelpers.js.map +2 -2
- package/dist/modules/translations/components/TranslationManager.js +12 -8
- package/dist/modules/translations/components/TranslationManager.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/route.js +106 -0
- package/dist/modules/workflows/api/definitions/[id]/route.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.js +11 -3
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +19 -8
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +29 -16
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/components/NodeEditDialog.js +3 -1
- package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowGraphImpl.js +4 -2
- package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +2 -2
- package/dist/modules/workflows/components/formConfig.js +4 -1
- package/dist/modules/workflows/components/formConfig.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js +49 -0
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +49 -0
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/index.js +4 -0
- package/dist/modules/workflows/components/nodes/index.js.map +2 -2
- package/dist/modules/workflows/data/entities.js +81 -0
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +146 -1
- package/dist/modules/workflows/data/validators.js.map +2 -2
- package/dist/modules/workflows/di.js +12 -0
- package/dist/modules/workflows/di.js.map +2 -2
- package/dist/modules/workflows/events.js +7 -1
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +4 -2
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
- package/dist/modules/workflows/lib/event-logger.js +2 -0
- package/dist/modules/workflows/lib/event-logger.js.map +2 -2
- package/dist/modules/workflows/lib/execution-token.js +98 -0
- package/dist/modules/workflows/lib/execution-token.js.map +7 -0
- package/dist/modules/workflows/lib/node-type-icons.js +14 -5
- package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
- package/dist/modules/workflows/lib/parallel-handler.js +364 -0
- package/dist/modules/workflows/lib/parallel-handler.js.map +7 -0
- package/dist/modules/workflows/lib/signal-handler.js +63 -1
- package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
- package/dist/modules/workflows/lib/step-handler.js +74 -30
- package/dist/modules/workflows/lib/step-handler.js.map +2 -2
- package/dist/modules/workflows/lib/task-handler.js +26 -0
- package/dist/modules/workflows/lib/task-handler.js.map +2 -2
- package/dist/modules/workflows/lib/timer-handler.js +26 -1
- package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +33 -21
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-executor.js +39 -1
- package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
- package/dist/modules/workflows/migrations/Migration20260602120000.js +24 -0
- package/dist/modules/workflows/migrations/Migration20260602120000.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-activities.worker.js +8 -4
- package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
- package/generated/entities/role/index.ts +1 -0
- package/generated/entities/step_instance/index.ts +1 -0
- package/generated/entities/user/index.ts +1 -0
- package/generated/entities/user_task/index.ts +1 -0
- package/generated/entities/workflow_branch_instance/index.ts +18 -0
- package/generated/entities/workflow_event/index.ts +1 -0
- package/generated/entities/workflow_instance/index.ts +1 -0
- package/generated/entities.ids.generated.ts +1 -0
- package/generated/entity-fields-registry.ts +26 -0
- package/jest.setup.ts +17 -0
- package/package.json +8 -7
- package/src/helpers/integration/optimisticLockUi.ts +172 -0
- package/src/helpers/integration/salesFixtures.ts +29 -0
- package/src/modules/api_keys/backend/api-keys/page.tsx +10 -5
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +19 -9
- package/src/modules/auth/api/roles/acl/route.ts +37 -11
- package/src/modules/auth/api/roles/route.ts +2 -0
- package/src/modules/auth/api/sidebar/preferences/route.ts +73 -0
- package/src/modules/auth/api/users/acl/route.ts +46 -18
- package/src/modules/auth/api/users/route.ts +2 -0
- package/src/modules/auth/backend/roles/[id]/edit/page.tsx +29 -4
- package/src/modules/auth/backend/roles/page.tsx +9 -4
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +37 -4
- package/src/modules/auth/backend/users/page.tsx +7 -2
- package/src/modules/auth/components/AclEditor.tsx +10 -1
- package/src/modules/auth/data/entities.ts +7 -1
- package/src/modules/auth/services/sidebarPreferencesService.ts +38 -4
- package/src/modules/business_rules/api/rules/route.ts +30 -0
- package/src/modules/business_rules/api/sets/route.ts +30 -0
- package/src/modules/business_rules/backend/rules/[id]/page.tsx +16 -4
- package/src/modules/business_rules/backend/rules/page.tsx +20 -11
- package/src/modules/business_rules/backend/sets/[id]/page.tsx +16 -4
- package/src/modules/business_rules/backend/sets/page.tsx +20 -11
- package/src/modules/catalog/api/categories/route.ts +3 -0
- package/src/modules/catalog/api/products/route.ts +4 -0
- package/src/modules/catalog/backend/catalog/categories/[id]/edit/page.tsx +5 -0
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +112 -35
- package/src/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.tsx +56 -7
- package/src/modules/catalog/backend/catalog/products/optionSchemaClient.ts +2 -0
- package/src/modules/catalog/commands/variants.ts +32 -32
- package/src/modules/catalog/components/PriceKindSettings.tsx +20 -7
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +1 -0
- package/src/modules/catalog/components/products/ProductMediaManager.tsx +2 -0
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +8 -4
- package/src/modules/catalog/components/products/productForm.ts +3 -0
- package/src/modules/catalog/components/products/variantForm.ts +9 -0
- package/src/modules/communication_channels/backend/profile/communication-channels/page.tsx +5 -0
- package/src/modules/currencies/backend/currencies/[id]/page.tsx +13 -6
- package/src/modules/currencies/backend/currencies/page.tsx +18 -11
- package/src/modules/currencies/backend/exchange-rates/[id]/page.tsx +3 -0
- package/src/modules/currencies/backend/exchange-rates/page.tsx +10 -6
- package/src/modules/currencies/commands/currencies.ts +10 -5
- package/src/modules/currencies/components/CurrencyFetchingConfig.tsx +31 -21
- package/src/modules/customer_accounts/api/admin/roles/[id].ts +35 -5
- package/src/modules/customer_accounts/api/admin/roles.ts +2 -0
- package/src/modules/customer_accounts/api/admin/users/[id].ts +38 -5
- package/src/modules/customer_accounts/api/admin/users.ts +2 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +34 -20
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +9 -4
- package/src/modules/customer_accounts/backend/customer_accounts/settings/domain/page.tsx +11 -4
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +28 -17
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +19 -11
- package/src/modules/customers/AGENTS.md +2 -2
- package/src/modules/customers/api/companies/route.ts +14 -1
- package/src/modules/customers/api/deals/route.ts +3 -0
- package/src/modules/customers/api/people/route.ts +12 -1
- package/src/modules/customers/api/todos/route.ts +1 -0
- package/src/modules/customers/backend/config/customers/deals/page.tsx +1 -0
- package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +36 -21
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +52 -27
- package/src/modules/customers/backend/customers/companies/page.tsx +2 -0
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +27 -5
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.ts +39 -7
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +1 -0
- package/src/modules/customers/backend/customers/deals/page.tsx +18 -6
- package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +64 -39
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +46 -26
- package/src/modules/customers/backend/customers/people/page.tsx +2 -0
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +84 -24
- package/src/modules/customers/commands/addresses.ts +16 -14
- package/src/modules/customers/commands/companies.ts +3 -1
- package/src/modules/customers/commands/interactions.ts +50 -4
- package/src/modules/customers/commands/people.ts +2 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +8 -5
- package/src/modules/customers/commands/pipeline-stages.ts +16 -16
- package/src/modules/customers/components/AddressFormatSettings.tsx +1 -0
- package/src/modules/customers/components/DictionarySettings.tsx +18 -13
- package/src/modules/customers/components/DictionarySortSettings.tsx +4 -0
- package/src/modules/customers/components/PipelineSettings.tsx +42 -21
- package/src/modules/customers/components/detail/ActivityTimeline.tsx +3 -3
- package/src/modules/customers/components/detail/AddressesSection.tsx +4 -0
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +2 -0
- package/src/modules/customers/components/detail/DealsSection.tsx +4 -0
- package/src/modules/customers/components/detail/EmailCardActions.tsx +5 -0
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +7 -0
- package/src/modules/customers/components/detail/ManageTagsDialog.tsx +4 -0
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +4 -0
- package/src/modules/customers/components/detail/RoleAssignmentRow.tsx +2 -0
- package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +23 -7
- package/src/modules/customers/components/detail/hooks/useInteractionMutations.ts +25 -15
- package/src/modules/customers/components/detail/hooks/useInteractions.ts +76 -35
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +30 -17
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +2 -0
- package/src/modules/customers/components/detail/types.ts +1 -0
- package/src/modules/customers/components/formConfig.tsx +2 -0
- package/src/modules/customers/data/guards.ts +67 -0
- package/src/modules/customers/di.ts +66 -0
- package/src/modules/customers/i18n/de.json +2 -0
- package/src/modules/customers/i18n/en.json +2 -0
- package/src/modules/customers/i18n/es.json +2 -0
- package/src/modules/customers/i18n/pl.json +2 -0
- package/src/modules/customers/lib/todoCompatibility.ts +14 -0
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +2 -0
- package/src/modules/data_sync/api/options.ts +7 -4
- package/src/modules/data_sync/api/schedules/route.ts +9 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +18 -5
- package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +46 -19
- package/src/modules/data_sync/lib/sync-schedule-service.ts +11 -0
- package/src/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.ts +8 -1
- package/src/modules/dictionaries/api/[dictionaryId]/route.ts +23 -0
- package/src/modules/dictionaries/components/DictionariesManager.tsx +32 -9
- package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +30 -14
- package/src/modules/dictionaries/i18n/de.json +1 -0
- package/src/modules/dictionaries/i18n/en.json +1 -0
- package/src/modules/dictionaries/i18n/es.json +1 -0
- package/src/modules/dictionaries/i18n/pl.json +1 -0
- package/src/modules/directory/api/organizations/route.ts +3 -0
- package/src/modules/directory/backend/directory/organizations/[id]/edit/page.tsx +8 -0
- package/src/modules/directory/backend/directory/organizations/page.tsx +10 -5
- package/src/modules/directory/backend/directory/tenants/[id]/edit/page.tsx +16 -5
- package/src/modules/directory/backend/directory/tenants/page.tsx +8 -4
- package/src/modules/directory/commands/organizations.ts +7 -4
- package/src/modules/entities/api/records.ts +99 -0
- package/src/modules/entities/backend/entities/user/[entityId]/records/[recordId]/page.tsx +7 -0
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +8 -4
- package/src/modules/entities/lib/helpers.ts +17 -0
- package/src/modules/feature_toggles/api/global/[id]/override/route.ts +1 -0
- package/src/modules/feature_toggles/api/overrides/route.ts +19 -0
- package/src/modules/feature_toggles/backend/feature-toggles/global/[id]/edit/page.tsx +19 -13
- package/src/modules/feature_toggles/components/FeatureToggleOverrideCard.tsx +22 -12
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +7 -2
- package/src/modules/feature_toggles/components/formConfig.tsx +2 -1
- package/src/modules/feature_toggles/components/overrideFormConfig.tsx +10 -1
- package/src/modules/feature_toggles/data/validators.ts +11 -3
- package/src/modules/inbox_ops/api/settings/route.ts +18 -0
- package/src/modules/inbox_ops/backend/inbox-ops/settings/page.tsx +15 -10
- package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +9 -4
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +20 -11
- package/src/modules/integrations/backend/integrations/page.tsx +13 -8
- package/src/modules/messages/commands/messages.ts +27 -15
- package/src/modules/perspectives/api/[tableId]/route.ts +11 -2
- package/src/modules/perspectives/services/perspectiveService.ts +13 -1
- package/src/modules/planner/backend/planner/availability-rulesets/[id]/page.tsx +16 -14
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +6 -3
- package/src/modules/planner/components/AvailabilityRuleSetForm.tsx +3 -0
- package/src/modules/planner/components/AvailabilityRulesEditor.tsx +58 -15
- package/src/modules/planner/components/AvailabilitySchedule.tsx +22 -7
- package/src/modules/progress/api/jobs/[id]/route.ts +7 -0
- package/src/modules/query_index/lib/engine.ts +34 -0
- package/src/modules/resources/backend/resources/resource-types/[id]/edit/page.tsx +7 -1
- package/src/modules/resources/backend/resources/resource-types/page.tsx +6 -3
- package/src/modules/resources/backend/resources/resources/[id]/page.tsx +23 -3
- package/src/modules/resources/backend/resources/resources/page.tsx +15 -4
- package/src/modules/resources/components/ResourceCrudForm.tsx +3 -0
- package/src/modules/resources/components/ResourceTypeCrudForm.tsx +2 -0
- package/src/modules/sales/api/documents/factory.ts +13 -1
- package/src/modules/sales/backend/sales/channels/[channelId]/edit/page.tsx +6 -0
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +10 -4
- package/src/modules/sales/backend/sales/channels/page.tsx +19 -4
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +73 -20
- package/src/modules/sales/backend/sales/documents/create/page.tsx +2 -0
- package/src/modules/sales/commands/documentAddresses.ts +226 -4
- package/src/modules/sales/commands/documents.ts +28 -0
- package/src/modules/sales/commands/returns.ts +12 -3
- package/src/modules/sales/commands/shared.ts +36 -0
- package/src/modules/sales/commands/shipments.ts +17 -1
- package/src/modules/sales/components/AdjustmentKindSettings.tsx +20 -11
- package/src/modules/sales/components/DocumentNumberSettings.tsx +1 -0
- package/src/modules/sales/components/OrderEditingSettings.tsx +1 -0
- package/src/modules/sales/components/PaymentMethodsSettings.tsx +12 -4
- package/src/modules/sales/components/ShippingMethodsSettings.tsx +12 -4
- package/src/modules/sales/components/StatusSettings.tsx +20 -11
- package/src/modules/sales/components/TaxRatesSettings.tsx +12 -5
- package/src/modules/sales/components/channels/ChannelOfferForm.tsx +67 -14
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +7 -4
- package/src/modules/sales/components/documents/AddressesSection.tsx +35 -25
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +50 -25
- package/src/modules/sales/components/documents/ItemsSection.tsx +24 -13
- package/src/modules/sales/components/documents/LineItemDialog.tsx +26 -9
- package/src/modules/sales/components/documents/PaymentDialog.tsx +33 -14
- package/src/modules/sales/components/documents/PaymentsSection.tsx +22 -10
- package/src/modules/sales/components/documents/ReturnDialog.tsx +28 -17
- package/src/modules/sales/components/documents/ReturnsSection.tsx +4 -1
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +11 -4
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +23 -8
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +20 -10
- package/src/modules/sales/components/documents/optimisticLock.ts +34 -0
- package/src/modules/sales/components/documents/shipmentTypes.ts +1 -0
- package/src/modules/sales/di.ts +35 -0
- package/src/modules/sales/i18n/de.json +3 -0
- package/src/modules/sales/i18n/en.json +3 -0
- package/src/modules/sales/i18n/es.json +3 -0
- package/src/modules/sales/i18n/pl.json +3 -0
- package/src/modules/shipping_carriers/api/cancel/route.ts +2 -2
- package/src/modules/shipping_carriers/lib/status-sync.ts +19 -0
- package/src/modules/staff/api/job-histories.ts +12 -2
- package/src/modules/staff/api/timesheets/time-entries/route.ts +16 -4
- package/src/modules/staff/backend/staff/leave-requests/[id]/page.tsx +12 -7
- package/src/modules/staff/backend/staff/my-leave-requests/[id]/page.tsx +2 -0
- package/src/modules/staff/backend/staff/team-members/[id]/page.tsx +16 -5
- package/src/modules/staff/backend/staff/team-members/page.tsx +6 -2
- package/src/modules/staff/backend/staff/team-roles/[id]/edit/page.tsx +8 -0
- package/src/modules/staff/backend/staff/team-roles/page.tsx +6 -2
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +13 -3
- package/src/modules/staff/backend/staff/teams/page.tsx +9 -3
- package/src/modules/staff/backend/staff/timesheets/page.tsx +10 -1
- package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.tsx +4 -0
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +9 -3
- package/src/modules/staff/commands/job-histories.ts +42 -3
- package/src/modules/staff/components/LeaveRequestForm.tsx +2 -0
- package/src/modules/staff/components/TeamForm.tsx +2 -0
- package/src/modules/staff/components/TeamMemberForm.tsx +2 -0
- package/src/modules/staff/components/TeamRoleForm.tsx +2 -0
- package/src/modules/staff/components/detail/JobHistorySection.tsx +28 -6
- package/src/modules/staff/data/validators.ts +6 -0
- package/src/modules/staff/i18n/de.json +1 -0
- package/src/modules/staff/i18n/en.json +1 -0
- package/src/modules/staff/i18n/es.json +1 -0
- package/src/modules/staff/i18n/pl.json +1 -0
- package/src/modules/staff/lib/leaveRequestHelpers.ts +4 -0
- package/src/modules/translations/components/TranslationManager.tsx +13 -8
- package/src/modules/workflows/api/definitions/[id]/route.ts +112 -0
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +20 -4
- package/src/modules/workflows/backend/definitions/page.tsx +20 -9
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +29 -16
- package/src/modules/workflows/components/NodeEditDialog.tsx +2 -0
- package/src/modules/workflows/components/WorkflowGraphImpl.tsx +3 -1
- package/src/modules/workflows/components/formConfig.tsx +5 -0
- package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +66 -0
- package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +66 -0
- package/src/modules/workflows/components/nodes/index.ts +6 -0
- package/src/modules/workflows/data/entities.ts +109 -0
- package/src/modules/workflows/data/validators.ts +223 -0
- package/src/modules/workflows/di.ts +20 -0
- package/src/modules/workflows/events.ts +7 -0
- package/src/modules/workflows/i18n/de.json +13 -0
- package/src/modules/workflows/i18n/en.json +13 -0
- package/src/modules/workflows/i18n/es.json +13 -0
- package/src/modules/workflows/i18n/pl.json +13 -0
- package/src/modules/workflows/lib/activity-executor.ts +8 -2
- package/src/modules/workflows/lib/activity-queue-types.ts +3 -0
- package/src/modules/workflows/lib/event-logger.ts +3 -0
- package/src/modules/workflows/lib/execution-token.ts +166 -0
- package/src/modules/workflows/lib/node-type-icons.ts +11 -2
- package/src/modules/workflows/lib/parallel-handler.ts +575 -0
- package/src/modules/workflows/lib/signal-handler.ts +72 -1
- package/src/modules/workflows/lib/step-handler.ts +94 -34
- package/src/modules/workflows/lib/task-handler.ts +32 -0
- package/src/modules/workflows/lib/timer-handler.ts +30 -1
- package/src/modules/workflows/lib/transition-handler.ts +56 -24
- package/src/modules/workflows/lib/workflow-executor.ts +53 -1
- package/src/modules/workflows/migrations/.snapshot-open-mercato.json +263 -0
- package/src/modules/workflows/migrations/Migration20260602120000.ts +25 -0
- package/src/modules/workflows/workers/workflow-activities.worker.ts +9 -4
|
@@ -69,9 +69,20 @@ export const workflowInstanceStatusSchema = z.enum([
|
|
|
69
69
|
'COMPENSATING',
|
|
70
70
|
'COMPENSATED',
|
|
71
71
|
'WAITING_FOR_ACTIVITIES',
|
|
72
|
+
'FORKED',
|
|
72
73
|
])
|
|
73
74
|
export type WorkflowInstanceStatus = z.infer<typeof workflowInstanceStatusSchema>
|
|
74
75
|
|
|
76
|
+
export const workflowBranchInstanceStatusSchema = z.enum([
|
|
77
|
+
'ACTIVE',
|
|
78
|
+
'PAUSED',
|
|
79
|
+
'WAITING_FOR_ACTIVITIES',
|
|
80
|
+
'COMPLETED',
|
|
81
|
+
'FAILED',
|
|
82
|
+
'CANCELLED',
|
|
83
|
+
])
|
|
84
|
+
export type WorkflowBranchInstanceStatus = z.infer<typeof workflowBranchInstanceStatusSchema>
|
|
85
|
+
|
|
75
86
|
export const stepInstanceStatusSchema = z.enum([
|
|
76
87
|
'PENDING',
|
|
77
88
|
'ACTIVE',
|
|
@@ -376,6 +387,210 @@ export const workflowDefinitionTriggerSchema = z.object({
|
|
|
376
387
|
})
|
|
377
388
|
export type WorkflowDefinitionTrigger = z.infer<typeof workflowDefinitionTriggerSchema>
|
|
378
389
|
|
|
390
|
+
// ============================================================================
|
|
391
|
+
// PARALLEL_FORK / PARALLEL_JOIN definition validation
|
|
392
|
+
// ============================================================================
|
|
393
|
+
|
|
394
|
+
// Error codes surfaced by FORK/JOIN definition validation. Stable identifiers
|
|
395
|
+
// so the visual editor and tests can match on them.
|
|
396
|
+
export type ForkJoinValidationCode =
|
|
397
|
+
| 'MISSING_JOIN_STEP_ID'
|
|
398
|
+
| 'JOIN_STEP_NOT_FOUND'
|
|
399
|
+
| 'JOIN_STEP_WRONG_TYPE'
|
|
400
|
+
| 'MISSING_FORK_STEP_ID'
|
|
401
|
+
| 'FORK_JOIN_MISMATCH'
|
|
402
|
+
| 'FORK_TOO_FEW_BRANCHES'
|
|
403
|
+
| 'JOIN_TOO_FEW_INCOMING'
|
|
404
|
+
| 'DUPLICATE_BRANCH_KEY'
|
|
405
|
+
| 'NESTED_FORK_NOT_SUPPORTED'
|
|
406
|
+
| 'NO_CONVERGENCE_TO_JOIN'
|
|
407
|
+
| 'FORK_JOIN_CYCLE'
|
|
408
|
+
| 'UNPAIRED_JOIN'
|
|
409
|
+
|
|
410
|
+
export interface ForkJoinValidationIssue {
|
|
411
|
+
code: ForkJoinValidationCode
|
|
412
|
+
message: string
|
|
413
|
+
stepId?: string
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
interface ForkJoinStepLike {
|
|
417
|
+
stepId: string
|
|
418
|
+
stepType: string
|
|
419
|
+
config?: Record<string, unknown> | null
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
interface ForkJoinTransitionLike {
|
|
423
|
+
transitionId: string
|
|
424
|
+
fromStepId: string
|
|
425
|
+
toStepId: string
|
|
426
|
+
trigger: string
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
interface ForkJoinDefinitionLike {
|
|
430
|
+
steps: ForkJoinStepLike[]
|
|
431
|
+
transitions: ForkJoinTransitionLike[]
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Validates PARALLEL_FORK / PARALLEL_JOIN structure of a workflow definition.
|
|
436
|
+
* Pure and side-effect-free so it can be unit tested and reused by the editor.
|
|
437
|
+
*
|
|
438
|
+
* Rules (this iteration — wait-all, no nesting):
|
|
439
|
+
* 1. Every FORK declares config.joinStepId pointing at an existing PARALLEL_JOIN.
|
|
440
|
+
* 2. The paired JOIN back-references the fork via config.forkStepId.
|
|
441
|
+
* 3. A FORK has >= 2 outgoing `auto` transitions (branch keys unique); a JOIN has >= 2 incoming.
|
|
442
|
+
* 4. Every path from a FORK converges to its JOIN — no END inside a branch, no dead ends,
|
|
443
|
+
* no path bypassing the JOIN, no path to a different JOIN.
|
|
444
|
+
* 5. No nesting: no FORK appears on a path between a FORK and its JOIN.
|
|
445
|
+
* 6. No cycles back to the FORK within its branch region.
|
|
446
|
+
* 7. Every PARALLEL_JOIN is paired with exactly one FORK.
|
|
447
|
+
*/
|
|
448
|
+
export function validateParallelForkJoin(definition: ForkJoinDefinitionLike): ForkJoinValidationIssue[] {
|
|
449
|
+
const issues: ForkJoinValidationIssue[] = []
|
|
450
|
+
const steps = definition.steps ?? []
|
|
451
|
+
const transitions = definition.transitions ?? []
|
|
452
|
+
|
|
453
|
+
const stepById = new Map<string, ForkJoinStepLike>()
|
|
454
|
+
for (const step of steps) stepById.set(step.stepId, step)
|
|
455
|
+
|
|
456
|
+
const outgoingByStep = new Map<string, ForkJoinTransitionLike[]>()
|
|
457
|
+
const incomingCountByStep = new Map<string, number>()
|
|
458
|
+
for (const transition of transitions) {
|
|
459
|
+
const list = outgoingByStep.get(transition.fromStepId) ?? []
|
|
460
|
+
list.push(transition)
|
|
461
|
+
outgoingByStep.set(transition.fromStepId, list)
|
|
462
|
+
incomingCountByStep.set(transition.toStepId, (incomingCountByStep.get(transition.toStepId) ?? 0) + 1)
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const forkSteps = steps.filter((step) => step.stepType === 'PARALLEL_FORK')
|
|
466
|
+
const joinSteps = steps.filter((step) => step.stepType === 'PARALLEL_JOIN')
|
|
467
|
+
|
|
468
|
+
// Track which JOIN steps are paired with a FORK so we can flag orphan joins.
|
|
469
|
+
const pairedJoinIds = new Set<string>()
|
|
470
|
+
|
|
471
|
+
for (const fork of forkSteps) {
|
|
472
|
+
const joinStepId = (fork.config?.joinStepId as string | undefined) ?? undefined
|
|
473
|
+
if (!joinStepId) {
|
|
474
|
+
issues.push({ code: 'MISSING_JOIN_STEP_ID', stepId: fork.stepId, message: `PARALLEL_FORK "${fork.stepId}" must declare config.joinStepId` })
|
|
475
|
+
continue
|
|
476
|
+
}
|
|
477
|
+
const joinStep = stepById.get(joinStepId)
|
|
478
|
+
if (!joinStep) {
|
|
479
|
+
issues.push({ code: 'JOIN_STEP_NOT_FOUND', stepId: fork.stepId, message: `PARALLEL_FORK "${fork.stepId}" references missing join step "${joinStepId}"` })
|
|
480
|
+
continue
|
|
481
|
+
}
|
|
482
|
+
if (joinStep.stepType !== 'PARALLEL_JOIN') {
|
|
483
|
+
issues.push({ code: 'JOIN_STEP_WRONG_TYPE', stepId: fork.stepId, message: `Step "${joinStepId}" referenced by fork "${fork.stepId}" is not a PARALLEL_JOIN` })
|
|
484
|
+
continue
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
pairedJoinIds.add(joinStepId)
|
|
488
|
+
|
|
489
|
+
const backForkStepId = (joinStep.config?.forkStepId as string | undefined) ?? undefined
|
|
490
|
+
if (!backForkStepId) {
|
|
491
|
+
issues.push({ code: 'MISSING_FORK_STEP_ID', stepId: joinStepId, message: `PARALLEL_JOIN "${joinStepId}" must declare config.forkStepId` })
|
|
492
|
+
} else if (backForkStepId !== fork.stepId) {
|
|
493
|
+
issues.push({ code: 'FORK_JOIN_MISMATCH', stepId: joinStepId, message: `PARALLEL_JOIN "${joinStepId}" back-reference forkStepId "${backForkStepId}" does not match fork "${fork.stepId}"` })
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const autoBranches = (outgoingByStep.get(fork.stepId) ?? []).filter((transition) => transition.trigger === 'auto')
|
|
497
|
+
if (autoBranches.length < 2) {
|
|
498
|
+
issues.push({ code: 'FORK_TOO_FEW_BRANCHES', stepId: fork.stepId, message: `PARALLEL_FORK "${fork.stepId}" must have at least 2 outgoing auto transitions (found ${autoBranches.length})` })
|
|
499
|
+
}
|
|
500
|
+
const branchKeys = new Set<string>()
|
|
501
|
+
for (const branch of autoBranches) {
|
|
502
|
+
if (branchKeys.has(branch.transitionId)) {
|
|
503
|
+
issues.push({ code: 'DUPLICATE_BRANCH_KEY', stepId: fork.stepId, message: `PARALLEL_FORK "${fork.stepId}" has duplicate branch key "${branch.transitionId}"` })
|
|
504
|
+
}
|
|
505
|
+
branchKeys.add(branch.transitionId)
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
if ((incomingCountByStep.get(joinStepId) ?? 0) < 2) {
|
|
509
|
+
issues.push({ code: 'JOIN_TOO_FEW_INCOMING', stepId: joinStepId, message: `PARALLEL_JOIN "${joinStepId}" must have at least 2 incoming transitions` })
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// Convergence + no-nesting + no-cycle traversal over the branch region.
|
|
513
|
+
const fullyExplored = new Set<string>()
|
|
514
|
+
const onStack = new Set<string>()
|
|
515
|
+
let reportedNesting = false
|
|
516
|
+
let reportedNoConvergence = false
|
|
517
|
+
let reportedCycle = false
|
|
518
|
+
|
|
519
|
+
const visit = (stepId: string): void => {
|
|
520
|
+
if (stepId === joinStepId) return // converged
|
|
521
|
+
if (stepId === fork.stepId) {
|
|
522
|
+
if (!reportedCycle) {
|
|
523
|
+
issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork "${fork.stepId}" loops back to the fork before reaching join "${joinStepId}"` })
|
|
524
|
+
reportedCycle = true
|
|
525
|
+
}
|
|
526
|
+
return
|
|
527
|
+
}
|
|
528
|
+
const step = stepById.get(stepId)
|
|
529
|
+
if (!step) {
|
|
530
|
+
if (!reportedNoConvergence) {
|
|
531
|
+
issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork "${fork.stepId}" reaches missing step "${stepId}" instead of join "${joinStepId}"` })
|
|
532
|
+
reportedNoConvergence = true
|
|
533
|
+
}
|
|
534
|
+
return
|
|
535
|
+
}
|
|
536
|
+
if (step.stepType === 'END') {
|
|
537
|
+
if (!reportedNoConvergence) {
|
|
538
|
+
issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork "${fork.stepId}" reaches an END step before join "${joinStepId}"` })
|
|
539
|
+
reportedNoConvergence = true
|
|
540
|
+
}
|
|
541
|
+
return
|
|
542
|
+
}
|
|
543
|
+
if (step.stepType === 'PARALLEL_FORK') {
|
|
544
|
+
if (!reportedNesting) {
|
|
545
|
+
issues.push({ code: 'NESTED_FORK_NOT_SUPPORTED', stepId: fork.stepId, message: `Nested PARALLEL_FORK "${stepId}" inside fork "${fork.stepId}" is not supported` })
|
|
546
|
+
reportedNesting = true
|
|
547
|
+
}
|
|
548
|
+
return
|
|
549
|
+
}
|
|
550
|
+
if (step.stepType === 'PARALLEL_JOIN') {
|
|
551
|
+
// Reached a join that is not this fork's join → it does not converge correctly.
|
|
552
|
+
if (!reportedNoConvergence) {
|
|
553
|
+
issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork "${fork.stepId}" reaches join "${stepId}" instead of its own join "${joinStepId}"` })
|
|
554
|
+
reportedNoConvergence = true
|
|
555
|
+
}
|
|
556
|
+
return
|
|
557
|
+
}
|
|
558
|
+
if (onStack.has(stepId)) {
|
|
559
|
+
if (!reportedCycle) {
|
|
560
|
+
issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork "${fork.stepId}" contains a cycle at step "${stepId}"` })
|
|
561
|
+
reportedCycle = true
|
|
562
|
+
}
|
|
563
|
+
return
|
|
564
|
+
}
|
|
565
|
+
if (fullyExplored.has(stepId)) return
|
|
566
|
+
|
|
567
|
+
const outgoing = outgoingByStep.get(stepId) ?? []
|
|
568
|
+
if (outgoing.length === 0) {
|
|
569
|
+
if (!reportedNoConvergence) {
|
|
570
|
+
issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork "${fork.stepId}" dead-ends at step "${stepId}" without reaching join "${joinStepId}"` })
|
|
571
|
+
reportedNoConvergence = true
|
|
572
|
+
}
|
|
573
|
+
return
|
|
574
|
+
}
|
|
575
|
+
onStack.add(stepId)
|
|
576
|
+
for (const transition of outgoing) visit(transition.toStepId)
|
|
577
|
+
onStack.delete(stepId)
|
|
578
|
+
fullyExplored.add(stepId)
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
for (const branch of autoBranches) visit(branch.toStepId)
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// Any PARALLEL_JOIN not paired with a fork is an orphan.
|
|
585
|
+
for (const join of joinSteps) {
|
|
586
|
+
if (!pairedJoinIds.has(join.stepId)) {
|
|
587
|
+
issues.push({ code: 'UNPAIRED_JOIN', stepId: join.stepId, message: `PARALLEL_JOIN "${join.stepId}" is not paired with any PARALLEL_FORK` })
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
return issues
|
|
592
|
+
}
|
|
593
|
+
|
|
379
594
|
// Workflow definition data (JSONB structure)
|
|
380
595
|
export const workflowDefinitionDataSchema = z.object({
|
|
381
596
|
steps: z.array(workflowStepSchema).min(2, 'Workflow must have at least START and END steps'),
|
|
@@ -384,6 +599,14 @@ export const workflowDefinitionDataSchema = z.object({
|
|
|
384
599
|
queries: z.array(z.any()).optional(), // For Phase 7
|
|
385
600
|
signals: z.array(z.any()).optional(), // For Phase 9
|
|
386
601
|
timers: z.array(z.any()).optional(), // For Phase 9
|
|
602
|
+
}).superRefine((definition, ctx) => {
|
|
603
|
+
for (const issue of validateParallelForkJoin(definition as ForkJoinDefinitionLike)) {
|
|
604
|
+
ctx.addIssue({
|
|
605
|
+
code: 'custom',
|
|
606
|
+
path: ['steps'],
|
|
607
|
+
message: `[${issue.code}] ${issue.message}`,
|
|
608
|
+
})
|
|
609
|
+
}
|
|
387
610
|
})
|
|
388
611
|
|
|
389
612
|
// Workflow metadata
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
import type { AwilixContainer } from 'awilix'
|
|
8
8
|
import { asFunction } from 'awilix'
|
|
9
|
+
import { createGenericOptimisticLockReader } from '@open-mercato/shared/lib/crud/optimistic-lock'
|
|
10
|
+
import { registerOptimisticLockReaders } from '@open-mercato/shared/lib/crud/optimistic-lock-store'
|
|
11
|
+
import { WorkflowDefinition } from './data/entities'
|
|
9
12
|
import * as workflowExecutor from './lib/workflow-executor'
|
|
10
13
|
import * as stepHandler from './lib/step-handler'
|
|
11
14
|
import * as transitionHandler from './lib/transition-handler'
|
|
@@ -14,6 +17,23 @@ import * as eventLogger from './lib/event-logger'
|
|
|
14
17
|
import * as signalHandler from './lib/signal-handler'
|
|
15
18
|
import * as timerHandler from './lib/timer-handler'
|
|
16
19
|
|
|
20
|
+
// Register the `workflows.definition` optimistic-lock reader at module-DI load
|
|
21
|
+
// time (top-level, like sales/customers) so it is present in the global reader
|
|
22
|
+
// store before any request-scoped `crudMutationGuardService` snapshots
|
|
23
|
+
// `getAllOptimisticLockReaders()`. Registering it only as a side-effect of
|
|
24
|
+
// importing the definition route module left it absent from that snapshot, so
|
|
25
|
+
// the guard short-circuited and the visual editor's stale saves overwrote with
|
|
26
|
+
// no 409 and no conflict bar.
|
|
27
|
+
registerOptimisticLockReaders({
|
|
28
|
+
'workflows.definition': createGenericOptimisticLockReader({
|
|
29
|
+
entity: WorkflowDefinition,
|
|
30
|
+
idField: 'id',
|
|
31
|
+
tenantField: 'tenantId',
|
|
32
|
+
orgField: 'organizationId',
|
|
33
|
+
softDeleteField: 'deletedAt',
|
|
34
|
+
}),
|
|
35
|
+
})
|
|
36
|
+
|
|
17
37
|
export function register(container: AwilixContainer): void {
|
|
18
38
|
container.register({
|
|
19
39
|
workflowExecutor: asFunction(() => workflowExecutor).scoped(),
|
|
@@ -35,6 +35,13 @@ const events = [
|
|
|
35
35
|
{ id: 'workflows.trigger.created', label: 'Trigger Created', entity: 'trigger', category: 'crud' },
|
|
36
36
|
{ id: 'workflows.trigger.updated', label: 'Trigger Updated', entity: 'trigger', category: 'crud' },
|
|
37
37
|
{ id: 'workflows.trigger.deleted', label: 'Trigger Deleted', entity: 'trigger', category: 'crud' },
|
|
38
|
+
|
|
39
|
+
// Parallel Fork / Join (branch lifecycle)
|
|
40
|
+
{ id: 'workflows.branch.opened', label: 'Parallel Branch Opened', entity: 'branch', category: 'lifecycle' },
|
|
41
|
+
{ id: 'workflows.branch.completed', label: 'Parallel Branch Completed', entity: 'branch', category: 'lifecycle' },
|
|
42
|
+
{ id: 'workflows.branch.cancelled', label: 'Parallel Branch Cancelled', entity: 'branch', category: 'lifecycle' },
|
|
43
|
+
{ id: 'workflows.branch.failed', label: 'Parallel Branch Failed', entity: 'branch', category: 'lifecycle' },
|
|
44
|
+
{ id: 'workflows.join.completed', label: 'Parallel Join Completed', entity: 'branch', category: 'lifecycle' },
|
|
38
45
|
] as const
|
|
39
46
|
|
|
40
47
|
export const eventsConfig = createModuleEvents({
|
|
@@ -860,6 +860,7 @@
|
|
|
860
860
|
"workflows.messages.instanceStarted": "Workflow-Instanz gestartet",
|
|
861
861
|
"workflows.messages.invalidWorkflow": "Ungültige Workflow-Definition",
|
|
862
862
|
"workflows.messages.loadFailed": "Workflows konnten nicht geladen werden",
|
|
863
|
+
"workflows.messages.saveFailed": "Speichern fehlgeschlagen",
|
|
863
864
|
"workflows.messages.taskAlreadyClaimed": "Aufgabe wurde bereits von einem anderen Benutzer übernommen",
|
|
864
865
|
"workflows.messages.taskClaimed": "Aufgabe erfolgreich übernommen",
|
|
865
866
|
"workflows.messages.taskCompleted": "Aufgabe erfolgreich abgeschlossen",
|
|
@@ -913,6 +914,8 @@
|
|
|
913
914
|
"workflows.nodeTypes.automated": "AUTOMATISIERT",
|
|
914
915
|
"workflows.nodeTypes.decision": "ENTSCHEIDUNG",
|
|
915
916
|
"workflows.nodeTypes.end": "ENDE",
|
|
917
|
+
"workflows.nodeTypes.parallelFork": "Parallele Verzweigung",
|
|
918
|
+
"workflows.nodeTypes.parallelJoin": "Parallele Zusammenführung",
|
|
916
919
|
"workflows.nodeTypes.start": "START",
|
|
917
920
|
"workflows.nodeTypes.subWorkflow": "SUB-WORKFLOW",
|
|
918
921
|
"workflows.nodeTypes.userTask": "BENUTZERAUFGABE",
|
|
@@ -937,6 +940,16 @@
|
|
|
937
940
|
"workflows.orderApproval.requestApproval": "Genehmigung anfordern",
|
|
938
941
|
"workflows.orderApproval.startError": "Genehmigungsworkflow konnte nicht gestartet werden.",
|
|
939
942
|
"workflows.orderApproval.submitDecision": "Entscheidung einreichen",
|
|
943
|
+
"workflows.parallel.branch.label": "Zweig",
|
|
944
|
+
"workflows.parallel.branch.status.ACTIVE": "Aktiv",
|
|
945
|
+
"workflows.parallel.branch.status.CANCELLED": "Abgebrochen",
|
|
946
|
+
"workflows.parallel.branch.status.COMPLETED": "Abgeschlossen",
|
|
947
|
+
"workflows.parallel.branch.status.FAILED": "Fehlgeschlagen",
|
|
948
|
+
"workflows.parallel.branch.status.PAUSED": "Pausiert",
|
|
949
|
+
"workflows.parallel.branch.status.WAITING_FOR_ACTIVITIES": "Warten auf Aktivitäten",
|
|
950
|
+
"workflows.parallel.fork.label": "Parallele Verzweigung",
|
|
951
|
+
"workflows.parallel.join.label": "Parallele Zusammenführung",
|
|
952
|
+
"workflows.parallel.validation.title": "Validierung der parallelen Verzweigung/Zusammenführung fehlgeschlagen",
|
|
940
953
|
"workflows.signals.awaiting": "Wartet auf Signal",
|
|
941
954
|
"workflows.signals.correlationKey": "Korrelationsschlüssel",
|
|
942
955
|
"workflows.signals.payload": "Signal-Nutzlast",
|
|
@@ -860,6 +860,7 @@
|
|
|
860
860
|
"workflows.messages.instanceStarted": "Workflow instance started",
|
|
861
861
|
"workflows.messages.invalidWorkflow": "Invalid workflow definition",
|
|
862
862
|
"workflows.messages.loadFailed": "Failed to load workflows",
|
|
863
|
+
"workflows.messages.saveFailed": "Failed to save",
|
|
863
864
|
"workflows.messages.taskAlreadyClaimed": "Task is already claimed by another user",
|
|
864
865
|
"workflows.messages.taskClaimed": "Task claimed successfully",
|
|
865
866
|
"workflows.messages.taskCompleted": "Task completed successfully",
|
|
@@ -913,6 +914,8 @@
|
|
|
913
914
|
"workflows.nodeTypes.automated": "AUTOMATED",
|
|
914
915
|
"workflows.nodeTypes.decision": "DECISION",
|
|
915
916
|
"workflows.nodeTypes.end": "END",
|
|
917
|
+
"workflows.nodeTypes.parallelFork": "Parallel Fork",
|
|
918
|
+
"workflows.nodeTypes.parallelJoin": "Parallel Join",
|
|
916
919
|
"workflows.nodeTypes.start": "START",
|
|
917
920
|
"workflows.nodeTypes.subWorkflow": "SUB-WORKFLOW",
|
|
918
921
|
"workflows.nodeTypes.userTask": "USER TASK",
|
|
@@ -937,6 +940,16 @@
|
|
|
937
940
|
"workflows.orderApproval.requestApproval": "Request Approval",
|
|
938
941
|
"workflows.orderApproval.startError": "Failed to start approval workflow.",
|
|
939
942
|
"workflows.orderApproval.submitDecision": "Submit Decision",
|
|
943
|
+
"workflows.parallel.branch.label": "Branch",
|
|
944
|
+
"workflows.parallel.branch.status.ACTIVE": "Active",
|
|
945
|
+
"workflows.parallel.branch.status.CANCELLED": "Cancelled",
|
|
946
|
+
"workflows.parallel.branch.status.COMPLETED": "Completed",
|
|
947
|
+
"workflows.parallel.branch.status.FAILED": "Failed",
|
|
948
|
+
"workflows.parallel.branch.status.PAUSED": "Paused",
|
|
949
|
+
"workflows.parallel.branch.status.WAITING_FOR_ACTIVITIES": "Waiting for activities",
|
|
950
|
+
"workflows.parallel.fork.label": "Parallel Fork",
|
|
951
|
+
"workflows.parallel.join.label": "Parallel Join",
|
|
952
|
+
"workflows.parallel.validation.title": "Parallel fork/join validation failed",
|
|
940
953
|
"workflows.signals.awaiting": "Waiting for signal",
|
|
941
954
|
"workflows.signals.correlationKey": "Correlation Key",
|
|
942
955
|
"workflows.signals.payload": "Signal Payload",
|
|
@@ -860,6 +860,7 @@
|
|
|
860
860
|
"workflows.messages.instanceStarted": "Instancia del flujo de trabajo iniciada",
|
|
861
861
|
"workflows.messages.invalidWorkflow": "Definicion de flujo de trabajo no valida",
|
|
862
862
|
"workflows.messages.loadFailed": "No se pudieron cargar los flujos de trabajo",
|
|
863
|
+
"workflows.messages.saveFailed": "Error al guardar",
|
|
863
864
|
"workflows.messages.taskAlreadyClaimed": "La tarea ya ha sido reclamada por otro usuario",
|
|
864
865
|
"workflows.messages.taskClaimed": "Tarea reclamada correctamente",
|
|
865
866
|
"workflows.messages.taskCompleted": "Tarea completada correctamente",
|
|
@@ -913,6 +914,8 @@
|
|
|
913
914
|
"workflows.nodeTypes.automated": "AUTOMATIZADO",
|
|
914
915
|
"workflows.nodeTypes.decision": "DECISIÓN",
|
|
915
916
|
"workflows.nodeTypes.end": "FIN",
|
|
917
|
+
"workflows.nodeTypes.parallelFork": "Bifurcación paralela",
|
|
918
|
+
"workflows.nodeTypes.parallelJoin": "Unión paralela",
|
|
916
919
|
"workflows.nodeTypes.start": "INICIO",
|
|
917
920
|
"workflows.nodeTypes.subWorkflow": "SUBFLUJO DE TRABAJO",
|
|
918
921
|
"workflows.nodeTypes.userTask": "TAREA DE USUARIO",
|
|
@@ -937,6 +940,16 @@
|
|
|
937
940
|
"workflows.orderApproval.requestApproval": "Solicitar aprobación",
|
|
938
941
|
"workflows.orderApproval.startError": "Error al iniciar el flujo de aprobación.",
|
|
939
942
|
"workflows.orderApproval.submitDecision": "Enviar decisión",
|
|
943
|
+
"workflows.parallel.branch.label": "Rama",
|
|
944
|
+
"workflows.parallel.branch.status.ACTIVE": "Activa",
|
|
945
|
+
"workflows.parallel.branch.status.CANCELLED": "Cancelada",
|
|
946
|
+
"workflows.parallel.branch.status.COMPLETED": "Completada",
|
|
947
|
+
"workflows.parallel.branch.status.FAILED": "Fallida",
|
|
948
|
+
"workflows.parallel.branch.status.PAUSED": "En pausa",
|
|
949
|
+
"workflows.parallel.branch.status.WAITING_FOR_ACTIVITIES": "Esperando actividades",
|
|
950
|
+
"workflows.parallel.fork.label": "Bifurcación paralela",
|
|
951
|
+
"workflows.parallel.join.label": "Unión paralela",
|
|
952
|
+
"workflows.parallel.validation.title": "La validación de la bifurcación/unión paralela falló",
|
|
940
953
|
"workflows.signals.awaiting": "Esperando senal",
|
|
941
954
|
"workflows.signals.correlationKey": "Clave de correlacion",
|
|
942
955
|
"workflows.signals.payload": "Carga de la senal",
|
|
@@ -860,6 +860,7 @@
|
|
|
860
860
|
"workflows.messages.instanceStarted": "Instancja przepływu rozpoczęta",
|
|
861
861
|
"workflows.messages.invalidWorkflow": "Nieprawidłowa definicja przepływu",
|
|
862
862
|
"workflows.messages.loadFailed": "Nie udało się załadować przepływów",
|
|
863
|
+
"workflows.messages.saveFailed": "Nie udało się zapisać",
|
|
863
864
|
"workflows.messages.taskAlreadyClaimed": "Zadanie zostało już przejęte przez innego użytkownika",
|
|
864
865
|
"workflows.messages.taskClaimed": "Zadanie przejęte pomyślnie",
|
|
865
866
|
"workflows.messages.taskCompleted": "Zadanie ukończone pomyślnie",
|
|
@@ -913,6 +914,8 @@
|
|
|
913
914
|
"workflows.nodeTypes.automated": "AUTOMATYCZNE",
|
|
914
915
|
"workflows.nodeTypes.decision": "DECYZJA",
|
|
915
916
|
"workflows.nodeTypes.end": "KONIEC",
|
|
917
|
+
"workflows.nodeTypes.parallelFork": "Rozgałęzienie równoległe",
|
|
918
|
+
"workflows.nodeTypes.parallelJoin": "Połączenie równoległe",
|
|
916
919
|
"workflows.nodeTypes.start": "START",
|
|
917
920
|
"workflows.nodeTypes.subWorkflow": "PODPRZEPŁYW",
|
|
918
921
|
"workflows.nodeTypes.userTask": "ZADANIE UŻYTKOWNIKA",
|
|
@@ -937,6 +940,16 @@
|
|
|
937
940
|
"workflows.orderApproval.requestApproval": "Poproś o zatwierdzenie",
|
|
938
941
|
"workflows.orderApproval.startError": "Nie udało się uruchomić przepływu zatwierdzania.",
|
|
939
942
|
"workflows.orderApproval.submitDecision": "Zatwierdź decyzję",
|
|
943
|
+
"workflows.parallel.branch.label": "Gałąź",
|
|
944
|
+
"workflows.parallel.branch.status.ACTIVE": "Aktywna",
|
|
945
|
+
"workflows.parallel.branch.status.CANCELLED": "Anulowana",
|
|
946
|
+
"workflows.parallel.branch.status.COMPLETED": "Zakończona",
|
|
947
|
+
"workflows.parallel.branch.status.FAILED": "Niepowodzenie",
|
|
948
|
+
"workflows.parallel.branch.status.PAUSED": "Wstrzymana",
|
|
949
|
+
"workflows.parallel.branch.status.WAITING_FOR_ACTIVITIES": "Oczekuje na aktywności",
|
|
950
|
+
"workflows.parallel.fork.label": "Rozgałęzienie równoległe",
|
|
951
|
+
"workflows.parallel.join.label": "Połączenie równoległe",
|
|
952
|
+
"workflows.parallel.validation.title": "Walidacja równoległego rozgałęzienia/połączenia nie powiodła się",
|
|
940
953
|
"workflows.signals.awaiting": "Oczekiwanie na sygnał",
|
|
941
954
|
"workflows.signals.correlationKey": "Klucz Korelacji",
|
|
942
955
|
"workflows.signals.payload": "Zawartość Sygnału",
|
|
@@ -80,6 +80,9 @@ export interface ActivityContext {
|
|
|
80
80
|
workflowContext: Record<string, any>
|
|
81
81
|
stepContext?: Record<string, any>
|
|
82
82
|
stepInstanceId?: string
|
|
83
|
+
// Set when the activity runs inside a parallel branch; carried on the queue
|
|
84
|
+
// payload so async resume targets the branch rather than the instance.
|
|
85
|
+
branchInstanceId?: string | null
|
|
83
86
|
transitionId?: string
|
|
84
87
|
userId?: string
|
|
85
88
|
}
|
|
@@ -142,7 +145,7 @@ export async function enqueueActivity(
|
|
|
142
145
|
activity: ActivityDefinition,
|
|
143
146
|
context: ActivityContext
|
|
144
147
|
): Promise<string> {
|
|
145
|
-
const { workflowInstance, workflowContext, stepContext, transitionId, stepInstanceId } =
|
|
148
|
+
const { workflowInstance, workflowContext, stepContext, transitionId, stepInstanceId, branchInstanceId } =
|
|
146
149
|
context
|
|
147
150
|
|
|
148
151
|
// Interpolate config variables NOW (before queuing)
|
|
@@ -152,6 +155,7 @@ export async function enqueueActivity(
|
|
|
152
155
|
const job: WorkflowActivityJob = {
|
|
153
156
|
workflowInstanceId: workflowInstance.id,
|
|
154
157
|
stepInstanceId,
|
|
158
|
+
branchInstanceId: branchInstanceId ?? undefined,
|
|
155
159
|
transitionId,
|
|
156
160
|
activityId: activity.activityId,
|
|
157
161
|
activityName: activity.activityName || activity.activityType,
|
|
@@ -201,13 +205,14 @@ export async function enqueueActivity(
|
|
|
201
205
|
export async function enqueueTimerJob(params: {
|
|
202
206
|
workflowInstanceId: string
|
|
203
207
|
stepInstanceId: string
|
|
208
|
+
branchInstanceId?: string | null
|
|
204
209
|
tenantId: string
|
|
205
210
|
organizationId: string
|
|
206
211
|
userId?: string
|
|
207
212
|
fireAt: string
|
|
208
213
|
delayMs: number
|
|
209
214
|
}): Promise<string> {
|
|
210
|
-
const { workflowInstanceId, stepInstanceId, tenantId, organizationId, userId, fireAt, delayMs } =
|
|
215
|
+
const { workflowInstanceId, stepInstanceId, branchInstanceId, tenantId, organizationId, userId, fireAt, delayMs } =
|
|
211
216
|
params
|
|
212
217
|
|
|
213
218
|
const queue = getActivityQueue()
|
|
@@ -216,6 +221,7 @@ export async function enqueueTimerJob(params: {
|
|
|
216
221
|
kind: 'timer',
|
|
217
222
|
workflowInstanceId,
|
|
218
223
|
stepInstanceId,
|
|
224
|
+
branchInstanceId: branchInstanceId ?? undefined,
|
|
219
225
|
tenantId,
|
|
220
226
|
organizationId,
|
|
221
227
|
userId,
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
export interface WorkflowActivityJobBase {
|
|
11
11
|
workflowInstanceId: string
|
|
12
12
|
stepInstanceId?: string
|
|
13
|
+
// Set when the job belongs to a parallel branch; resume targets that branch.
|
|
14
|
+
// Absent on jobs enqueued before parallel support shipped → instance-level resume.
|
|
15
|
+
branchInstanceId?: string | null
|
|
13
16
|
tenantId: string
|
|
14
17
|
organizationId: string
|
|
15
18
|
userId?: string
|
|
@@ -87,6 +87,7 @@ export type WorkflowEventType = typeof WorkflowEventTypes[keyof typeof WorkflowE
|
|
|
87
87
|
export interface WorkflowEventInput {
|
|
88
88
|
workflowInstanceId: string
|
|
89
89
|
stepInstanceId?: string
|
|
90
|
+
branchInstanceId?: string | null
|
|
90
91
|
eventType: WorkflowEventType | string
|
|
91
92
|
eventData: any
|
|
92
93
|
userId?: string
|
|
@@ -128,6 +129,7 @@ export async function logWorkflowEvent(
|
|
|
128
129
|
const workflowEvent = em.create(WorkflowEvent, {
|
|
129
130
|
workflowInstanceId: event.workflowInstanceId,
|
|
130
131
|
stepInstanceId: event.stepInstanceId || null,
|
|
132
|
+
branchInstanceId: event.branchInstanceId ?? null,
|
|
131
133
|
eventType: event.eventType,
|
|
132
134
|
eventData: event.eventData || {},
|
|
133
135
|
userId: event.userId || null,
|
|
@@ -156,6 +158,7 @@ export async function logWorkflowEvents(
|
|
|
156
158
|
em.create(WorkflowEvent, {
|
|
157
159
|
workflowInstanceId: event.workflowInstanceId,
|
|
158
160
|
stepInstanceId: event.stepInstanceId || null,
|
|
161
|
+
branchInstanceId: event.branchInstanceId ?? null,
|
|
159
162
|
eventType: event.eventType,
|
|
160
163
|
eventData: event.eventData || {},
|
|
161
164
|
userId: event.userId || null,
|