@open-mercato/core 0.7.0 → 0.7.1-develop.7103.1.41ff100d93
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 +1 -1
- package/dist/helpers/integration/api.js +13 -1
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +19 -0
- package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
- package/dist/modules/api_keys/api/keys/route.js +1 -1
- package/dist/modules/api_keys/api/keys/route.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +3 -1
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/api_keys/di.js +9 -0
- package/dist/modules/api_keys/di.js.map +7 -0
- package/dist/modules/api_keys/services/principalService.js +31 -0
- package/dist/modules/api_keys/services/principalService.js.map +7 -0
- package/dist/modules/attachments/api/route.js +2 -2
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js +2 -0
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/di.js +11 -1
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/index.js.map +1 -1
- package/dist/modules/attachments/lib/attachment-service.js +313 -0
- package/dist/modules/attachments/lib/attachment-service.js.map +7 -0
- package/dist/modules/attachments/lib/scoped-upload-service.js +15 -2
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +6 -2
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +6 -0
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +19 -11
- package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +57 -12
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/acl.js +30 -5
- package/dist/modules/auth/acl.js.map +2 -2
- package/dist/modules/auth/api/feature-check.js +8 -2
- package/dist/modules/auth/api/feature-check.js.map +2 -2
- package/dist/modules/auth/api/login.js +4 -1
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/reset/validate.js +55 -0
- package/dist/modules/auth/api/reset/validate.js.map +7 -0
- package/dist/modules/auth/api/roles/acl/route.js +28 -33
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/session/refresh.js +25 -1
- package/dist/modules/auth/api/session/refresh.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +96 -51
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +13 -5
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +5 -1
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +3 -1
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +5 -1
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +2 -1
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/commands/acl.js +254 -0
- package/dist/modules/auth/commands/acl.js.map +7 -0
- package/dist/modules/auth/components/AclEditor.js +39 -30
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/data/validators.js +5 -1
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/di.js +35 -9
- package/dist/modules/auth/di.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +46 -0
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/grantChecks.js.map +2 -2
- package/dist/modules/auth/lib/userIdFilter.js +16 -0
- package/dist/modules/auth/lib/userIdFilter.js.map +7 -0
- package/dist/modules/auth/services/authService.js +16 -2
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/principalService.js +200 -0
- package/dist/modules/auth/services/principalService.js.map +7 -0
- package/dist/modules/auth/services/rbacService.js +67 -24
- package/dist/modules/auth/services/rbacService.js.map +3 -3
- package/dist/modules/auth/services/roleOrganizationScope.js +41 -0
- package/dist/modules/auth/services/roleOrganizationScope.js.map +7 -0
- package/dist/modules/business_rules/backend/logs/page.js +3 -1
- package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +3 -1
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +3 -1
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
- package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-evaluator.js +10 -9
- package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
- package/dist/modules/catalog/ai-agents.js +1 -1
- package/dist/modules/catalog/ai-agents.js.map +1 -1
- package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
- package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +5 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -0
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +7 -1
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +2 -0
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +9 -1
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +95 -10
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +3 -0
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +14 -1
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/di.js +7 -1
- package/dist/modules/communication_channels/di.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-capabilities.js +4 -1
- package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
- package/dist/modules/communication_channels/lib/outbound-recipient.js +33 -0
- package/dist/modules/communication_channels/lib/outbound-recipient.js.map +7 -0
- package/dist/modules/communication_channels/lib/resolve-channel-type.js +51 -0
- package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +7 -0
- package/dist/modules/communication_channels/lib/test-seed.js +41 -2
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +9 -0
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +3 -1
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +3 -1
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/currencies/services/rateFetchingService.js +6 -1
- package/dist/modules/currencies/services/rateFetchingService.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js +9 -0
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +2 -2
- package/dist/modules/customer_accounts/services/domainMappingService.js +10 -0
- package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
- package/dist/modules/customers/ai-tools/companies-pack.js +4 -1
- package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +13 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deals-pack.js +52 -6
- package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/people-pack.js +4 -1
- package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +48 -6
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +20 -64
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +17 -94
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +8 -5
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/route.js +8 -25
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +3 -22
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +14 -9
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +5 -5
- package/dist/modules/customers/api/deals/map/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +38 -1
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +4 -4
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/interactions/route.js +3 -1
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +27 -4
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +4 -3
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/route.js +11 -10
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/check-phone/route.js +51 -9
- package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +30 -5
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +4 -2
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +6 -1
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +5 -2
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +4 -13
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +85 -14
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +18 -0
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +7 -0
- package/dist/modules/customers/backend/customers/people/page.js +4 -2
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +9 -3
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +21 -34
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js.map +1 -1
- package/dist/modules/customers/commands/personCompanyLinks.js +131 -2
- package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +1 -0
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/components/DealsKpiStrip.js +7 -6
- package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
- package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js +3 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/PeopleField.js +40 -5
- package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js +2 -1
- package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
- package/dist/modules/customers/components/calendar/types.js +1 -1
- package/dist/modules/customers/components/calendar/types.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +5 -4
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +3 -1
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +19 -7
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +6 -5
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +35 -11
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +3 -1
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +19 -13
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +5 -5
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/data/entities.js.map +1 -1
- package/dist/modules/customers/data/validators.js +32 -3
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +5 -0
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/calendar/conflicts.js +8 -2
- package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js +3 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
- package/dist/modules/customers/lib/calendar/mapItem.js +8 -3
- package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
- package/dist/modules/customers/lib/calendar/participantIdentity.js +9 -0
- package/dist/modules/customers/lib/calendar/participantIdentity.js.map +7 -0
- package/dist/modules/customers/lib/closureStage.js +45 -0
- package/dist/modules/customers/lib/closureStage.js.map +7 -0
- package/dist/modules/customers/lib/dealStatus.js +30 -0
- package/dist/modules/customers/lib/dealStatus.js.map +2 -2
- package/dist/modules/customers/lib/detailReadAccess.js +12 -0
- package/dist/modules/customers/lib/detailReadAccess.js.map +7 -0
- package/dist/modules/customers/lib/findPeopleByAddresses.js +1 -0
- package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +100 -2
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +12 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/lib/widgetScope.js +6 -1
- package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +3 -1
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/abandoned-run.js +19 -0
- package/dist/modules/data_sync/lib/abandoned-run.js.map +7 -0
- package/dist/modules/data_sync/lib/sync-engine.js +72 -6
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +5 -1
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +5 -1
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/devices/acl.js +9 -1
- package/dist/modules/devices/acl.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/[id]/route.js +5 -32
- package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/route.js +14 -1
- package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
- package/dist/modules/devices/api/deviceList.js +99 -12
- package/dist/modules/devices/api/deviceList.js.map +2 -2
- package/dist/modules/devices/api/deviceSerialization.js +46 -0
- package/dist/modules/devices/api/deviceSerialization.js.map +7 -0
- package/dist/modules/devices/api/openapi.js +3 -1
- package/dist/modules/devices/api/openapi.js.map +2 -2
- package/dist/modules/devices/api/route.js +9 -1
- package/dist/modules/devices/api/route.js.map +2 -2
- package/dist/modules/devices/backend/devices/[id]/page.js +10 -26
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/create/page.js +17 -1
- package/dist/modules/devices/backend/devices/create/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +28 -34
- package/dist/modules/devices/backend/devices/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js +34 -0
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js.map +7 -0
- package/dist/modules/devices/backend/devices/userOptions.js +52 -0
- package/dist/modules/devices/backend/devices/userOptions.js.map +7 -0
- package/dist/modules/devices/setup.js +6 -2
- package/dist/modules/devices/setup.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +2 -1
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +2 -1
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/di.js +9 -0
- package/dist/modules/directory/di.js.map +2 -2
- package/dist/modules/directory/services/organizationHierarchyService.js +29 -0
- package/dist/modules/directory/services/organizationHierarchyService.js.map +7 -0
- package/dist/modules/directory/services/organizationScopeService.js +56 -0
- package/dist/modules/directory/services/organizationScopeService.js.map +7 -0
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/records.js +4 -2
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +3 -1
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/eudr/api/plots/route.js +5 -1
- package/dist/modules/eudr/api/plots/route.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +0 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/data/validators.js +4 -1
- package/dist/modules/eudr/data/validators.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +1 -0
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +1 -0
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/feature_toggles/defaults.json +0 -8
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +3 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js +3 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js +1 -12
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +6 -1
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +38 -29
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +36 -9
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +55 -0
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +7 -0
- package/dist/modules/integrations/data/validators.js +11 -3
- package/dist/modules/integrations/data/validators.js.map +2 -2
- package/dist/modules/integrations/lib/credentials-masking.js +6 -2
- package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +29 -1
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/openapi.js +17 -2
- package/dist/modules/messages/api/openapi.js.map +2 -2
- package/dist/modules/messages/api/route.js +17 -2
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +7 -14
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/inboxFilters.js +15 -0
- package/dist/modules/messages/components/inboxFilters.js.map +2 -2
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +11 -1
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +3 -1
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +2 -1
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
- package/dist/modules/messages/components/messageListLabels.js +14 -2
- package/dist/modules/messages/components/messageListLabels.js.map +2 -2
- package/dist/modules/messages/data/validators.js +18 -4
- package/dist/modules/messages/data/validators.js.map +2 -2
- package/dist/modules/messages/lib/channel-sender-identity.js +26 -0
- package/dist/modules/messages/lib/channel-sender-identity.js.map +7 -0
- package/dist/modules/messages/lib/composeSourceChannelType.js +41 -0
- package/dist/modules/messages/lib/composeSourceChannelType.js.map +7 -0
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +4 -6
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +3 -1
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/lib/webhook-processor.js +7 -0
- package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +3 -0
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/page.js +3 -1
- package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +150 -51
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/search-entity-policy.js +14 -0
- package/dist/modules/query_index/lib/search-entity-policy.js.map +7 -0
- package/dist/modules/query_index/lib/search-tokens.js +79 -3
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +3 -1
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +3 -1
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +3 -0
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +3 -0
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +10 -8
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +79 -1
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/PriceWithCurrency.js +7 -5
- package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +3 -0
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +8 -6
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +51 -22
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +83 -18
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +23 -9
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +8 -6
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +68 -14
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +6 -5
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +5 -4
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +8 -6
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js +54 -0
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +7 -0
- package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
- package/dist/modules/sales/data/entities.js +8 -2
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/extension-points.js +1 -0
- package/dist/modules/sales/extension-points.js.map +2 -2
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js +33 -0
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +7 -0
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +32 -0
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +7 -0
- package/dist/modules/sales/setup.js +2 -0
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +10 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +4 -7
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/page.js +3 -0
- package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js +3 -0
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +3 -0
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +3 -0
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +3 -0
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +3 -0
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +29 -18
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +3 -0
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/sync_excel/lib/adapters/customers.js +1 -0
- package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
- package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
- package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/claims/route.js +12 -9
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
- package/dist/modules/warranty_claims/backend/page.js +3 -0
- package/dist/modules/warranty_claims/backend/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +3 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +3 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +3 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +3 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
- package/dist/modules/wms/api/warehouseSearch.js +21 -0
- package/dist/modules/wms/api/warehouseSearch.js.map +7 -0
- package/dist/modules/wms/api/warehouses/route.js +13 -9
- package/dist/modules/wms/api/warehouses/route.js.map +2 -2
- package/dist/modules/wms/api/zones/route.js +15 -2
- package/dist/modules/wms/api/zones/route.js.map +2 -2
- package/dist/modules/wms/commands/configuration.js +121 -9
- package/dist/modules/wms/commands/configuration.js.map +2 -2
- package/dist/modules/wms/commands/inventory-actions.js +3 -0
- package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
- package/dist/modules/wms/commands/shared.js +9 -1
- package/dist/modules/wms/commands/shared.js.map +2 -2
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js +158 -0
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +7 -0
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +76 -111
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +1 -0
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +1 -0
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +27 -20
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
- package/dist/modules/wms/components/backend/warehouseFormOptions.js +66 -0
- package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/page.js +3 -1
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/page.js +3 -1
- package/dist/modules/workflows/backend/events/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +3 -1
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +3 -1
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +4 -0
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/package.json +9 -10
- package/src/helpers/integration/api.ts +33 -1
- package/src/helpers/integration/communicationChannelsFixtures.ts +69 -1
- package/src/modules/api_keys/api/keys/route.ts +3 -1
- package/src/modules/api_keys/backend/api-keys/page.tsx +4 -1
- package/src/modules/api_keys/di.ts +7 -0
- package/src/modules/api_keys/services/principalService.ts +33 -0
- package/src/modules/attachments/AGENTS.md +15 -0
- package/src/modules/attachments/api/route.ts +2 -2
- package/src/modules/attachments/components/AttachmentLibrary.tsx +3 -0
- package/src/modules/attachments/di.ts +16 -0
- package/src/modules/attachments/i18n/de.json +5 -0
- package/src/modules/attachments/i18n/en.json +5 -0
- package/src/modules/attachments/i18n/es.json +5 -0
- package/src/modules/attachments/i18n/ko.json +5 -0
- package/src/modules/attachments/i18n/pl.json +5 -0
- package/src/modules/attachments/index.ts +10 -0
- package/src/modules/attachments/lib/attachment-service.ts +468 -0
- package/src/modules/attachments/lib/scoped-upload-service.ts +46 -0
- package/src/modules/attachments/lib/upload-limits.ts +6 -2
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +8 -0
- package/src/modules/audit_logs/lib/display-helpers.tsx +42 -32
- package/src/modules/audit_logs/services/actionLogService.ts +74 -11
- package/src/modules/auth/acl.ts +30 -6
- package/src/modules/auth/api/feature-check.ts +10 -3
- package/src/modules/auth/api/login.ts +9 -1
- package/src/modules/auth/api/reset/validate.ts +57 -0
- package/src/modules/auth/api/roles/acl/route.ts +42 -39
- package/src/modules/auth/api/session/refresh.ts +32 -1
- package/src/modules/auth/api/users/acl/route.ts +177 -53
- package/src/modules/auth/api/users/route.ts +18 -5
- package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +5 -2
- package/src/modules/auth/backend/roles/page.tsx +4 -2
- package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +5 -2
- package/src/modules/auth/backend/users/page.tsx +3 -2
- package/src/modules/auth/commands/acl.ts +495 -0
- package/src/modules/auth/components/AclEditor.tsx +63 -33
- package/src/modules/auth/data/entities.ts +4 -1
- package/src/modules/auth/data/validators.ts +5 -0
- package/src/modules/auth/di.ts +46 -16
- package/src/modules/auth/frontend/reset/[token]/page.tsx +74 -0
- package/src/modules/auth/i18n/de.json +389 -0
- package/src/modules/auth/i18n/en.json +389 -0
- package/src/modules/auth/i18n/es.json +389 -0
- package/src/modules/auth/i18n/ko.json +389 -0
- package/src/modules/auth/i18n/pl.json +391 -2
- package/src/modules/auth/lib/grantChecks.ts +6 -0
- package/src/modules/auth/lib/userIdFilter.ts +31 -0
- package/src/modules/auth/services/authService.ts +18 -2
- package/src/modules/auth/services/principalService.ts +266 -0
- package/src/modules/auth/services/rbacService.ts +110 -24
- package/src/modules/auth/services/roleOrganizationScope.ts +70 -0
- package/src/modules/business_rules/backend/logs/page.tsx +4 -1
- package/src/modules/business_rules/backend/rules/page.tsx +4 -1
- package/src/modules/business_rules/backend/sets/page.tsx +4 -1
- package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
- package/src/modules/business_rules/lib/rule-evaluator.ts +10 -9
- package/src/modules/catalog/ai-agents.ts +1 -1
- package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
- package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +12 -5
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +3 -0
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +7 -0
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/ko.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +4 -0
- package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +17 -1
- package/src/modules/communication_channels/api/post/test-seed/route.ts +155 -16
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +4 -0
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +38 -1
- package/src/modules/communication_channels/di.ts +7 -0
- package/src/modules/communication_channels/lib/adapter.ts +14 -0
- package/src/modules/communication_channels/lib/email-capabilities.ts +4 -0
- package/src/modules/communication_channels/lib/outbound-recipient.ts +71 -0
- package/src/modules/communication_channels/lib/resolve-channel-type.ts +99 -0
- package/src/modules/communication_channels/lib/test-seed.ts +64 -4
- package/src/modules/configs/i18n/de.json +2 -0
- package/src/modules/configs/i18n/en.json +2 -0
- package/src/modules/configs/i18n/es.json +2 -0
- package/src/modules/configs/i18n/ko.json +2 -0
- package/src/modules/configs/i18n/pl.json +2 -0
- package/src/modules/configs/lib/system-status.ts +9 -0
- package/src/modules/currencies/AGENTS.md +3 -0
- package/src/modules/currencies/backend/currencies/page.tsx +4 -1
- package/src/modules/currencies/backend/exchange-rates/page.tsx +4 -1
- package/src/modules/currencies/services/README.md +45 -0
- package/src/modules/currencies/services/rateFetchingService.ts +6 -1
- package/src/modules/customer_accounts/api/admin/domain-mappings.ts +7 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +4 -1
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +4 -1
- package/src/modules/customer_accounts/services/domainMappingService.ts +10 -0
- package/src/modules/customers/ai-tools/companies-pack.ts +4 -1
- package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +17 -2
- package/src/modules/customers/ai-tools/deals-pack.ts +66 -1
- package/src/modules/customers/ai-tools/people-pack.ts +4 -1
- package/src/modules/customers/api/activities/route.ts +45 -0
- package/src/modules/customers/api/companies/[id]/people/route.ts +24 -73
- package/src/modules/customers/api/companies/[id]/route.ts +24 -107
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +16 -8
- package/src/modules/customers/api/deals/[id]/companies/route.ts +4 -1
- package/src/modules/customers/api/deals/[id]/people/route.ts +4 -1
- package/src/modules/customers/api/deals/[id]/route.ts +17 -28
- package/src/modules/customers/api/deals/[id]/stats/route.ts +10 -25
- package/src/modules/customers/api/deals/aggregate/route.ts +17 -9
- package/src/modules/customers/api/deals/map/route.ts +4 -4
- package/src/modules/customers/api/deals/route.ts +50 -1
- package/src/modules/customers/api/entity-roles-factory.ts +8 -4
- package/src/modules/customers/api/interactions/route.ts +8 -2
- package/src/modules/customers/api/interactions/tasks/route.ts +24 -1
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +12 -4
- package/src/modules/customers/api/people/[id]/companies/context.ts +4 -1
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +4 -1
- package/src/modules/customers/api/people/[id]/route.ts +16 -11
- package/src/modules/customers/api/people/check-phone/route.ts +75 -10
- package/src/modules/customers/api/todos/route.ts +27 -2
- package/src/modules/customers/backend/customers/companies/page.tsx +5 -2
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +7 -2
- package/src/modules/customers/backend/customers/deals/page.tsx +8 -2
- package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +5 -14
- package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +109 -27
- package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +21 -0
- package/src/modules/customers/backend/customers/people/page.tsx +5 -2
- package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +12 -4
- package/src/modules/customers/commands/deals.ts +34 -59
- package/src/modules/customers/commands/interactions.ts +1 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +224 -8
- package/src/modules/customers/components/CustomerTodosTable.tsx +2 -0
- package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
- package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
- package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
- package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
- package/src/modules/customers/components/calendar/EventPeekPopover.tsx +4 -2
- package/src/modules/customers/components/calendar/editor/PeopleField.tsx +61 -5
- package/src/modules/customers/components/calendar/editor/hooks.ts +7 -1
- package/src/modules/customers/components/calendar/types.ts +2 -2
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +5 -4
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +8 -1
- package/src/modules/customers/components/detail/DealForm.tsx +22 -2
- package/src/modules/customers/components/detail/DealsSection.tsx +11 -5
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +58 -12
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +8 -1
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +23 -14
- package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
- package/src/modules/customers/components/detail/types.ts +1 -1
- package/src/modules/customers/components/detail/utils.ts +15 -5
- package/src/modules/customers/data/entities.ts +1 -1
- package/src/modules/customers/data/validators.ts +50 -9
- package/src/modules/customers/events.ts +5 -0
- package/src/modules/customers/i18n/de.json +9 -1
- package/src/modules/customers/i18n/en.json +9 -1
- package/src/modules/customers/i18n/es.json +9 -1
- package/src/modules/customers/i18n/ko.json +9 -1
- package/src/modules/customers/i18n/pl.json +9 -1
- package/src/modules/customers/lib/calendar/conflicts.ts +10 -2
- package/src/modules/customers/lib/calendar/editorPayload.ts +4 -3
- package/src/modules/customers/lib/calendar/mapItem.ts +8 -3
- package/src/modules/customers/lib/calendar/participantIdentity.ts +17 -0
- package/src/modules/customers/lib/closureStage.ts +76 -0
- package/src/modules/customers/lib/dealStatus.ts +42 -0
- package/src/modules/customers/lib/detailReadAccess.ts +35 -0
- package/src/modules/customers/lib/findPeopleByAddresses.ts +8 -6
- package/src/modules/customers/lib/personCompanies.ts +136 -1
- package/src/modules/customers/lib/todoCompatibility.ts +19 -1
- package/src/modules/dashboards/i18n/es.json +4 -4
- package/src/modules/dashboards/i18n/pl.json +7 -7
- package/src/modules/dashboards/lib/widgetScope.ts +6 -0
- package/src/modules/data_sync/AGENTS.md +1 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +4 -1
- package/src/modules/data_sync/lib/abandoned-run.ts +56 -0
- package/src/modules/data_sync/lib/adapter.ts +36 -0
- package/src/modules/data_sync/lib/sync-engine.ts +113 -5
- package/src/modules/data_sync/workers/sync-export.ts +4 -0
- package/src/modules/data_sync/workers/sync-import.ts +4 -0
- package/src/modules/devices/AGENTS.md +20 -1
- package/src/modules/devices/acl.ts +9 -1
- package/src/modules/devices/api/admin/devices/[id]/route.ts +5 -34
- package/src/modules/devices/api/admin/devices/route.ts +14 -1
- package/src/modules/devices/api/deviceList.ts +135 -11
- package/src/modules/devices/api/deviceSerialization.ts +50 -0
- package/src/modules/devices/api/openapi.ts +9 -1
- package/src/modules/devices/api/route.ts +9 -1
- package/src/modules/devices/backend/devices/[id]/page.tsx +18 -32
- package/src/modules/devices/backend/devices/create/page.tsx +17 -1
- package/src/modules/devices/backend/devices/page.tsx +44 -45
- package/src/modules/devices/backend/devices/useDeviceUserLabels.ts +45 -0
- package/src/modules/devices/backend/devices/userOptions.ts +99 -0
- package/src/modules/devices/i18n/de.json +3 -2
- package/src/modules/devices/i18n/en.json +3 -2
- package/src/modules/devices/i18n/es.json +3 -2
- package/src/modules/devices/i18n/ko.json +3 -2
- package/src/modules/devices/i18n/pl.json +3 -2
- package/src/modules/devices/setup.ts +6 -2
- package/src/modules/directory/backend/directory/organizations/page.tsx +3 -1
- package/src/modules/directory/backend/directory/tenants/page.tsx +3 -1
- package/src/modules/directory/di.ts +14 -2
- package/src/modules/directory/services/organizationHierarchyService.ts +34 -0
- package/src/modules/directory/services/organizationScopeService.ts +85 -0
- package/src/modules/directory/utils/organizationScope.ts +4 -15
- package/src/modules/entities/api/records.ts +2 -0
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +4 -1
- package/src/modules/eudr/api/plots/route.ts +4 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/plots/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/statements/page.tsx +4 -0
- package/src/modules/eudr/commands/statements.ts +0 -3
- package/src/modules/eudr/data/validators.ts +16 -1
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +2 -1
- package/src/modules/feature_toggles/components/OverridesTable.tsx +2 -1
- package/src/modules/feature_toggles/defaults.json +0 -8
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +4 -0
- package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +4 -0
- package/src/modules/inbox_ops/lib/htmlToPlainText.ts +1 -17
- package/src/modules/integrations/api/[id]/credentials/route.ts +6 -4
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +61 -31
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +44 -9
- package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +84 -0
- package/src/modules/integrations/data/validators.ts +12 -2
- package/src/modules/integrations/i18n/de.json +1 -0
- package/src/modules/integrations/i18n/en.json +1 -0
- package/src/modules/integrations/i18n/es.json +1 -0
- package/src/modules/integrations/i18n/ko.json +1 -0
- package/src/modules/integrations/i18n/pl.json +1 -0
- package/src/modules/integrations/lib/credentials-masking.ts +10 -6
- package/src/modules/messages/api/[id]/route.ts +55 -1
- package/src/modules/messages/api/openapi.ts +20 -0
- package/src/modules/messages/api/route.ts +31 -2
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +9 -16
- package/src/modules/messages/components/inboxFilters.ts +36 -0
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +14 -1
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +3 -1
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +2 -1
- package/src/modules/messages/components/message-detail/types.ts +3 -0
- package/src/modules/messages/components/messageListLabels.ts +52 -3
- package/src/modules/messages/data/validators.ts +43 -4
- package/src/modules/messages/lib/channel-sender-identity.ts +55 -0
- package/src/modules/messages/lib/composeSourceChannelType.ts +95 -0
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +4 -6
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +4 -1
- package/src/modules/payment_gateways/lib/webhook-processor.ts +11 -0
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +4 -0
- package/src/modules/push_notifications/backend/push_notifications/page.tsx +4 -1
- package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
- package/src/modules/query_index/lib/engine.ts +249 -61
- package/src/modules/query_index/lib/search-entity-policy.ts +46 -0
- package/src/modules/query_index/lib/search-tokens.ts +135 -3
- package/src/modules/resources/backend/resources/resource-types/page.tsx +4 -1
- package/src/modules/resources/backend/resources/resources/page.tsx +4 -1
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +4 -0
- package/src/modules/sales/backend/sales/channels/page.tsx +4 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +14 -8
- package/src/modules/sales/commands/documents.ts +93 -0
- package/src/modules/sales/components/PriceWithCurrency.tsx +17 -5
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +4 -0
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +6 -5
- package/src/modules/sales/components/documents/ItemsSection.tsx +56 -18
- package/src/modules/sales/components/documents/LineItemDialog.tsx +137 -20
- package/src/modules/sales/components/documents/PaymentsSection.tsx +20 -9
- package/src/modules/sales/components/documents/ReturnsSection.tsx +6 -5
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +106 -14
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +6 -5
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +5 -4
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +6 -5
- package/src/modules/sales/components/documents/lineItemShipmentLock.ts +74 -0
- package/src/modules/sales/components/documents/lineItemUtils.ts +7 -2
- package/src/modules/sales/data/entities.ts +6 -0
- package/src/modules/sales/extension-points.ts +1 -0
- package/src/modules/sales/i18n/de.json +8 -0
- package/src/modules/sales/i18n/en.json +8 -0
- package/src/modules/sales/i18n/es.json +8 -0
- package/src/modules/sales/i18n/ko.json +8 -0
- package/src/modules/sales/i18n/pl.json +8 -0
- package/src/modules/sales/lib/salesChannelsToggleSeed.ts +42 -0
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +60 -0
- package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +87 -0
- package/src/modules/sales/setup.ts +2 -0
- package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +9 -1
- package/src/modules/sales/widgets/injection-table.ts +4 -7
- package/src/modules/staff/backend/staff/leave-requests/page.tsx +4 -0
- package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +4 -0
- package/src/modules/staff/backend/staff/team-members/page.tsx +6 -0
- package/src/modules/staff/backend/staff/team-roles/page.tsx +4 -0
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +4 -0
- package/src/modules/staff/backend/staff/teams/page.tsx +4 -0
- package/src/modules/staff/backend/staff/timesheets/page.tsx +12 -1
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +4 -0
- package/src/modules/sync_excel/lib/adapters/customers.ts +5 -0
- package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
- package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
- package/src/modules/warranty_claims/api/portal/claims/route.ts +12 -9
- package/src/modules/warranty_claims/backend/page.tsx +4 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +4 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +4 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +4 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +4 -0
- package/src/modules/wms/api/warehouseSearch.ts +23 -0
- package/src/modules/wms/api/warehouses/route.ts +13 -9
- package/src/modules/wms/api/zones/route.ts +16 -0
- package/src/modules/wms/commands/configuration.ts +159 -10
- package/src/modules/wms/commands/inventory-actions.ts +3 -0
- package/src/modules/wms/commands/shared.ts +17 -0
- package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +216 -0
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +95 -141
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +2 -0
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +2 -0
- package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +36 -20
- package/src/modules/wms/components/backend/warehouseFormOptions.ts +72 -0
- package/src/modules/wms/i18n/de.json +2 -0
- package/src/modules/wms/i18n/en.json +2 -0
- package/src/modules/wms/i18n/es.json +2 -0
- package/src/modules/wms/i18n/ko.json +2 -0
- package/src/modules/wms/i18n/pl.json +2 -0
- package/src/modules/workflows/backend/definitions/page.tsx +4 -1
- package/src/modules/workflows/backend/events/page.tsx +4 -1
- package/src/modules/workflows/backend/instances/page.tsx +4 -1
- package/src/modules/workflows/backend/tasks/page.tsx +4 -1
- package/src/modules/workflows/lib/activity-executor.ts +9 -0
|
@@ -1016,6 +1016,7 @@
|
|
|
1016
1016
|
"sales.documents.items.errorProductRequired": "Selecciona un producto para continuar.",
|
|
1017
1017
|
"sales.documents.items.errorQuantity": "La cantidad debe ser mayor que 0.",
|
|
1018
1018
|
"sales.documents.items.errorQuantityBelowShipped": "No puedes reducir la cantidad por debajo de las {{shipped}} ya enviadas.",
|
|
1019
|
+
"sales.documents.items.errorQuantityShipmentsUnknown": "La cantidad no se puede reducir hasta que se carguen los envíos de este pedido. Vuelve a abrir el pedido para intentarlo de nuevo.",
|
|
1019
1020
|
"sales.documents.items.errorSave": "No se pudo guardar la línea.",
|
|
1020
1021
|
"sales.documents.items.errorScope": "Se requieren organización e inquilino.",
|
|
1021
1022
|
"sales.documents.items.errorUnitPrice": "El precio unitario debe ser mayor que 0.",
|
|
@@ -1059,6 +1060,8 @@
|
|
|
1059
1060
|
"sales.documents.items.save": "Guardar cambios",
|
|
1060
1061
|
"sales.documents.items.selectedProduct": "Seleccionado {{id}}",
|
|
1061
1062
|
"sales.documents.items.selectedVariant": "Seleccionado {{id}}",
|
|
1063
|
+
"sales.documents.items.shippedLineLockPending": "Los precios están bloqueados hasta que se carguen los envíos de este pedido. Vuelve a abrir el pedido para intentarlo de nuevo — todavía puedes editar el nombre y aumentar la cantidad.",
|
|
1064
|
+
"sales.documents.items.shippedLineLocked": "Los precios de esta línea están bloqueados porque ya tiene envíos. Todavía puedes editar el nombre y la cantidad.",
|
|
1062
1065
|
"sales.documents.items.status": "Estado",
|
|
1063
1066
|
"sales.documents.items.statusEmpty": "Sin estado",
|
|
1064
1067
|
"sales.documents.items.statusLoading": "Cargando estados…",
|
|
@@ -1093,6 +1096,8 @@
|
|
|
1093
1096
|
"sales.documents.items.variantSearch": "Buscar variante",
|
|
1094
1097
|
"sales.documents.list.errors.load": "No se pudieron cargar los documentos.",
|
|
1095
1098
|
"sales.documents.list.filters.channel": "Canal",
|
|
1099
|
+
"sales.documents.list.filters.channelPlaceholder": "Buscar canales",
|
|
1100
|
+
"sales.documents.list.filters.channelUnassigned": "(Sin canal)",
|
|
1096
1101
|
"sales.documents.list.filters.customer": "ID de cliente",
|
|
1097
1102
|
"sales.documents.list.filters.customerPlaceholder": "ID de cliente",
|
|
1098
1103
|
"sales.documents.list.filters.date": "Fecha",
|
|
@@ -1321,13 +1326,16 @@
|
|
|
1321
1326
|
"sales.quotes.email.subject": "Cotización {quoteNumber}",
|
|
1322
1327
|
"sales.quotes.email.total": "Total: {amount} {currency}",
|
|
1323
1328
|
"sales.quotes.email.validUntil": "Válida hasta: {date}",
|
|
1329
|
+
"sales.quotes.exchange_rate_unsupported": "El tipo de cambio no está disponible en los presupuestos.",
|
|
1324
1330
|
"sales.quotes.form.general": "General",
|
|
1325
1331
|
"sales.quotes.form.lines": "Líneas",
|
|
1326
1332
|
"sales.quotes.form.notes": "Notas",
|
|
1333
|
+
"sales.quotes.fulfillment_status_unsupported": "El estado de cumplimiento no está disponible en los presupuestos.",
|
|
1327
1334
|
"sales.quotes.internal_notes_unsupported": "Las notas internas no están disponibles en los presupuestos.",
|
|
1328
1335
|
"sales.quotes.lines.delete": "Eliminar línea de cotización",
|
|
1329
1336
|
"sales.quotes.lines.upsert": "Actualizar línea de cotización",
|
|
1330
1337
|
"sales.quotes.list.title": "Cotizaciones",
|
|
1338
|
+
"sales.quotes.payment_status_unsupported": "El estado de pago no está disponible en los presupuestos.",
|
|
1331
1339
|
"sales.quotes.public.acceptButton": "Aceptar cotización",
|
|
1332
1340
|
"sales.quotes.public.acceptFailed": "No se pudo aceptar la cotización.",
|
|
1333
1341
|
"sales.quotes.public.acceptedMessage": "Pedido creado: {{orderNumber}}",
|
|
@@ -1016,6 +1016,7 @@
|
|
|
1016
1016
|
"sales.documents.items.errorProductRequired": "계속하려면 상품을 선택하세요.",
|
|
1017
1017
|
"sales.documents.items.errorQuantity": "수량은 0보다 커야 합니다.",
|
|
1018
1018
|
"sales.documents.items.errorQuantityBelowShipped": "이미 배송된 {{shipped}} 이하로 수량을 줄일 수 없습니다.",
|
|
1019
|
+
"sales.documents.items.errorQuantityShipmentsUnknown": "이 주문의 배송 정보를 불러올 때까지 수량을 줄일 수 없습니다. 주문을 다시 열어 재시도하세요.",
|
|
1019
1020
|
"sales.documents.items.errorSave": "품목을 저장하지 못했습니다.",
|
|
1020
1021
|
"sales.documents.items.errorScope": "조직 및 테넌트 정보가 필요합니다.",
|
|
1021
1022
|
"sales.documents.items.errorUnitPrice": "단가는 0보다 커야 합니다.",
|
|
@@ -1059,6 +1060,8 @@
|
|
|
1059
1060
|
"sales.documents.items.save": "변경사항 저장",
|
|
1060
1061
|
"sales.documents.items.selectedProduct": "선택됨 {{id}}",
|
|
1061
1062
|
"sales.documents.items.selectedVariant": "선택됨 {{id}}",
|
|
1063
|
+
"sales.documents.items.shippedLineLockPending": "이 주문의 선적 정보를 불러올 때까지 가격 정보가 잠깁니다. 주문을 다시 열어 재시도하세요 — 이름 수정과 수량 증가는 계속 가능합니다.",
|
|
1064
|
+
"sales.documents.items.shippedLineLocked": "이 라인은 이미 선적된 품목이 있어 가격 정보가 잠겨 있습니다. 이름과 수량은 계속 수정할 수 있습니다.",
|
|
1062
1065
|
"sales.documents.items.status": "상태",
|
|
1063
1066
|
"sales.documents.items.statusEmpty": "상태 없음",
|
|
1064
1067
|
"sales.documents.items.statusLoading": "상태 목록을 불러오는 중…",
|
|
@@ -1093,6 +1096,8 @@
|
|
|
1093
1096
|
"sales.documents.items.variantSearch": "옵션(변형) 검색",
|
|
1094
1097
|
"sales.documents.list.errors.load": "문서를 불러오지 못했습니다.",
|
|
1095
1098
|
"sales.documents.list.filters.channel": "채널",
|
|
1099
|
+
"sales.documents.list.filters.channelPlaceholder": "채널 검색",
|
|
1100
|
+
"sales.documents.list.filters.channelUnassigned": "(채널 없음)",
|
|
1096
1101
|
"sales.documents.list.filters.customer": "고객 ID",
|
|
1097
1102
|
"sales.documents.list.filters.customerPlaceholder": "고객 ID",
|
|
1098
1103
|
"sales.documents.list.filters.date": "날짜",
|
|
@@ -1321,13 +1326,16 @@
|
|
|
1321
1326
|
"sales.quotes.email.subject": "견적 {quoteNumber}",
|
|
1322
1327
|
"sales.quotes.email.total": "합계: {amount} {currency}",
|
|
1323
1328
|
"sales.quotes.email.validUntil": "유효 기간: {date}까지",
|
|
1329
|
+
"sales.quotes.exchange_rate_unsupported": "환율은 견적서에서 사용할 수 없습니다.",
|
|
1324
1330
|
"sales.quotes.form.general": "일반",
|
|
1325
1331
|
"sales.quotes.form.lines": "라인 항목",
|
|
1326
1332
|
"sales.quotes.form.notes": "메모",
|
|
1333
|
+
"sales.quotes.fulfillment_status_unsupported": "이행 상태는 견적서에서 사용할 수 없습니다.",
|
|
1327
1334
|
"sales.quotes.internal_notes_unsupported": "내부 메모는 견적서에서 사용할 수 없습니다.",
|
|
1328
1335
|
"sales.quotes.lines.delete": "견적 항목 삭제",
|
|
1329
1336
|
"sales.quotes.lines.upsert": "견적 항목 업데이트",
|
|
1330
1337
|
"sales.quotes.list.title": "견적",
|
|
1338
|
+
"sales.quotes.payment_status_unsupported": "결제 상태는 견적서에서 사용할 수 없습니다.",
|
|
1331
1339
|
"sales.quotes.public.acceptButton": "견적 수락",
|
|
1332
1340
|
"sales.quotes.public.acceptFailed": "견적을 수락하지 못했습니다.",
|
|
1333
1341
|
"sales.quotes.public.acceptedMessage": "주문이 생성되었습니다: {{orderNumber}}",
|
|
@@ -1016,6 +1016,7 @@
|
|
|
1016
1016
|
"sales.documents.items.errorProductRequired": "Wybierz produkt, aby kontynuować.",
|
|
1017
1017
|
"sales.documents.items.errorQuantity": "Ilość musi być większa niż 0.",
|
|
1018
1018
|
"sales.documents.items.errorQuantityBelowShipped": "Nie można obniżyć ilości poniżej {{shipped}} już wysłanych.",
|
|
1019
|
+
"sales.documents.items.errorQuantityShipmentsUnknown": "Nie można obniżyć ilości, dopóki wysyłki tego zamówienia nie zostaną wczytane. Otwórz zamówienie ponownie, aby spróbować jeszcze raz.",
|
|
1019
1020
|
"sales.documents.items.errorSave": "Nie udało się zapisać pozycji.",
|
|
1020
1021
|
"sales.documents.items.errorScope": "Wymagane są organizacja i najemca.",
|
|
1021
1022
|
"sales.documents.items.errorUnitPrice": "Cena jednostkowa musi być większa niż 0.",
|
|
@@ -1059,6 +1060,8 @@
|
|
|
1059
1060
|
"sales.documents.items.save": "Zapisz zmiany",
|
|
1060
1061
|
"sales.documents.items.selectedProduct": "Wybrano {{id}}",
|
|
1061
1062
|
"sales.documents.items.selectedVariant": "Wybrano {{id}}",
|
|
1063
|
+
"sales.documents.items.shippedLineLockPending": "Ceny są zablokowane, dopóki wysyłki tego zamówienia nie zostaną wczytane. Otwórz zamówienie ponownie, aby spróbować jeszcze raz — nadal możesz edytować nazwę i zwiększyć ilość.",
|
|
1064
|
+
"sales.documents.items.shippedLineLocked": "Ceny tej pozycji są zablokowane, ponieważ ma już wysłane sztuki. Nazwę i ilość nadal możesz edytować.",
|
|
1062
1065
|
"sales.documents.items.status": "Status",
|
|
1063
1066
|
"sales.documents.items.statusEmpty": "Brak statusu",
|
|
1064
1067
|
"sales.documents.items.statusLoading": "Ładowanie statusów…",
|
|
@@ -1093,6 +1096,8 @@
|
|
|
1093
1096
|
"sales.documents.items.variantSearch": "Szukaj wariantu",
|
|
1094
1097
|
"sales.documents.list.errors.load": "Nie udało się wczytać dokumentów.",
|
|
1095
1098
|
"sales.documents.list.filters.channel": "Kanał",
|
|
1099
|
+
"sales.documents.list.filters.channelPlaceholder": "Szukaj kanałów",
|
|
1100
|
+
"sales.documents.list.filters.channelUnassigned": "(Brak kanału)",
|
|
1096
1101
|
"sales.documents.list.filters.customer": "ID klienta",
|
|
1097
1102
|
"sales.documents.list.filters.customerPlaceholder": "ID klienta",
|
|
1098
1103
|
"sales.documents.list.filters.date": "Data",
|
|
@@ -1321,13 +1326,16 @@
|
|
|
1321
1326
|
"sales.quotes.email.subject": "Oferta {quoteNumber}",
|
|
1322
1327
|
"sales.quotes.email.total": "Suma: {amount} {currency}",
|
|
1323
1328
|
"sales.quotes.email.validUntil": "Ważna do: {date}",
|
|
1329
|
+
"sales.quotes.exchange_rate_unsupported": "Kurs wymiany nie jest dostępny dla ofert.",
|
|
1324
1330
|
"sales.quotes.form.general": "Ogólne",
|
|
1325
1331
|
"sales.quotes.form.lines": "Pozycje",
|
|
1326
1332
|
"sales.quotes.form.notes": "Notatki",
|
|
1333
|
+
"sales.quotes.fulfillment_status_unsupported": "Status realizacji nie jest dostępny dla ofert.",
|
|
1327
1334
|
"sales.quotes.internal_notes_unsupported": "Notatki wewnętrzne nie są dostępne dla ofert.",
|
|
1328
1335
|
"sales.quotes.lines.delete": "Usuń pozycję oferty",
|
|
1329
1336
|
"sales.quotes.lines.upsert": "Zaktualizuj pozycję oferty",
|
|
1330
1337
|
"sales.quotes.list.title": "Oferty",
|
|
1338
|
+
"sales.quotes.payment_status_unsupported": "Status płatności nie jest dostępny dla ofert.",
|
|
1331
1339
|
"sales.quotes.public.acceptButton": "Zaakceptuj ofertę",
|
|
1332
1340
|
"sales.quotes.public.acceptFailed": "Nie udało się zaakceptować oferty.",
|
|
1333
1341
|
"sales.quotes.public.acceptedMessage": "Utworzono zamówienie: {{orderNumber}}",
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
|
+
import { FeatureToggle } from '@open-mercato/core/modules/feature_toggles/data/entities'
|
|
3
|
+
import { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
4
|
+
import { SALES_CHANNELS_TOGGLE_ID } from './salesChannelsToggleId'
|
|
5
|
+
|
|
6
|
+
export const SALES_CHANNELS_TOGGLE_DEFINITION = {
|
|
7
|
+
identifier: SALES_CHANNELS_TOGGLE_ID,
|
|
8
|
+
name: 'Sales Channels',
|
|
9
|
+
description: 'Show sales channel pickers, filters, and management UI. Disable for tenants that do not use sales channels.',
|
|
10
|
+
category: 'sales',
|
|
11
|
+
type: 'boolean' as const,
|
|
12
|
+
defaultValue: true,
|
|
13
|
+
} as const
|
|
14
|
+
|
|
15
|
+
// The sales module owns this toggle definition, so tenant setup registers it the
|
|
16
|
+
// same way portal, customers and wms register theirs. Shipping it only in the
|
|
17
|
+
// core defaults file left it unregistered on every database initialized before
|
|
18
|
+
// the toggle existed, and `useSalesChannelsEnabled` then 404s on every mount.
|
|
19
|
+
//
|
|
20
|
+
// The lookup deliberately does not filter on `deletedAt`. Deletion is soft
|
|
21
|
+
// (`feature_toggles.global.delete`) while `feature_toggles_identifier_unique`
|
|
22
|
+
// covers every row, so filtering would make this insert a duplicate and fail the
|
|
23
|
+
// whole seed run on any installation where the toggle was deleted. Matching the
|
|
24
|
+
// create command's own uniqueness check also leaves an operator's deletion alone
|
|
25
|
+
// instead of resurrecting the definition on every tenant seed.
|
|
26
|
+
export async function seedSalesChannelsToggle(em: EntityManager): Promise<void> {
|
|
27
|
+
const existing = await findOneWithDecryption(em, FeatureToggle, {
|
|
28
|
+
identifier: SALES_CHANNELS_TOGGLE_DEFINITION.identifier,
|
|
29
|
+
})
|
|
30
|
+
if (existing) return
|
|
31
|
+
em.persist(
|
|
32
|
+
em.create(FeatureToggle, {
|
|
33
|
+
identifier: SALES_CHANNELS_TOGGLE_DEFINITION.identifier,
|
|
34
|
+
name: SALES_CHANNELS_TOGGLE_DEFINITION.name,
|
|
35
|
+
description: SALES_CHANNELS_TOGGLE_DEFINITION.description,
|
|
36
|
+
category: SALES_CHANNELS_TOGGLE_DEFINITION.category,
|
|
37
|
+
type: SALES_CHANNELS_TOGGLE_DEFINITION.type,
|
|
38
|
+
defaultValue: SALES_CHANNELS_TOGGLE_DEFINITION.defaultValue,
|
|
39
|
+
}),
|
|
40
|
+
)
|
|
41
|
+
await em.flush()
|
|
42
|
+
}
|
|
@@ -1962,6 +1962,36 @@
|
|
|
1962
1962
|
"keyName": "sales_document_addresses_scope_idx",
|
|
1963
1963
|
"primary": false,
|
|
1964
1964
|
"unique": false
|
|
1965
|
+
},
|
|
1966
|
+
{
|
|
1967
|
+
"columnNames": [
|
|
1968
|
+
"document_id"
|
|
1969
|
+
],
|
|
1970
|
+
"composite": false,
|
|
1971
|
+
"constraint": false,
|
|
1972
|
+
"keyName": "sales_document_addresses_document_idx",
|
|
1973
|
+
"primary": false,
|
|
1974
|
+
"unique": false
|
|
1975
|
+
},
|
|
1976
|
+
{
|
|
1977
|
+
"columnNames": [
|
|
1978
|
+
"order_id"
|
|
1979
|
+
],
|
|
1980
|
+
"composite": false,
|
|
1981
|
+
"constraint": false,
|
|
1982
|
+
"keyName": "sales_document_addresses_order_idx",
|
|
1983
|
+
"primary": false,
|
|
1984
|
+
"unique": false
|
|
1985
|
+
},
|
|
1986
|
+
{
|
|
1987
|
+
"columnNames": [
|
|
1988
|
+
"quote_id"
|
|
1989
|
+
],
|
|
1990
|
+
"composite": false,
|
|
1991
|
+
"constraint": false,
|
|
1992
|
+
"keyName": "sales_document_addresses_quote_idx",
|
|
1993
|
+
"primary": false,
|
|
1994
|
+
"unique": false
|
|
1965
1995
|
}
|
|
1966
1996
|
],
|
|
1967
1997
|
"checks": [],
|
|
@@ -3750,6 +3780,36 @@
|
|
|
3750
3780
|
"keyName": "sales_notes_scope_idx",
|
|
3751
3781
|
"primary": false,
|
|
3752
3782
|
"unique": false
|
|
3783
|
+
},
|
|
3784
|
+
{
|
|
3785
|
+
"columnNames": [
|
|
3786
|
+
"context_id"
|
|
3787
|
+
],
|
|
3788
|
+
"composite": false,
|
|
3789
|
+
"constraint": false,
|
|
3790
|
+
"keyName": "sales_notes_context_idx",
|
|
3791
|
+
"primary": false,
|
|
3792
|
+
"unique": false
|
|
3793
|
+
},
|
|
3794
|
+
{
|
|
3795
|
+
"columnNames": [
|
|
3796
|
+
"order_id"
|
|
3797
|
+
],
|
|
3798
|
+
"composite": false,
|
|
3799
|
+
"constraint": false,
|
|
3800
|
+
"keyName": "sales_notes_order_idx",
|
|
3801
|
+
"primary": false,
|
|
3802
|
+
"unique": false
|
|
3803
|
+
},
|
|
3804
|
+
{
|
|
3805
|
+
"columnNames": [
|
|
3806
|
+
"quote_id"
|
|
3807
|
+
],
|
|
3808
|
+
"composite": false,
|
|
3809
|
+
"constraint": false,
|
|
3810
|
+
"keyName": "sales_notes_quote_idx",
|
|
3811
|
+
"primary": false,
|
|
3812
|
+
"unique": false
|
|
3753
3813
|
}
|
|
3754
3814
|
],
|
|
3755
3815
|
"checks": [],
|
package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
// sales_notes and sales_document_addresses each carried a single index —
|
|
4
|
+
// (organization_id, tenant_id) — and are never read by that predicate alone.
|
|
5
|
+
// loadOrderSnapshot / loadQuoteSnapshot (commands/documents.ts) read them by
|
|
6
|
+
// context in the same Promise.all:
|
|
7
|
+
//
|
|
8
|
+
// findWithDecryption(em, SalesNote, { contextType, contextId, ...scope })
|
|
9
|
+
// findWithDecryption(em, SalesDocumentAddress, { documentId, documentKind, ...scope })
|
|
10
|
+
//
|
|
11
|
+
// On a single-organization deployment the scope index matches every row, so the
|
|
12
|
+
// planner discards it and scans. The cost is CPU filtering, so a warm cache does
|
|
13
|
+
// not reduce it. Measured on a table of ~331k rows / 110 MB: a parallel
|
|
14
|
+
// sequential scan removing 110,457 rows per worker, 82 ms per read to return 0
|
|
15
|
+
// rows. The command bus runs prepare() and captureAfter() around every command
|
|
16
|
+
// and both load a document snapshot, so one written document — itself several
|
|
17
|
+
// commands (the document, one per changed line, the payment reconcile) —
|
|
18
|
+
// performs roughly 20 of these reads. Counters over one bulk-import batch of 100
|
|
19
|
+
// records showed 1,971 sequential scans reading 217,670,528 rows, 2.18M rows per
|
|
20
|
+
// imported record; repeatable across consecutive batches (1,971 / 1,974 / 1,911).
|
|
21
|
+
//
|
|
22
|
+
// context_type and document_kind are deliberately omitted, as they were for
|
|
23
|
+
// sales_document_tag_assignments_document_idx (Migration20260806120000), and the
|
|
24
|
+
// scope columns with them. sales_orders.id and sales_quotes.id are both
|
|
25
|
+
// gen_random_uuid() from their own tables, so a context_id already determines its
|
|
26
|
+
// context_type and its tenant; the seek returns the handful of rows belonging to
|
|
27
|
+
// one document and the remaining terms are rechecked over those. Folding three
|
|
28
|
+
// more columns in — one text and two uuids — roughly triples the index entry for
|
|
29
|
+
// no selectivity, on tables that take a write per document save and a note per
|
|
30
|
+
// order status change. The sibling scope indexes that do fold scope in
|
|
31
|
+
// (sales_order_lines_scope_idx, sales_payments_scope_idx) predate that reasoning.
|
|
32
|
+
//
|
|
33
|
+
// order_id and quote_id are separate indexes rather than a widening of the above:
|
|
34
|
+
// both tables are the child side of `on delete set null` constraints, which
|
|
35
|
+
// PostgreSQL does not index automatically, and the constraint check probes
|
|
36
|
+
// order_id / quote_id — columns the context index cannot serve even though they
|
|
37
|
+
// hold the same uuid. Without them every delete of a parent order or quote scans
|
|
38
|
+
// the child table in full.
|
|
39
|
+
//
|
|
40
|
+
// Both tables are high-churn, so the indexes are built CONCURRENTLY to avoid
|
|
41
|
+
// blocking writes during the build. CREATE INDEX CONCURRENTLY cannot run inside a
|
|
42
|
+
// transaction, hence isTransactional() => false; the migration runner applies
|
|
43
|
+
// migrations one-by-one, so this opt-out is safe. Drop first so retrying a failed
|
|
44
|
+
// concurrent build removes PostgreSQL's invalid index stub instead of letting IF
|
|
45
|
+
// NOT EXISTS silently accept it: a half-built concurrent index is left INVALID,
|
|
46
|
+
// the planner ignores it, and IF NOT EXISTS would report success while the table
|
|
47
|
+
// stays unindexed. Same shape as Migration20260806120000 and
|
|
48
|
+
// Migration20260731105052_query_index.
|
|
49
|
+
//
|
|
50
|
+
// On a database that does not have these indexes yet — every fresh install — the
|
|
51
|
+
// drops are no-ops and there is no window without them. An operator who already
|
|
52
|
+
// created one out of band should expect it to be rebuilt here, and the reads that
|
|
53
|
+
// depend on it to fall back to their pre-index cost until the concurrent build
|
|
54
|
+
// finishes; on a large table, run this while the writers that depend on it are
|
|
55
|
+
// paused.
|
|
56
|
+
export class Migration20260821120000_sales_notes_addresses_context_idx extends Migration {
|
|
57
|
+
|
|
58
|
+
override isTransactional(): boolean {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
override up(): void | Promise<void> {
|
|
63
|
+
this.addSql(`drop index concurrently if exists "sales_notes_context_idx";`);
|
|
64
|
+
this.addSql(`create index concurrently "sales_notes_context_idx" on "sales_notes" ("context_id");`);
|
|
65
|
+
this.addSql(`drop index concurrently if exists "sales_notes_order_idx";`);
|
|
66
|
+
this.addSql(`create index concurrently "sales_notes_order_idx" on "sales_notes" ("order_id");`);
|
|
67
|
+
this.addSql(`drop index concurrently if exists "sales_notes_quote_idx";`);
|
|
68
|
+
this.addSql(`create index concurrently "sales_notes_quote_idx" on "sales_notes" ("quote_id");`);
|
|
69
|
+
|
|
70
|
+
this.addSql(`drop index concurrently if exists "sales_document_addresses_document_idx";`);
|
|
71
|
+
this.addSql(`create index concurrently "sales_document_addresses_document_idx" on "sales_document_addresses" ("document_id");`);
|
|
72
|
+
this.addSql(`drop index concurrently if exists "sales_document_addresses_order_idx";`);
|
|
73
|
+
this.addSql(`create index concurrently "sales_document_addresses_order_idx" on "sales_document_addresses" ("order_id");`);
|
|
74
|
+
this.addSql(`drop index concurrently if exists "sales_document_addresses_quote_idx";`);
|
|
75
|
+
this.addSql(`create index concurrently "sales_document_addresses_quote_idx" on "sales_document_addresses" ("quote_id");`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override down(): void | Promise<void> {
|
|
79
|
+
this.addSql(`drop index concurrently if exists "sales_document_addresses_quote_idx";`);
|
|
80
|
+
this.addSql(`drop index concurrently if exists "sales_document_addresses_order_idx";`);
|
|
81
|
+
this.addSql(`drop index concurrently if exists "sales_document_addresses_document_idx";`);
|
|
82
|
+
this.addSql(`drop index concurrently if exists "sales_notes_quote_idx";`);
|
|
83
|
+
this.addSql(`drop index concurrently if exists "sales_notes_order_idx";`);
|
|
84
|
+
this.addSql(`drop index concurrently if exists "sales_notes_context_idx";`);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
}
|
|
@@ -3,6 +3,7 @@ import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'
|
|
|
3
3
|
import { SalesSettings, SalesDocumentSequence, SalesTaxRate } from './data/entities'
|
|
4
4
|
import { DEFAULT_ORDER_NUMBER_FORMAT, DEFAULT_QUOTE_NUMBER_FORMAT } from './lib/documentNumberTokens'
|
|
5
5
|
import { seedSalesStatusDictionaries, seedSalesAdjustmentKinds } from './lib/dictionaries'
|
|
6
|
+
import { seedSalesChannelsToggle } from './lib/salesChannelsToggleSeed'
|
|
6
7
|
import { ensureExampleShippingMethods, ensureExamplePaymentMethods } from './seed/examples-data'
|
|
7
8
|
import { seedSalesExamples } from './seed/examples'
|
|
8
9
|
|
|
@@ -116,6 +117,7 @@ export const setup: ModuleSetupConfig = {
|
|
|
116
117
|
await seedSalesAdjustmentKinds(em, scope)
|
|
117
118
|
await ensureExampleShippingMethods(em, scope)
|
|
118
119
|
await ensureExamplePaymentMethods(em, scope)
|
|
120
|
+
await seedSalesChannelsToggle(em)
|
|
119
121
|
},
|
|
120
122
|
|
|
121
123
|
async seedExamples({ em, container, tenantId, organizationId }) {
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import type { InjectionColumnWidget } from '@open-mercato/shared/modules/widgets/injection'
|
|
2
|
+
import { InjectionPosition } from '@open-mercato/shared/modules/widgets/injection-position'
|
|
2
3
|
|
|
3
4
|
const widget: InjectionColumnWidget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: 'sales.injection.payment-gateway-status-column',
|
|
6
7
|
priority: 50,
|
|
8
|
+
features: ['payment_gateways.view'],
|
|
9
|
+
// The header key and every value this column can ever show come from
|
|
10
|
+
// `payment_gateways`; without that module the column has no data source and
|
|
11
|
+
// its header would degrade to the raw translation key.
|
|
12
|
+
requiredModules: ['payment_gateways'],
|
|
7
13
|
},
|
|
8
14
|
columns: [
|
|
9
15
|
{
|
|
10
16
|
id: 'gateway_status',
|
|
11
17
|
header: 'payment_gateways.column.gatewayStatus',
|
|
12
18
|
accessorKey: '_gateway.unifiedStatus',
|
|
19
|
+
size: 120,
|
|
13
20
|
sortable: false,
|
|
21
|
+
placement: { position: InjectionPosition.After, relativeTo: 'status' },
|
|
14
22
|
cell: ({ getValue }) => {
|
|
15
23
|
const value = getValue()
|
|
16
|
-
return typeof value === 'string' && value.trim().length > 0 ? value : '
|
|
24
|
+
return typeof value === 'string' && value.trim().length > 0 ? value : '—'
|
|
17
25
|
},
|
|
18
26
|
},
|
|
19
27
|
],
|
|
@@ -17,13 +17,10 @@ export const injectionTable: ModuleInjectionTable = {
|
|
|
17
17
|
priority: 50,
|
|
18
18
|
},
|
|
19
19
|
],
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// '__disabled__:columns'. The widget itself is still registered and is now UNBOUND: giving
|
|
25
|
-
// the payments table a real tableId so the gateway-status column finally renders is a sales
|
|
26
|
-
// feature gap, tracked in #5142 rather than silently reintroduced here.
|
|
20
|
+
'data-table:sales.payments:columns': {
|
|
21
|
+
widgetId: 'sales.injection.payment-gateway-status-column',
|
|
22
|
+
priority: 50,
|
|
23
|
+
},
|
|
27
24
|
'crud-form:sales.payment_method:fields': {
|
|
28
25
|
widgetId: 'sales.injection.payment-gateway-config-field',
|
|
29
26
|
priority: 40,
|
|
@@ -30,6 +30,7 @@ type LeaveRequestsResponse = {
|
|
|
30
30
|
items?: Array<Record<string, unknown>>
|
|
31
31
|
total?: number
|
|
32
32
|
totalPages?: number
|
|
33
|
+
totalIsCapped?: boolean
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
export default function StaffLeaveRequestsPage() {
|
|
@@ -40,6 +41,7 @@ export default function StaffLeaveRequestsPage() {
|
|
|
40
41
|
const [page, setPage] = React.useState(1)
|
|
41
42
|
const [total, setTotal] = React.useState(0)
|
|
42
43
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
44
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
43
45
|
const [search, setSearch] = React.useState('')
|
|
44
46
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
45
47
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'startDate', desc: true }])
|
|
@@ -123,6 +125,7 @@ export default function StaffLeaveRequestsPage() {
|
|
|
123
125
|
setRows(items.map(mapLeaveRequest))
|
|
124
126
|
setTotal(typeof payload.total === 'number' ? payload.total : items.length)
|
|
125
127
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
128
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
126
129
|
} catch {
|
|
127
130
|
setRows([])
|
|
128
131
|
setTotal(0)
|
|
@@ -177,6 +180,7 @@ export default function StaffLeaveRequestsPage() {
|
|
|
177
180
|
pageSize: PAGE_SIZE,
|
|
178
181
|
total,
|
|
179
182
|
totalPages,
|
|
183
|
+
totalIsCapped,
|
|
180
184
|
onPageChange: setPage,
|
|
181
185
|
}}
|
|
182
186
|
onRowClick={(row) => {
|
|
@@ -29,6 +29,7 @@ type LeaveRequestsResponse = {
|
|
|
29
29
|
total?: number
|
|
30
30
|
totalPages?: number
|
|
31
31
|
viewer?: { memberId?: string | null; canSend?: boolean }
|
|
32
|
+
totalIsCapped?: boolean
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
export default function StaffMyLeaveRequestsPage() {
|
|
@@ -39,6 +40,7 @@ export default function StaffMyLeaveRequestsPage() {
|
|
|
39
40
|
const [page, setPage] = React.useState(1)
|
|
40
41
|
const [total, setTotal] = React.useState(0)
|
|
41
42
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
43
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
42
44
|
const [search, setSearch] = React.useState('')
|
|
43
45
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
44
46
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'startDate', desc: true }])
|
|
@@ -118,6 +120,7 @@ export default function StaffMyLeaveRequestsPage() {
|
|
|
118
120
|
setRows(items.map(mapLeaveRequest))
|
|
119
121
|
setTotal(typeof payload.total === 'number' ? payload.total : items.length)
|
|
120
122
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
123
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
121
124
|
const viewerMemberId = typeof payload.viewer?.memberId === 'string' ? payload.viewer.memberId : null
|
|
122
125
|
setMemberId(viewerMemberId)
|
|
123
126
|
setCanSend(payload.viewer?.canSend === true)
|
|
@@ -182,6 +185,7 @@ export default function StaffMyLeaveRequestsPage() {
|
|
|
182
185
|
pageSize: PAGE_SIZE,
|
|
183
186
|
total,
|
|
184
187
|
totalPages,
|
|
188
|
+
totalIsCapped,
|
|
185
189
|
onPageChange: setPage,
|
|
186
190
|
}}
|
|
187
191
|
onRowClick={(row) => {
|
|
@@ -47,6 +47,7 @@ type TeamMembersResponse = {
|
|
|
47
47
|
items?: Array<Record<string, unknown>>
|
|
48
48
|
total?: number
|
|
49
49
|
totalPages?: number
|
|
50
|
+
totalIsCapped?: boolean
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
type TeamsResponse = {
|
|
@@ -68,6 +69,7 @@ export default function StaffTeamMembersPage() {
|
|
|
68
69
|
const [page, setPage] = React.useState(1)
|
|
69
70
|
const [total, setTotal] = React.useState(0)
|
|
70
71
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
72
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
71
73
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'displayName', desc: false }])
|
|
72
74
|
const [search, setSearch] = React.useState('')
|
|
73
75
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
@@ -272,6 +274,9 @@ export default function StaffTeamMembersPage() {
|
|
|
272
274
|
: typeof payload.totalPages === 'number'
|
|
273
275
|
? payload.totalPages
|
|
274
276
|
: Math.max(1, Math.ceil(items.length / PAGE_SIZE)))
|
|
277
|
+
// A role filter is applied client-side over the fetched page, so the total
|
|
278
|
+
// shown is that array's length — exact by construction, never a capped floor.
|
|
279
|
+
setTotalIsCapped(!roleFilterApplied && payload.totalIsCapped === true)
|
|
275
280
|
} catch (error) {
|
|
276
281
|
logger.error('staff.team-members.list', { err: error })
|
|
277
282
|
flash(labels.errors.load, 'error')
|
|
@@ -452,6 +457,7 @@ export default function StaffTeamMembersPage() {
|
|
|
452
457
|
pageSize: PAGE_SIZE,
|
|
453
458
|
total,
|
|
454
459
|
totalPages,
|
|
460
|
+
totalIsCapped,
|
|
455
461
|
onPageChange: setPage,
|
|
456
462
|
}}
|
|
457
463
|
rowActions={(row) => row.kind === 'member' ? (
|
|
@@ -41,6 +41,7 @@ type TeamRolesResponse = {
|
|
|
41
41
|
items?: Array<Record<string, unknown>>
|
|
42
42
|
total?: number
|
|
43
43
|
totalPages?: number
|
|
44
|
+
totalIsCapped?: boolean
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
type TeamsResponse = {
|
|
@@ -56,6 +57,7 @@ export default function StaffTeamRolesPage() {
|
|
|
56
57
|
const [page, setPage] = React.useState(1)
|
|
57
58
|
const [total, setTotal] = React.useState(0)
|
|
58
59
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
60
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
59
61
|
const [search, setSearch] = React.useState('')
|
|
60
62
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
61
63
|
const [reloadToken, setReloadToken] = React.useState(0)
|
|
@@ -203,6 +205,7 @@ export default function StaffTeamRolesPage() {
|
|
|
203
205
|
setRows(buildTeamRoleRows(items.map(mapApiTeamRole), labels.groups.unassigned))
|
|
204
206
|
setTotal(typeof payload.total === 'number' ? payload.total : items.length)
|
|
205
207
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : Math.max(1, Math.ceil(items.length / PAGE_SIZE)))
|
|
208
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
206
209
|
} catch (error) {
|
|
207
210
|
logger.error('staff.team-roles.list', { err: error })
|
|
208
211
|
flash(labels.errors.load, 'error')
|
|
@@ -329,6 +332,7 @@ export default function StaffTeamRolesPage() {
|
|
|
329
332
|
pageSize: PAGE_SIZE,
|
|
330
333
|
total,
|
|
331
334
|
totalPages,
|
|
335
|
+
totalIsCapped,
|
|
332
336
|
onPageChange: setPage,
|
|
333
337
|
}}
|
|
334
338
|
rowActions={(row) => row.kind === 'role' ? (
|
|
@@ -60,6 +60,7 @@ type TeamMembersResponse = {
|
|
|
60
60
|
items?: Array<Record<string, unknown>>
|
|
61
61
|
total?: number
|
|
62
62
|
totalPages?: number
|
|
63
|
+
totalIsCapped?: boolean
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
export default function StaffTeamEditPage({ params }: { params?: { id?: string } }) {
|
|
@@ -76,6 +77,7 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
|
|
|
76
77
|
const [memberRows, setMemberRows] = React.useState<TeamMemberRow[]>([])
|
|
77
78
|
const [memberPage, setMemberPage] = React.useState(1)
|
|
78
79
|
const [memberTotal, setMemberTotal] = React.useState(0)
|
|
80
|
+
const [memberTotalIsCapped, setMemberTotalIsCapped] = React.useState(false)
|
|
79
81
|
const [memberTotalPages, setMemberTotalPages] = React.useState(1)
|
|
80
82
|
const [memberSorting, setMemberSorting] = React.useState<SortingState>([{ id: 'displayName', desc: false }])
|
|
81
83
|
const [memberSearch, setMemberSearch] = React.useState('')
|
|
@@ -263,6 +265,7 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
|
|
|
263
265
|
const items = Array.isArray(payload.items) ? payload.items : []
|
|
264
266
|
setMemberRows(items.map(mapApiTeamMember))
|
|
265
267
|
setMemberTotal(typeof payload.total === 'number' ? payload.total : items.length)
|
|
268
|
+
setMemberTotalIsCapped(payload.totalIsCapped === true)
|
|
266
269
|
setMemberTotalPages(
|
|
267
270
|
typeof payload.totalPages === 'number'
|
|
268
271
|
? payload.totalPages
|
|
@@ -434,6 +437,7 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
|
|
|
434
437
|
pageSize: TEAM_MEMBERS_PAGE_SIZE,
|
|
435
438
|
total: memberTotal,
|
|
436
439
|
totalPages: memberTotalPages,
|
|
440
|
+
totalIsCapped: memberTotalIsCapped,
|
|
437
441
|
onPageChange: setMemberPage,
|
|
438
442
|
}}
|
|
439
443
|
rowActions={(row) => (
|
|
@@ -41,6 +41,7 @@ type TeamsResponse = {
|
|
|
41
41
|
items?: Array<Record<string, unknown>>
|
|
42
42
|
total?: number
|
|
43
43
|
totalPages?: number
|
|
44
|
+
totalIsCapped?: boolean
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
export default function StaffTeamsPage() {
|
|
@@ -52,6 +53,7 @@ export default function StaffTeamsPage() {
|
|
|
52
53
|
const [page, setPage] = React.useState(1)
|
|
53
54
|
const [total, setTotal] = React.useState(0)
|
|
54
55
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
56
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
55
57
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'name', desc: false }])
|
|
56
58
|
const [search, setSearch] = React.useState('')
|
|
57
59
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
@@ -176,6 +178,7 @@ export default function StaffTeamsPage() {
|
|
|
176
178
|
setRows(items.map(mapApiTeam))
|
|
177
179
|
setTotal(typeof payload.total === 'number' ? payload.total : items.length)
|
|
178
180
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : Math.max(1, Math.ceil(items.length / PAGE_SIZE)))
|
|
181
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
179
182
|
} catch (error) {
|
|
180
183
|
logger.error('staff.teams.list', { err: error })
|
|
181
184
|
flash(labels.errors.load, 'error')
|
|
@@ -261,6 +264,7 @@ export default function StaffTeamsPage() {
|
|
|
261
264
|
pageSize: PAGE_SIZE,
|
|
262
265
|
total,
|
|
263
266
|
totalPages,
|
|
267
|
+
totalIsCapped,
|
|
264
268
|
onPageChange: setPage,
|
|
265
269
|
}}
|
|
266
270
|
rowActions={(row) => (
|
|
@@ -178,6 +178,12 @@ export default function MyTimesheetsPage() {
|
|
|
178
178
|
blockedMessage: t('ui.forms.flash.saveBlocked', 'Save blocked by validation'),
|
|
179
179
|
})
|
|
180
180
|
|
|
181
|
+
const gridInstanceId = React.useId()
|
|
182
|
+
const durationHintId = `${gridInstanceId}-duration-hint`
|
|
183
|
+
const buildDurationErrorId = React.useCallback(
|
|
184
|
+
(projectId: string, dateKey: string): string => `${gridInstanceId}-duration-error-${projectId}-${dateKey}`,
|
|
185
|
+
[gridInstanceId],
|
|
186
|
+
)
|
|
181
187
|
const durationFormatHint = t(
|
|
182
188
|
'staff.timesheets.my.duration.hint',
|
|
183
189
|
'Enter hours (8 or 1.5), h:mm (1:30) or minutes (90m). Max 24h per day.',
|
|
@@ -919,6 +925,7 @@ export default function MyTimesheetsPage() {
|
|
|
919
925
|
const isDirty = dirty[project.id]?.[dateKey] !== undefined
|
|
920
926
|
const cellError = cellErrors[project.id]?.[dateKey]
|
|
921
927
|
const cellErrorMessage = cellError ? describeDurationError(cellError) : undefined
|
|
928
|
+
const cellErrorId = cellErrorMessage ? buildDurationErrorId(project.id, dateKey) : undefined
|
|
922
929
|
return (
|
|
923
930
|
<td key={dateKey} className={`px-0.5 py-0.5 ${weekend ? 'bg-muted/40' : ''}`}>
|
|
924
931
|
{weekend ? (
|
|
@@ -943,9 +950,13 @@ export default function MyTimesheetsPage() {
|
|
|
943
950
|
placeholder={t('staff.timesheets.my.durationPlaceholder', '0')}
|
|
944
951
|
aria-invalid={cellError !== undefined}
|
|
945
952
|
aria-label={describeDurationCell(project.name, date)}
|
|
953
|
+
aria-describedby={[durationHintId, cellErrorId].filter(Boolean).join(' ')}
|
|
946
954
|
title={cellErrorMessage ?? durationFormatHint}
|
|
947
955
|
/>
|
|
948
956
|
)}
|
|
957
|
+
{cellErrorMessage ? (
|
|
958
|
+
<span id={cellErrorId} role="alert" className="sr-only">{cellErrorMessage}</span>
|
|
959
|
+
) : null}
|
|
949
960
|
</td>
|
|
950
961
|
)
|
|
951
962
|
})}
|
|
@@ -984,7 +995,7 @@ export default function MyTimesheetsPage() {
|
|
|
984
995
|
</tr>
|
|
985
996
|
</tfoot>
|
|
986
997
|
</table>
|
|
987
|
-
<p className="px-3 py-2 text-xs text-muted-foreground">{durationFormatHint}</p>
|
|
998
|
+
<p id={durationHintId} className="px-3 py-2 text-xs text-muted-foreground">{durationFormatHint}</p>
|
|
988
999
|
</div>
|
|
989
1000
|
)}
|
|
990
1001
|
</div>
|