@open-mercato/core 0.7.0 → 0.7.1-develop.7102.1.b41f7e3e51
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 +11 -4
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +2 -1
- 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 +14 -4
- package/src/modules/customers/api/deals/map/route.ts +1 -0
- 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
|
@@ -12,7 +12,7 @@ import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
|
12
12
|
import { RowActions } from '@open-mercato/ui/backend/RowActions'
|
|
13
13
|
import { useConfirmDialog } from '@open-mercato/ui/backend/confirm-dialog'
|
|
14
14
|
import { useOrganizationScopeDetail } from '@open-mercato/shared/lib/frontend/useOrganizationScope'
|
|
15
|
-
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
15
|
+
import { useT, useLocale } from '@open-mercato/shared/lib/i18n/context'
|
|
16
16
|
import {
|
|
17
17
|
emitSalesDocumentTotalsRefresh,
|
|
18
18
|
subscribeSalesDocumentTotalsRefresh,
|
|
@@ -41,15 +41,16 @@ type SalesReturnsSectionProps = {
|
|
|
41
41
|
documentUpdatedAt?: string | null
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
function formatDisplayDate(value: string | null | undefined): string | null {
|
|
44
|
+
export function formatDisplayDate(value: string | null | undefined, locale?: string): string | null {
|
|
45
45
|
if (!value) return null
|
|
46
46
|
const date = new Date(value)
|
|
47
47
|
if (Number.isNaN(date.getTime())) return null
|
|
48
|
-
return new Intl.DateTimeFormat(
|
|
48
|
+
return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date)
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export function SalesReturnsSection({ orderId, currencyCode, documentUpdatedAt }: SalesReturnsSectionProps) {
|
|
52
52
|
const t = useT()
|
|
53
|
+
const locale = useLocale()
|
|
53
54
|
const { organizationId, tenantId } = useOrganizationScopeDetail()
|
|
54
55
|
const { confirm, ConfirmDialogElement } = useConfirmDialog()
|
|
55
56
|
const [returns, setReturns] = React.useState<ReturnRow[]>([])
|
|
@@ -328,10 +329,10 @@ export function SalesReturnsSection({ orderId, currencyCode, documentUpdatedAt }
|
|
|
328
329
|
</div>
|
|
329
330
|
</div>
|
|
330
331
|
<div className="whitespace-nowrap text-right text-sm text-muted-foreground">
|
|
331
|
-
{formatDisplayDate(ret.returnedAt) ?? t('sales.returns.notSet', 'Not set')}
|
|
332
|
+
{formatDisplayDate(ret.returnedAt, locale) ?? t('sales.returns.notSet', 'Not set')}
|
|
332
333
|
</div>
|
|
333
334
|
<div className="whitespace-nowrap text-right text-sm font-medium">
|
|
334
|
-
{formatMoney(ret.total, currencyCode ?? null)}
|
|
335
|
+
{formatMoney(ret.total, currencyCode ?? null, locale)}
|
|
335
336
|
</div>
|
|
336
337
|
<div className="flex justify-end">
|
|
337
338
|
<RowActions
|
|
@@ -55,6 +55,7 @@ type ApiDocument = {
|
|
|
55
55
|
customerEntityId?: string | null
|
|
56
56
|
customerSnapshot?: Record<string, unknown> | null
|
|
57
57
|
channelId?: string | null
|
|
58
|
+
channelName?: string | null
|
|
58
59
|
lineItemCount?: number | null
|
|
59
60
|
grandTotalNetAmount?: number | null
|
|
60
61
|
grandTotalGrossAmount?: number | null
|
|
@@ -70,6 +71,7 @@ type DocumentsResponse = {
|
|
|
70
71
|
items?: Array<Record<string, unknown>>
|
|
71
72
|
total?: number
|
|
72
73
|
totalPages?: number
|
|
74
|
+
totalIsCapped?: boolean
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
type SalesDocumentRow = {
|
|
@@ -79,6 +81,7 @@ type SalesDocumentRow = {
|
|
|
79
81
|
customerName?: string | null
|
|
80
82
|
customerEmail?: string | null
|
|
81
83
|
channelId?: string | null
|
|
84
|
+
channelName?: string | null
|
|
82
85
|
lineItemCount?: number | null
|
|
83
86
|
totalNet?: number | null
|
|
84
87
|
totalGross?: number | null
|
|
@@ -89,6 +92,20 @@ type SalesDocumentRow = {
|
|
|
89
92
|
|
|
90
93
|
const PAGE_SIZE = 20
|
|
91
94
|
|
|
95
|
+
// Not a uuid on purpose: the API drops non-uuid entries from channelIds, so a leak of this sentinel
|
|
96
|
+
// into the id list narrows the filter instead of erroring.
|
|
97
|
+
const UNASSIGNED_CHANNEL_VALUE = '__unassigned__'
|
|
98
|
+
|
|
99
|
+
// Perspectives persist filterValues, so snapshots saved while this filter was a single-value select
|
|
100
|
+
// hold a bare string. Without this the multi-select would read it as an unknown shape and silently
|
|
101
|
+
// clear the user's saved filter.
|
|
102
|
+
function normalizeChannelSelection(value: unknown): string[] {
|
|
103
|
+
const raw = Array.isArray(value) ? value : typeof value === 'string' ? [value] : []
|
|
104
|
+
return raw
|
|
105
|
+
.map((entry) => (typeof entry === 'string' ? entry.trim() : String(entry || '').trim()))
|
|
106
|
+
.filter((entry) => entry.length > 0)
|
|
107
|
+
}
|
|
108
|
+
|
|
92
109
|
function resolveCustomerName(snapshot: CustomerSnapshot | null | undefined, fallback?: string | null) {
|
|
93
110
|
if (!snapshot) return fallback ?? null
|
|
94
111
|
const base = snapshot.customer?.displayName ?? null
|
|
@@ -157,6 +174,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
157
174
|
const [page, setPage] = React.useState(1)
|
|
158
175
|
const [total, setTotal] = React.useState(0)
|
|
159
176
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
177
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
160
178
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'createdAt', desc: true }])
|
|
161
179
|
const [search, setSearch] = React.useState('')
|
|
162
180
|
const [filterValues, setFilterValues] = React.useState<FilterValues>({})
|
|
@@ -178,9 +196,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
178
196
|
'Review documents with customer context, totals, and channels.'
|
|
179
197
|
)
|
|
180
198
|
|
|
181
|
-
const
|
|
182
|
-
const params = new URLSearchParams({ page: '1', pageSize: '50' })
|
|
183
|
-
if (query && query.trim()) params.set('search', query.trim())
|
|
199
|
+
const fetchChannelOptionsBy = React.useCallback(async (params: URLSearchParams): Promise<FilterOption[]> => {
|
|
184
200
|
try {
|
|
185
201
|
const call = await apiCall<{ items?: unknown[] }>(`/api/sales/channels?${params.toString()}`)
|
|
186
202
|
if (!call.ok) return []
|
|
@@ -198,6 +214,32 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
198
214
|
}
|
|
199
215
|
}, [])
|
|
200
216
|
|
|
217
|
+
const fetchChannelOptions = React.useCallback(
|
|
218
|
+
(query?: string) => {
|
|
219
|
+
const params = new URLSearchParams({ page: '1', pageSize: '50' })
|
|
220
|
+
if (query && query.trim()) params.set('search', query.trim())
|
|
221
|
+
return fetchChannelOptionsBy(params)
|
|
222
|
+
},
|
|
223
|
+
[fetchChannelOptionsBy]
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
// A selected channel outside the first options page — restored from a perspective, or simply the
|
|
227
|
+
// 51st channel — would otherwise render as a bare uuid in the filter chip and the selected tag,
|
|
228
|
+
// which is the same defect this change removes from the column. The route supports `ids=`, so
|
|
229
|
+
// fetch exactly the selected ones and merge them in. See
|
|
230
|
+
// `.ai/lessons/async-edit-selects-must-be-hydrated-as-value-plus.md`.
|
|
231
|
+
const seedChannelOptionsForIds = React.useCallback(
|
|
232
|
+
async (ids: string[]) => {
|
|
233
|
+
const missing = ids.filter((id) => id !== UNASSIGNED_CHANNEL_VALUE)
|
|
234
|
+
if (!missing.length) return
|
|
235
|
+
const params = new URLSearchParams({ page: '1', pageSize: String(missing.length) })
|
|
236
|
+
params.set('ids', missing.join(','))
|
|
237
|
+
const opts = await fetchChannelOptionsBy(params)
|
|
238
|
+
if (opts.length) setChannelOptions((prev) => mergeOptions(prev, opts))
|
|
239
|
+
},
|
|
240
|
+
[fetchChannelOptionsBy]
|
|
241
|
+
)
|
|
242
|
+
|
|
201
243
|
const fetchTagOptions = React.useCallback(async (query?: string): Promise<FilterOption[]> => {
|
|
202
244
|
const params = new URLSearchParams({ page: '1', pageSize: '50' })
|
|
203
245
|
if (query && query.trim()) params.set('search', query.trim())
|
|
@@ -278,6 +320,32 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
278
320
|
[fetchChannelOptions]
|
|
279
321
|
)
|
|
280
322
|
|
|
323
|
+
const unassignedChannelOption = React.useMemo<FilterOption>(
|
|
324
|
+
() => ({
|
|
325
|
+
value: UNASSIGNED_CHANNEL_VALUE,
|
|
326
|
+
label: t('sales.documents.list.filters.channelUnassigned', '(No channel)'),
|
|
327
|
+
}),
|
|
328
|
+
[t]
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
// The sentinel is offered alongside the real channels so "these channels or unassigned" is one
|
|
332
|
+
// selection. It is stripped back out when the query is built — the API takes it as a separate
|
|
333
|
+
// channelIdsEmpty flag, not as an id.
|
|
334
|
+
const channelFilterOptions = React.useMemo<FilterOption[]>(
|
|
335
|
+
() => [unassignedChannelOption, ...channelOptions],
|
|
336
|
+
[channelOptions, unassignedChannelOption]
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
const loadChannelFilterOptions = React.useCallback(
|
|
340
|
+
async (query?: string) => {
|
|
341
|
+
const opts = await loadChannelOptions(query)
|
|
342
|
+
// Only offer the sentinel when the user is browsing rather than searching — typing "web"
|
|
343
|
+
// should not suggest "(No channel)".
|
|
344
|
+
return query && query.trim() ? opts : [unassignedChannelOption, ...opts]
|
|
345
|
+
},
|
|
346
|
+
[loadChannelOptions, unassignedChannelOption]
|
|
347
|
+
)
|
|
348
|
+
|
|
281
349
|
const loadTagOptions = React.useCallback(
|
|
282
350
|
async (query?: string) => {
|
|
283
351
|
const opts = await fetchTagOptions(query)
|
|
@@ -307,9 +375,14 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
307
375
|
...(channelsEnabled ? [{
|
|
308
376
|
id: 'channelId',
|
|
309
377
|
label: t('sales.documents.list.filters.channel', 'Channel'),
|
|
310
|
-
type: '
|
|
311
|
-
options:
|
|
312
|
-
loadOptions:
|
|
378
|
+
type: 'tags',
|
|
379
|
+
options: channelFilterOptions,
|
|
380
|
+
loadOptions: loadChannelFilterOptions,
|
|
381
|
+
placeholder: t('sales.documents.list.filters.channelPlaceholder', 'Search channels'),
|
|
382
|
+
formatValue: (val: string) =>
|
|
383
|
+
val === UNASSIGNED_CHANNEL_VALUE
|
|
384
|
+
? t('sales.documents.list.filters.channelUnassigned', '(No channel)')
|
|
385
|
+
: channelOptions.find((opt) => opt.value === val)?.label ?? val,
|
|
313
386
|
} satisfies FilterDef] : []),
|
|
314
387
|
{
|
|
315
388
|
id: 'date',
|
|
@@ -367,7 +440,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
367
440
|
formatValue: (val: string) => tagOptions.find((o) => o.value === val)?.label ?? val,
|
|
368
441
|
formatDescription: (val: string) => tagOptions.find((o) => o.value === val)?.description ?? null,
|
|
369
442
|
},
|
|
370
|
-
], [channelsEnabled, channelOptions,
|
|
443
|
+
], [channelsEnabled, channelFilterOptions, channelOptions, loadChannelFilterOptions, customerOptions, loadCustomerOptions, loadTagOptions, tagOptions, t])
|
|
371
444
|
|
|
372
445
|
const queryParams = React.useMemo(() => {
|
|
373
446
|
const params = new URLSearchParams()
|
|
@@ -379,8 +452,10 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
379
452
|
params.set('sortField', sort.id)
|
|
380
453
|
params.set('sortDir', sort.desc ? 'desc' : 'asc')
|
|
381
454
|
}
|
|
382
|
-
const
|
|
383
|
-
|
|
455
|
+
const channelSelection = normalizeChannelSelection(filterValues.channelId)
|
|
456
|
+
const channelIds = channelSelection.filter((value) => value !== UNASSIGNED_CHANNEL_VALUE)
|
|
457
|
+
if (channelIds.length > 0) params.set('channelIds', channelIds.join(','))
|
|
458
|
+
if (channelSelection.includes(UNASSIGNED_CHANNEL_VALUE)) params.set('channelIdsEmpty', 'true')
|
|
384
459
|
const customerIds = Array.isArray(filterValues.customerId)
|
|
385
460
|
? filterValues.customerId
|
|
386
461
|
.map((value) => (typeof value === 'string' ? value.trim() : String(value || '').trim()))
|
|
@@ -469,6 +544,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
469
544
|
customerName,
|
|
470
545
|
customerEmail,
|
|
471
546
|
channelId: doc.channelId ?? null,
|
|
547
|
+
channelName: doc.channelName ?? null,
|
|
472
548
|
lineItemCount: doc.lineItemCount ?? null,
|
|
473
549
|
totalNet,
|
|
474
550
|
totalGross,
|
|
@@ -490,6 +566,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
490
566
|
setRows([])
|
|
491
567
|
setTotal(0)
|
|
492
568
|
setTotalPages(1)
|
|
569
|
+
setTotalIsCapped(false)
|
|
493
570
|
return
|
|
494
571
|
}
|
|
495
572
|
const payload = call.result ?? {}
|
|
@@ -501,6 +578,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
501
578
|
? payload.totalPages
|
|
502
579
|
: Math.max(1, Math.ceil(count / PAGE_SIZE))
|
|
503
580
|
setTotalPages(pages)
|
|
581
|
+
setTotalIsCapped(payload.totalIsCapped === true)
|
|
504
582
|
setCacheStatus(call.cacheStatus ?? null)
|
|
505
583
|
} catch (err) {
|
|
506
584
|
logger.error('sales.documents.list', { err })
|
|
@@ -514,10 +592,22 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
514
592
|
void loadDocuments()
|
|
515
593
|
}, [loadDocuments, reloadToken, scopeVersion])
|
|
516
594
|
|
|
595
|
+
// Normalize at the hydration boundary, not only where the query string is built: a perspective
|
|
596
|
+
// saved while this filter was a single-value select restores `channelId` as a bare string, and
|
|
597
|
+
// the `tags` control renders nothing for a non-array value. Storing the normalized shape keeps
|
|
598
|
+
// the control, the active-filter chip and the query builder all reading one shape — otherwise the
|
|
599
|
+
// list is filtered while the field looks empty, and the next channel the user picks replaces the
|
|
600
|
+
// restored one instead of joining it.
|
|
517
601
|
const handleFiltersApply = React.useCallback((values: FilterValues) => {
|
|
518
|
-
|
|
602
|
+
if (values.channelId === undefined) {
|
|
603
|
+
setFilterValues(values)
|
|
604
|
+
} else {
|
|
605
|
+
const channelSelection = normalizeChannelSelection(values.channelId)
|
|
606
|
+
setFilterValues({ ...values, channelId: channelSelection })
|
|
607
|
+
void seedChannelOptionsForIds(channelSelection)
|
|
608
|
+
}
|
|
519
609
|
setPage(1)
|
|
520
|
-
}, [])
|
|
610
|
+
}, [seedChannelOptionsForIds])
|
|
521
611
|
|
|
522
612
|
const handleFiltersClear = React.useCallback(() => {
|
|
523
613
|
setFilterValues({})
|
|
@@ -625,9 +715,10 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
625
715
|
cell: ({ row }) => {
|
|
626
716
|
const channelId = row.original.channelId
|
|
627
717
|
if (!channelId) return <span className="text-xs text-muted-foreground">{t('sales.documents.list.table.unassigned', 'Unassigned')}</span>
|
|
628
|
-
|
|
718
|
+
// Server-resolved, so this no longer depends on the channel being inside the options page.
|
|
719
|
+
// The uuid remains only for a channel the list response could not resolve.
|
|
629
720
|
return (
|
|
630
|
-
<span className="text-sm">{
|
|
721
|
+
<span className="text-sm">{row.original.channelName ?? channelId}</span>
|
|
631
722
|
)
|
|
632
723
|
},
|
|
633
724
|
enableSorting: false,
|
|
@@ -665,7 +756,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
665
756
|
? <span className="text-xs text-muted-foreground">{new Date(row.original.date).toLocaleString()}</span>
|
|
666
757
|
: <span className="text-xs text-muted-foreground">—</span>,
|
|
667
758
|
},
|
|
668
|
-
], [channelsEnabled,
|
|
759
|
+
], [channelsEnabled, kind, statusMap, t])
|
|
669
760
|
|
|
670
761
|
const emptyLabel = kind === 'order'
|
|
671
762
|
? t('sales.documents.list.table.emptyOrders', 'No orders yet.')
|
|
@@ -713,6 +804,7 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
713
804
|
pageSize: PAGE_SIZE,
|
|
714
805
|
total,
|
|
715
806
|
totalPages,
|
|
807
|
+
totalIsCapped,
|
|
716
808
|
onPageChange: setPage,
|
|
717
809
|
cacheStatus,
|
|
718
810
|
}}
|
|
@@ -7,7 +7,7 @@ import { DataTable } from '@open-mercato/ui/backend/DataTable'
|
|
|
7
7
|
import { RowActions } from '@open-mercato/ui/backend/RowActions'
|
|
8
8
|
import { EmptyState } from '@open-mercato/ui/primitives/empty-state'
|
|
9
9
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
10
|
-
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
10
|
+
import { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'
|
|
11
11
|
import { LineItemDialog } from './LineItemDialog'
|
|
12
12
|
import type { SalesLineRecord } from './lineItemTypes'
|
|
13
13
|
import { formatMoney, normalizeNumber } from './lineItemUtils'
|
|
@@ -93,6 +93,7 @@ export function SalesOrderDraftLines({
|
|
|
93
93
|
onChange,
|
|
94
94
|
}: SalesOrderDraftLinesProps) {
|
|
95
95
|
const t = useT()
|
|
96
|
+
const locale = useLocale()
|
|
96
97
|
const [dialogOpen, setDialogOpen] = React.useState(false)
|
|
97
98
|
const [editing, setEditing] = React.useState<SalesOrderLineDraft | null>(null)
|
|
98
99
|
|
|
@@ -112,14 +113,14 @@ export function SalesOrderDraftLines({
|
|
|
112
113
|
{
|
|
113
114
|
id: 'unitPrice',
|
|
114
115
|
header: t('sales.documents.items.table.unit', 'Unit price'),
|
|
115
|
-
cell: ({ row }) => formatMoney(row.original.record.unitPriceGross, row.original.record.currencyCode ?? currencyCode ?? undefined),
|
|
116
|
+
cell: ({ row }) => formatMoney(row.original.record.unitPriceGross, row.original.record.currencyCode ?? currencyCode ?? undefined, locale),
|
|
116
117
|
},
|
|
117
118
|
{
|
|
118
119
|
id: 'total',
|
|
119
120
|
header: t('sales.documents.items.table.total', 'Total'),
|
|
120
|
-
cell: ({ row }) => formatMoney(row.original.record.totalGross, row.original.record.currencyCode ?? currencyCode ?? undefined),
|
|
121
|
+
cell: ({ row }) => formatMoney(row.original.record.totalGross, row.original.record.currencyCode ?? currencyCode ?? undefined, locale),
|
|
121
122
|
},
|
|
122
|
-
], [currencyCode, t])
|
|
123
|
+
], [currencyCode, locale, t])
|
|
123
124
|
|
|
124
125
|
const openCreate = React.useCallback(() => {
|
|
125
126
|
setEditing(null)
|
|
@@ -161,7 +162,7 @@ export function SalesOrderDraftLines({
|
|
|
161
162
|
{t('sales.documents.items.add', 'Add item')}
|
|
162
163
|
</Button>
|
|
163
164
|
</div>
|
|
164
|
-
{error ? <p className="text-sm text-
|
|
165
|
+
{error ? <p className="text-sm text-status-error-text" role="alert">{error}</p> : null}
|
|
165
166
|
<DataTable
|
|
166
167
|
columns={columns}
|
|
167
168
|
data={lines}
|
|
@@ -20,7 +20,7 @@ import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
|
20
20
|
import { cn } from '@open-mercato/shared/lib/utils'
|
|
21
21
|
import { E } from '#generated/entities.ids.generated'
|
|
22
22
|
import { emitSalesDocumentTotalsRefresh } from '@open-mercato/core/modules/sales/lib/frontend/documentTotalsEvents'
|
|
23
|
-
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
23
|
+
import { useT, useLocale } from '@open-mercato/shared/lib/i18n/context'
|
|
24
24
|
import { formatMoney, normalizeNumber } from './lineItemUtils'
|
|
25
25
|
import type { OrderLine, ShipmentRow } from './shipmentTypes'
|
|
26
26
|
import { formatAddressString, type AddressFormatStrategy, type AddressValue } from '@open-mercato/core/modules/customers/utils/addressFormat'
|
|
@@ -290,6 +290,7 @@ export function ShipmentDialog({
|
|
|
290
290
|
onAddComment,
|
|
291
291
|
}: ShipmentDialogProps) {
|
|
292
292
|
const t = useT()
|
|
293
|
+
const locale = useLocale()
|
|
293
294
|
const [formResetKey, setFormResetKey] = React.useState(0)
|
|
294
295
|
const [shippingMethods, setShippingMethods] = React.useState<ShippingMethodOption[]>([])
|
|
295
296
|
const [shippingMethodLoading, setShippingMethodLoading] = React.useState(false)
|
|
@@ -540,21 +541,21 @@ export function ShipmentDialog({
|
|
|
540
541
|
if (option.avgPrice !== null) {
|
|
541
542
|
parts.push(
|
|
542
543
|
t('sales.documents.shipments.shippingMethodAvg', 'Avg {{price}}', {
|
|
543
|
-
price: formatMoney(option.avgPrice, currency ?? null),
|
|
544
|
+
price: formatMoney(option.avgPrice, currency ?? null, locale),
|
|
544
545
|
}),
|
|
545
546
|
)
|
|
546
547
|
}
|
|
547
548
|
if (option.minPrice !== null) {
|
|
548
549
|
parts.push(
|
|
549
550
|
t('sales.documents.shipments.shippingMethodMin', 'Min {{price}}', {
|
|
550
|
-
price: formatMoney(option.minPrice, currency ?? null),
|
|
551
|
+
price: formatMoney(option.minPrice, currency ?? null, locale),
|
|
551
552
|
}),
|
|
552
553
|
)
|
|
553
554
|
}
|
|
554
555
|
if (parts.length === 0) return undefined
|
|
555
556
|
return parts.join(' · ')
|
|
556
557
|
},
|
|
557
|
-
[currencyCode, t],
|
|
558
|
+
[currencyCode, locale, t],
|
|
558
559
|
)
|
|
559
560
|
|
|
560
561
|
const mapShippingMethod = React.useCallback(
|
|
@@ -10,7 +10,7 @@ import { apiCall, withScopedApiRequestHeaders } from '@open-mercato/ui/backend/u
|
|
|
10
10
|
import { buildOptimisticLockHeader } from '@open-mercato/ui/backend/utils/optimisticLock'
|
|
11
11
|
import { deleteCrud } from '@open-mercato/ui/backend/utils/crud'
|
|
12
12
|
import { useOrganizationScopeDetail } from '@open-mercato/shared/lib/frontend/useOrganizationScope'
|
|
13
|
-
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
13
|
+
import { useT, useLocale } from '@open-mercato/shared/lib/i18n/context'
|
|
14
14
|
import { useConfirmDialog } from '@open-mercato/ui/backend/confirm-dialog'
|
|
15
15
|
import {
|
|
16
16
|
emitSalesDocumentTotalsRefresh,
|
|
@@ -41,11 +41,11 @@ type SalesShipmentsSectionProps = {
|
|
|
41
41
|
onAddComment?: (body: string) => Promise<void>
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
function formatDisplayDate(value: string | null | undefined): string | null {
|
|
44
|
+
export function formatDisplayDate(value: string | null | undefined, locale?: string): string | null {
|
|
45
45
|
if (!value) return null
|
|
46
46
|
const date = new Date(value)
|
|
47
47
|
if (Number.isNaN(date.getTime())) return null
|
|
48
|
-
return new Intl.DateTimeFormat(
|
|
48
|
+
return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date)
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
const formatShipmentAddress = (metadata?: Record<string, unknown> | null): string | null => {
|
|
@@ -123,6 +123,7 @@ export function SalesShipmentsSection({
|
|
|
123
123
|
onAddComment,
|
|
124
124
|
}: SalesShipmentsSectionProps) {
|
|
125
125
|
const t = useT()
|
|
126
|
+
const locale = useLocale()
|
|
126
127
|
const { organizationId, tenantId } = useOrganizationScopeDetail()
|
|
127
128
|
const { confirm, ConfirmDialogElement } = useConfirmDialog()
|
|
128
129
|
const resolvedOrganizationId = organizationIdProp ?? organizationId ?? null
|
|
@@ -486,8 +487,8 @@ export function SalesShipmentsSection({
|
|
|
486
487
|
) : (
|
|
487
488
|
<div className="grid gap-3 md:grid-cols-2">
|
|
488
489
|
{shipments.map((shipment) => {
|
|
489
|
-
const shippedAt = formatDisplayDate(shipment.shippedAt)
|
|
490
|
-
const deliveredAt = formatDisplayDate(shipment.deliveredAt)
|
|
490
|
+
const shippedAt = formatDisplayDate(shipment.shippedAt, locale)
|
|
491
|
+
const deliveredAt = formatDisplayDate(shipment.deliveredAt, locale)
|
|
491
492
|
const addressSummary = formatShipmentAddress(shipment.metadata)
|
|
492
493
|
const statusLabel =
|
|
493
494
|
shipment.statusLabel ??
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
type ShippedLineSnapshot = {
|
|
2
|
+
quantity: number;
|
|
3
|
+
totalNetAmount?: number | null;
|
|
4
|
+
totalGrossAmount?: number | null;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const SHIPPED_LINE_IMMUTABLE_PAYLOAD_FIELDS = [
|
|
8
|
+
"kind",
|
|
9
|
+
"productId",
|
|
10
|
+
"productVariantId",
|
|
11
|
+
"quantityUnit",
|
|
12
|
+
"unitPriceNet",
|
|
13
|
+
"unitPriceGross",
|
|
14
|
+
"priceId",
|
|
15
|
+
"priceMode",
|
|
16
|
+
"taxRateId",
|
|
17
|
+
"taxRate",
|
|
18
|
+
"taxAmount",
|
|
19
|
+
"discountAmount",
|
|
20
|
+
"discountPercent",
|
|
21
|
+
"catalogSnapshot",
|
|
22
|
+
"metadata",
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
25
|
+
function scaleTotal(
|
|
26
|
+
total: number | null | undefined,
|
|
27
|
+
previousQuantity: number,
|
|
28
|
+
nextQuantity: number,
|
|
29
|
+
): number | undefined {
|
|
30
|
+
if (
|
|
31
|
+
!Number.isFinite(total) ||
|
|
32
|
+
!Number.isFinite(previousQuantity) ||
|
|
33
|
+
previousQuantity <= 0
|
|
34
|
+
) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return (total as number) * (nextQuantity / previousQuantity);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function prepareShippedLineUpdatePayload(
|
|
41
|
+
payload: Record<string, unknown>,
|
|
42
|
+
currentLine: ShippedLineSnapshot | null,
|
|
43
|
+
): Record<string, unknown> {
|
|
44
|
+
if (!currentLine) return payload;
|
|
45
|
+
|
|
46
|
+
const nextPayload = { ...payload };
|
|
47
|
+
for (const field of SHIPPED_LINE_IMMUTABLE_PAYLOAD_FIELDS) {
|
|
48
|
+
delete nextPayload[field];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
delete nextPayload.totalNetAmount;
|
|
52
|
+
delete nextPayload.totalGrossAmount;
|
|
53
|
+
|
|
54
|
+
const nextQuantity = Number(nextPayload.quantity);
|
|
55
|
+
if (!Number.isFinite(nextQuantity) || nextQuantity === currentLine.quantity) {
|
|
56
|
+
return nextPayload;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const scaledNetTotal = scaleTotal(
|
|
60
|
+
currentLine.totalNetAmount,
|
|
61
|
+
currentLine.quantity,
|
|
62
|
+
nextQuantity,
|
|
63
|
+
);
|
|
64
|
+
const scaledGrossTotal = scaleTotal(
|
|
65
|
+
currentLine.totalGrossAmount,
|
|
66
|
+
currentLine.quantity,
|
|
67
|
+
nextQuantity,
|
|
68
|
+
);
|
|
69
|
+
if (scaledNetTotal !== undefined) nextPayload.totalNetAmount = scaledNetTotal;
|
|
70
|
+
if (scaledGrossTotal !== undefined)
|
|
71
|
+
nextPayload.totalGrossAmount = scaledGrossTotal;
|
|
72
|
+
|
|
73
|
+
return nextPayload;
|
|
74
|
+
}
|
|
@@ -9,9 +9,14 @@ export function normalizeNumber(value: unknown, fallback = 0): number {
|
|
|
9
9
|
return fallback
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Pass `locale` to format in the application locale (`useLocale()` in client components).
|
|
14
|
+
* Omitting it keeps the runtime default, which varies per machine and is therefore not
|
|
15
|
+
* assertable in tests.
|
|
16
|
+
*/
|
|
17
|
+
export function formatMoney(value: number, currency: string | null | undefined, locale?: string): string {
|
|
13
18
|
if (!currency) return value.toFixed(2)
|
|
14
|
-
return new Intl.NumberFormat(
|
|
19
|
+
return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(value)
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
export type LineDiscountDisplay = {
|
|
@@ -1790,6 +1790,9 @@ export class SalesPaymentAllocation {
|
|
|
1790
1790
|
|
|
1791
1791
|
@Entity({ tableName: 'sales_notes' })
|
|
1792
1792
|
@Index({ name: 'sales_notes_scope_idx', properties: ['organizationId', 'tenantId'] })
|
|
1793
|
+
@Index({ name: 'sales_notes_context_idx', properties: ['contextId'] })
|
|
1794
|
+
@Index({ name: 'sales_notes_order_idx', properties: ['order'] })
|
|
1795
|
+
@Index({ name: 'sales_notes_quote_idx', properties: ['quote'] })
|
|
1793
1796
|
export class SalesNote {
|
|
1794
1797
|
@PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })
|
|
1795
1798
|
id!: string
|
|
@@ -1836,6 +1839,9 @@ export class SalesNote {
|
|
|
1836
1839
|
|
|
1837
1840
|
@Entity({ tableName: 'sales_document_addresses' })
|
|
1838
1841
|
@Index({ name: 'sales_document_addresses_scope_idx', properties: ['organizationId', 'tenantId'] })
|
|
1842
|
+
@Index({ name: 'sales_document_addresses_document_idx', properties: ['documentId'] })
|
|
1843
|
+
@Index({ name: 'sales_document_addresses_order_idx', properties: ['order'] })
|
|
1844
|
+
@Index({ name: 'sales_document_addresses_quote_idx', properties: ['quote'] })
|
|
1839
1845
|
export class SalesDocumentAddress {
|
|
1840
1846
|
@PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })
|
|
1841
1847
|
id!: string
|
|
@@ -5,6 +5,7 @@ export const extensionPoints = defineModuleExtensionPoints({
|
|
|
5
5
|
hosts: {
|
|
6
6
|
ordersTable: dataTableExtensionHost({ tableId: 'sales.orders', source: 'components/documents/SalesDocumentsTable.tsx' }),
|
|
7
7
|
quotesTable: dataTableExtensionHost({ tableId: 'sales.quotes', source: 'components/documents/SalesDocumentsTable.tsx' }),
|
|
8
|
+
paymentsTable: dataTableExtensionHost({ tableId: 'sales.payments', source: 'components/documents/PaymentsSection.tsx' }),
|
|
8
9
|
orderItemColumns: injectionExtensionHost({
|
|
9
10
|
family: 'detail',
|
|
10
11
|
spotId: 'data-table:sales.order.items:columns',
|
|
@@ -1016,6 +1016,7 @@
|
|
|
1016
1016
|
"sales.documents.items.errorProductRequired": "Wähle ein Produkt aus, um fortzufahren.",
|
|
1017
1017
|
"sales.documents.items.errorQuantity": "Die Menge muss größer als 0 sein.",
|
|
1018
1018
|
"sales.documents.items.errorQuantityBelowShipped": "Die Menge kann nicht unter die bereits versandten {{shipped}} gesenkt werden.",
|
|
1019
|
+
"sales.documents.items.errorQuantityShipmentsUnknown": "Die Menge kann erst gesenkt werden, wenn die Sendungen dieses Auftrags geladen wurden. Öffnen Sie den Auftrag erneut, um es noch einmal zu versuchen.",
|
|
1019
1020
|
"sales.documents.items.errorSave": "Position konnte nicht gespeichert werden.",
|
|
1020
1021
|
"sales.documents.items.errorScope": "Organisation und Mandant sind erforderlich.",
|
|
1021
1022
|
"sales.documents.items.errorUnitPrice": "Der Stückpreis muss größer als 0 sein.",
|
|
@@ -1059,6 +1060,8 @@
|
|
|
1059
1060
|
"sales.documents.items.save": "Änderungen speichern",
|
|
1060
1061
|
"sales.documents.items.selectedProduct": "Ausgewählt {{id}}",
|
|
1061
1062
|
"sales.documents.items.selectedVariant": "Ausgewählt {{id}}",
|
|
1063
|
+
"sales.documents.items.shippedLineLockPending": "Die Preisangaben sind gesperrt, bis die Sendungen dieses Auftrags geladen wurden. Öffnen Sie den Auftrag erneut, um es noch einmal zu versuchen — Name und eine Erhöhung der Menge können weiterhin bearbeitet werden.",
|
|
1064
|
+
"sales.documents.items.shippedLineLocked": "Die Preisangaben dieser Position sind gesperrt, da bereits Artikel versandt wurden. Name und Menge können weiterhin bearbeitet werden.",
|
|
1062
1065
|
"sales.documents.items.status": "Status",
|
|
1063
1066
|
"sales.documents.items.statusEmpty": "Kein Status",
|
|
1064
1067
|
"sales.documents.items.statusLoading": "Status werden geladen…",
|
|
@@ -1093,6 +1096,8 @@
|
|
|
1093
1096
|
"sales.documents.items.variantSearch": "Variante suchen",
|
|
1094
1097
|
"sales.documents.list.errors.load": "Dokumente konnten nicht geladen werden.",
|
|
1095
1098
|
"sales.documents.list.filters.channel": "Kanal",
|
|
1099
|
+
"sales.documents.list.filters.channelPlaceholder": "Kanäle suchen",
|
|
1100
|
+
"sales.documents.list.filters.channelUnassigned": "(Kein Kanal)",
|
|
1096
1101
|
"sales.documents.list.filters.customer": "Kunden-ID",
|
|
1097
1102
|
"sales.documents.list.filters.customerPlaceholder": "Kunden-ID",
|
|
1098
1103
|
"sales.documents.list.filters.date": "Datum",
|
|
@@ -1321,13 +1326,16 @@
|
|
|
1321
1326
|
"sales.quotes.email.subject": "Angebot {quoteNumber}",
|
|
1322
1327
|
"sales.quotes.email.total": "Gesamt: {amount} {currency}",
|
|
1323
1328
|
"sales.quotes.email.validUntil": "Gültig bis: {date}",
|
|
1329
|
+
"sales.quotes.exchange_rate_unsupported": "Der Wechselkurs ist für Angebote nicht verfügbar.",
|
|
1324
1330
|
"sales.quotes.form.general": "Allgemein",
|
|
1325
1331
|
"sales.quotes.form.lines": "Positionen",
|
|
1326
1332
|
"sales.quotes.form.notes": "Notizen",
|
|
1333
|
+
"sales.quotes.fulfillment_status_unsupported": "Der Fulfillment-Status ist für Angebote nicht verfügbar.",
|
|
1327
1334
|
"sales.quotes.internal_notes_unsupported": "Interne Notizen sind für Angebote nicht verfügbar.",
|
|
1328
1335
|
"sales.quotes.lines.delete": "Angebotsposition löschen",
|
|
1329
1336
|
"sales.quotes.lines.upsert": "Angebotsposition aktualisieren",
|
|
1330
1337
|
"sales.quotes.list.title": "Angebote",
|
|
1338
|
+
"sales.quotes.payment_status_unsupported": "Der Zahlungsstatus ist für Angebote nicht verfügbar.",
|
|
1331
1339
|
"sales.quotes.public.acceptButton": "Angebot annehmen",
|
|
1332
1340
|
"sales.quotes.public.acceptFailed": "Angebot konnte nicht angenommen werden.",
|
|
1333
1341
|
"sales.quotes.public.acceptedMessage": "Auftrag erstellt: {{orderNumber}}",
|
|
@@ -1016,6 +1016,7 @@
|
|
|
1016
1016
|
"sales.documents.items.errorProductRequired": "Select a product to continue.",
|
|
1017
1017
|
"sales.documents.items.errorQuantity": "Quantity must be greater than 0.",
|
|
1018
1018
|
"sales.documents.items.errorQuantityBelowShipped": "You cannot lower the quantity below the {{shipped}} already shipped.",
|
|
1019
|
+
"sales.documents.items.errorQuantityShipmentsUnknown": "The quantity cannot be lowered until this order's shipments have been read. Reopen the order to try again.",
|
|
1019
1020
|
"sales.documents.items.errorSave": "Failed to save line.",
|
|
1020
1021
|
"sales.documents.items.errorScope": "Organization and tenant are required.",
|
|
1021
1022
|
"sales.documents.items.errorUnitPrice": "Unit price must be greater than 0.",
|
|
@@ -1059,6 +1060,8 @@
|
|
|
1059
1060
|
"sales.documents.items.save": "Save changes",
|
|
1060
1061
|
"sales.documents.items.selectedProduct": "Selected {{id}}",
|
|
1061
1062
|
"sales.documents.items.selectedVariant": "Selected {{id}}",
|
|
1063
|
+
"sales.documents.items.shippedLineLockPending": "Pricing is locked until this order's shipments have been read. Reopen the order to try again — you can still edit the name and raise the quantity.",
|
|
1064
|
+
"sales.documents.items.shippedLineLocked": "Pricing is locked on this line because it already has shipped items. You can still edit the name and quantity.",
|
|
1062
1065
|
"sales.documents.items.status": "Status",
|
|
1063
1066
|
"sales.documents.items.statusEmpty": "No status",
|
|
1064
1067
|
"sales.documents.items.statusLoading": "Loading statuses…",
|
|
@@ -1093,6 +1096,8 @@
|
|
|
1093
1096
|
"sales.documents.items.variantSearch": "Search variant",
|
|
1094
1097
|
"sales.documents.list.errors.load": "Failed to load documents.",
|
|
1095
1098
|
"sales.documents.list.filters.channel": "Channel",
|
|
1099
|
+
"sales.documents.list.filters.channelPlaceholder": "Search channels",
|
|
1100
|
+
"sales.documents.list.filters.channelUnassigned": "(No channel)",
|
|
1096
1101
|
"sales.documents.list.filters.customer": "Customer id",
|
|
1097
1102
|
"sales.documents.list.filters.customerPlaceholder": "Customer id",
|
|
1098
1103
|
"sales.documents.list.filters.date": "Date",
|
|
@@ -1321,13 +1326,16 @@
|
|
|
1321
1326
|
"sales.quotes.email.subject": "Quote {quoteNumber}",
|
|
1322
1327
|
"sales.quotes.email.total": "Total: {amount} {currency}",
|
|
1323
1328
|
"sales.quotes.email.validUntil": "Valid until: {date}",
|
|
1329
|
+
"sales.quotes.exchange_rate_unsupported": "Exchange rate is not available on quotes.",
|
|
1324
1330
|
"sales.quotes.form.general": "General",
|
|
1325
1331
|
"sales.quotes.form.lines": "Line Items",
|
|
1326
1332
|
"sales.quotes.form.notes": "Notes",
|
|
1333
|
+
"sales.quotes.fulfillment_status_unsupported": "Fulfillment status is not available on quotes.",
|
|
1327
1334
|
"sales.quotes.internal_notes_unsupported": "Internal notes are not available on quotes.",
|
|
1328
1335
|
"sales.quotes.lines.delete": "Delete quote line",
|
|
1329
1336
|
"sales.quotes.lines.upsert": "Update quote line",
|
|
1330
1337
|
"sales.quotes.list.title": "Quotes",
|
|
1338
|
+
"sales.quotes.payment_status_unsupported": "Payment status is not available on quotes.",
|
|
1331
1339
|
"sales.quotes.public.acceptButton": "Accept quote",
|
|
1332
1340
|
"sales.quotes.public.acceptFailed": "Failed to accept quote.",
|
|
1333
1341
|
"sales.quotes.public.acceptedMessage": "Order created: {{orderNumber}}",
|