@open-mercato/core 0.6.6-develop.6465.1.019f0fb26f → 0.6.6-develop.6471.1.9ab5bdd79a
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/dist/bootstrap.js +13 -11
- package/dist/bootstrap.js.map +2 -2
- package/dist/helpers/integration/queue-runner.js +4 -2
- package/dist/helpers/integration/queue-runner.js.map +2 -2
- package/dist/modules/api_keys/services/apiKeyService.js +5 -3
- package/dist/modules/api_keys/services/apiKeyService.js.map +2 -2
- package/dist/modules/attachments/api/image/[id]/[[...slug]]/route.js +4 -2
- package/dist/modules/attachments/api/image/[id]/[[...slug]]/route.js.map +2 -2
- package/dist/modules/attachments/api/library/[id]/route.js +3 -1
- package/dist/modules/attachments/api/library/[id]/route.js.map +2 -2
- package/dist/modules/attachments/api/route.js +8 -6
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +5 -3
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
- package/dist/modules/attachments/lib/assignmentDetails.js +3 -1
- package/dist/modules/attachments/lib/assignmentDetails.js.map +2 -2
- package/dist/modules/attachments/lib/drivers/driverFactory.js +3 -1
- package/dist/modules/attachments/lib/drivers/driverFactory.js.map +2 -2
- package/dist/modules/attachments/lib/ocrQueue.js +10 -11
- package/dist/modules/attachments/lib/ocrQueue.js.map +2 -2
- package/dist/modules/attachments/lib/ocrService.js +6 -4
- package/dist/modules/attachments/lib/ocrService.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js +3 -1
- package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js +3 -1
- package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +3 -1
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js +4 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js.map +2 -2
- package/dist/modules/audit_logs/services/accessLogService.js +4 -2
- package/dist/modules/audit_logs/services/accessLogService.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +7 -5
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/api/profile/route.js +4 -2
- package/dist/modules/auth/api/profile/route.js.map +2 -2
- package/dist/modules/auth/api/reset/confirm.js +3 -1
- package/dist/modules/auth/api/reset/confirm.js.map +2 -2
- package/dist/modules/auth/api/reset.js +4 -2
- package/dist/modules/auth/api/reset.js.map +2 -2
- package/dist/modules/auth/api/roles/route.js +3 -1
- package/dist/modules/auth/api/roles/route.js.map +2 -2
- package/dist/modules/auth/api/sidebar/variants/route.js +3 -1
- package/dist/modules/auth/api/sidebar/variants/route.js.map +2 -2
- package/dist/modules/auth/api/users/resend-invite/route.js +4 -2
- package/dist/modules/auth/api/users/resend-invite/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +3 -1
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/auth/profile/page.js +3 -1
- package/dist/modules/auth/backend/auth/profile/page.js.map +2 -2
- package/dist/modules/auth/backend/profile/change-password/page.js +3 -1
- package/dist/modules/auth/backend/profile/change-password/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +5 -3
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/create/page.js +4 -2
- package/dist/modules/auth/backend/users/create/page.js.map +2 -2
- package/dist/modules/auth/cli.js +10 -0
- package/dist/modules/auth/cli.js.map +2 -2
- package/dist/modules/auth/commands/users.js +4 -2
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/lib/consentIntegrity.js +3 -3
- package/dist/modules/auth/lib/consentIntegrity.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +9 -10
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/lib/tenantAccess.js +3 -1
- package/dist/modules/auth/lib/tenantAccess.js.map +2 -2
- package/dist/modules/auth/lib/tokenHash.js +3 -3
- package/dist/modules/auth/lib/tokenHash.js.map +2 -2
- package/dist/modules/business_rules/api/rules/route.js +4 -2
- package/dist/modules/business_rules/api/rules/route.js.map +2 -2
- package/dist/modules/business_rules/lib/expression-evaluator.js +7 -5
- package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +5 -3
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-evaluator.js +11 -12
- package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
- package/dist/modules/business_rules/subscribers/crud-rule-trigger.js +3 -1
- package/dist/modules/business_rules/subscribers/crud-rule-trigger.js.map +2 -2
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +3 -1
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +2 -2
- package/dist/modules/catalog/ai-agents-context.js +4 -5
- package/dist/modules/catalog/ai-agents-context.js.map +2 -2
- package/dist/modules/catalog/ai-tools/_shared.js +3 -1
- package/dist/modules/catalog/ai-tools/_shared.js.map +2 -2
- package/dist/modules/catalog/ai-tools/authoring-pack.js +3 -1
- package/dist/modules/catalog/ai-tools/authoring-pack.js.map +2 -2
- package/dist/modules/catalog/ai-tools/merchandising-pack.js +3 -1
- package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
- package/dist/modules/catalog/api/dictionaries/[key]/route.js +3 -1
- package/dist/modules/catalog/api/dictionaries/[key]/route.js.map +2 -2
- package/dist/modules/catalog/api/prices/route.js +3 -1
- package/dist/modules/catalog/api/prices/route.js.map +2 -2
- package/dist/modules/catalog/api/products/route.js +5 -3
- package/dist/modules/catalog/api/products/route.js.map +2 -2
- package/dist/modules/catalog/api/settings/route.js +4 -2
- package/dist/modules/catalog/api/settings/route.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +14 -12
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js +8 -6
- package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[productId]/variants/create/page.js +5 -3
- package/dist/modules/catalog/backend/catalog/products/[productId]/variants/create/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/create/page.js +5 -6
- package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/optionSchemaClient.js +3 -1
- package/dist/modules/catalog/backend/catalog/products/optionSchemaClient.js.map +2 -2
- package/dist/modules/catalog/components/PriceKindSettings.js +5 -3
- package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
- package/dist/modules/catalog/components/UnitPriceDisplaySettings.js +4 -2
- package/dist/modules/catalog/components/UnitPriceDisplaySettings.js.map +2 -2
- package/dist/modules/catalog/inbox-actions.js +4 -2
- package/dist/modules/catalog/inbox-actions.js.map +2 -2
- package/dist/modules/catalog/seed/examples.js +4 -5
- package/dist/modules/catalog/seed/examples.js.map +2 -2
- package/dist/modules/catalog/subscribers/low-stock-notification.js +3 -1
- package/dist/modules/catalog/subscribers/low-stock-notification.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/product-seo/state.js +3 -1
- package/dist/modules/catalog/widgets/injection/product-seo/state.js.map +2 -2
- package/dist/modules/communication_channels/api/get/oauth/[provider]/callback/route.js +12 -11
- package/dist/modules/communication_channels/api/get/oauth/[provider]/callback/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/import-history/route.js +3 -1
- package/dist/modules/communication_channels/api/post/channels/[id]/import-history/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/push/register/route.js +3 -1
- package/dist/modules/communication_channels/api/post/channels/[id]/push/register/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/webhook/[provider]/route.js +5 -3
- package/dist/modules/communication_channels/api/post/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/webhooks/gmail/route.js +6 -6
- package/dist/modules/communication_channels/api/post/webhooks/gmail/route.js.map +2 -2
- package/dist/modules/communication_channels/commands/connect-credential-channel.js +4 -6
- package/dist/modules/communication_channels/commands/connect-credential-channel.js.map +2 -2
- package/dist/modules/communication_channels/commands/delete-channel.js +3 -3
- package/dist/modules/communication_channels/commands/delete-channel.js.map +2 -2
- package/dist/modules/communication_channels/commands/deliver-outbound-message.js +4 -5
- package/dist/modules/communication_channels/commands/deliver-outbound-message.js.map +2 -2
- package/dist/modules/communication_channels/commands/disconnect-channel.js +3 -3
- package/dist/modules/communication_channels/commands/disconnect-channel.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +5 -12
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/commands/push-unregister.js +3 -3
- package/dist/modules/communication_channels/commands/push-unregister.js.map +2 -2
- package/dist/modules/communication_channels/commands/reassign-conversation.js +5 -3
- package/dist/modules/communication_channels/commands/reassign-conversation.js.map +2 -2
- package/dist/modules/communication_channels/lib/dead-letter.js +3 -3
- package/dist/modules/communication_channels/lib/dead-letter.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-mime.js +4 -6
- package/dist/modules/communication_channels/lib/email-mime.js.map +2 -2
- package/dist/modules/communication_channels/lib/oauth-client-config.js +5 -3
- package/dist/modules/communication_channels/lib/oauth-client-config.js.map +2 -2
- package/dist/modules/communication_channels/lib/send-as-user.js +3 -1
- package/dist/modules/communication_channels/lib/send-as-user.js.map +2 -2
- package/dist/modules/communication_channels/lib/thread-token.js +4 -2
- package/dist/modules/communication_channels/lib/thread-token.js.map +2 -2
- package/dist/modules/communication_channels/setup.js +3 -4
- package/dist/modules/communication_channels/setup.js.map +2 -2
- package/dist/modules/communication_channels/workers/channel-import-history.js +4 -6
- package/dist/modules/communication_channels/workers/channel-import-history.js.map +2 -2
- package/dist/modules/communication_channels/workers/gmail-history-sync.js +8 -16
- package/dist/modules/communication_channels/workers/gmail-history-sync.js.map +2 -2
- package/dist/modules/communication_channels/workers/gmail-renew-watch.js +5 -7
- package/dist/modules/communication_channels/workers/gmail-renew-watch.js.map +2 -2
- package/dist/modules/communication_channels/workers/outbound-delivery.js +6 -12
- package/dist/modules/communication_channels/workers/outbound-delivery.js.map +2 -2
- package/dist/modules/communication_channels/workers/poll-channel.js +7 -15
- package/dist/modules/communication_channels/workers/poll-channel.js.map +2 -2
- package/dist/modules/communication_channels/workers/poll-tick.js +5 -6
- package/dist/modules/communication_channels/workers/poll-tick.js.map +2 -2
- package/dist/modules/communication_channels/workers/reaction-processor.js +5 -9
- package/dist/modules/communication_channels/workers/reaction-processor.js.map +2 -2
- package/dist/modules/configs/api/cache/route.js +4 -2
- package/dist/modules/configs/api/cache/route.js.map +2 -2
- package/dist/modules/configs/api/system-status/route.js +4 -2
- package/dist/modules/configs/api/system-status/route.js.map +2 -2
- package/dist/modules/configs/api/upgrade-actions/route.js +4 -2
- package/dist/modules/configs/api/upgrade-actions/route.js.map +2 -2
- package/dist/modules/configs/components/ModuleTelemetryPanel.js +3 -1
- package/dist/modules/configs/components/ModuleTelemetryPanel.js.map +2 -2
- package/dist/modules/configs/lib/touchGeneratedBarrels.js +2 -1
- package/dist/modules/configs/lib/touchGeneratedBarrels.js.map +2 -2
- package/dist/modules/configs/services/upgradeActionsService.js +6 -3
- package/dist/modules/configs/services/upgradeActionsService.js.map +2 -2
- package/dist/modules/currencies/components/CurrencyFetchingConfig.js +3 -1
- package/dist/modules/currencies/components/CurrencyFetchingConfig.js.map +2 -2
- package/dist/modules/currencies/lib/exchangeRateFormConfig.js +3 -1
- package/dist/modules/currencies/lib/exchangeRateFormConfig.js.map +2 -2
- package/dist/modules/currencies/services/providers/nbp.js +6 -4
- package/dist/modules/currencies/services/providers/nbp.js.map +2 -2
- package/dist/modules/currencies/services/providers/raiffeisen.js +7 -7
- package/dist/modules/currencies/services/providers/raiffeisen.js.map +2 -2
- package/dist/modules/customer_accounts/api/domain-resolve/all.js +6 -5
- package/dist/modules/customer_accounts/api/domain-resolve/all.js.map +2 -2
- package/dist/modules/customer_accounts/api/signup.js +4 -2
- package/dist/modules/customer_accounts/api/signup.js.map +2 -2
- package/dist/modules/customer_accounts/lib/customerAuthServer.js +3 -1
- package/dist/modules/customer_accounts/lib/customerAuthServer.js.map +2 -2
- package/dist/modules/customer_accounts/subscribers/autoLinkCrm.js +3 -1
- package/dist/modules/customer_accounts/subscribers/autoLinkCrm.js.map +2 -2
- package/dist/modules/customer_accounts/subscribers/autoLinkCrmReverse.js +3 -1
- package/dist/modules/customer_accounts/subscribers/autoLinkCrmReverse.js.map +2 -2
- package/dist/modules/customer_accounts/subscribers/unlinkOnCompanyDelete.js +3 -1
- package/dist/modules/customer_accounts/subscribers/unlinkOnCompanyDelete.js.map +2 -2
- package/dist/modules/customer_accounts/subscribers/unlinkOnPersonDelete.js +3 -1
- package/dist/modules/customer_accounts/subscribers/unlinkOnPersonDelete.js.map +2 -2
- package/dist/modules/customers/ai-agents-context.js +4 -5
- package/dist/modules/customers/ai-agents-context.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +6 -4
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/comments/route.js +3 -1
- package/dist/modules/customers/api/comments/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +3 -1
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +5 -3
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/companies/route.js +5 -3
- package/dist/modules/customers/api/companies/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +3 -1
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/new-customers/route.js +3 -1
- package/dist/modules/customers/api/dashboard/widgets/new-customers/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/new-deals/route.js +3 -1
- package/dist/modules/customers/api/dashboard/widgets/new-deals/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/next-interactions/route.js +3 -1
- package/dist/modules/customers/api/dashboard/widgets/next-interactions/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +3 -1
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +3 -1
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +3 -1
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/bulk-update-owner/route.js +7 -5
- package/dist/modules/customers/api/deals/bulk-update-owner/route.js.map +2 -2
- package/dist/modules/customers/api/deals/bulk-update-stage/route.js +7 -5
- package/dist/modules/customers/api/deals/bulk-update-stage/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +3 -1
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/deals/summary/route.js +3 -1
- package/dist/modules/customers/api/deals/summary/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/[kind]/[id]/route.js +4 -2
- package/dist/modules/customers/api/dictionaries/[kind]/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/[kind]/route.js +5 -3
- package/dist/modules/customers/api/dictionaries/[kind]/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/cache.js +3 -1
- package/dist/modules/customers/api/dictionaries/cache.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/context.js +3 -1
- package/dist/modules/customers/api/dictionaries/context.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/currency/route.js +3 -1
- package/dist/modules/customers/api/dictionaries/currency/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/kind-settings/route.js +4 -2
- package/dist/modules/customers/api/dictionaries/kind-settings/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +7 -5
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/interactions/cancel/route.js +3 -1
- package/dist/modules/customers/api/interactions/cancel/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/complete/route.js +3 -1
- package/dist/modules/customers/api/interactions/complete/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/conflicts/route.js +3 -1
- package/dist/modules/customers/api/interactions/conflicts/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/counts/route.js +3 -1
- package/dist/modules/customers/api/interactions/counts/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/route.js +7 -4
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +3 -1
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/labels/assign/route.js +3 -1
- package/dist/modules/customers/api/labels/assign/route.js.map +2 -2
- package/dist/modules/customers/api/labels/route.js +6 -3
- package/dist/modules/customers/api/labels/route.js.map +2 -2
- package/dist/modules/customers/api/labels/unassign/route.js +3 -1
- package/dist/modules/customers/api/labels/unassign/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +3 -1
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/route.js +5 -3
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/route.js +5 -3
- package/dist/modules/customers/api/people/route.js.map +2 -2
- package/dist/modules/customers/api/pipeline-stages/reorder/route.js +3 -1
- package/dist/modules/customers/api/pipeline-stages/reorder/route.js.map +2 -2
- package/dist/modules/customers/api/pipeline-stages/route.js +6 -4
- package/dist/modules/customers/api/pipeline-stages/route.js.map +2 -2
- package/dist/modules/customers/api/pipelines/route.js +6 -4
- package/dist/modules/customers/api/pipelines/route.js.map +2 -2
- package/dist/modules/customers/api/settings/address-format/route.js +4 -2
- package/dist/modules/customers/api/settings/address-format/route.js.map +2 -2
- package/dist/modules/customers/api/settings/dictionary-sort-modes/route.js +4 -2
- package/dist/modules/customers/api/settings/dictionary-sort-modes/route.js.map +2 -2
- package/dist/modules/customers/api/settings/stuck-threshold/route.js +4 -2
- package/dist/modules/customers/api/settings/stuck-threshold/route.js.map +2 -2
- package/dist/modules/customers/api/tags/assign/route.js +3 -1
- package/dist/modules/customers/api/tags/assign/route.js.map +2 -2
- package/dist/modules/customers/api/tags/unassign/route.js +3 -1
- package/dist/modules/customers/api/tags/unassign/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +6 -4
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +5 -3
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealActivities.js +3 -1
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealActivities.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealClosure.js +3 -1
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealClosure.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/map/components/DealsMapCanvasImpl.js +4 -2
- package/dist/modules/customers/backend/customers/deals/map/components/DealsMapCanvasImpl.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +4 -2
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +5 -3
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +3 -1
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/dictionaries.js +3 -1
- package/dist/modules/customers/commands/dictionaries.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js +4 -2
- package/dist/modules/customers/commands/interactions.js.map +2 -2
- package/dist/modules/customers/commands/shared.js +4 -2
- package/dist/modules/customers/commands/shared.js.map +2 -2
- package/dist/modules/customers/commands/todos.js +3 -1
- package/dist/modules/customers/commands/todos.js.map +2 -2
- package/dist/modules/customers/components/DictionarySettings.js +5 -3
- package/dist/modules/customers/components/DictionarySettings.js.map +2 -2
- package/dist/modules/customers/components/DictionarySortSettings.js +3 -1
- package/dist/modules/customers/components/DictionarySortSettings.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivitiesCard.js +3 -1
- package/dist/modules/customers/components/detail/ActivitiesCard.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivitiesDayStrip.js +3 -1
- package/dist/modules/customers/components/detail/ActivitiesDayStrip.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivitiesSection.js +6 -4
- package/dist/modules/customers/components/detail/ActivitiesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivityCard.js +3 -1
- package/dist/modules/customers/components/detail/ActivityCard.js.map +2 -2
- package/dist/modules/customers/components/detail/ChangelogTab.js +3 -1
- package/dist/modules/customers/components/detail/ChangelogTab.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyCard.js +3 -1
- package/dist/modules/customers/components/detail/CompanyCard.js.map +2 -2
- package/dist/modules/customers/components/detail/ConfirmDealLostDialog.js +3 -1
- package/dist/modules/customers/components/detail/ConfirmDealLostDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +3 -1
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/InlineActivityComposer.js +3 -1
- package/dist/modules/customers/components/detail/InlineActivityComposer.js.map +2 -2
- package/dist/modules/customers/components/detail/ManageTagsDialog.js +3 -1
- package/dist/modules/customers/components/detail/ManageTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/RoleAssignmentRow.js +5 -3
- package/dist/modules/customers/components/detail/RoleAssignmentRow.js.map +2 -2
- package/dist/modules/customers/components/detail/RolesSection.js +4 -2
- package/dist/modules/customers/components/detail/RolesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js +5 -3
- package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js.map +2 -2
- package/dist/modules/customers/components/linking/LinkEntityDialog.js +4 -2
- package/dist/modules/customers/components/linking/LinkEntityDialog.js.map +2 -2
- package/dist/modules/customers/inbox-actions.js +3 -1
- package/dist/modules/customers/inbox-actions.js.map +2 -2
- package/dist/modules/customers/lib/bulkDeals.js +3 -1
- package/dist/modules/customers/lib/bulkDeals.js.map +2 -2
- package/dist/modules/customers/lib/dealClosureNotification.js +4 -2
- package/dist/modules/customers/lib/dealClosureNotification.js.map +2 -2
- package/dist/modules/customers/lib/dealStageTransitionTable.js +3 -1
- package/dist/modules/customers/lib/dealStageTransitionTable.js.map +2 -2
- package/dist/modules/customers/lib/interactionFeatureFlags.js +3 -1
- package/dist/modules/customers/lib/interactionFeatureFlags.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +3 -1
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/customers/search.js +14 -7
- package/dist/modules/customers/search.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +3 -1
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +3 -1
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +3 -1
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +3 -1
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +2 -2
- package/dist/modules/dashboards/api/widgets/data/batch/route.js +3 -1
- package/dist/modules/dashboards/api/widgets/data/batch/route.js.map +2 -2
- package/dist/modules/dashboards/api/widgets/data/route.js +3 -1
- package/dist/modules/dashboards/api/widgets/data/route.js.map +2 -2
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +5 -3
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +3 -1
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +2 -2
- package/dist/modules/data_sync/api/run.js +3 -1
- package/dist/modules/data_sync/api/run.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js +1 -1
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js.map +2 -2
- package/dist/modules/data_sync/lib/adapter-registry.js +11 -4
- package/dist/modules/data_sync/lib/adapter-registry.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +23 -2
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +3 -1
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +3 -1
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js +4 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/reorder/route.js +3 -1
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/reorder/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js +4 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/set-default/route.js +3 -1
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/set-default/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/route.js +5 -3
- package/dist/modules/dictionaries/api/[dictionaryId]/route.js.map +2 -2
- package/dist/modules/dictionaries/api/context.js +3 -1
- package/dist/modules/dictionaries/api/context.js.map +2 -2
- package/dist/modules/dictionaries/api/route.js +4 -2
- package/dist/modules/dictionaries/api/route.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionariesManager.js +5 -3
- package/dist/modules/dictionaries/components/DictionariesManager.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +4 -2
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +4 -2
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionarySelectControl.js +3 -1
- package/dist/modules/dictionaries/components/DictionarySelectControl.js.map +2 -2
- package/dist/modules/dictionaries/fields/dictionary.js +3 -1
- package/dist/modules/dictionaries/fields/dictionary.js.map +2 -2
- package/dist/modules/directory/api/organization-branding/route.js +3 -1
- package/dist/modules/directory/api/organization-branding/route.js.map +2 -2
- package/dist/modules/directory/api/organization-switcher/route.js +3 -1
- package/dist/modules/directory/api/organization-switcher/route.js.map +2 -2
- package/dist/modules/directory/commands/tenants.js +5 -3
- package/dist/modules/directory/commands/tenants.js.map +2 -2
- package/dist/modules/directory/utils/organizationScope.js +6 -4
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/definitions.cache.js +3 -1
- package/dist/modules/entities/api/definitions.cache.js.map +2 -2
- package/dist/modules/entities/api/definitions.js +7 -5
- package/dist/modules/entities/api/definitions.js.map +2 -2
- package/dist/modules/entities/api/records.js +4 -8
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/components/EncryptionManager.js +3 -1
- package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
- package/dist/modules/entities/lib/makeActivityRoute.js +3 -1
- package/dist/modules/entities/lib/makeActivityRoute.js.map +2 -2
- package/dist/modules/feature_toggles/api/overrides/route.js +3 -1
- package/dist/modules/feature_toggles/api/overrides/route.js.map +2 -2
- package/dist/modules/feature_toggles/lib/feature-flag-check.js +5 -9
- package/dist/modules/feature_toggles/lib/feature-flag-check.js.map +2 -2
- package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js +4 -2
- package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/emails/[id]/route.js +4 -2
- package/dist/modules/inbox_ops/api/emails/[id]/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/emails/route.js +3 -1
- package/dist/modules/inbox_ops/api/emails/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/extract/route.js +3 -1
- package/dist/modules/inbox_ops/api/extract/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/route.js +3 -1
- package/dist/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/proposals/[id]/replies/[replyId]/send/route.js +4 -2
- package/dist/modules/inbox_ops/api/proposals/[id]/replies/[replyId]/send/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/proposals/counts/route.js +4 -2
- package/dist/modules/inbox_ops/api/proposals/counts/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/proposals/route.js +3 -1
- package/dist/modules/inbox_ops/api/proposals/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/routeHelpers.js +3 -1
- package/dist/modules/inbox_ops/api/routeHelpers.js.map +2 -2
- package/dist/modules/inbox_ops/api/settings/route.js +3 -1
- package/dist/modules/inbox_ops/api/settings/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/webhook/inbound.js +7 -5
- package/dist/modules/inbox_ops/api/webhook/inbound.js.map +2 -2
- package/dist/modules/inbox_ops/lib/cache.js +4 -2
- package/dist/modules/inbox_ops/lib/cache.js.map +2 -2
- package/dist/modules/inbox_ops/lib/catalogLookup.js +3 -1
- package/dist/modules/inbox_ops/lib/catalogLookup.js.map +2 -2
- package/dist/modules/inbox_ops/lib/eventBus.js +3 -4
- package/dist/modules/inbox_ops/lib/eventBus.js.map +2 -2
- package/dist/modules/inbox_ops/lib/messagesIntegration.js +4 -8
- package/dist/modules/inbox_ops/lib/messagesIntegration.js.map +2 -2
- package/dist/modules/inbox_ops/subscribers/executionAuditor.js +3 -1
- package/dist/modules/inbox_ops/subscribers/executionAuditor.js.map +2 -2
- package/dist/modules/inbox_ops/subscribers/extractionWorker.js +10 -8
- package/dist/modules/inbox_ops/subscribers/extractionWorker.js.map +2 -2
- package/dist/modules/inbox_ops/subscribers/proposalNotifier.js +3 -1
- package/dist/modules/inbox_ops/subscribers/proposalNotifier.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +3 -4
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/commands/actions.js +3 -1
- package/dist/modules/messages/commands/actions.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +3 -1
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/lib/email-sender.js +3 -7
- package/dist/modules/messages/lib/email-sender.js.map +2 -2
- package/dist/modules/messages/lib/message-objects-registry.js +3 -1
- package/dist/modules/messages/lib/message-objects-registry.js.map +2 -2
- package/dist/modules/messages/lib/message-types-registry.js +3 -1
- package/dist/modules/messages/lib/message-types-registry.js.map +2 -2
- package/dist/modules/messages/workers/send-email.worker.js +6 -4
- package/dist/modules/messages/workers/send-email.worker.js.map +2 -2
- package/dist/modules/notifications/lib/notificationMapper.js +3 -4
- package/dist/modules/notifications/lib/notificationMapper.js.map +2 -2
- package/dist/modules/notifications/lib/notificationService.js +4 -5
- package/dist/modules/notifications/lib/notificationService.js.map +2 -2
- package/dist/modules/notifications/subscribers/deliver-notification.js +8 -13
- package/dist/modules/notifications/subscribers/deliver-notification.js.map +2 -2
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +3 -1
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/perspectives/services/perspectiveService.js +3 -3
- package/dist/modules/perspectives/services/perspectiveService.js.map +2 -2
- package/dist/modules/planner/api/access.js +3 -3
- package/dist/modules/planner/api/access.js.map +2 -2
- package/dist/modules/planner/api/availability-date-specific.js +3 -1
- package/dist/modules/planner/api/availability-date-specific.js.map +2 -2
- package/dist/modules/planner/api/availability-weekly.js +3 -1
- package/dist/modules/planner/api/availability-weekly.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +4 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/planner/components/AvailabilityRulesEditor.js +3 -1
- package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
- package/dist/modules/progress/api/jobs/route.js +3 -1
- package/dist/modules/progress/api/jobs/route.js.map +2 -2
- package/dist/modules/query_index/components/QueryIndexesTable.js +5 -3
- package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
- package/dist/modules/query_index/lib/batch.js +4 -2
- package/dist/modules/query_index/lib/batch.js.map +2 -2
- package/dist/modules/query_index/lib/coverage.js +3 -1
- package/dist/modules/query_index/lib/coverage.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +13 -18
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/reindexer.js +8 -6
- package/dist/modules/query_index/lib/reindexer.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +3 -1
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/query_index/subscribers/coverage_refresh.js +3 -1
- package/dist/modules/query_index/subscribers/coverage_refresh.js.map +2 -2
- package/dist/modules/resources/api/comments.js +3 -1
- package/dist/modules/resources/api/comments.js.map +2 -2
- package/dist/modules/resources/api/resources/tags/assign/route.js +3 -1
- package/dist/modules/resources/api/resources/tags/assign/route.js.map +2 -2
- package/dist/modules/resources/api/resources/tags/unassign/route.js +3 -1
- package/dist/modules/resources/api/resources/tags/unassign/route.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/[id]/edit/page.js +3 -1
- package/dist/modules/resources/backend/resources/resource-types/[id]/edit/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +4 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/commands/activities.js +6 -5
- package/dist/modules/resources/commands/activities.js.map +2 -2
- package/dist/modules/resources/commands/comments.js +6 -4
- package/dist/modules/resources/commands/comments.js.map +2 -2
- package/dist/modules/resources/commands/shared.js +24 -1
- package/dist/modules/resources/commands/shared.js.map +2 -2
- package/dist/modules/sales/api/channels/route.js +3 -1
- package/dist/modules/sales/api/channels/route.js.map +2 -2
- package/dist/modules/sales/api/document-history/route.js +3 -1
- package/dist/modules/sales/api/document-history/route.js.map +2 -2
- package/dist/modules/sales/api/document-numbers/route.js +3 -1
- package/dist/modules/sales/api/document-numbers/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/accept/route.js +4 -2
- package/dist/modules/sales/api/quotes/accept/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/convert/route.js +3 -1
- package/dist/modules/sales/api/quotes/convert/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/public/[token]/route.js +3 -1
- package/dist/modules/sales/api/quotes/public/[token]/route.js.map +2 -2
- package/dist/modules/sales/api/quotes/send/route.js +3 -1
- package/dist/modules/sales/api/quotes/send/route.js.map +2 -2
- package/dist/modules/sales/api/returns/[id]/route.js +3 -1
- package/dist/modules/sales/api/returns/[id]/route.js.map +2 -2
- package/dist/modules/sales/api/settings/document-numbers/route.js +4 -2
- package/dist/modules/sales/api/settings/document-numbers/route.js.map +2 -2
- package/dist/modules/sales/api/settings/order-editing/route.js +4 -2
- package/dist/modules/sales/api/settings/order-editing/route.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/[channelId]/edit/page.js +3 -1
- package/dist/modules/sales/backend/sales/channels/[channelId]/edit/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +6 -4
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +4 -2
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +20 -18
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +4 -8
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/commands/payments.js +3 -1
- package/dist/modules/sales/commands/payments.js.map +2 -2
- package/dist/modules/sales/commands/shipments.js +3 -1
- package/dist/modules/sales/commands/shipments.js.map +2 -2
- package/dist/modules/sales/components/AdjustmentKindSettings.js +5 -3
- package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
- package/dist/modules/sales/components/DocumentNumberSettings.js +4 -2
- package/dist/modules/sales/components/DocumentNumberSettings.js.map +2 -2
- package/dist/modules/sales/components/OrderEditingSettings.js +4 -2
- package/dist/modules/sales/components/OrderEditingSettings.js.map +2 -2
- package/dist/modules/sales/components/PaymentMethodsSettings.js +5 -3
- package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js +5 -3
- package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/StatusSettings.js +5 -3
- package/dist/modules/sales/components/StatusSettings.js.map +2 -2
- package/dist/modules/sales/components/TaxRatesSettings.js +5 -3
- package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
- package/dist/modules/sales/components/channels/ChannelOfferForm.js +16 -14
- package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +4 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AddressesSection.js +5 -3
- package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentDialog.js +3 -1
- package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +5 -3
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +6 -4
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +8 -6
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentDialog.js +5 -3
- package/dist/modules/sales/components/documents/PaymentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +4 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentForm.js +14 -12
- package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +5 -3
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +9 -7
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +4 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/frontend/quote/[token]/page.js +4 -2
- package/dist/modules/sales/frontend/quote/[token]/page.js.map +2 -2
- package/dist/modules/sales/seed/examples.js +7 -9
- package/dist/modules/sales/seed/examples.js.map +2 -2
- package/dist/modules/sales/subscribers/quote-expiring-notification.js +3 -1
- package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +2 -2
- package/dist/modules/sales/subscribers/reconcileOnAddressDelete.js +3 -1
- package/dist/modules/sales/subscribers/reconcileOnAddressDelete.js.map +2 -2
- package/dist/modules/sales/subscribers/reconcileOnCompanyDelete.js +3 -1
- package/dist/modules/sales/subscribers/reconcileOnCompanyDelete.js.map +2 -2
- package/dist/modules/sales/subscribers/reconcileOnCustomerDelete.js +3 -1
- package/dist/modules/sales/subscribers/reconcileOnCustomerDelete.js.map +2 -2
- package/dist/modules/sales/widgets/dashboard/makeDashboardWidgetRoute.js +5 -3
- package/dist/modules/sales/widgets/dashboard/makeDashboardWidgetRoute.js.map +2 -2
- package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +3 -1
- package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +2 -2
- package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +3 -1
- package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +2 -2
- package/dist/modules/shipping_carriers/api/tracking/route.js +5 -0
- package/dist/modules/shipping_carriers/api/tracking/route.js.map +2 -2
- package/dist/modules/shipping_carriers/api/webhook/[provider]/route.js +3 -1
- package/dist/modules/shipping_carriers/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/shipping-service.js +41 -19
- package/dist/modules/shipping_carriers/lib/shipping-service.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/upstream-error-response.js +3 -1
- package/dist/modules/shipping_carriers/lib/upstream-error-response.js.map +2 -2
- package/dist/modules/shipping_carriers/workers/webhook-processor.js +3 -5
- package/dist/modules/shipping_carriers/workers/webhook-processor.js.map +2 -2
- package/dist/modules/staff/api/comments.js +3 -1
- package/dist/modules/staff/api/comments.js.map +2 -2
- package/dist/modules/staff/api/leave-requests/accept/route.js +3 -1
- package/dist/modules/staff/api/leave-requests/accept/route.js.map +2 -2
- package/dist/modules/staff/api/leave-requests/reject/route.js +3 -1
- package/dist/modules/staff/api/leave-requests/reject/route.js.map +2 -2
- package/dist/modules/staff/api/team-members/assignable/route.js +3 -1
- package/dist/modules/staff/api/team-members/assignable/route.js.map +2 -2
- package/dist/modules/staff/api/team-members/self/route.js +4 -2
- package/dist/modules/staff/api/team-members/self/route.js.map +2 -2
- package/dist/modules/staff/api/team-members/tags/assign/route.js +3 -1
- package/dist/modules/staff/api/team-members/tags/assign/route.js.map +2 -2
- package/dist/modules/staff/api/team-members/tags/unassign/route.js +3 -1
- package/dist/modules/staff/api/team-members/tags/unassign/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js +3 -1
- package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/my-projects/route.js +3 -1
- package/dist/modules/staff/api/timesheets/my-projects/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/projects/kpis/route.js +3 -1
- package/dist/modules/staff/api/timesheets/projects/kpis/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js +3 -1
- package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js +4 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js +4 -2
- package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js +3 -1
- package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js.map +2 -2
- package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js +3 -1
- package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +4 -2
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +4 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +4 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +4 -2
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +7 -5
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js +3 -1
- package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +4 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/staff/commands/timesheets-entries.js +3 -1
- package/dist/modules/staff/commands/timesheets-entries.js.map +2 -2
- package/dist/modules/staff/widgets/dashboard/timesheets-hours-by-project/widget.client.js +3 -1
- package/dist/modules/staff/widgets/dashboard/timesheets-hours-by-project/widget.client.js.map +2 -2
- package/dist/modules/staff/widgets/dashboard/timesheets-time-reporting/widget.client.js +5 -3
- package/dist/modules/staff/widgets/dashboard/timesheets-time-reporting/widget.client.js.map +2 -2
- package/dist/modules/sync_excel/api/import/route.js +3 -1
- package/dist/modules/sync_excel/api/import/route.js.map +2 -2
- package/dist/modules/translations/api/[entityType]/[entityId]/route.js +5 -3
- package/dist/modules/translations/api/[entityType]/[entityId]/route.js.map +2 -2
- package/dist/modules/translations/api/get/locales.js +3 -1
- package/dist/modules/translations/api/get/locales.js.map +2 -2
- package/dist/modules/translations/api/put/locales.js +3 -1
- package/dist/modules/translations/api/put/locales.js.map +2 -2
- package/dist/modules/translations/components/TranslationManager.js +3 -1
- package/dist/modules/translations/components/TranslationManager.js.map +2 -2
- package/dist/modules/translations/subscribers/cleanup.js +3 -1
- package/dist/modules/translations/subscribers/cleanup.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js +4 -2
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +4 -2
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/route.js +6 -4
- package/dist/modules/workflows/api/definitions/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/route.js +4 -2
- package/dist/modules/workflows/api/definitions/route.js.map +2 -2
- package/dist/modules/workflows/api/events/[id]/route.js +3 -1
- package/dist/modules/workflows/api/events/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/events/route.js +3 -1
- package/dist/modules/workflows/api/events/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/advance/route.js +3 -1
- package/dist/modules/workflows/api/instances/[id]/advance/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/cancel/route.js +3 -1
- package/dist/modules/workflows/api/instances/[id]/cancel/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/events/route.js +3 -1
- package/dist/modules/workflows/api/instances/[id]/events/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/retry/route.js +3 -1
- package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/route.js +3 -1
- package/dist/modules/workflows/api/instances/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/signal/route.js +5 -7
- package/dist/modules/workflows/api/instances/[id]/signal/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/route.js +5 -3
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/validate-start/route.js +3 -1
- package/dist/modules/workflows/api/instances/validate-start/route.js.map +2 -2
- package/dist/modules/workflows/api/signals/route.js +3 -1
- package/dist/modules/workflows/api/signals/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js +3 -1
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js +3 -1
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/route.js +3 -1
- package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/route.js +3 -1
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +4 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.js +5 -3
- package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.js +3 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
- package/dist/modules/workflows/components/BusinessRulesSelector.js +5 -3
- package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowSelector.js +5 -3
- package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +3 -1
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +3 -1
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/WorkflowSelectorField.js +3 -1
- package/dist/modules/workflows/components/fields/WorkflowSelectorField.js.map +2 -2
- package/dist/modules/workflows/frontend/checkout-demo/page.js +8 -7
- package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +25 -21
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/activity-worker-handler.js +8 -15
- package/dist/modules/workflows/lib/activity-worker-handler.js.map +2 -2
- package/dist/modules/workflows/lib/code-registry.js +7 -7
- package/dist/modules/workflows/lib/code-registry.js.map +2 -2
- package/dist/modules/workflows/lib/compensation-handler.js +4 -2
- package/dist/modules/workflows/lib/compensation-handler.js.map +2 -2
- package/dist/modules/workflows/lib/edgeFormTransforms.js +3 -1
- package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/event-trigger-service.js +5 -3
- package/dist/modules/workflows/lib/event-trigger-service.js.map +2 -2
- package/dist/modules/workflows/lib/nodeFormTransforms.js +3 -1
- package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/seeds.js +16 -2
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/signal-handler.js +3 -1
- package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
- package/dist/modules/workflows/lib/start-validator.js +9 -3
- package/dist/modules/workflows/lib/start-validator.js.map +2 -2
- package/dist/modules/workflows/lib/step-handler.js +3 -1
- package/dist/modules/workflows/lib/step-handler.js.map +2 -2
- package/dist/modules/workflows/lib/task-handler.js +3 -1
- package/dist/modules/workflows/lib/task-handler.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +5 -3
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-executor.js +27 -15
- package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
- package/dist/modules/workflows/subscribers/event-trigger.js +21 -18
- package/dist/modules/workflows/subscribers/event-trigger.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +3 -1
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-activities.worker.js +30 -20
- package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
- package/package.json +7 -7
- package/src/bootstrap.ts +14 -11
- package/src/helpers/integration/queue-runner.ts +2 -2
- package/src/modules/api_keys/services/apiKeyService.ts +6 -3
- package/src/modules/attachments/api/image/[id]/[[...slug]]/route.ts +5 -2
- package/src/modules/attachments/api/library/[id]/route.ts +4 -1
- package/src/modules/attachments/api/route.ts +9 -6
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +6 -3
- package/src/modules/attachments/lib/assignmentDetails.ts +4 -1
- package/src/modules/attachments/lib/drivers/driverFactory.ts +4 -1
- package/src/modules/attachments/lib/ocrQueue.ts +11 -11
- package/src/modules/attachments/lib/ocrService.ts +7 -4
- package/src/modules/audit_logs/api/audit-logs/actions/redo/route.ts +4 -1
- package/src/modules/audit_logs/api/audit-logs/actions/undo/route.ts +4 -1
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +4 -1
- package/src/modules/audit_logs/components/AuditLogsActions.tsx +5 -2
- package/src/modules/audit_logs/services/accessLogService.ts +5 -4
- package/src/modules/audit_logs/services/actionLogService.ts +5 -2
- package/src/modules/auth/api/profile/route.ts +5 -2
- package/src/modules/auth/api/reset/confirm.ts +4 -1
- package/src/modules/auth/api/reset.ts +5 -2
- package/src/modules/auth/api/roles/route.ts +4 -1
- package/src/modules/auth/api/sidebar/variants/route.ts +4 -2
- package/src/modules/auth/api/users/resend-invite/route.ts +5 -2
- package/src/modules/auth/api/users/route.ts +4 -1
- package/src/modules/auth/backend/auth/profile/page.tsx +4 -1
- package/src/modules/auth/backend/profile/change-password/page.tsx +4 -1
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +6 -3
- package/src/modules/auth/backend/users/create/page.tsx +5 -2
- package/src/modules/auth/cli.ts +10 -0
- package/src/modules/auth/commands/users.ts +5 -2
- package/src/modules/auth/lib/consentIntegrity.ts +4 -4
- package/src/modules/auth/lib/setup-app.ts +10 -10
- package/src/modules/auth/lib/tenantAccess.ts +4 -1
- package/src/modules/auth/lib/tokenHash.ts +4 -4
- package/src/modules/business_rules/api/rules/route.ts +5 -2
- package/src/modules/business_rules/lib/expression-evaluator.ts +8 -6
- package/src/modules/business_rules/lib/rule-engine.ts +6 -3
- package/src/modules/business_rules/lib/rule-evaluator.ts +11 -11
- package/src/modules/business_rules/subscribers/crud-rule-trigger.ts +4 -1
- package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +4 -1
- package/src/modules/catalog/ai-agents-context.ts +5 -5
- package/src/modules/catalog/ai-tools/_shared.ts +4 -1
- package/src/modules/catalog/ai-tools/authoring-pack.ts +4 -1
- package/src/modules/catalog/ai-tools/merchandising-pack.ts +4 -1
- package/src/modules/catalog/api/dictionaries/[key]/route.ts +4 -1
- package/src/modules/catalog/api/prices/route.ts +4 -1
- package/src/modules/catalog/api/products/route.ts +6 -3
- package/src/modules/catalog/api/settings/route.ts +5 -2
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +15 -12
- package/src/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.tsx +9 -6
- package/src/modules/catalog/backend/catalog/products/[productId]/variants/create/page.tsx +6 -3
- package/src/modules/catalog/backend/catalog/products/create/page.tsx +6 -6
- package/src/modules/catalog/backend/catalog/products/optionSchemaClient.ts +4 -1
- package/src/modules/catalog/components/PriceKindSettings.tsx +6 -3
- package/src/modules/catalog/components/UnitPriceDisplaySettings.tsx +5 -2
- package/src/modules/catalog/inbox-actions.ts +5 -2
- package/src/modules/catalog/seed/examples.ts +5 -5
- package/src/modules/catalog/subscribers/low-stock-notification.ts +4 -1
- package/src/modules/catalog/widgets/injection/product-seo/state.ts +4 -1
- package/src/modules/communication_channels/api/get/oauth/[provider]/callback/route.ts +13 -13
- package/src/modules/communication_channels/api/post/channels/[id]/import-history/route.ts +4 -1
- package/src/modules/communication_channels/api/post/channels/[id]/push/register/route.ts +4 -1
- package/src/modules/communication_channels/api/post/webhook/[provider]/route.ts +6 -3
- package/src/modules/communication_channels/api/post/webhooks/gmail/route.ts +7 -6
- package/src/modules/communication_channels/commands/connect-credential-channel.ts +5 -10
- package/src/modules/communication_channels/commands/delete-channel.ts +4 -5
- package/src/modules/communication_channels/commands/deliver-outbound-message.ts +5 -5
- package/src/modules/communication_channels/commands/disconnect-channel.ts +4 -5
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +6 -12
- package/src/modules/communication_channels/commands/push-unregister.ts +4 -3
- package/src/modules/communication_channels/commands/reassign-conversation.ts +6 -3
- package/src/modules/communication_channels/lib/dead-letter.ts +4 -5
- package/src/modules/communication_channels/lib/email-mime.ts +5 -6
- package/src/modules/communication_channels/lib/oauth-client-config.ts +7 -3
- package/src/modules/communication_channels/lib/send-as-user.ts +4 -1
- package/src/modules/communication_channels/lib/thread-token.ts +5 -2
- package/src/modules/communication_channels/setup.ts +4 -4
- package/src/modules/communication_channels/workers/channel-import-history.ts +5 -8
- package/src/modules/communication_channels/workers/gmail-history-sync.ts +9 -18
- package/src/modules/communication_channels/workers/gmail-renew-watch.ts +6 -9
- package/src/modules/communication_channels/workers/outbound-delivery.ts +7 -12
- package/src/modules/communication_channels/workers/poll-channel.ts +8 -15
- package/src/modules/communication_channels/workers/poll-tick.ts +6 -6
- package/src/modules/communication_channels/workers/reaction-processor.ts +6 -9
- package/src/modules/configs/api/cache/route.ts +5 -2
- package/src/modules/configs/api/system-status/route.ts +5 -2
- package/src/modules/configs/api/upgrade-actions/route.ts +5 -2
- package/src/modules/configs/components/ModuleTelemetryPanel.tsx +4 -1
- package/src/modules/configs/lib/touchGeneratedBarrels.ts +1 -1
- package/src/modules/configs/services/upgradeActionsService.ts +7 -3
- package/src/modules/currencies/components/CurrencyFetchingConfig.tsx +4 -1
- package/src/modules/currencies/lib/exchangeRateFormConfig.ts +4 -1
- package/src/modules/currencies/services/providers/nbp.ts +7 -4
- package/src/modules/currencies/services/providers/raiffeisen.ts +8 -7
- package/src/modules/customer_accounts/api/domain-resolve/all.ts +7 -5
- package/src/modules/customer_accounts/api/signup.ts +5 -2
- package/src/modules/customer_accounts/lib/customerAuthServer.ts +4 -1
- package/src/modules/customer_accounts/subscribers/autoLinkCrm.ts +4 -1
- package/src/modules/customer_accounts/subscribers/autoLinkCrmReverse.ts +4 -1
- package/src/modules/customer_accounts/subscribers/unlinkOnCompanyDelete.ts +4 -1
- package/src/modules/customer_accounts/subscribers/unlinkOnPersonDelete.ts +4 -1
- package/src/modules/customers/ai-agents-context.ts +5 -5
- package/src/modules/customers/api/activities/route.ts +7 -4
- package/src/modules/customers/api/comments/route.ts +4 -1
- package/src/modules/customers/api/companies/[id]/people/route.ts +4 -1
- package/src/modules/customers/api/companies/[id]/route.ts +6 -3
- package/src/modules/customers/api/companies/route.ts +6 -3
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +4 -1
- package/src/modules/customers/api/dashboard/widgets/new-customers/route.ts +4 -1
- package/src/modules/customers/api/dashboard/widgets/new-deals/route.ts +4 -1
- package/src/modules/customers/api/dashboard/widgets/next-interactions/route.ts +4 -1
- 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/aggregate/route.ts +4 -1
- package/src/modules/customers/api/deals/bulk-update-owner/route.ts +8 -5
- package/src/modules/customers/api/deals/bulk-update-stage/route.ts +8 -5
- package/src/modules/customers/api/deals/route.ts +4 -1
- package/src/modules/customers/api/deals/summary/route.ts +4 -1
- package/src/modules/customers/api/dictionaries/[kind]/[id]/route.ts +5 -2
- package/src/modules/customers/api/dictionaries/[kind]/route.ts +6 -3
- package/src/modules/customers/api/dictionaries/cache.ts +4 -1
- package/src/modules/customers/api/dictionaries/context.ts +4 -1
- package/src/modules/customers/api/dictionaries/currency/route.ts +4 -1
- package/src/modules/customers/api/dictionaries/kind-settings/route.ts +5 -2
- package/src/modules/customers/api/entity-roles-factory.ts +8 -5
- package/src/modules/customers/api/interactions/cancel/route.ts +4 -1
- package/src/modules/customers/api/interactions/complete/route.ts +4 -1
- package/src/modules/customers/api/interactions/conflicts/route.ts +4 -1
- package/src/modules/customers/api/interactions/counts/route.ts +4 -1
- package/src/modules/customers/api/interactions/route.ts +8 -4
- package/src/modules/customers/api/interactions/tasks/route.ts +4 -1
- package/src/modules/customers/api/labels/assign/route.ts +4 -1
- package/src/modules/customers/api/labels/route.ts +7 -3
- package/src/modules/customers/api/labels/unassign/route.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 +6 -3
- package/src/modules/customers/api/people/route.ts +6 -3
- package/src/modules/customers/api/pipeline-stages/reorder/route.ts +4 -1
- package/src/modules/customers/api/pipeline-stages/route.ts +7 -4
- package/src/modules/customers/api/pipelines/route.ts +7 -4
- package/src/modules/customers/api/settings/address-format/route.ts +5 -2
- package/src/modules/customers/api/settings/dictionary-sort-modes/route.ts +5 -2
- package/src/modules/customers/api/settings/stuck-threshold/route.ts +5 -2
- package/src/modules/customers/api/tags/assign/route.ts +4 -1
- package/src/modules/customers/api/tags/unassign/route.ts +4 -1
- package/src/modules/customers/api/todos/route.ts +7 -4
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +6 -3
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealActivities.ts +4 -1
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealClosure.ts +4 -1
- package/src/modules/customers/backend/customers/deals/map/components/DealsMapCanvasImpl.tsx +5 -3
- package/src/modules/customers/backend/customers/deals/page.tsx +5 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +6 -3
- package/src/modules/customers/commands/deals.ts +4 -1
- package/src/modules/customers/commands/dictionaries.ts +4 -1
- package/src/modules/customers/commands/interactions.ts +5 -2
- package/src/modules/customers/commands/shared.ts +5 -2
- package/src/modules/customers/commands/todos.ts +4 -1
- package/src/modules/customers/components/DictionarySettings.tsx +6 -3
- package/src/modules/customers/components/DictionarySortSettings.tsx +4 -1
- package/src/modules/customers/components/detail/ActivitiesCard.tsx +4 -1
- package/src/modules/customers/components/detail/ActivitiesDayStrip.tsx +4 -1
- package/src/modules/customers/components/detail/ActivitiesSection.tsx +7 -4
- package/src/modules/customers/components/detail/ActivityCard.tsx +4 -1
- package/src/modules/customers/components/detail/ChangelogTab.tsx +4 -1
- package/src/modules/customers/components/detail/CompanyCard.tsx +4 -1
- package/src/modules/customers/components/detail/ConfirmDealLostDialog.tsx +4 -1
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +4 -1
- package/src/modules/customers/components/detail/InlineActivityComposer.tsx +4 -1
- package/src/modules/customers/components/detail/ManageTagsDialog.tsx +4 -1
- package/src/modules/customers/components/detail/RoleAssignmentRow.tsx +6 -3
- package/src/modules/customers/components/detail/RolesSection.tsx +5 -2
- package/src/modules/customers/components/detail/hooks/useInteractionMutations.ts +6 -3
- package/src/modules/customers/components/linking/LinkEntityDialog.tsx +5 -2
- package/src/modules/customers/inbox-actions.ts +4 -1
- package/src/modules/customers/lib/bulkDeals.ts +4 -1
- package/src/modules/customers/lib/dealClosureNotification.ts +5 -2
- package/src/modules/customers/lib/dealStageTransitionTable.ts +4 -1
- package/src/modules/customers/lib/interactionFeatureFlags.ts +5 -1
- package/src/modules/customers/lib/todoCompatibility.ts +4 -1
- package/src/modules/customers/search.ts +15 -7
- package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +4 -1
- package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +4 -1
- package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +4 -1
- package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +4 -1
- package/src/modules/dashboards/api/widgets/data/batch/route.ts +4 -1
- package/src/modules/dashboards/api/widgets/data/route.ts +4 -1
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +6 -3
- package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +4 -1
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +4 -1
- package/src/modules/data_sync/api/run.ts +4 -1
- package/src/modules/data_sync/backend/data-sync/runs/[id]/page.tsx +3 -1
- package/src/modules/data_sync/lib/adapter-registry.ts +16 -4
- package/src/modules/data_sync/lib/sync-engine.ts +31 -2
- package/src/modules/data_sync/workers/sync-export.ts +4 -1
- package/src/modules/data_sync/workers/sync-import.ts +4 -1
- package/src/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.ts +5 -2
- package/src/modules/dictionaries/api/[dictionaryId]/entries/reorder/route.ts +4 -1
- package/src/modules/dictionaries/api/[dictionaryId]/entries/route.ts +5 -2
- package/src/modules/dictionaries/api/[dictionaryId]/entries/set-default/route.ts +4 -1
- package/src/modules/dictionaries/api/[dictionaryId]/route.ts +6 -3
- package/src/modules/dictionaries/api/context.ts +4 -1
- package/src/modules/dictionaries/api/route.ts +5 -2
- package/src/modules/dictionaries/components/DictionariesManager.tsx +6 -3
- package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +5 -2
- package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +5 -2
- package/src/modules/dictionaries/components/DictionarySelectControl.tsx +4 -1
- package/src/modules/dictionaries/fields/dictionary.tsx +4 -1
- package/src/modules/directory/api/organization-branding/route.ts +4 -1
- package/src/modules/directory/api/organization-switcher/route.ts +4 -1
- package/src/modules/directory/commands/tenants.ts +6 -3
- package/src/modules/directory/utils/organizationScope.ts +7 -4
- package/src/modules/entities/api/definitions.cache.ts +4 -1
- package/src/modules/entities/api/definitions.ts +8 -5
- package/src/modules/entities/api/records.ts +5 -2
- package/src/modules/entities/components/EncryptionManager.tsx +4 -1
- package/src/modules/entities/lib/makeActivityRoute.ts +4 -1
- package/src/modules/feature_toggles/api/overrides/route.ts +4 -1
- package/src/modules/feature_toggles/lib/feature-flag-check.ts +6 -9
- package/src/modules/inbox_ops/api/emails/[id]/reprocess/route.ts +5 -2
- package/src/modules/inbox_ops/api/emails/[id]/route.ts +5 -2
- package/src/modules/inbox_ops/api/emails/route.ts +4 -1
- package/src/modules/inbox_ops/api/extract/route.ts +4 -1
- package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/route.ts +4 -1
- package/src/modules/inbox_ops/api/proposals/[id]/replies/[replyId]/send/route.ts +5 -2
- package/src/modules/inbox_ops/api/proposals/counts/route.ts +5 -2
- package/src/modules/inbox_ops/api/proposals/route.ts +4 -1
- package/src/modules/inbox_ops/api/routeHelpers.ts +4 -1
- package/src/modules/inbox_ops/api/settings/route.ts +4 -1
- package/src/modules/inbox_ops/api/webhook/inbound.ts +8 -5
- package/src/modules/inbox_ops/lib/cache.ts +5 -2
- package/src/modules/inbox_ops/lib/catalogLookup.ts +4 -1
- package/src/modules/inbox_ops/lib/eventBus.ts +4 -4
- package/src/modules/inbox_ops/lib/messagesIntegration.ts +5 -8
- package/src/modules/inbox_ops/subscribers/executionAuditor.ts +5 -1
- package/src/modules/inbox_ops/subscribers/extractionWorker.ts +11 -8
- package/src/modules/inbox_ops/subscribers/proposalNotifier.ts +4 -1
- package/src/modules/messages/api/[id]/route.ts +4 -4
- package/src/modules/messages/commands/actions.ts +4 -1
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +4 -1
- package/src/modules/messages/lib/email-sender.ts +4 -7
- package/src/modules/messages/lib/message-objects-registry.ts +4 -1
- package/src/modules/messages/lib/message-types-registry.ts +4 -1
- package/src/modules/messages/workers/send-email.worker.ts +7 -4
- package/src/modules/notifications/lib/notificationMapper.ts +4 -4
- package/src/modules/notifications/lib/notificationService.ts +4 -5
- package/src/modules/notifications/subscribers/deliver-notification.ts +9 -14
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +4 -1
- package/src/modules/perspectives/services/perspectiveService.ts +4 -3
- package/src/modules/planner/api/access.ts +4 -3
- package/src/modules/planner/api/availability-date-specific.ts +4 -1
- package/src/modules/planner/api/availability-weekly.ts +4 -1
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +5 -2
- package/src/modules/planner/components/AvailabilityRulesEditor.tsx +4 -1
- package/src/modules/progress/api/jobs/route.ts +4 -1
- package/src/modules/query_index/components/QueryIndexesTable.tsx +6 -3
- package/src/modules/query_index/lib/batch.ts +5 -2
- package/src/modules/query_index/lib/coverage.ts +4 -1
- package/src/modules/query_index/lib/engine.ts +14 -17
- package/src/modules/query_index/lib/reindexer.ts +9 -6
- package/src/modules/query_index/lib/search-tokens.ts +4 -2
- package/src/modules/query_index/subscribers/coverage_refresh.ts +4 -1
- package/src/modules/resources/api/comments.ts +4 -1
- package/src/modules/resources/api/resources/tags/assign/route.ts +4 -1
- package/src/modules/resources/api/resources/tags/unassign/route.ts +4 -1
- package/src/modules/resources/backend/resources/resource-types/[id]/edit/page.tsx +4 -1
- package/src/modules/resources/backend/resources/resource-types/page.tsx +5 -2
- package/src/modules/resources/commands/activities.ts +5 -4
- package/src/modules/resources/commands/comments.ts +6 -4
- package/src/modules/resources/commands/shared.ts +36 -0
- package/src/modules/sales/api/channels/route.ts +4 -1
- package/src/modules/sales/api/document-history/route.ts +4 -1
- package/src/modules/sales/api/document-numbers/route.ts +4 -1
- package/src/modules/sales/api/quotes/accept/route.ts +5 -2
- package/src/modules/sales/api/quotes/convert/route.ts +4 -1
- package/src/modules/sales/api/quotes/public/[token]/route.ts +4 -1
- package/src/modules/sales/api/quotes/send/route.ts +4 -1
- package/src/modules/sales/api/returns/[id]/route.ts +4 -1
- package/src/modules/sales/api/settings/document-numbers/route.ts +5 -2
- package/src/modules/sales/api/settings/order-editing/route.ts +5 -2
- package/src/modules/sales/backend/sales/channels/[channelId]/edit/page.tsx +4 -1
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +7 -4
- package/src/modules/sales/backend/sales/channels/page.tsx +5 -2
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +21 -18
- package/src/modules/sales/commands/documents.ts +5 -8
- package/src/modules/sales/commands/payments.ts +4 -1
- package/src/modules/sales/commands/shipments.ts +4 -2
- package/src/modules/sales/components/AdjustmentKindSettings.tsx +6 -3
- package/src/modules/sales/components/DocumentNumberSettings.tsx +5 -2
- package/src/modules/sales/components/OrderEditingSettings.tsx +5 -2
- package/src/modules/sales/components/PaymentMethodsSettings.tsx +6 -3
- package/src/modules/sales/components/ShippingMethodsSettings.tsx +6 -3
- package/src/modules/sales/components/StatusSettings.tsx +6 -3
- package/src/modules/sales/components/TaxRatesSettings.tsx +6 -3
- package/src/modules/sales/components/channels/ChannelOfferForm.tsx +17 -14
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +5 -2
- package/src/modules/sales/components/documents/AddressesSection.tsx +6 -3
- package/src/modules/sales/components/documents/AdjustmentDialog.tsx +4 -1
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +6 -3
- package/src/modules/sales/components/documents/ItemsSection.tsx +7 -4
- package/src/modules/sales/components/documents/LineItemDialog.tsx +9 -6
- package/src/modules/sales/components/documents/PaymentDialog.tsx +6 -3
- package/src/modules/sales/components/documents/PaymentsSection.tsx +5 -2
- package/src/modules/sales/components/documents/SalesDocumentForm.tsx +15 -12
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +6 -3
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +10 -7
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -2
- package/src/modules/sales/frontend/quote/[token]/page.tsx +5 -2
- package/src/modules/sales/seed/examples.ts +8 -9
- package/src/modules/sales/subscribers/quote-expiring-notification.ts +4 -1
- package/src/modules/sales/subscribers/reconcileOnAddressDelete.ts +4 -1
- package/src/modules/sales/subscribers/reconcileOnCompanyDelete.ts +4 -1
- package/src/modules/sales/subscribers/reconcileOnCustomerDelete.ts +4 -1
- package/src/modules/sales/widgets/dashboard/makeDashboardWidgetRoute.ts +6 -3
- package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +274 -271
- package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +280 -277
- package/src/modules/shipping_carriers/api/tracking/route.ts +5 -1
- package/src/modules/shipping_carriers/api/webhook/[provider]/route.ts +4 -1
- package/src/modules/shipping_carriers/lib/shipping-service.ts +47 -22
- package/src/modules/shipping_carriers/lib/upstream-error-response.ts +4 -1
- package/src/modules/shipping_carriers/workers/webhook-processor.ts +4 -5
- package/src/modules/staff/api/comments.ts +4 -1
- package/src/modules/staff/api/leave-requests/accept/route.ts +4 -1
- package/src/modules/staff/api/leave-requests/reject/route.ts +4 -1
- package/src/modules/staff/api/team-members/assignable/route.ts +4 -1
- package/src/modules/staff/api/team-members/self/route.ts +5 -2
- package/src/modules/staff/api/team-members/tags/assign/route.ts +4 -1
- package/src/modules/staff/api/team-members/tags/unassign/route.ts +4 -1
- package/src/modules/staff/api/timesheets/my-projects/[projectId]/route.ts +4 -1
- package/src/modules/staff/api/timesheets/my-projects/route.ts +4 -1
- package/src/modules/staff/api/timesheets/projects/kpis/route.ts +4 -1
- package/src/modules/staff/api/timesheets/time-entries/[id]/segments/route.ts +4 -1
- package/src/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.ts +5 -2
- package/src/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.ts +5 -2
- package/src/modules/staff/api/timesheets/time-entries/bulk/route.ts +4 -1
- package/src/modules/staff/api/timesheets/time-entries/start-timer/route.ts +4 -1
- package/src/modules/staff/backend/staff/team-members/page.tsx +5 -2
- package/src/modules/staff/backend/staff/team-roles/page.tsx +5 -2
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +5 -2
- package/src/modules/staff/backend/staff/teams/page.tsx +5 -2
- package/src/modules/staff/backend/staff/timesheets/page.tsx +8 -5
- package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.tsx +4 -1
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +5 -2
- package/src/modules/staff/commands/timesheets-entries.ts +4 -1
- package/src/modules/staff/widgets/dashboard/timesheets-hours-by-project/widget.client.tsx +4 -1
- package/src/modules/staff/widgets/dashboard/timesheets-time-reporting/widget.client.tsx +6 -3
- package/src/modules/sync_excel/api/import/route.ts +4 -1
- package/src/modules/translations/api/[entityType]/[entityId]/route.ts +6 -3
- package/src/modules/translations/api/get/locales.ts +4 -1
- package/src/modules/translations/api/put/locales.ts +4 -1
- package/src/modules/translations/components/TranslationManager.tsx +4 -1
- package/src/modules/translations/subscribers/cleanup.ts +4 -1
- package/src/modules/workflows/api/definitions/[id]/customize/route.ts +5 -2
- package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -2
- package/src/modules/workflows/api/definitions/[id]/route.ts +7 -4
- package/src/modules/workflows/api/definitions/route.ts +5 -2
- package/src/modules/workflows/api/events/[id]/route.ts +4 -1
- package/src/modules/workflows/api/events/route.ts +4 -1
- package/src/modules/workflows/api/instances/[id]/advance/route.ts +4 -1
- package/src/modules/workflows/api/instances/[id]/cancel/route.ts +4 -1
- package/src/modules/workflows/api/instances/[id]/events/route.ts +4 -1
- package/src/modules/workflows/api/instances/[id]/retry/route.ts +4 -1
- package/src/modules/workflows/api/instances/[id]/route.ts +4 -1
- package/src/modules/workflows/api/instances/[id]/signal/route.ts +6 -7
- package/src/modules/workflows/api/instances/route.ts +6 -3
- package/src/modules/workflows/api/instances/validate-start/route.ts +4 -1
- package/src/modules/workflows/api/signals/route.ts +4 -1
- package/src/modules/workflows/api/tasks/[id]/claim/route.ts +4 -1
- package/src/modules/workflows/api/tasks/[id]/complete/route.ts +4 -1
- package/src/modules/workflows/api/tasks/[id]/route.ts +4 -1
- package/src/modules/workflows/api/tasks/route.ts +4 -1
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +5 -2
- package/src/modules/workflows/backend/instances/[id]/page.tsx +6 -3
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +4 -1
- package/src/modules/workflows/components/BusinessRulesSelector.tsx +6 -3
- package/src/modules/workflows/components/WorkflowSelector.tsx +6 -3
- package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +4 -1
- package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +4 -1
- package/src/modules/workflows/components/fields/WorkflowSelectorField.tsx +4 -1
- package/src/modules/workflows/frontend/checkout-demo/page.tsx +9 -7
- package/src/modules/workflows/lib/activity-executor.ts +26 -21
- package/src/modules/workflows/lib/activity-worker-handler.ts +9 -15
- package/src/modules/workflows/lib/code-registry.ts +8 -7
- package/src/modules/workflows/lib/compensation-handler.ts +5 -2
- package/src/modules/workflows/lib/edgeFormTransforms.ts +4 -1
- package/src/modules/workflows/lib/event-trigger-service.ts +6 -3
- package/src/modules/workflows/lib/nodeFormTransforms.ts +4 -1
- package/src/modules/workflows/lib/seeds.ts +17 -2
- package/src/modules/workflows/lib/signal-handler.ts +4 -1
- package/src/modules/workflows/lib/start-validator.ts +10 -3
- package/src/modules/workflows/lib/step-handler.ts +4 -1
- package/src/modules/workflows/lib/task-handler.ts +4 -1
- package/src/modules/workflows/lib/transition-handler.ts +6 -3
- package/src/modules/workflows/lib/workflow-executor.ts +28 -15
- package/src/modules/workflows/subscribers/event-trigger.ts +22 -24
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +4 -1
- package/src/modules/workflows/workers/workflow-activities.worker.ts +31 -20
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/sales/seed/examples.ts"],
|
|
4
|
-
"sourcesContent": ["import { randomUUID } from 'crypto'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n SalesOrder,\n SalesOrderLine,\n SalesOrderAdjustment,\n SalesQuote,\n SalesQuoteLine,\n SalesQuoteAdjustment,\n SalesShipment,\n SalesShipmentItem,\n SalesPayment,\n SalesPaymentAllocation,\n SalesDocumentAddress,\n SalesNote,\n SalesChannel,\n SalesPaymentMethod,\n SalesShippingMethod,\n type SalesAdjustmentKind,\n type SalesLineKind,\n} from '../data/entities'\nimport { seedSalesDictionaries } from '../lib/dictionaries'\nimport { refreshShipmentItemsSnapshot } from '../lib/shipments/snapshots'\nimport { toNumericString } from '../commands/shared'\nimport type { SalesCalculationService } from '../services/salesCalculationService'\nimport { ensureExamplePaymentMethods, ensureExampleShippingMethods, type SeedScope } from './examples-data'\nimport {\n CatalogProduct,\n CatalogProductPrice,\n CatalogProductVariant,\n} from '@open-mercato/core/modules/catalog/data/entities'\nimport {\n CustomerAddress,\n CustomerEntity,\n CustomerPersonProfile,\n} from '@open-mercato/core/modules/customers/data/entities'\nimport { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\n\ntype ExampleAddress = {\n role: 'billing' | 'shipping'\n companyName?: string | null\n name?: string | null\n addressLine1: string\n addressLine2?: string | null\n city?: string | null\n region?: string | null\n postalCode?: string | null\n country?: string | null\n latitude?: number | null\n longitude?: number | null\n customerAddressId?: string | null\n}\n\ntype ExampleLine = {\n kind?: SalesLineKind\n name: string\n description?: string\n quantity: number\n unitPriceNet: number\n unitPriceGross?: number\n taxRate?: number\n discountPercent?: number\n quantityUnit?: string\n comment?: string\n productHandle?: string\n variantSku?: string\n}\n\ntype ExampleAdjustment = {\n scope: 'order' | 'line'\n kind: SalesAdjustmentKind\n label?: string\n amountNet: number\n amountGross?: number\n rate?: number\n lineIndex?: number\n position?: number\n}\n\ntype ExampleNote = {\n body: string\n createdAt?: Date\n appearanceIcon?: string | null\n appearanceColor?: string | null\n}\n\ntype ExampleShipment = {\n shipmentNumber?: string\n methodCode?: string\n status?: string\n shippedAt?: Date\n deliveredAt?: Date\n trackingNumbers?: string[]\n weightKg?: number\n declaredValue?: number\n currencyCode?: string\n notes?: string\n items: Array<{ lineIndex: number; quantity: number }>\n}\n\ntype ExamplePayment = {\n reference?: string\n methodCode?: string\n status?: string\n amount: number\n currencyCode: string\n receivedAt?: Date\n capturedAt?: Date\n}\n\ntype ExampleQuote = {\n quoteNumber: string\n status?: string\n comments?: string\n validFrom?: Date\n validUntil?: Date\n currencyCode: string\n shippingMethodCode?: string\n paymentMethodCode?: string\n addresses?: ExampleAddress[]\n lines: ExampleLine[]\n adjustments?: ExampleAdjustment[]\n notes?: ExampleNote[]\n metadata?: Record<string, unknown>\n channelCode?: string\n customerKey?: string\n}\n\ntype ExampleOrder = {\n orderNumber: string\n status?: string\n fulfillmentStatus?: string\n paymentStatus?: string\n comments?: string\n internalNotes?: string\n placedAt?: Date\n expectedDeliveryAt?: Date\n currencyCode: string\n shippingMethodCode?: string\n paymentMethodCode?: string\n channelCode?: string\n addresses?: ExampleAddress[]\n lines: ExampleLine[]\n adjustments?: ExampleAdjustment[]\n notes?: ExampleNote[]\n shipments?: ExampleShipment[]\n payments?: ExamplePayment[]\n metadata?: Record<string, unknown>\n customerKey?: string\n}\n\nconst CHANNEL_SEEDS = [\n { code: 'online', name: 'Online Store', description: 'Orders captured from the storefront.' },\n {\n code: 'field-sales',\n name: 'Field Sales',\n description: 'Quotes negotiated by the sales team and converted offline.',\n },\n] as const\n\nconst CUSTOMER_LINKS: CustomerLookup[] = [\n { key: 'brightside', displayName: 'Brightside Solar' },\n { key: 'harborview', displayName: 'Harborview Analytics' },\n { key: 'copperleaf', displayName: 'Copperleaf Design Co.' },\n] as const\n\nconst QUOTE_SEEDS: ExampleQuote[] = [\n {\n quoteNumber: 'SQ-DEMO-1001',\n status: 'draft',\n comments: 'Pricing reflects bundled onboarding; valid for 30 days.',\n validFrom: daysFromNow(-2),\n validUntil: daysFromNow(28),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n lines: [\n {\n name: 'Remote onboarding package',\n description: 'Kick-off, workflow design, and training for distributed teams.',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 10,\n },\n {\n name: 'Implementation workshop (4h)',\n description: 'Hands-on configuration session with stakeholders.',\n quantity: 1,\n unitPriceNet: 320,\n taxRate: 0,\n comment: 'Can be split into two shorter sessions on request.',\n },\n ],\n adjustments: [\n { scope: 'order', kind: 'discount', label: 'Pilot discount', amountNet: 45, position: 1 },\n {\n scope: 'order',\n kind: 'shipping',\n label: 'Expedited shipping',\n amountNet: 25,\n amountGross: 27.5,\n position: 2,\n },\n ],\n addresses: [\n {\n role: 'billing',\n companyName: 'Northwind Ventures',\n name: 'Nora Winters',\n addressLine1: '200 Pine St',\n addressLine2: 'Suite 900',\n city: 'Seattle',\n region: 'WA',\n postalCode: '98101',\n country: 'US',\n },\n {\n role: 'shipping',\n companyName: 'Northwind Ventures',\n name: 'Receiving Dock',\n addressLine1: '4124 4th Ave S',\n city: 'Seattle',\n region: 'WA',\n postalCode: '98134',\n country: 'US',\n },\n ],\n notes: [\n {\n body: 'Requested weekend training option if schedules slip.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:calendar-clock',\n appearanceColor: '#0ea5e9',\n },\n {\n body: 'Prefers invoicing after acceptance instead of deposit.',\n createdAt: daysFromNow(0),\n appearanceIcon: 'lucide:receipt',\n appearanceColor: '#f97316',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n quoteNumber: 'SQ-DEMO-1002',\n status: 'draft',\n comments: 'Footwear replenishment and event outfits pulled from catalog offers.',\n validFrom: daysFromNow(-1),\n validUntil: daysFromNow(21),\n currencyCode: 'USD',\n shippingMethodCode: 'standard-ground',\n paymentMethodCode: 'card',\n channelCode: 'online',\n customerKey: 'brightside',\n lines: [\n {\n name: 'Atlas Runner Sneaker',\n quantity: 3,\n unitPriceNet: 120,\n taxRate: 10,\n variantSku: 'ATLAS-RUN-NAVY-8',\n },\n {\n name: 'Aurora Wrap Dress',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 10,\n variantSku: 'AURORA-ROSE-M',\n discountPercent: 5,\n },\n ],\n adjustments: [\n { scope: 'order', kind: 'discount', label: 'Preferred customer', amountNet: 35, position: 1 },\n ],\n notes: [\n {\n body: 'Requested quick turn on delivery dates for press shoot.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:camera',\n appearanceColor: '#0ea5e9',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n quoteNumber: 'SQ-DEMO-1003',\n status: 'sent',\n comments: 'Bundle of apparel and on-site styling block for the studio launch.',\n validFrom: daysFromNow(-3),\n validUntil: daysFromNow(10),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n customerKey: 'copperleaf',\n lines: [\n {\n name: 'Aurora Wrap Dress',\n quantity: 2,\n unitPriceNet: 180,\n taxRate: 10,\n variantSku: 'AURORA-CELESTIAL-L',\n comment: 'Alternate colorway accepted if Celestial runs out.',\n },\n {\n name: 'Signature Haircut & Finish',\n quantity: 4,\n unitPriceNet: 95,\n taxRate: 0,\n variantSku: 'SERV-HAIR-60',\n quantityUnit: 'hour',\n comment: 'Styling sessions during opening week.',\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'discount',\n label: 'Launch partner credit',\n amountNet: 60,\n position: 1,\n },\n ],\n notes: [\n {\n body: 'Prefers consolidated invoicing after the event.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:file-text',\n appearanceColor: '#f97316',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n]\n\nconst ORDER_SEEDS: ExampleOrder[] = [\n {\n orderNumber: 'SO-DEMO-2001',\n status: 'confirmed',\n fulfillmentStatus: 'in_fulfillment',\n comments: 'White-glove delivery requested for the larger items.',\n internalNotes: 'Coordinate with facilities for access badges.',\n placedAt: daysFromNow(-3),\n expectedDeliveryAt: daysFromNow(4),\n currencyCode: 'USD',\n shippingMethodCode: 'standard-ground',\n paymentMethodCode: 'card',\n channelCode: 'online',\n lines: [\n {\n name: 'Modular desk system',\n quantity: 1,\n unitPriceNet: 640,\n taxRate: 10,\n description: 'Corner configuration with cable routing.',\n },\n {\n name: 'Acoustic panel set',\n quantity: 3,\n unitPriceNet: 85,\n taxRate: 10,\n description: 'Charcoal grey finish, adhesive mount.',\n discountPercent: 5,\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'shipping',\n label: 'White-glove delivery',\n amountNet: 60,\n amountGross: 66,\n position: 1,\n },\n { scope: 'order', kind: 'discount', label: 'New office promo', amountNet: 75, position: 2 },\n {\n scope: 'order',\n kind: 'surcharge',\n label: 'After-hours install',\n amountNet: 35,\n amountGross: 38.5,\n position: 3,\n },\n ],\n shipments: [\n {\n shipmentNumber: 'SHIP-2001-1',\n methodCode: 'standard-ground',\n status: 'shipped',\n shippedAt: daysFromNow(-1),\n trackingNumbers: ['1Z-234-ACOUSTICS'],\n weightKg: 38,\n declaredValue: 720,\n currencyCode: 'USD',\n notes: 'Panels shipped separately to avoid freight delay.',\n items: [\n { lineIndex: 1, quantity: 2 },\n ],\n },\n {\n shipmentNumber: 'SHIP-2001-2',\n methodCode: 'express-air',\n status: 'in_transit',\n shippedAt: daysFromNow(0),\n trackingNumbers: ['1Z-987-DESK'],\n weightKg: 72,\n declaredValue: 560,\n currencyCode: 'USD',\n notes: 'Desk ships via express due to size.',\n items: [{ lineIndex: 0, quantity: 1 }],\n },\n ],\n payments: [\n {\n reference: 'AUTH-2001-CC',\n methodCode: 'card',\n status: 'captured',\n amount: 600,\n currencyCode: 'USD',\n receivedAt: daysFromNow(-2),\n capturedAt: daysFromNow(-1),\n },\n {\n reference: 'WIRE-2001',\n methodCode: 'bank-transfer',\n status: 'received',\n amount: 414,\n currencyCode: 'USD',\n receivedAt: daysFromNow(1),\n },\n ],\n addresses: [\n {\n role: 'billing',\n companyName: 'Harborview Analytics',\n name: 'Accounts Payable',\n addressLine1: '355 Atlantic Ave Floor 6',\n city: 'Boston',\n region: 'MA',\n postalCode: '02210',\n country: 'US',\n },\n {\n role: 'shipping',\n companyName: 'Harborview Analytics',\n name: 'Loading Dock',\n addressLine1: '9 Drydock Ave',\n city: 'Boston',\n region: 'MA',\n postalCode: '02210',\n country: 'US',\n },\n ],\n notes: [\n {\n body: 'Facilities requested 2-hour delivery window notice.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:bell-ring',\n appearanceColor: '#0ea5e9',\n },\n {\n body: 'Panels can be staged in conference room A.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:warehouse',\n appearanceColor: '#22c55e',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n orderNumber: 'SO-DEMO-2002',\n status: 'confirmed',\n fulfillmentStatus: 'fulfilled',\n paymentStatus: 'partial',\n comments: 'Subscription setup aligns with fiscal Q3 start.',\n placedAt: daysFromNow(-6),\n expectedDeliveryAt: daysFromNow(1),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n lines: [\n {\n name: 'On-site enablement',\n quantity: 1,\n unitPriceNet: 280,\n taxRate: 0,\n description: 'Day of workshops across two teams.',\n },\n {\n name: 'Support retainer (Q3)',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 0,\n description: 'Response SLA with named TAM.',\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'shipping',\n label: 'Travel & lodging',\n amountNet: 20,\n amountGross: 22,\n position: 1,\n },\n {\n scope: 'order',\n kind: 'discount',\n label: 'Multi-team starter',\n amountNet: 25,\n position: 2,\n },\n ],\n shipments: [\n {\n shipmentNumber: 'SHIP-2002-1',\n methodCode: 'express-air',\n status: 'delivered',\n shippedAt: daysFromNow(-4),\n deliveredAt: daysFromNow(-2),\n trackingNumbers: ['AIR-22002-KIT'],\n declaredValue: 150,\n currencyCode: 'USD',\n notes: 'Enablement kit delivered to training room.',\n items: [\n { lineIndex: 0, quantity: 1 },\n { lineIndex: 1, quantity: 1 },\n ],\n },\n ],\n payments: [\n {\n reference: 'WIRE-2002',\n methodCode: 'bank-transfer',\n status: 'received',\n amount: 250,\n currencyCode: 'USD',\n receivedAt: daysFromNow(-1),\n },\n ],\n addresses: [\n {\n role: 'billing',\n companyName: 'Brightside Solar',\n name: 'Finance',\n addressLine1: '245 Market St Suite 400',\n city: 'San Francisco',\n region: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n {\n role: 'shipping',\n companyName: 'Brightside Solar',\n name: 'Training Room B',\n addressLine1: '245 Market St Suite 410',\n city: 'San Francisco',\n region: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n ],\n notes: [\n {\n body: 'TAM onboarding scheduled next Tuesday.',\n createdAt: daysFromNow(-3),\n appearanceIcon: 'lucide:users',\n appearanceColor: '#a855f7',\n },\n {\n body: 'Retainer renewal review in mid-Q4.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:clock-3',\n appearanceColor: '#f97316',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n orderNumber: 'SO-DEMO-2003',\n status: 'confirmed',\n fulfillmentStatus: 'in_fulfillment',\n paymentStatus: 'partial',\n comments: 'Equipment refresh for analytics field team with matching footwear.',\n internalNotes: 'Coordinate delivery around team offsite schedule.',\n placedAt: daysFromNow(-2),\n expectedDeliveryAt: daysFromNow(5),\n currencyCode: 'USD',\n shippingMethodCode: 'standard-ground',\n paymentMethodCode: 'card',\n channelCode: 'online',\n customerKey: 'harborview',\n lines: [\n {\n name: 'Atlas Runner Sneaker',\n quantity: 4,\n unitPriceNet: 120,\n taxRate: 10,\n variantSku: 'ATLAS-RUN-GLACIER-10',\n comment: 'Size mix handled via catalog variants.',\n },\n {\n name: 'Aurora Wrap Dress',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 10,\n variantSku: 'AURORA-ROSE-M',\n discountPercent: 10,\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'shipping',\n label: 'Ground shipping',\n amountNet: 25,\n amountGross: 27.5,\n position: 1,\n },\n ],\n shipments: [\n {\n shipmentNumber: 'SHIP-2003-1',\n methodCode: 'standard-ground',\n status: 'pending',\n shippedAt: undefined,\n trackingNumbers: [],\n weightKg: 12,\n declaredValue: 0,\n currencyCode: 'USD',\n notes: 'Bundle footwear and apparel together.',\n items: [\n { lineIndex: 0, quantity: 4 },\n { lineIndex: 1, quantity: 1 },\n ],\n },\n ],\n payments: [\n {\n reference: 'CARD-2003',\n methodCode: 'card',\n status: 'authorized',\n amount: 300,\n currencyCode: 'USD',\n receivedAt: daysFromNow(-1),\n },\n ],\n notes: [\n {\n body: 'Leadership wants tracking shared in Slack channel.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:message-circle',\n appearanceColor: '#22c55e',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n orderNumber: 'SO-DEMO-2004',\n status: 'confirmed',\n fulfillmentStatus: 'pending',\n paymentStatus: 'unpaid',\n comments: 'On-site styling block for studio launch week.',\n placedAt: daysFromNow(-4),\n expectedDeliveryAt: daysFromNow(1),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n customerKey: 'copperleaf',\n lines: [\n {\n name: 'Signature Haircut & Finish',\n quantity: 6,\n unitPriceNet: 95,\n taxRate: 0,\n variantSku: 'SERV-HAIR-60',\n quantityUnit: 'hour',\n comment: 'Block book stylists for staggered sessions.',\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'discount',\n label: 'Launch week courtesy',\n amountNet: 45,\n position: 1,\n },\n ],\n payments: [\n {\n reference: 'WIRE-2004',\n methodCode: 'bank-transfer',\n status: 'pending',\n amount: 0,\n currencyCode: 'USD',\n },\n ],\n notes: [\n {\n body: 'Confirm stylist roster by Friday.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:check-circle',\n appearanceColor: '#0ea5e9',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n]\n\nfunction daysFromNow(offset: number): Date {\n const now = new Date()\n const copy = new Date(now)\n copy.setUTCDate(now.getUTCDate() + offset)\n return copy\n}\n\nfunction toAmount(value: number | null | undefined): string {\n if (value === null || value === undefined || Number.isNaN(value)) return '0'\n return toNumericString(Math.round((value + Number.EPSILON) * 10000) / 10000) ?? '0'\n}\n\nfunction toSnapshot<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T\n}\n\nfunction normalizeKey(value: string | null | undefined): string {\n return (value ?? '').trim().toLowerCase()\n}\n\nfunction asNumber(value: unknown): number {\n if (typeof value === 'number') return value\n if (typeof value === 'string') {\n const parsed = Number(value)\n return Number.isFinite(parsed) ? parsed : 0\n }\n return 0\n}\n\ntype CatalogLookup = {\n productsByHandle: Map<string, CatalogProduct>\n variantsBySku: Map<string, CatalogProductVariant>\n variantPrices: Map<string, { net: number; gross: number; currency: string }>\n}\n\nasync function loadCatalogLookups(em: EntityManager, scope: SeedScope): Promise<CatalogLookup> {\n const [products, variants, prices] = await Promise.all([\n em.find(CatalogProduct, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n }),\n em.find(\n CatalogProductVariant,\n { organizationId: scope.organizationId, tenantId: scope.tenantId, deletedAt: null },\n { populate: ['product'] }\n ),\n em.find(CatalogProductPrice, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n }),\n ])\n\n const productsByHandle = new Map<string, CatalogProduct>()\n products.forEach((product) => {\n const key = normalizeKey(product.handle ?? product.sku ?? product.title)\n if (key) productsByHandle.set(key, product)\n })\n\n const variantsBySku = new Map<string, CatalogProductVariant>()\n variants.forEach((variant) => {\n const key = normalizeKey(variant.sku)\n if (key) variantsBySku.set(key, variant)\n })\n\n const variantPrices = new Map<string, { net: number; gross: number; currency: string }>()\n for (const price of prices) {\n const variantId =\n typeof price.variant === 'string' ? price.variant : price.variant?.id ?? (price as any)?.variant_id ?? null\n if (!variantId) continue\n const gross = asNumber((price as any).unitPriceGross ?? price.unitPriceGross)\n const net = asNumber((price as any).unitPriceNet ?? price.unitPriceNet ?? gross)\n const currency = typeof price.currencyCode === 'string' ? price.currencyCode : 'USD'\n const isSale = normalizeKey((price as any).kind) === 'sale' || normalizeKey((price as any)?.priceKind?.code) === 'sale'\n const existing = variantPrices.get(variantId)\n if (!existing || isSale) {\n variantPrices.set(variantId, { net, gross, currency })\n }\n }\n\n return { productsByHandle, variantsBySku, variantPrices }\n}\n\nfunction buildCatalogSnapshot(\n product: CatalogProduct | null,\n variant: CatalogProductVariant | null,\n price: { net: number; gross: number; currency: string } | null\n): Record<string, unknown> | null {\n if (!product) return null\n const productThumbnail =\n (product as any).defaultMediaUrl ??\n (product as any).thumbnailUrl ??\n (product.metadata && typeof product.metadata === 'object'\n ? ((product.metadata as any).thumbnailUrl as string | null | undefined)\n : null) ??\n null\n const variantThumbnail =\n variant && variant.metadata && typeof variant.metadata === 'object'\n ? ((variant.metadata as any).thumbnailUrl as string | null | undefined) ?? null\n : null\n return {\n product: {\n id: product.id,\n title: product.title,\n handle: product.handle ?? null,\n sku: product.sku ?? null,\n thumbnailUrl: productThumbnail,\n },\n variant: variant\n ? {\n id: variant.id,\n name: variant.name ?? product.title,\n sku: variant.sku ?? null,\n optionValues: variant.optionValues ?? null,\n thumbnailUrl: variantThumbnail,\n }\n : null,\n price: price\n ? {\n currencyCode: price.currency,\n unitPriceNet: price.net,\n unitPriceGross: price.gross,\n }\n : null,\n }\n}\n\nfunction resolveCatalogLine(\n line: ExampleLine,\n catalog: CatalogLookup\n): {\n productId: string | null\n variantId: string | null\n unitPriceNet: number | null\n unitPriceGross: number | null\n currencyCode: string | null\n snapshot: Record<string, unknown> | null\n productThumbnail: string | null\n variantThumbnail: string | null\n} {\n const variant =\n line.variantSku && catalog.variantsBySku.size\n ? catalog.variantsBySku.get(normalizeKey(line.variantSku))\n : null\n const product =\n variant?.product ??\n (line.productHandle ? catalog.productsByHandle.get(normalizeKey(line.productHandle)) ?? null : null)\n const price = variant ? catalog.variantPrices.get(variant.id) ?? null : null\n const snapshot = buildCatalogSnapshot(product ?? null, variant ?? null, price ?? null)\n const productThumbnail =\n (snapshot as any)?.product?.thumbnailUrl ??\n (product as any)?.defaultMediaUrl ??\n (product as any)?.thumbnailUrl ??\n null\n const variantThumbnail = (snapshot as any)?.variant?.thumbnailUrl ?? null\n return {\n productId: product ? product.id : null,\n variantId: variant ? variant.id : null,\n unitPriceNet: price?.net ?? null,\n unitPriceGross: price?.gross ?? null,\n currencyCode: price?.currency ?? null,\n snapshot,\n productThumbnail: productThumbnail ?? null,\n variantThumbnail: variantThumbnail ?? null,\n }\n}\n\ntype CustomerLookup = {\n key: string\n displayName: string\n}\n\ntype CustomerLookupSpec = CustomerLookup & { normalizedName: string }\n\ntype CustomerContext = {\n entity: CustomerEntity\n contact: CustomerPersonProfile | null\n contactId: string | null\n snapshot: Record<string, unknown> | null\n addresses: ExampleAddress[]\n}\n\nfunction buildCustomerSnapshot(\n entity: CustomerEntity,\n contact: CustomerPersonProfile | null\n): Record<string, unknown> | null {\n const base = {\n id: entity.id,\n kind: entity.kind,\n displayName: entity.displayName,\n primaryEmail: entity.primaryEmail ?? null,\n primaryPhone: entity.primaryPhone ?? null,\n personProfile: entity.personProfile\n ? {\n id: entity.personProfile.id,\n firstName: entity.personProfile.firstName ?? null,\n lastName: entity.personProfile.lastName ?? null,\n preferredName: entity.personProfile.preferredName ?? null,\n jobTitle: entity.personProfile.jobTitle ?? null,\n department: entity.personProfile.department ?? null,\n seniority: entity.personProfile.seniority ?? null,\n timezone: entity.personProfile.timezone ?? null,\n }\n : null,\n companyProfile: entity.companyProfile\n ? {\n id: entity.companyProfile.id,\n legalName: entity.companyProfile.legalName ?? null,\n brandName: entity.companyProfile.brandName ?? null,\n domain: entity.companyProfile.domain ?? null,\n websiteUrl: entity.companyProfile.websiteUrl ?? null,\n }\n : null,\n }\n const contactSnapshot = contact\n ? {\n id: contact.id,\n firstName: contact.firstName ?? null,\n lastName: contact.lastName ?? null,\n email: contact.entity?.primaryEmail ?? null,\n phone: contact.entity?.primaryPhone ?? null,\n companyId: contact.company ? (typeof contact.company === 'string' ? contact.company : contact.company.id) : null,\n }\n : null\n return { customer: base, contact: contactSnapshot }\n}\n\nfunction toExampleAddresses(customer: CustomerEntity, address: CustomerAddress | null): ExampleAddress[] {\n if (!address) return []\n const base = {\n companyName: address.companyName ?? customer.displayName ?? null,\n name: address.name ?? address.companyName ?? customer.displayName ?? null,\n addressLine1: address.addressLine1,\n addressLine2: address.addressLine2 ?? null,\n city: address.city ?? null,\n region: address.region ?? null,\n postalCode: address.postalCode ?? null,\n country: address.country ?? null,\n latitude: address.latitude ?? null,\n longitude: address.longitude ?? null,\n customerAddressId: address.id,\n }\n return [\n { role: 'billing', ...base },\n { role: 'shipping', ...base },\n ]\n}\n\nasync function loadCustomerLookups(\n em: EntityManager,\n scope: SeedScope,\n lookups: CustomerLookup[]\n): Promise<Map<string, CustomerContext>> {\n const map = new Map<string, CustomerContext>()\n if (lookups.length === 0) return map\n const lookupSpecs: CustomerLookupSpec[] = lookups.map((lookup) => ({\n ...lookup,\n normalizedName: normalizeKey(lookup.displayName),\n }))\n const unresolved = new Map<string, CustomerLookupSpec>()\n for (const spec of lookupSpecs) {\n unresolved.set(spec.key, spec)\n }\n\n const customers = await findWithDecryption(\n em,\n CustomerEntity,\n {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n },\n { populate: ['personProfile', 'companyProfile'] },\n { tenantId: scope.tenantId, organizationId: scope.organizationId }\n )\n\n const doesMatch = (candidate: string, spec: CustomerLookupSpec): boolean => {\n if (!candidate) return false\n return (\n candidate === spec.normalizedName ||\n candidate.includes(spec.normalizedName) ||\n spec.normalizedName.includes(candidate)\n )\n }\n\n const matchedPairs: Array<{ spec: CustomerLookupSpec; customer: CustomerEntity }> = []\n\n for (const customer of customers) {\n if (unresolved.size === 0) break\n const tokens = new Set<string>()\n tokens.add(normalizeKey(customer.displayName))\n if (customer.companyProfile) {\n tokens.add(normalizeKey(customer.companyProfile.legalName ?? ''))\n tokens.add(normalizeKey(customer.companyProfile.brandName ?? ''))\n tokens.add(normalizeKey(customer.companyProfile.domain ?? ''))\n }\n if (customer.personProfile) {\n tokens.add(normalizeKey(customer.personProfile.firstName ?? ''))\n tokens.add(normalizeKey(customer.personProfile.lastName ?? ''))\n const fullName = [customer.personProfile.firstName, customer.personProfile.lastName]\n .filter((part) => (part ?? '').trim().length > 0)\n .join(' ')\n tokens.add(normalizeKey(fullName))\n }\n\n const matchedSpec = lookupSpecs.find(\n (spec) => unresolved.has(spec.key) && Array.from(tokens).some((token) => doesMatch(token, spec))\n )\n if (!matchedSpec) continue\n matchedPairs.push({ spec: matchedSpec, customer })\n unresolved.delete(matchedSpec.key)\n }\n\n const matchIds = matchedPairs.map(({ customer }) => customer.id)\n\n const addresses = matchIds.length\n ? await findWithDecryption(\n em,\n CustomerAddress,\n { organizationId: scope.organizationId, tenantId: scope.tenantId, entity: { $in: matchIds } },\n { orderBy: { isPrimary: 'desc', createdAt: 'asc' } as any },\n { tenantId: scope.tenantId, organizationId: scope.organizationId }\n )\n : []\n const addressByCustomer = new Map<string, CustomerAddress>()\n for (const address of addresses) {\n const entityId = typeof address.entity === 'string' ? address.entity : address.entity?.id\n if (!entityId || addressByCustomer.has(entityId)) continue\n addressByCustomer.set(entityId, address)\n }\n\n const contacts = matchIds.length\n ? await findWithDecryption(\n em,\n CustomerPersonProfile,\n { organizationId: scope.organizationId, tenantId: scope.tenantId, company: { $in: matchIds } },\n { populate: ['entity', 'company'] },\n { tenantId: scope.tenantId, organizationId: scope.organizationId }\n )\n : []\n const contactByCompany = new Map<string, CustomerPersonProfile>()\n for (const contact of contacts) {\n const companyId = typeof contact.company === 'string' ? contact.company : contact.company?.id\n if (!companyId || contactByCompany.has(companyId)) continue\n contactByCompany.set(companyId, contact)\n }\n\n for (const { spec, customer } of matchedPairs) {\n const contact = contactByCompany.get(customer.id) ?? null\n const snapshot = buildCustomerSnapshot(customer, contact)\n const addresses = toExampleAddresses(customer, addressByCustomer.get(customer.id) ?? null)\n map.set(spec.key, {\n entity: customer,\n contact,\n contactId: contact?.id ?? null,\n snapshot,\n addresses,\n })\n }\n\n for (const lookup of lookups) {\n if (!map.has(lookup.key)) {\n console.warn(`[sales.examples] Customer \"${lookup.displayName}\" not found; skipping seeded linkage.`)\n }\n }\n\n return map\n}\n\nasync function ensureChannels(\n em: EntityManager,\n scope: SeedScope\n): Promise<Map<string, SalesChannel>> {\n const existing = await em.find(SalesChannel, {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n deletedAt: null,\n })\n const map = new Map<string, SalesChannel>()\n existing.forEach((entry) => map.set((entry.code ?? '').toLowerCase(), entry))\n const now = new Date()\n for (const seed of CHANNEL_SEEDS) {\n const code = seed.code.toLowerCase()\n if (map.has(code)) continue\n const record = em.create(SalesChannel, {\n id: randomUUID(),\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n name: seed.name,\n code: seed.code,\n description: seed.description,\n isActive: true,\n createdAt: now,\n updatedAt: now,\n })\n em.persist(record)\n map.set(code, record)\n }\n return map\n}\n\nfunction buildAddressSnapshot(address: ExampleAddress) {\n return {\n companyName: address.companyName ?? null,\n name: address.name ?? null,\n addressLine1: address.addressLine1,\n addressLine2: address.addressLine2 ?? null,\n city: address.city ?? null,\n region: address.region ?? null,\n postalCode: address.postalCode ?? null,\n country: address.country ?? null,\n latitude: address.latitude ?? null,\n longitude: address.longitude ?? null,\n }\n}\n\nfunction buildShippingMethodSnapshot(method?: SalesShippingMethod | null) {\n if (!method) return null\n return {\n id: method.id,\n code: method.code,\n name: method.name,\n providerKey: method.providerKey ?? null,\n serviceLevel: method.serviceLevel ?? null,\n estimatedTransitDays: method.estimatedTransitDays ?? null,\n baseRateNet: method.baseRateNet,\n baseRateGross: method.baseRateGross,\n currencyCode: method.currencyCode,\n metadata: method.metadata ?? null,\n }\n}\n\nfunction buildPaymentMethodSnapshot(method?: SalesPaymentMethod | null) {\n if (!method) return null\n return {\n id: method.id,\n code: method.code,\n name: method.name,\n providerKey: method.providerKey ?? null,\n terms: method.terms ?? null,\n metadata: method.metadata ?? null,\n }\n}\n\nfunction attachDocumentAddresses(\n em: EntityManager,\n scope: SeedScope,\n params: {\n documentId: string\n documentKind: 'order' | 'quote'\n addresses: ExampleAddress[]\n order?: SalesOrder\n quote?: SalesQuote\n }\n): void {\n const { documentId, documentKind, addresses, order, quote } = params\n for (const entry of addresses) {\n const now = new Date()\n const record = em.create(SalesDocumentAddress, {\n id: randomUUID(),\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n documentId,\n documentKind,\n customerAddressId: entry.customerAddressId ?? null,\n name: entry.name ?? null,\n companyName: entry.companyName ?? null,\n purpose: entry.role,\n addressLine1: entry.addressLine1,\n addressLine2: entry.addressLine2 ?? null,\n city: entry.city ?? null,\n region: entry.region ?? null,\n postalCode: entry.postalCode ?? null,\n country: entry.country ?? null,\n latitude: entry.latitude ?? null,\n longitude: entry.longitude ?? null,\n buildingNumber: null,\n flatNumber: null,\n order: documentKind === 'order' ? order ?? null : null,\n quote: documentKind === 'quote' ? quote ?? null : null,\n createdAt: now,\n updatedAt: now,\n })\n em.persist(record)\n }\n}\n\nfunction attachNotes(\n em: EntityManager,\n scope: SeedScope,\n params: {\n contextId: string\n contextType: 'order' | 'quote'\n notes: ExampleNote[]\n order?: SalesOrder\n quote?: SalesQuote\n }\n) {\n const { contextId, contextType, notes, order, quote } = params\n for (const note of notes) {\n const record = em.create(SalesNote, {\n id: randomUUID(),\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n contextType,\n contextId,\n body: note.body,\n appearanceIcon: note.appearanceIcon ?? null,\n appearanceColor: note.appearanceColor ?? null,\n createdAt: note.createdAt ?? new Date(),\n updatedAt: note.createdAt ?? new Date(),\n })\n record.order = contextType === 'order' ? order ?? null : null\n record.quote = contextType === 'quote' ? quote ?? null : null\n em.persist(record)\n }\n}\n\nfunction mapPaymentStatus(outstanding: number): string | null {\n if (outstanding <= 0.01) return 'paid'\n if (outstanding > 0) return 'partial'\n return null\n}\n\nexport async function seedSalesExamples(\n em: EntityManager,\n container: AppContainer,\n scope: SeedScope\n): Promise<boolean> {\n const hasOrders =\n ORDER_SEEDS.length > 0\n ? await em.count(SalesOrder, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n orderNumber: { $in: ORDER_SEEDS.map((item) => item.orderNumber) as any },\n })\n : 0\n const hasQuotes =\n QUOTE_SEEDS.length > 0\n ? await em.count(SalesQuote, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n quoteNumber: { $in: QUOTE_SEEDS.map((item) => item.quoteNumber) as any },\n })\n : 0\n\n if (hasOrders > 0 || hasQuotes > 0) {\n return false\n }\n\n await seedSalesDictionaries(em, scope)\n const [shippingMethods, paymentMethods, channels] = await Promise.all([\n ensureExampleShippingMethods(em, scope, { skipFlush: true }),\n ensureExamplePaymentMethods(em, scope, { skipFlush: true }),\n ensureChannels(em, scope),\n ])\n await em.flush()\n const catalogLookups = await loadCatalogLookups(em, scope)\n const customerLookups = await loadCustomerLookups(em, scope, [...CUSTOMER_LINKS])\n\n const calculationService = container.resolve<SalesCalculationService>('salesCalculationService')\n\n for (const seed of QUOTE_SEEDS) {\n const quoteId = randomUUID()\n const customer = seed.customerKey ? customerLookups.get(seed.customerKey) ?? null : null\n if (seed.customerKey && !customer) {\n console.warn(`[sales.examples] Skipping quote ${seed.quoteNumber} because customer \"${seed.customerKey}\" is missing.`)\n continue\n }\n const shippingMethod = seed.shippingMethodCode\n ? shippingMethods.get(seed.shippingMethodCode.toLowerCase()) ?? null\n : null\n const paymentMethod = seed.paymentMethodCode\n ? paymentMethods.get(seed.paymentMethodCode.toLowerCase()) ?? null\n : null\n const channel = seed.channelCode ? channels.get(seed.channelCode.toLowerCase()) ?? null : null\n\n const lineSnapshots = seed.lines.map((line) => {\n const catalogRef = resolveCatalogLine(line, catalogLookups)\n if ((line.kind ?? 'product') === 'product' && !catalogRef.productId) {\n console.warn(\n `[sales.examples] Missing catalog match for quote line \"${line.name ?? line.variantSku ?? line.productHandle ?? 'unknown'}\".`\n )\n }\n const unitPriceNet = line.unitPriceNet ?? catalogRef.unitPriceNet ?? 0\n const unitPriceGross = line.unitPriceGross ?? catalogRef.unitPriceGross ?? unitPriceNet\n const currencyCode = catalogRef.currencyCode ?? seed.currencyCode\n const metadata: Record<string, unknown> = {}\n if (catalogRef.productThumbnail) metadata.productThumbnail = catalogRef.productThumbnail\n if (catalogRef.variantThumbnail) metadata.variantThumbnail = catalogRef.variantThumbnail\n return {\n id: randomUUID(),\n kind: line.kind ?? 'product',\n name: line.name,\n description: line.description ?? null,\n comment: line.comment ?? null,\n quantity: line.quantity,\n quantityUnit: line.quantityUnit ?? null,\n normalizedQuantity: line.quantity,\n normalizedUnit: line.quantityUnit ?? null,\n uomSnapshot: null,\n currencyCode,\n unitPriceNet,\n unitPriceGross,\n taxRate: line.taxRate ?? 0,\n discountPercent: line.discountPercent ?? null,\n productId: catalogRef.productId,\n productVariantId: catalogRef.variantId,\n catalogSnapshot: catalogRef.snapshot,\n metadata: Object.keys(metadata).length ? metadata : null,\n }\n })\n\n const adjustmentDrafts =\n seed.adjustments?.map((adj) => ({\n id: randomUUID(),\n scope: adj.scope,\n kind: adj.kind,\n code: adj.label ?? null,\n label: adj.label ?? null,\n rate: adj.rate ?? null,\n amountNet: adj.amountNet,\n amountGross: adj.amountGross ?? adj.amountNet,\n currencyCode: seed.currencyCode,\n position: adj.position ?? 0,\n metadata: adj.lineIndex !== undefined ? { lineIndex: adj.lineIndex } : null,\n })) ?? []\n\n const calculation = await calculationService.calculateDocumentTotals({\n documentKind: 'quote',\n lines: lineSnapshots,\n adjustments: adjustmentDrafts,\n context: {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n currencyCode: seed.currencyCode,\n },\n })\n\n const totals = calculation.totals\n const quoteNumber = seed.quoteNumber ?? `SQ-${quoteId.slice(0, 8).toUpperCase()}`\n const quote = em.create(SalesQuote, {\n id: quoteId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n quoteNumber,\n status: seed.status ?? 'draft',\n customerEntityId: customer?.entity.id ?? null,\n customerContactId: customer?.contactId ?? null,\n customerSnapshot: customer?.snapshot ? toSnapshot(customer.snapshot) : null,\n currencyCode: seed.currencyCode,\n validFrom: seed.validFrom ?? null,\n validUntil: seed.validUntil ?? null,\n comments: seed.comments ?? null,\n shippingMethodId: shippingMethod?.id ?? null,\n shippingMethodCode: shippingMethod?.code ?? seed.shippingMethodCode ?? null,\n paymentMethodId: paymentMethod?.id ?? null,\n paymentMethodCode: paymentMethod?.code ?? seed.paymentMethodCode ?? null,\n channelId: channel?.id ?? null,\n shippingMethodSnapshot: buildShippingMethodSnapshot(shippingMethod),\n paymentMethodSnapshot: buildPaymentMethodSnapshot(paymentMethod),\n metadata: seed.metadata ?? { seed: 'sales.examples' },\n subtotalNetAmount: toAmount(totals.subtotalNetAmount),\n subtotalGrossAmount: toAmount(totals.subtotalGrossAmount),\n discountTotalAmount: toAmount(totals.discountTotalAmount),\n taxTotalAmount: toAmount(totals.taxTotalAmount),\n grandTotalNetAmount: toAmount(totals.grandTotalNetAmount),\n grandTotalGrossAmount: toAmount(totals.grandTotalGrossAmount),\n totalsSnapshot: toSnapshot(totals),\n lineItemCount: seed.lines.length,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(quote)\n\n calculation.lines.forEach((lineResult, idx) => {\n const source = lineSnapshots[idx]\n const line = em.create(SalesQuoteLine, {\n id: source.id,\n quote,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n lineNumber: idx + 1,\n kind: source.kind ?? 'product',\n name: source.name,\n description: source.description,\n comment: source.comment,\n quantity: toAmount(source.quantity),\n quantityUnit: source.quantityUnit ?? null,\n normalizedQuantity: toAmount(source.normalizedQuantity ?? source.quantity),\n normalizedUnit: source.normalizedUnit ?? source.quantityUnit ?? null,\n uomSnapshot:\n source.uomSnapshot && typeof source.uomSnapshot === 'object'\n ? (toSnapshot(source.uomSnapshot as Record<string, unknown>) as typeof source.uomSnapshot)\n : null,\n currencyCode: source.currencyCode,\n unitPriceNet: toAmount(source.unitPriceNet ?? 0),\n unitPriceGross: toAmount(source.unitPriceGross ?? source.unitPriceNet ?? 0),\n discountAmount: toAmount(lineResult.discountAmount),\n discountPercent:\n source.discountPercent !== null && source.discountPercent !== undefined\n ? toAmount(source.discountPercent)\n : '0',\n taxRate: toAmount(source.taxRate ?? 0),\n taxAmount: toAmount(lineResult.taxAmount),\n totalNetAmount: toAmount(lineResult.netAmount),\n totalGrossAmount: toAmount(lineResult.grossAmount),\n productId: source.productId ?? null,\n productVariantId: source.productVariantId ?? null,\n catalogSnapshot: source.catalogSnapshot ? toSnapshot(source.catalogSnapshot) : null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(line)\n })\n\n calculation.adjustments.forEach((adj, idx) => {\n const adjMeta = adj.metadata && typeof adj.metadata === 'object' ? (adj.metadata as Record<string, unknown>) : null\n const lineIndex = adjMeta ? (adjMeta.lineIndex as number | null) : null\n const lineRef =\n typeof lineIndex === 'number' && lineIndex >= 0 && lineIndex < seed.lines.length\n ? lineSnapshots[lineIndex]?.id ?? null\n : null\n const adjustment = em.create(SalesQuoteAdjustment, {\n id: adj.id ?? randomUUID(),\n quote,\n quoteLine: lineRef ? (lineRef as unknown as SalesQuoteLine) : null,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n scope: adj.scope,\n kind: adj.kind,\n code: adj.code ?? adj.label ?? null,\n label: adj.label ?? adj.code ?? null,\n calculatorKey: adj.calculatorKey ?? null,\n promotionId: adj.promotionId ?? null,\n rate: adj.rate !== null && adj.rate !== undefined ? toAmount(adj.rate) : '0',\n amountNet: toAmount(adj.amountNet ?? 0),\n amountGross: toAmount(adj.amountGross ?? adj.amountNet ?? 0),\n currencyCode: adj.currencyCode ?? seed.currencyCode,\n metadata: adj.metadata ?? null,\n position: adj.position ?? idx,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(adjustment)\n })\n\n quote.subtotalNetAmount = toAmount(calculation.totals.subtotalNetAmount)\n quote.subtotalGrossAmount = toAmount(calculation.totals.subtotalGrossAmount)\n quote.discountTotalAmount = toAmount(calculation.totals.discountTotalAmount)\n quote.taxTotalAmount = toAmount(calculation.totals.taxTotalAmount)\n quote.grandTotalNetAmount = toAmount(calculation.totals.grandTotalNetAmount)\n quote.grandTotalGrossAmount = toAmount(calculation.totals.grandTotalGrossAmount)\n quote.totalsSnapshot = toSnapshot(calculation.totals)\n quote.lineItemCount = seed.lines.length\n\n const quoteAddresses = seed.addresses ?? customer?.addresses ?? []\n if (quoteAddresses.length) {\n attachDocumentAddresses(em, scope, {\n documentId: quoteId,\n documentKind: 'quote',\n addresses: quoteAddresses,\n quote,\n })\n const billing = quoteAddresses.find((a) => a.role === 'billing')\n const shipping = quoteAddresses.find((a) => a.role === 'shipping')\n quote.billingAddressId = billing?.customerAddressId ?? null\n quote.shippingAddressId = shipping?.customerAddressId ?? null\n quote.billingAddressSnapshot = billing ? buildAddressSnapshot(billing) : null\n quote.shippingAddressSnapshot = shipping ? buildAddressSnapshot(shipping) : null\n }\n if (seed.notes?.length) {\n attachNotes(em, scope, {\n contextId: quoteId,\n contextType: 'quote',\n notes: seed.notes,\n quote,\n })\n }\n }\n\n for (const seed of ORDER_SEEDS) {\n const orderId = randomUUID()\n const customer = seed.customerKey ? customerLookups.get(seed.customerKey) ?? null : null\n if (seed.customerKey && !customer) {\n console.warn(`[sales.examples] Skipping order ${seed.orderNumber} because customer \"${seed.customerKey}\" is missing.`)\n continue\n }\n const shippingMethod = seed.shippingMethodCode\n ? shippingMethods.get(seed.shippingMethodCode.toLowerCase()) ?? null\n : null\n const paymentMethod = seed.paymentMethodCode\n ? paymentMethods.get(seed.paymentMethodCode.toLowerCase()) ?? null\n : null\n const channel = seed.channelCode ? channels.get(seed.channelCode.toLowerCase()) ?? null : null\n\n const lineSnapshots = seed.lines.map((line) => {\n const catalogRef = resolveCatalogLine(line, catalogLookups)\n if ((line.kind ?? 'product') === 'product' && !catalogRef.productId) {\n console.warn(\n `[sales.examples] Missing catalog match for order line \"${line.name ?? line.variantSku ?? line.productHandle ?? 'unknown'}\".`\n )\n }\n const unitPriceNet = line.unitPriceNet ?? catalogRef.unitPriceNet ?? 0\n const unitPriceGross = line.unitPriceGross ?? catalogRef.unitPriceGross ?? unitPriceNet\n const currencyCode = catalogRef.currencyCode ?? seed.currencyCode\n const metadata: Record<string, unknown> = {}\n if (catalogRef.productThumbnail) metadata.productThumbnail = catalogRef.productThumbnail\n if (catalogRef.variantThumbnail) metadata.variantThumbnail = catalogRef.variantThumbnail\n return {\n id: randomUUID(),\n kind: line.kind ?? 'product',\n name: line.name,\n description: line.description ?? null,\n comment: line.comment ?? null,\n quantity: line.quantity,\n quantityUnit: line.quantityUnit ?? null,\n normalizedQuantity: line.quantity,\n normalizedUnit: line.quantityUnit ?? null,\n uomSnapshot: null,\n currencyCode,\n unitPriceNet,\n unitPriceGross,\n taxRate: line.taxRate ?? 0,\n discountPercent: line.discountPercent ?? null,\n productId: catalogRef.productId,\n productVariantId: catalogRef.variantId,\n catalogSnapshot: catalogRef.snapshot,\n metadata: Object.keys(metadata).length ? metadata : null,\n }\n })\n\n const adjustmentDrafts =\n seed.adjustments?.map((adj) => ({\n id: randomUUID(),\n scope: adj.scope,\n kind: adj.kind,\n code: adj.label ?? null,\n label: adj.label ?? null,\n rate: adj.rate ?? null,\n amountNet: adj.amountNet,\n amountGross: adj.amountGross ?? adj.amountNet,\n currencyCode: seed.currencyCode,\n position: adj.position ?? 0,\n metadata: adj.lineIndex !== undefined ? { lineIndex: adj.lineIndex } : null,\n })) ?? []\n\n const calculation = await calculationService.calculateDocumentTotals({\n documentKind: 'order',\n lines: lineSnapshots,\n adjustments: adjustmentDrafts,\n context: {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n currencyCode: seed.currencyCode,\n },\n })\n\n const totals = calculation.totals\n const order = em.create(SalesOrder, {\n id: orderId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n orderNumber: seed.orderNumber,\n status: seed.status ?? 'confirmed',\n fulfillmentStatus: seed.fulfillmentStatus ?? null,\n paymentStatus: seed.paymentStatus ?? null,\n customerEntityId: customer?.entity.id ?? null,\n customerContactId: customer?.contactId ?? null,\n customerSnapshot: customer?.snapshot ? toSnapshot(customer.snapshot) : null,\n currencyCode: seed.currencyCode,\n placedAt: seed.placedAt ?? null,\n expectedDeliveryAt: seed.expectedDeliveryAt ?? null,\n comments: seed.comments ?? null,\n internalNotes: seed.internalNotes ?? null,\n shippingMethodId: shippingMethod?.id ?? null,\n shippingMethodCode: shippingMethod?.code ?? seed.shippingMethodCode ?? null,\n paymentMethodId: paymentMethod?.id ?? null,\n paymentMethodCode: paymentMethod?.code ?? seed.paymentMethodCode ?? null,\n channelId: channel?.id ?? null,\n shippingMethodSnapshot: buildShippingMethodSnapshot(shippingMethod),\n paymentMethodSnapshot: buildPaymentMethodSnapshot(paymentMethod),\n metadata: seed.metadata ?? { seed: 'sales.examples' },\n subtotalNetAmount: toAmount(totals.subtotalNetAmount),\n subtotalGrossAmount: toAmount(totals.subtotalGrossAmount),\n discountTotalAmount: toAmount(totals.discountTotalAmount),\n taxTotalAmount: toAmount(totals.taxTotalAmount),\n shippingNetAmount: toAmount(totals.shippingNetAmount ?? 0),\n shippingGrossAmount: toAmount(totals.shippingGrossAmount ?? 0),\n surchargeTotalAmount: toAmount(totals.surchargeTotalAmount ?? 0),\n grandTotalNetAmount: toAmount(totals.grandTotalNetAmount),\n grandTotalGrossAmount: toAmount(totals.grandTotalGrossAmount),\n paidTotalAmount: toAmount(totals.paidTotalAmount ?? 0),\n refundedTotalAmount: toAmount(totals.refundedTotalAmount ?? 0),\n outstandingAmount: toAmount(totals.outstandingAmount ?? totals.grandTotalGrossAmount),\n totalsSnapshot: toSnapshot(totals),\n lineItemCount: seed.lines.length,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(order)\n\n const lineEntities: SalesOrderLine[] = []\n calculation.lines.forEach((lineResult, idx) => {\n const source = lineSnapshots[idx]\n const entity = em.create(SalesOrderLine, {\n id: source.id,\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n lineNumber: idx + 1,\n kind: source.kind ?? 'product',\n name: source.name,\n description: source.description,\n comment: source.comment,\n quantity: toAmount(source.quantity),\n quantityUnit: source.quantityUnit ?? null,\n normalizedQuantity: toAmount(source.normalizedQuantity ?? source.quantity),\n normalizedUnit: source.normalizedUnit ?? source.quantityUnit ?? null,\n uomSnapshot:\n source.uomSnapshot && typeof source.uomSnapshot === 'object'\n ? (toSnapshot(source.uomSnapshot as Record<string, unknown>) as typeof source.uomSnapshot)\n : null,\n reservedQuantity: '0',\n fulfilledQuantity: '0',\n invoicedQuantity: '0',\n returnedQuantity: '0',\n currencyCode: source.currencyCode,\n unitPriceNet: toAmount(source.unitPriceNet ?? 0),\n unitPriceGross: toAmount(source.unitPriceGross ?? source.unitPriceNet ?? 0),\n discountAmount: toAmount(lineResult.discountAmount),\n discountPercent:\n source.discountPercent !== null && source.discountPercent !== undefined\n ? toAmount(source.discountPercent)\n : '0',\n taxRate: toAmount(source.taxRate ?? 0),\n taxAmount: toAmount(lineResult.taxAmount),\n totalNetAmount: toAmount(lineResult.netAmount),\n totalGrossAmount: toAmount(lineResult.grossAmount),\n productId: source.productId ?? null,\n productVariantId: source.productVariantId ?? null,\n catalogSnapshot: source.catalogSnapshot ? toSnapshot(source.catalogSnapshot) : null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(entity)\n lineEntities.push(entity)\n })\n\n calculation.adjustments.forEach((adj, idx) => {\n const lineIndex = adj.metadata && typeof adj.metadata === 'object' ? (adj.metadata as any).lineIndex : null\n const lineRef =\n typeof lineIndex === 'number' && lineIndex >= 0 && lineIndex < seed.lines.length\n ? lineEntities[lineIndex] ?? null\n : null\n const adjustment = em.create(SalesOrderAdjustment, {\n id: adj.id ?? randomUUID(),\n order,\n orderLine: lineRef,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n scope: adj.scope,\n kind: adj.kind,\n code: adj.code ?? adj.label ?? null,\n label: adj.label ?? adj.code ?? null,\n calculatorKey: adj.calculatorKey ?? null,\n promotionId: adj.promotionId ?? null,\n rate: adj.rate !== null && adj.rate !== undefined ? toAmount(adj.rate) : '0',\n amountNet: toAmount(adj.amountNet ?? 0),\n amountGross: toAmount(adj.amountGross ?? adj.amountNet ?? 0),\n currencyCode: adj.currencyCode ?? seed.currencyCode,\n metadata: adj.metadata ?? null,\n position: adj.position ?? idx,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(adjustment)\n })\n\n order.subtotalNetAmount = toAmount(calculation.totals.subtotalNetAmount)\n order.subtotalGrossAmount = toAmount(calculation.totals.subtotalGrossAmount)\n order.discountTotalAmount = toAmount(calculation.totals.discountTotalAmount)\n order.taxTotalAmount = toAmount(calculation.totals.taxTotalAmount)\n order.shippingNetAmount = toAmount(calculation.totals.shippingNetAmount ?? 0)\n order.shippingGrossAmount = toAmount(calculation.totals.shippingGrossAmount ?? 0)\n order.surchargeTotalAmount = toAmount(calculation.totals.surchargeTotalAmount ?? 0)\n order.grandTotalNetAmount = toAmount(calculation.totals.grandTotalNetAmount)\n order.grandTotalGrossAmount = toAmount(calculation.totals.grandTotalGrossAmount)\n order.paidTotalAmount = toAmount(calculation.totals.paidTotalAmount ?? 0)\n order.refundedTotalAmount = toAmount(calculation.totals.refundedTotalAmount ?? 0)\n order.outstandingAmount = toAmount(calculation.totals.outstandingAmount ?? calculation.totals.grandTotalGrossAmount)\n order.totalsSnapshot = toSnapshot(calculation.totals)\n order.lineItemCount = seed.lines.length\n\n const lineMap = new Map(lineEntities.map((line) => [line.id, line]))\n if (seed.shipments?.length) {\n for (const shipmentSeed of seed.shipments) {\n const shipment = em.create(SalesShipment, {\n id: randomUUID(),\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n shipmentNumber: shipmentSeed.shipmentNumber ?? null,\n shippingMethodId: shipmentSeed.methodCode\n ? shippingMethods.get(shipmentSeed.methodCode.toLowerCase())?.id ?? null\n : null,\n status: shipmentSeed.status ?? null,\n carrierName: null,\n trackingNumbers: shipmentSeed.trackingNumbers ?? null,\n shippedAt: shipmentSeed.shippedAt ?? null,\n deliveredAt: shipmentSeed.deliveredAt ?? null,\n weightValue: shipmentSeed.weightKg ? toAmount(shipmentSeed.weightKg) : null,\n weightUnit: shipmentSeed.weightKg ? 'kg' : null,\n declaredValueNet: shipmentSeed.declaredValue ? toAmount(shipmentSeed.declaredValue) : null,\n declaredValueGross: shipmentSeed.declaredValue ? toAmount(shipmentSeed.declaredValue) : null,\n currencyCode: shipmentSeed.currencyCode ?? seed.currencyCode,\n notesText: shipmentSeed.notes ?? null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(shipment)\n\n const shipmentItems: SalesShipmentItem[] = []\n for (const item of shipmentSeed.items) {\n const line = lineEntities[item.lineIndex]\n if (!line) continue\n line.fulfilledQuantity = toAmount(\n Number(line.fulfilledQuantity ?? '0') + Math.max(item.quantity, 0)\n )\n const shipmentItem = em.create(SalesShipmentItem, {\n id: randomUUID(),\n shipment,\n orderLine: line,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n quantity: toAmount(item.quantity),\n metadata: null,\n })\n shipmentItems.push(shipmentItem)\n em.persist(shipmentItem)\n }\n await refreshShipmentItemsSnapshot(em, shipment, { items: shipmentItems, lineMap })\n }\n }\n\n let paymentTotal = 0\n if (seed.payments?.length) {\n for (const paymentSeed of seed.payments) {\n paymentTotal += paymentSeed.amount\n const method = paymentSeed.methodCode\n ? paymentMethods.get(paymentSeed.methodCode.toLowerCase()) ?? null\n : paymentMethod\n const payment = em.create(SalesPayment, {\n id: randomUUID(),\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n paymentMethod: method ?? null,\n paymentReference: paymentSeed.reference ?? null,\n status: paymentSeed.status ?? null,\n amount: toAmount(paymentSeed.amount),\n currencyCode: paymentSeed.currencyCode,\n capturedAmount: toAmount(paymentSeed.capturedAt ? paymentSeed.amount : 0),\n refundedAmount: '0',\n receivedAt: paymentSeed.receivedAt ?? null,\n capturedAt: paymentSeed.capturedAt ?? null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(payment)\n const allocation = em.create(SalesPaymentAllocation, {\n id: randomUUID(),\n payment,\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n amount: toAmount(paymentSeed.amount),\n currencyCode: paymentSeed.currencyCode,\n metadata: null,\n })\n em.persist(allocation)\n }\n }\n\n const orderAddresses = seed.addresses ?? customer?.addresses ?? []\n if (orderAddresses.length) {\n attachDocumentAddresses(em, scope, {\n documentId: orderId,\n documentKind: 'order',\n addresses: orderAddresses,\n order,\n })\n const billing = orderAddresses.find((a) => a.role === 'billing')\n const shipping = orderAddresses.find((a) => a.role === 'shipping')\n order.billingAddressId = billing?.customerAddressId ?? null\n order.shippingAddressId = shipping?.customerAddressId ?? null\n order.billingAddressSnapshot = billing ? buildAddressSnapshot(billing) : null\n order.shippingAddressSnapshot = shipping ? buildAddressSnapshot(shipping) : null\n }\n if (seed.notes?.length) {\n attachNotes(em, scope, {\n contextId: orderId,\n contextType: 'order',\n notes: seed.notes,\n order,\n })\n }\n\n const grandTotal = Number(order.grandTotalGrossAmount ?? '0')\n order.paidTotalAmount = toAmount(paymentTotal)\n order.outstandingAmount = toAmount(Math.max(grandTotal - paymentTotal, 0))\n order.paymentStatus = seed.paymentStatus ?? mapPaymentStatus(grandTotal - paymentTotal)\n const isFullyFulfilled = lineEntities.every((line, idx) => {\n const expected = Number(seed.lines[idx]?.quantity ?? 0)\n const fulfilled = Number(line.fulfilledQuantity ?? '0')\n return fulfilled >= expected\n })\n order.fulfillmentStatus = seed.fulfillmentStatus ?? (isFullyFulfilled ? 'fulfilled' : 'in_fulfillment')\n }\n\n await em.flush()\n return true\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { randomUUID } from 'crypto'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n SalesOrder,\n SalesOrderLine,\n SalesOrderAdjustment,\n SalesQuote,\n SalesQuoteLine,\n SalesQuoteAdjustment,\n SalesShipment,\n SalesShipmentItem,\n SalesPayment,\n SalesPaymentAllocation,\n SalesDocumentAddress,\n SalesNote,\n SalesChannel,\n SalesPaymentMethod,\n SalesShippingMethod,\n type SalesAdjustmentKind,\n type SalesLineKind,\n} from '../data/entities'\nimport { seedSalesDictionaries } from '../lib/dictionaries'\nimport { refreshShipmentItemsSnapshot } from '../lib/shipments/snapshots'\nimport { toNumericString } from '../commands/shared'\nimport type { SalesCalculationService } from '../services/salesCalculationService'\nimport { ensureExamplePaymentMethods, ensureExampleShippingMethods, type SeedScope } from './examples-data'\nimport {\n CatalogProduct,\n CatalogProductPrice,\n CatalogProductVariant,\n} from '@open-mercato/core/modules/catalog/data/entities'\nimport {\n CustomerAddress,\n CustomerEntity,\n CustomerPersonProfile,\n} from '@open-mercato/core/modules/customers/data/entities'\nimport { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('sales')\n\ntype ExampleAddress = {\n role: 'billing' | 'shipping'\n companyName?: string | null\n name?: string | null\n addressLine1: string\n addressLine2?: string | null\n city?: string | null\n region?: string | null\n postalCode?: string | null\n country?: string | null\n latitude?: number | null\n longitude?: number | null\n customerAddressId?: string | null\n}\n\ntype ExampleLine = {\n kind?: SalesLineKind\n name: string\n description?: string\n quantity: number\n unitPriceNet: number\n unitPriceGross?: number\n taxRate?: number\n discountPercent?: number\n quantityUnit?: string\n comment?: string\n productHandle?: string\n variantSku?: string\n}\n\ntype ExampleAdjustment = {\n scope: 'order' | 'line'\n kind: SalesAdjustmentKind\n label?: string\n amountNet: number\n amountGross?: number\n rate?: number\n lineIndex?: number\n position?: number\n}\n\ntype ExampleNote = {\n body: string\n createdAt?: Date\n appearanceIcon?: string | null\n appearanceColor?: string | null\n}\n\ntype ExampleShipment = {\n shipmentNumber?: string\n methodCode?: string\n status?: string\n shippedAt?: Date\n deliveredAt?: Date\n trackingNumbers?: string[]\n weightKg?: number\n declaredValue?: number\n currencyCode?: string\n notes?: string\n items: Array<{ lineIndex: number; quantity: number }>\n}\n\ntype ExamplePayment = {\n reference?: string\n methodCode?: string\n status?: string\n amount: number\n currencyCode: string\n receivedAt?: Date\n capturedAt?: Date\n}\n\ntype ExampleQuote = {\n quoteNumber: string\n status?: string\n comments?: string\n validFrom?: Date\n validUntil?: Date\n currencyCode: string\n shippingMethodCode?: string\n paymentMethodCode?: string\n addresses?: ExampleAddress[]\n lines: ExampleLine[]\n adjustments?: ExampleAdjustment[]\n notes?: ExampleNote[]\n metadata?: Record<string, unknown>\n channelCode?: string\n customerKey?: string\n}\n\ntype ExampleOrder = {\n orderNumber: string\n status?: string\n fulfillmentStatus?: string\n paymentStatus?: string\n comments?: string\n internalNotes?: string\n placedAt?: Date\n expectedDeliveryAt?: Date\n currencyCode: string\n shippingMethodCode?: string\n paymentMethodCode?: string\n channelCode?: string\n addresses?: ExampleAddress[]\n lines: ExampleLine[]\n adjustments?: ExampleAdjustment[]\n notes?: ExampleNote[]\n shipments?: ExampleShipment[]\n payments?: ExamplePayment[]\n metadata?: Record<string, unknown>\n customerKey?: string\n}\n\nconst CHANNEL_SEEDS = [\n { code: 'online', name: 'Online Store', description: 'Orders captured from the storefront.' },\n {\n code: 'field-sales',\n name: 'Field Sales',\n description: 'Quotes negotiated by the sales team and converted offline.',\n },\n] as const\n\nconst CUSTOMER_LINKS: CustomerLookup[] = [\n { key: 'brightside', displayName: 'Brightside Solar' },\n { key: 'harborview', displayName: 'Harborview Analytics' },\n { key: 'copperleaf', displayName: 'Copperleaf Design Co.' },\n] as const\n\nconst QUOTE_SEEDS: ExampleQuote[] = [\n {\n quoteNumber: 'SQ-DEMO-1001',\n status: 'draft',\n comments: 'Pricing reflects bundled onboarding; valid for 30 days.',\n validFrom: daysFromNow(-2),\n validUntil: daysFromNow(28),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n lines: [\n {\n name: 'Remote onboarding package',\n description: 'Kick-off, workflow design, and training for distributed teams.',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 10,\n },\n {\n name: 'Implementation workshop (4h)',\n description: 'Hands-on configuration session with stakeholders.',\n quantity: 1,\n unitPriceNet: 320,\n taxRate: 0,\n comment: 'Can be split into two shorter sessions on request.',\n },\n ],\n adjustments: [\n { scope: 'order', kind: 'discount', label: 'Pilot discount', amountNet: 45, position: 1 },\n {\n scope: 'order',\n kind: 'shipping',\n label: 'Expedited shipping',\n amountNet: 25,\n amountGross: 27.5,\n position: 2,\n },\n ],\n addresses: [\n {\n role: 'billing',\n companyName: 'Northwind Ventures',\n name: 'Nora Winters',\n addressLine1: '200 Pine St',\n addressLine2: 'Suite 900',\n city: 'Seattle',\n region: 'WA',\n postalCode: '98101',\n country: 'US',\n },\n {\n role: 'shipping',\n companyName: 'Northwind Ventures',\n name: 'Receiving Dock',\n addressLine1: '4124 4th Ave S',\n city: 'Seattle',\n region: 'WA',\n postalCode: '98134',\n country: 'US',\n },\n ],\n notes: [\n {\n body: 'Requested weekend training option if schedules slip.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:calendar-clock',\n appearanceColor: '#0ea5e9',\n },\n {\n body: 'Prefers invoicing after acceptance instead of deposit.',\n createdAt: daysFromNow(0),\n appearanceIcon: 'lucide:receipt',\n appearanceColor: '#f97316',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n quoteNumber: 'SQ-DEMO-1002',\n status: 'draft',\n comments: 'Footwear replenishment and event outfits pulled from catalog offers.',\n validFrom: daysFromNow(-1),\n validUntil: daysFromNow(21),\n currencyCode: 'USD',\n shippingMethodCode: 'standard-ground',\n paymentMethodCode: 'card',\n channelCode: 'online',\n customerKey: 'brightside',\n lines: [\n {\n name: 'Atlas Runner Sneaker',\n quantity: 3,\n unitPriceNet: 120,\n taxRate: 10,\n variantSku: 'ATLAS-RUN-NAVY-8',\n },\n {\n name: 'Aurora Wrap Dress',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 10,\n variantSku: 'AURORA-ROSE-M',\n discountPercent: 5,\n },\n ],\n adjustments: [\n { scope: 'order', kind: 'discount', label: 'Preferred customer', amountNet: 35, position: 1 },\n ],\n notes: [\n {\n body: 'Requested quick turn on delivery dates for press shoot.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:camera',\n appearanceColor: '#0ea5e9',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n quoteNumber: 'SQ-DEMO-1003',\n status: 'sent',\n comments: 'Bundle of apparel and on-site styling block for the studio launch.',\n validFrom: daysFromNow(-3),\n validUntil: daysFromNow(10),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n customerKey: 'copperleaf',\n lines: [\n {\n name: 'Aurora Wrap Dress',\n quantity: 2,\n unitPriceNet: 180,\n taxRate: 10,\n variantSku: 'AURORA-CELESTIAL-L',\n comment: 'Alternate colorway accepted if Celestial runs out.',\n },\n {\n name: 'Signature Haircut & Finish',\n quantity: 4,\n unitPriceNet: 95,\n taxRate: 0,\n variantSku: 'SERV-HAIR-60',\n quantityUnit: 'hour',\n comment: 'Styling sessions during opening week.',\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'discount',\n label: 'Launch partner credit',\n amountNet: 60,\n position: 1,\n },\n ],\n notes: [\n {\n body: 'Prefers consolidated invoicing after the event.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:file-text',\n appearanceColor: '#f97316',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n]\n\nconst ORDER_SEEDS: ExampleOrder[] = [\n {\n orderNumber: 'SO-DEMO-2001',\n status: 'confirmed',\n fulfillmentStatus: 'in_fulfillment',\n comments: 'White-glove delivery requested for the larger items.',\n internalNotes: 'Coordinate with facilities for access badges.',\n placedAt: daysFromNow(-3),\n expectedDeliveryAt: daysFromNow(4),\n currencyCode: 'USD',\n shippingMethodCode: 'standard-ground',\n paymentMethodCode: 'card',\n channelCode: 'online',\n lines: [\n {\n name: 'Modular desk system',\n quantity: 1,\n unitPriceNet: 640,\n taxRate: 10,\n description: 'Corner configuration with cable routing.',\n },\n {\n name: 'Acoustic panel set',\n quantity: 3,\n unitPriceNet: 85,\n taxRate: 10,\n description: 'Charcoal grey finish, adhesive mount.',\n discountPercent: 5,\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'shipping',\n label: 'White-glove delivery',\n amountNet: 60,\n amountGross: 66,\n position: 1,\n },\n { scope: 'order', kind: 'discount', label: 'New office promo', amountNet: 75, position: 2 },\n {\n scope: 'order',\n kind: 'surcharge',\n label: 'After-hours install',\n amountNet: 35,\n amountGross: 38.5,\n position: 3,\n },\n ],\n shipments: [\n {\n shipmentNumber: 'SHIP-2001-1',\n methodCode: 'standard-ground',\n status: 'shipped',\n shippedAt: daysFromNow(-1),\n trackingNumbers: ['1Z-234-ACOUSTICS'],\n weightKg: 38,\n declaredValue: 720,\n currencyCode: 'USD',\n notes: 'Panels shipped separately to avoid freight delay.',\n items: [\n { lineIndex: 1, quantity: 2 },\n ],\n },\n {\n shipmentNumber: 'SHIP-2001-2',\n methodCode: 'express-air',\n status: 'in_transit',\n shippedAt: daysFromNow(0),\n trackingNumbers: ['1Z-987-DESK'],\n weightKg: 72,\n declaredValue: 560,\n currencyCode: 'USD',\n notes: 'Desk ships via express due to size.',\n items: [{ lineIndex: 0, quantity: 1 }],\n },\n ],\n payments: [\n {\n reference: 'AUTH-2001-CC',\n methodCode: 'card',\n status: 'captured',\n amount: 600,\n currencyCode: 'USD',\n receivedAt: daysFromNow(-2),\n capturedAt: daysFromNow(-1),\n },\n {\n reference: 'WIRE-2001',\n methodCode: 'bank-transfer',\n status: 'received',\n amount: 414,\n currencyCode: 'USD',\n receivedAt: daysFromNow(1),\n },\n ],\n addresses: [\n {\n role: 'billing',\n companyName: 'Harborview Analytics',\n name: 'Accounts Payable',\n addressLine1: '355 Atlantic Ave Floor 6',\n city: 'Boston',\n region: 'MA',\n postalCode: '02210',\n country: 'US',\n },\n {\n role: 'shipping',\n companyName: 'Harborview Analytics',\n name: 'Loading Dock',\n addressLine1: '9 Drydock Ave',\n city: 'Boston',\n region: 'MA',\n postalCode: '02210',\n country: 'US',\n },\n ],\n notes: [\n {\n body: 'Facilities requested 2-hour delivery window notice.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:bell-ring',\n appearanceColor: '#0ea5e9',\n },\n {\n body: 'Panels can be staged in conference room A.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:warehouse',\n appearanceColor: '#22c55e',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n orderNumber: 'SO-DEMO-2002',\n status: 'confirmed',\n fulfillmentStatus: 'fulfilled',\n paymentStatus: 'partial',\n comments: 'Subscription setup aligns with fiscal Q3 start.',\n placedAt: daysFromNow(-6),\n expectedDeliveryAt: daysFromNow(1),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n lines: [\n {\n name: 'On-site enablement',\n quantity: 1,\n unitPriceNet: 280,\n taxRate: 0,\n description: 'Day of workshops across two teams.',\n },\n {\n name: 'Support retainer (Q3)',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 0,\n description: 'Response SLA with named TAM.',\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'shipping',\n label: 'Travel & lodging',\n amountNet: 20,\n amountGross: 22,\n position: 1,\n },\n {\n scope: 'order',\n kind: 'discount',\n label: 'Multi-team starter',\n amountNet: 25,\n position: 2,\n },\n ],\n shipments: [\n {\n shipmentNumber: 'SHIP-2002-1',\n methodCode: 'express-air',\n status: 'delivered',\n shippedAt: daysFromNow(-4),\n deliveredAt: daysFromNow(-2),\n trackingNumbers: ['AIR-22002-KIT'],\n declaredValue: 150,\n currencyCode: 'USD',\n notes: 'Enablement kit delivered to training room.',\n items: [\n { lineIndex: 0, quantity: 1 },\n { lineIndex: 1, quantity: 1 },\n ],\n },\n ],\n payments: [\n {\n reference: 'WIRE-2002',\n methodCode: 'bank-transfer',\n status: 'received',\n amount: 250,\n currencyCode: 'USD',\n receivedAt: daysFromNow(-1),\n },\n ],\n addresses: [\n {\n role: 'billing',\n companyName: 'Brightside Solar',\n name: 'Finance',\n addressLine1: '245 Market St Suite 400',\n city: 'San Francisco',\n region: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n {\n role: 'shipping',\n companyName: 'Brightside Solar',\n name: 'Training Room B',\n addressLine1: '245 Market St Suite 410',\n city: 'San Francisco',\n region: 'CA',\n postalCode: '94105',\n country: 'US',\n },\n ],\n notes: [\n {\n body: 'TAM onboarding scheduled next Tuesday.',\n createdAt: daysFromNow(-3),\n appearanceIcon: 'lucide:users',\n appearanceColor: '#a855f7',\n },\n {\n body: 'Retainer renewal review in mid-Q4.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:clock-3',\n appearanceColor: '#f97316',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n orderNumber: 'SO-DEMO-2003',\n status: 'confirmed',\n fulfillmentStatus: 'in_fulfillment',\n paymentStatus: 'partial',\n comments: 'Equipment refresh for analytics field team with matching footwear.',\n internalNotes: 'Coordinate delivery around team offsite schedule.',\n placedAt: daysFromNow(-2),\n expectedDeliveryAt: daysFromNow(5),\n currencyCode: 'USD',\n shippingMethodCode: 'standard-ground',\n paymentMethodCode: 'card',\n channelCode: 'online',\n customerKey: 'harborview',\n lines: [\n {\n name: 'Atlas Runner Sneaker',\n quantity: 4,\n unitPriceNet: 120,\n taxRate: 10,\n variantSku: 'ATLAS-RUN-GLACIER-10',\n comment: 'Size mix handled via catalog variants.',\n },\n {\n name: 'Aurora Wrap Dress',\n quantity: 1,\n unitPriceNet: 180,\n taxRate: 10,\n variantSku: 'AURORA-ROSE-M',\n discountPercent: 10,\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'shipping',\n label: 'Ground shipping',\n amountNet: 25,\n amountGross: 27.5,\n position: 1,\n },\n ],\n shipments: [\n {\n shipmentNumber: 'SHIP-2003-1',\n methodCode: 'standard-ground',\n status: 'pending',\n shippedAt: undefined,\n trackingNumbers: [],\n weightKg: 12,\n declaredValue: 0,\n currencyCode: 'USD',\n notes: 'Bundle footwear and apparel together.',\n items: [\n { lineIndex: 0, quantity: 4 },\n { lineIndex: 1, quantity: 1 },\n ],\n },\n ],\n payments: [\n {\n reference: 'CARD-2003',\n methodCode: 'card',\n status: 'authorized',\n amount: 300,\n currencyCode: 'USD',\n receivedAt: daysFromNow(-1),\n },\n ],\n notes: [\n {\n body: 'Leadership wants tracking shared in Slack channel.',\n createdAt: daysFromNow(-1),\n appearanceIcon: 'lucide:message-circle',\n appearanceColor: '#22c55e',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n {\n orderNumber: 'SO-DEMO-2004',\n status: 'confirmed',\n fulfillmentStatus: 'pending',\n paymentStatus: 'unpaid',\n comments: 'On-site styling block for studio launch week.',\n placedAt: daysFromNow(-4),\n expectedDeliveryAt: daysFromNow(1),\n currencyCode: 'USD',\n shippingMethodCode: 'express-air',\n paymentMethodCode: 'bank-transfer',\n channelCode: 'field-sales',\n customerKey: 'copperleaf',\n lines: [\n {\n name: 'Signature Haircut & Finish',\n quantity: 6,\n unitPriceNet: 95,\n taxRate: 0,\n variantSku: 'SERV-HAIR-60',\n quantityUnit: 'hour',\n comment: 'Block book stylists for staggered sessions.',\n },\n ],\n adjustments: [\n {\n scope: 'order',\n kind: 'discount',\n label: 'Launch week courtesy',\n amountNet: 45,\n position: 1,\n },\n ],\n payments: [\n {\n reference: 'WIRE-2004',\n methodCode: 'bank-transfer',\n status: 'pending',\n amount: 0,\n currencyCode: 'USD',\n },\n ],\n notes: [\n {\n body: 'Confirm stylist roster by Friday.',\n createdAt: daysFromNow(-2),\n appearanceIcon: 'lucide:check-circle',\n appearanceColor: '#0ea5e9',\n },\n ],\n metadata: { seed: 'sales.examples' },\n },\n]\n\nfunction daysFromNow(offset: number): Date {\n const now = new Date()\n const copy = new Date(now)\n copy.setUTCDate(now.getUTCDate() + offset)\n return copy\n}\n\nfunction toAmount(value: number | null | undefined): string {\n if (value === null || value === undefined || Number.isNaN(value)) return '0'\n return toNumericString(Math.round((value + Number.EPSILON) * 10000) / 10000) ?? '0'\n}\n\nfunction toSnapshot<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T\n}\n\nfunction normalizeKey(value: string | null | undefined): string {\n return (value ?? '').trim().toLowerCase()\n}\n\nfunction asNumber(value: unknown): number {\n if (typeof value === 'number') return value\n if (typeof value === 'string') {\n const parsed = Number(value)\n return Number.isFinite(parsed) ? parsed : 0\n }\n return 0\n}\n\ntype CatalogLookup = {\n productsByHandle: Map<string, CatalogProduct>\n variantsBySku: Map<string, CatalogProductVariant>\n variantPrices: Map<string, { net: number; gross: number; currency: string }>\n}\n\nasync function loadCatalogLookups(em: EntityManager, scope: SeedScope): Promise<CatalogLookup> {\n const [products, variants, prices] = await Promise.all([\n em.find(CatalogProduct, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n }),\n em.find(\n CatalogProductVariant,\n { organizationId: scope.organizationId, tenantId: scope.tenantId, deletedAt: null },\n { populate: ['product'] }\n ),\n em.find(CatalogProductPrice, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n }),\n ])\n\n const productsByHandle = new Map<string, CatalogProduct>()\n products.forEach((product) => {\n const key = normalizeKey(product.handle ?? product.sku ?? product.title)\n if (key) productsByHandle.set(key, product)\n })\n\n const variantsBySku = new Map<string, CatalogProductVariant>()\n variants.forEach((variant) => {\n const key = normalizeKey(variant.sku)\n if (key) variantsBySku.set(key, variant)\n })\n\n const variantPrices = new Map<string, { net: number; gross: number; currency: string }>()\n for (const price of prices) {\n const variantId =\n typeof price.variant === 'string' ? price.variant : price.variant?.id ?? (price as any)?.variant_id ?? null\n if (!variantId) continue\n const gross = asNumber((price as any).unitPriceGross ?? price.unitPriceGross)\n const net = asNumber((price as any).unitPriceNet ?? price.unitPriceNet ?? gross)\n const currency = typeof price.currencyCode === 'string' ? price.currencyCode : 'USD'\n const isSale = normalizeKey((price as any).kind) === 'sale' || normalizeKey((price as any)?.priceKind?.code) === 'sale'\n const existing = variantPrices.get(variantId)\n if (!existing || isSale) {\n variantPrices.set(variantId, { net, gross, currency })\n }\n }\n\n return { productsByHandle, variantsBySku, variantPrices }\n}\n\nfunction buildCatalogSnapshot(\n product: CatalogProduct | null,\n variant: CatalogProductVariant | null,\n price: { net: number; gross: number; currency: string } | null\n): Record<string, unknown> | null {\n if (!product) return null\n const productThumbnail =\n (product as any).defaultMediaUrl ??\n (product as any).thumbnailUrl ??\n (product.metadata && typeof product.metadata === 'object'\n ? ((product.metadata as any).thumbnailUrl as string | null | undefined)\n : null) ??\n null\n const variantThumbnail =\n variant && variant.metadata && typeof variant.metadata === 'object'\n ? ((variant.metadata as any).thumbnailUrl as string | null | undefined) ?? null\n : null\n return {\n product: {\n id: product.id,\n title: product.title,\n handle: product.handle ?? null,\n sku: product.sku ?? null,\n thumbnailUrl: productThumbnail,\n },\n variant: variant\n ? {\n id: variant.id,\n name: variant.name ?? product.title,\n sku: variant.sku ?? null,\n optionValues: variant.optionValues ?? null,\n thumbnailUrl: variantThumbnail,\n }\n : null,\n price: price\n ? {\n currencyCode: price.currency,\n unitPriceNet: price.net,\n unitPriceGross: price.gross,\n }\n : null,\n }\n}\n\nfunction resolveCatalogLine(\n line: ExampleLine,\n catalog: CatalogLookup\n): {\n productId: string | null\n variantId: string | null\n unitPriceNet: number | null\n unitPriceGross: number | null\n currencyCode: string | null\n snapshot: Record<string, unknown> | null\n productThumbnail: string | null\n variantThumbnail: string | null\n} {\n const variant =\n line.variantSku && catalog.variantsBySku.size\n ? catalog.variantsBySku.get(normalizeKey(line.variantSku))\n : null\n const product =\n variant?.product ??\n (line.productHandle ? catalog.productsByHandle.get(normalizeKey(line.productHandle)) ?? null : null)\n const price = variant ? catalog.variantPrices.get(variant.id) ?? null : null\n const snapshot = buildCatalogSnapshot(product ?? null, variant ?? null, price ?? null)\n const productThumbnail =\n (snapshot as any)?.product?.thumbnailUrl ??\n (product as any)?.defaultMediaUrl ??\n (product as any)?.thumbnailUrl ??\n null\n const variantThumbnail = (snapshot as any)?.variant?.thumbnailUrl ?? null\n return {\n productId: product ? product.id : null,\n variantId: variant ? variant.id : null,\n unitPriceNet: price?.net ?? null,\n unitPriceGross: price?.gross ?? null,\n currencyCode: price?.currency ?? null,\n snapshot,\n productThumbnail: productThumbnail ?? null,\n variantThumbnail: variantThumbnail ?? null,\n }\n}\n\ntype CustomerLookup = {\n key: string\n displayName: string\n}\n\ntype CustomerLookupSpec = CustomerLookup & { normalizedName: string }\n\ntype CustomerContext = {\n entity: CustomerEntity\n contact: CustomerPersonProfile | null\n contactId: string | null\n snapshot: Record<string, unknown> | null\n addresses: ExampleAddress[]\n}\n\nfunction buildCustomerSnapshot(\n entity: CustomerEntity,\n contact: CustomerPersonProfile | null\n): Record<string, unknown> | null {\n const base = {\n id: entity.id,\n kind: entity.kind,\n displayName: entity.displayName,\n primaryEmail: entity.primaryEmail ?? null,\n primaryPhone: entity.primaryPhone ?? null,\n personProfile: entity.personProfile\n ? {\n id: entity.personProfile.id,\n firstName: entity.personProfile.firstName ?? null,\n lastName: entity.personProfile.lastName ?? null,\n preferredName: entity.personProfile.preferredName ?? null,\n jobTitle: entity.personProfile.jobTitle ?? null,\n department: entity.personProfile.department ?? null,\n seniority: entity.personProfile.seniority ?? null,\n timezone: entity.personProfile.timezone ?? null,\n }\n : null,\n companyProfile: entity.companyProfile\n ? {\n id: entity.companyProfile.id,\n legalName: entity.companyProfile.legalName ?? null,\n brandName: entity.companyProfile.brandName ?? null,\n domain: entity.companyProfile.domain ?? null,\n websiteUrl: entity.companyProfile.websiteUrl ?? null,\n }\n : null,\n }\n const contactSnapshot = contact\n ? {\n id: contact.id,\n firstName: contact.firstName ?? null,\n lastName: contact.lastName ?? null,\n email: contact.entity?.primaryEmail ?? null,\n phone: contact.entity?.primaryPhone ?? null,\n companyId: contact.company ? (typeof contact.company === 'string' ? contact.company : contact.company.id) : null,\n }\n : null\n return { customer: base, contact: contactSnapshot }\n}\n\nfunction toExampleAddresses(customer: CustomerEntity, address: CustomerAddress | null): ExampleAddress[] {\n if (!address) return []\n const base = {\n companyName: address.companyName ?? customer.displayName ?? null,\n name: address.name ?? address.companyName ?? customer.displayName ?? null,\n addressLine1: address.addressLine1,\n addressLine2: address.addressLine2 ?? null,\n city: address.city ?? null,\n region: address.region ?? null,\n postalCode: address.postalCode ?? null,\n country: address.country ?? null,\n latitude: address.latitude ?? null,\n longitude: address.longitude ?? null,\n customerAddressId: address.id,\n }\n return [\n { role: 'billing', ...base },\n { role: 'shipping', ...base },\n ]\n}\n\nasync function loadCustomerLookups(\n em: EntityManager,\n scope: SeedScope,\n lookups: CustomerLookup[]\n): Promise<Map<string, CustomerContext>> {\n const map = new Map<string, CustomerContext>()\n if (lookups.length === 0) return map\n const lookupSpecs: CustomerLookupSpec[] = lookups.map((lookup) => ({\n ...lookup,\n normalizedName: normalizeKey(lookup.displayName),\n }))\n const unresolved = new Map<string, CustomerLookupSpec>()\n for (const spec of lookupSpecs) {\n unresolved.set(spec.key, spec)\n }\n\n const customers = await findWithDecryption(\n em,\n CustomerEntity,\n {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n },\n { populate: ['personProfile', 'companyProfile'] },\n { tenantId: scope.tenantId, organizationId: scope.organizationId }\n )\n\n const doesMatch = (candidate: string, spec: CustomerLookupSpec): boolean => {\n if (!candidate) return false\n return (\n candidate === spec.normalizedName ||\n candidate.includes(spec.normalizedName) ||\n spec.normalizedName.includes(candidate)\n )\n }\n\n const matchedPairs: Array<{ spec: CustomerLookupSpec; customer: CustomerEntity }> = []\n\n for (const customer of customers) {\n if (unresolved.size === 0) break\n const tokens = new Set<string>()\n tokens.add(normalizeKey(customer.displayName))\n if (customer.companyProfile) {\n tokens.add(normalizeKey(customer.companyProfile.legalName ?? ''))\n tokens.add(normalizeKey(customer.companyProfile.brandName ?? ''))\n tokens.add(normalizeKey(customer.companyProfile.domain ?? ''))\n }\n if (customer.personProfile) {\n tokens.add(normalizeKey(customer.personProfile.firstName ?? ''))\n tokens.add(normalizeKey(customer.personProfile.lastName ?? ''))\n const fullName = [customer.personProfile.firstName, customer.personProfile.lastName]\n .filter((part) => (part ?? '').trim().length > 0)\n .join(' ')\n tokens.add(normalizeKey(fullName))\n }\n\n const matchedSpec = lookupSpecs.find(\n (spec) => unresolved.has(spec.key) && Array.from(tokens).some((token) => doesMatch(token, spec))\n )\n if (!matchedSpec) continue\n matchedPairs.push({ spec: matchedSpec, customer })\n unresolved.delete(matchedSpec.key)\n }\n\n const matchIds = matchedPairs.map(({ customer }) => customer.id)\n\n const addresses = matchIds.length\n ? await findWithDecryption(\n em,\n CustomerAddress,\n { organizationId: scope.organizationId, tenantId: scope.tenantId, entity: { $in: matchIds } },\n { orderBy: { isPrimary: 'desc', createdAt: 'asc' } as any },\n { tenantId: scope.tenantId, organizationId: scope.organizationId }\n )\n : []\n const addressByCustomer = new Map<string, CustomerAddress>()\n for (const address of addresses) {\n const entityId = typeof address.entity === 'string' ? address.entity : address.entity?.id\n if (!entityId || addressByCustomer.has(entityId)) continue\n addressByCustomer.set(entityId, address)\n }\n\n const contacts = matchIds.length\n ? await findWithDecryption(\n em,\n CustomerPersonProfile,\n { organizationId: scope.organizationId, tenantId: scope.tenantId, company: { $in: matchIds } },\n { populate: ['entity', 'company'] },\n { tenantId: scope.tenantId, organizationId: scope.organizationId }\n )\n : []\n const contactByCompany = new Map<string, CustomerPersonProfile>()\n for (const contact of contacts) {\n const companyId = typeof contact.company === 'string' ? contact.company : contact.company?.id\n if (!companyId || contactByCompany.has(companyId)) continue\n contactByCompany.set(companyId, contact)\n }\n\n for (const { spec, customer } of matchedPairs) {\n const contact = contactByCompany.get(customer.id) ?? null\n const snapshot = buildCustomerSnapshot(customer, contact)\n const addresses = toExampleAddresses(customer, addressByCustomer.get(customer.id) ?? null)\n map.set(spec.key, {\n entity: customer,\n contact,\n contactId: contact?.id ?? null,\n snapshot,\n addresses,\n })\n }\n\n for (const lookup of lookups) {\n if (!map.has(lookup.key)) {\n logger.warn('sales.examples customer not found; skipping seeded linkage', { displayName: lookup.displayName })\n }\n }\n\n return map\n}\n\nasync function ensureChannels(\n em: EntityManager,\n scope: SeedScope\n): Promise<Map<string, SalesChannel>> {\n const existing = await em.find(SalesChannel, {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n deletedAt: null,\n })\n const map = new Map<string, SalesChannel>()\n existing.forEach((entry) => map.set((entry.code ?? '').toLowerCase(), entry))\n const now = new Date()\n for (const seed of CHANNEL_SEEDS) {\n const code = seed.code.toLowerCase()\n if (map.has(code)) continue\n const record = em.create(SalesChannel, {\n id: randomUUID(),\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n name: seed.name,\n code: seed.code,\n description: seed.description,\n isActive: true,\n createdAt: now,\n updatedAt: now,\n })\n em.persist(record)\n map.set(code, record)\n }\n return map\n}\n\nfunction buildAddressSnapshot(address: ExampleAddress) {\n return {\n companyName: address.companyName ?? null,\n name: address.name ?? null,\n addressLine1: address.addressLine1,\n addressLine2: address.addressLine2 ?? null,\n city: address.city ?? null,\n region: address.region ?? null,\n postalCode: address.postalCode ?? null,\n country: address.country ?? null,\n latitude: address.latitude ?? null,\n longitude: address.longitude ?? null,\n }\n}\n\nfunction buildShippingMethodSnapshot(method?: SalesShippingMethod | null) {\n if (!method) return null\n return {\n id: method.id,\n code: method.code,\n name: method.name,\n providerKey: method.providerKey ?? null,\n serviceLevel: method.serviceLevel ?? null,\n estimatedTransitDays: method.estimatedTransitDays ?? null,\n baseRateNet: method.baseRateNet,\n baseRateGross: method.baseRateGross,\n currencyCode: method.currencyCode,\n metadata: method.metadata ?? null,\n }\n}\n\nfunction buildPaymentMethodSnapshot(method?: SalesPaymentMethod | null) {\n if (!method) return null\n return {\n id: method.id,\n code: method.code,\n name: method.name,\n providerKey: method.providerKey ?? null,\n terms: method.terms ?? null,\n metadata: method.metadata ?? null,\n }\n}\n\nfunction attachDocumentAddresses(\n em: EntityManager,\n scope: SeedScope,\n params: {\n documentId: string\n documentKind: 'order' | 'quote'\n addresses: ExampleAddress[]\n order?: SalesOrder\n quote?: SalesQuote\n }\n): void {\n const { documentId, documentKind, addresses, order, quote } = params\n for (const entry of addresses) {\n const now = new Date()\n const record = em.create(SalesDocumentAddress, {\n id: randomUUID(),\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n documentId,\n documentKind,\n customerAddressId: entry.customerAddressId ?? null,\n name: entry.name ?? null,\n companyName: entry.companyName ?? null,\n purpose: entry.role,\n addressLine1: entry.addressLine1,\n addressLine2: entry.addressLine2 ?? null,\n city: entry.city ?? null,\n region: entry.region ?? null,\n postalCode: entry.postalCode ?? null,\n country: entry.country ?? null,\n latitude: entry.latitude ?? null,\n longitude: entry.longitude ?? null,\n buildingNumber: null,\n flatNumber: null,\n order: documentKind === 'order' ? order ?? null : null,\n quote: documentKind === 'quote' ? quote ?? null : null,\n createdAt: now,\n updatedAt: now,\n })\n em.persist(record)\n }\n}\n\nfunction attachNotes(\n em: EntityManager,\n scope: SeedScope,\n params: {\n contextId: string\n contextType: 'order' | 'quote'\n notes: ExampleNote[]\n order?: SalesOrder\n quote?: SalesQuote\n }\n) {\n const { contextId, contextType, notes, order, quote } = params\n for (const note of notes) {\n const record = em.create(SalesNote, {\n id: randomUUID(),\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n contextType,\n contextId,\n body: note.body,\n appearanceIcon: note.appearanceIcon ?? null,\n appearanceColor: note.appearanceColor ?? null,\n createdAt: note.createdAt ?? new Date(),\n updatedAt: note.createdAt ?? new Date(),\n })\n record.order = contextType === 'order' ? order ?? null : null\n record.quote = contextType === 'quote' ? quote ?? null : null\n em.persist(record)\n }\n}\n\nfunction mapPaymentStatus(outstanding: number): string | null {\n if (outstanding <= 0.01) return 'paid'\n if (outstanding > 0) return 'partial'\n return null\n}\n\nexport async function seedSalesExamples(\n em: EntityManager,\n container: AppContainer,\n scope: SeedScope\n): Promise<boolean> {\n const hasOrders =\n ORDER_SEEDS.length > 0\n ? await em.count(SalesOrder, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n orderNumber: { $in: ORDER_SEEDS.map((item) => item.orderNumber) as any },\n })\n : 0\n const hasQuotes =\n QUOTE_SEEDS.length > 0\n ? await em.count(SalesQuote, {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n quoteNumber: { $in: QUOTE_SEEDS.map((item) => item.quoteNumber) as any },\n })\n : 0\n\n if (hasOrders > 0 || hasQuotes > 0) {\n return false\n }\n\n await seedSalesDictionaries(em, scope)\n const [shippingMethods, paymentMethods, channels] = await Promise.all([\n ensureExampleShippingMethods(em, scope, { skipFlush: true }),\n ensureExamplePaymentMethods(em, scope, { skipFlush: true }),\n ensureChannels(em, scope),\n ])\n await em.flush()\n const catalogLookups = await loadCatalogLookups(em, scope)\n const customerLookups = await loadCustomerLookups(em, scope, [...CUSTOMER_LINKS])\n\n const calculationService = container.resolve<SalesCalculationService>('salesCalculationService')\n\n for (const seed of QUOTE_SEEDS) {\n const quoteId = randomUUID()\n const customer = seed.customerKey ? customerLookups.get(seed.customerKey) ?? null : null\n if (seed.customerKey && !customer) {\n logger.warn('sales.examples skipping quote because customer is missing', { quoteNumber: seed.quoteNumber, customerKey: seed.customerKey })\n continue\n }\n const shippingMethod = seed.shippingMethodCode\n ? shippingMethods.get(seed.shippingMethodCode.toLowerCase()) ?? null\n : null\n const paymentMethod = seed.paymentMethodCode\n ? paymentMethods.get(seed.paymentMethodCode.toLowerCase()) ?? null\n : null\n const channel = seed.channelCode ? channels.get(seed.channelCode.toLowerCase()) ?? null : null\n\n const lineSnapshots = seed.lines.map((line) => {\n const catalogRef = resolveCatalogLine(line, catalogLookups)\n if ((line.kind ?? 'product') === 'product' && !catalogRef.productId) {\n logger.warn('sales.examples missing catalog match for quote line', { line: line.name ?? line.variantSku ?? line.productHandle ?? 'unknown' })\n }\n const unitPriceNet = line.unitPriceNet ?? catalogRef.unitPriceNet ?? 0\n const unitPriceGross = line.unitPriceGross ?? catalogRef.unitPriceGross ?? unitPriceNet\n const currencyCode = catalogRef.currencyCode ?? seed.currencyCode\n const metadata: Record<string, unknown> = {}\n if (catalogRef.productThumbnail) metadata.productThumbnail = catalogRef.productThumbnail\n if (catalogRef.variantThumbnail) metadata.variantThumbnail = catalogRef.variantThumbnail\n return {\n id: randomUUID(),\n kind: line.kind ?? 'product',\n name: line.name,\n description: line.description ?? null,\n comment: line.comment ?? null,\n quantity: line.quantity,\n quantityUnit: line.quantityUnit ?? null,\n normalizedQuantity: line.quantity,\n normalizedUnit: line.quantityUnit ?? null,\n uomSnapshot: null,\n currencyCode,\n unitPriceNet,\n unitPriceGross,\n taxRate: line.taxRate ?? 0,\n discountPercent: line.discountPercent ?? null,\n productId: catalogRef.productId,\n productVariantId: catalogRef.variantId,\n catalogSnapshot: catalogRef.snapshot,\n metadata: Object.keys(metadata).length ? metadata : null,\n }\n })\n\n const adjustmentDrafts =\n seed.adjustments?.map((adj) => ({\n id: randomUUID(),\n scope: adj.scope,\n kind: adj.kind,\n code: adj.label ?? null,\n label: adj.label ?? null,\n rate: adj.rate ?? null,\n amountNet: adj.amountNet,\n amountGross: adj.amountGross ?? adj.amountNet,\n currencyCode: seed.currencyCode,\n position: adj.position ?? 0,\n metadata: adj.lineIndex !== undefined ? { lineIndex: adj.lineIndex } : null,\n })) ?? []\n\n const calculation = await calculationService.calculateDocumentTotals({\n documentKind: 'quote',\n lines: lineSnapshots,\n adjustments: adjustmentDrafts,\n context: {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n currencyCode: seed.currencyCode,\n },\n })\n\n const totals = calculation.totals\n const quoteNumber = seed.quoteNumber ?? `SQ-${quoteId.slice(0, 8).toUpperCase()}`\n const quote = em.create(SalesQuote, {\n id: quoteId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n quoteNumber,\n status: seed.status ?? 'draft',\n customerEntityId: customer?.entity.id ?? null,\n customerContactId: customer?.contactId ?? null,\n customerSnapshot: customer?.snapshot ? toSnapshot(customer.snapshot) : null,\n currencyCode: seed.currencyCode,\n validFrom: seed.validFrom ?? null,\n validUntil: seed.validUntil ?? null,\n comments: seed.comments ?? null,\n shippingMethodId: shippingMethod?.id ?? null,\n shippingMethodCode: shippingMethod?.code ?? seed.shippingMethodCode ?? null,\n paymentMethodId: paymentMethod?.id ?? null,\n paymentMethodCode: paymentMethod?.code ?? seed.paymentMethodCode ?? null,\n channelId: channel?.id ?? null,\n shippingMethodSnapshot: buildShippingMethodSnapshot(shippingMethod),\n paymentMethodSnapshot: buildPaymentMethodSnapshot(paymentMethod),\n metadata: seed.metadata ?? { seed: 'sales.examples' },\n subtotalNetAmount: toAmount(totals.subtotalNetAmount),\n subtotalGrossAmount: toAmount(totals.subtotalGrossAmount),\n discountTotalAmount: toAmount(totals.discountTotalAmount),\n taxTotalAmount: toAmount(totals.taxTotalAmount),\n grandTotalNetAmount: toAmount(totals.grandTotalNetAmount),\n grandTotalGrossAmount: toAmount(totals.grandTotalGrossAmount),\n totalsSnapshot: toSnapshot(totals),\n lineItemCount: seed.lines.length,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(quote)\n\n calculation.lines.forEach((lineResult, idx) => {\n const source = lineSnapshots[idx]\n const line = em.create(SalesQuoteLine, {\n id: source.id,\n quote,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n lineNumber: idx + 1,\n kind: source.kind ?? 'product',\n name: source.name,\n description: source.description,\n comment: source.comment,\n quantity: toAmount(source.quantity),\n quantityUnit: source.quantityUnit ?? null,\n normalizedQuantity: toAmount(source.normalizedQuantity ?? source.quantity),\n normalizedUnit: source.normalizedUnit ?? source.quantityUnit ?? null,\n uomSnapshot:\n source.uomSnapshot && typeof source.uomSnapshot === 'object'\n ? (toSnapshot(source.uomSnapshot as Record<string, unknown>) as typeof source.uomSnapshot)\n : null,\n currencyCode: source.currencyCode,\n unitPriceNet: toAmount(source.unitPriceNet ?? 0),\n unitPriceGross: toAmount(source.unitPriceGross ?? source.unitPriceNet ?? 0),\n discountAmount: toAmount(lineResult.discountAmount),\n discountPercent:\n source.discountPercent !== null && source.discountPercent !== undefined\n ? toAmount(source.discountPercent)\n : '0',\n taxRate: toAmount(source.taxRate ?? 0),\n taxAmount: toAmount(lineResult.taxAmount),\n totalNetAmount: toAmount(lineResult.netAmount),\n totalGrossAmount: toAmount(lineResult.grossAmount),\n productId: source.productId ?? null,\n productVariantId: source.productVariantId ?? null,\n catalogSnapshot: source.catalogSnapshot ? toSnapshot(source.catalogSnapshot) : null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(line)\n })\n\n calculation.adjustments.forEach((adj, idx) => {\n const adjMeta = adj.metadata && typeof adj.metadata === 'object' ? (adj.metadata as Record<string, unknown>) : null\n const lineIndex = adjMeta ? (adjMeta.lineIndex as number | null) : null\n const lineRef =\n typeof lineIndex === 'number' && lineIndex >= 0 && lineIndex < seed.lines.length\n ? lineSnapshots[lineIndex]?.id ?? null\n : null\n const adjustment = em.create(SalesQuoteAdjustment, {\n id: adj.id ?? randomUUID(),\n quote,\n quoteLine: lineRef ? (lineRef as unknown as SalesQuoteLine) : null,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n scope: adj.scope,\n kind: adj.kind,\n code: adj.code ?? adj.label ?? null,\n label: adj.label ?? adj.code ?? null,\n calculatorKey: adj.calculatorKey ?? null,\n promotionId: adj.promotionId ?? null,\n rate: adj.rate !== null && adj.rate !== undefined ? toAmount(adj.rate) : '0',\n amountNet: toAmount(adj.amountNet ?? 0),\n amountGross: toAmount(adj.amountGross ?? adj.amountNet ?? 0),\n currencyCode: adj.currencyCode ?? seed.currencyCode,\n metadata: adj.metadata ?? null,\n position: adj.position ?? idx,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(adjustment)\n })\n\n quote.subtotalNetAmount = toAmount(calculation.totals.subtotalNetAmount)\n quote.subtotalGrossAmount = toAmount(calculation.totals.subtotalGrossAmount)\n quote.discountTotalAmount = toAmount(calculation.totals.discountTotalAmount)\n quote.taxTotalAmount = toAmount(calculation.totals.taxTotalAmount)\n quote.grandTotalNetAmount = toAmount(calculation.totals.grandTotalNetAmount)\n quote.grandTotalGrossAmount = toAmount(calculation.totals.grandTotalGrossAmount)\n quote.totalsSnapshot = toSnapshot(calculation.totals)\n quote.lineItemCount = seed.lines.length\n\n const quoteAddresses = seed.addresses ?? customer?.addresses ?? []\n if (quoteAddresses.length) {\n attachDocumentAddresses(em, scope, {\n documentId: quoteId,\n documentKind: 'quote',\n addresses: quoteAddresses,\n quote,\n })\n const billing = quoteAddresses.find((a) => a.role === 'billing')\n const shipping = quoteAddresses.find((a) => a.role === 'shipping')\n quote.billingAddressId = billing?.customerAddressId ?? null\n quote.shippingAddressId = shipping?.customerAddressId ?? null\n quote.billingAddressSnapshot = billing ? buildAddressSnapshot(billing) : null\n quote.shippingAddressSnapshot = shipping ? buildAddressSnapshot(shipping) : null\n }\n if (seed.notes?.length) {\n attachNotes(em, scope, {\n contextId: quoteId,\n contextType: 'quote',\n notes: seed.notes,\n quote,\n })\n }\n }\n\n for (const seed of ORDER_SEEDS) {\n const orderId = randomUUID()\n const customer = seed.customerKey ? customerLookups.get(seed.customerKey) ?? null : null\n if (seed.customerKey && !customer) {\n logger.warn('sales.examples skipping order because customer is missing', { orderNumber: seed.orderNumber, customerKey: seed.customerKey })\n continue\n }\n const shippingMethod = seed.shippingMethodCode\n ? shippingMethods.get(seed.shippingMethodCode.toLowerCase()) ?? null\n : null\n const paymentMethod = seed.paymentMethodCode\n ? paymentMethods.get(seed.paymentMethodCode.toLowerCase()) ?? null\n : null\n const channel = seed.channelCode ? channels.get(seed.channelCode.toLowerCase()) ?? null : null\n\n const lineSnapshots = seed.lines.map((line) => {\n const catalogRef = resolveCatalogLine(line, catalogLookups)\n if ((line.kind ?? 'product') === 'product' && !catalogRef.productId) {\n logger.warn('sales.examples missing catalog match for order line', { line: line.name ?? line.variantSku ?? line.productHandle ?? 'unknown' })\n }\n const unitPriceNet = line.unitPriceNet ?? catalogRef.unitPriceNet ?? 0\n const unitPriceGross = line.unitPriceGross ?? catalogRef.unitPriceGross ?? unitPriceNet\n const currencyCode = catalogRef.currencyCode ?? seed.currencyCode\n const metadata: Record<string, unknown> = {}\n if (catalogRef.productThumbnail) metadata.productThumbnail = catalogRef.productThumbnail\n if (catalogRef.variantThumbnail) metadata.variantThumbnail = catalogRef.variantThumbnail\n return {\n id: randomUUID(),\n kind: line.kind ?? 'product',\n name: line.name,\n description: line.description ?? null,\n comment: line.comment ?? null,\n quantity: line.quantity,\n quantityUnit: line.quantityUnit ?? null,\n normalizedQuantity: line.quantity,\n normalizedUnit: line.quantityUnit ?? null,\n uomSnapshot: null,\n currencyCode,\n unitPriceNet,\n unitPriceGross,\n taxRate: line.taxRate ?? 0,\n discountPercent: line.discountPercent ?? null,\n productId: catalogRef.productId,\n productVariantId: catalogRef.variantId,\n catalogSnapshot: catalogRef.snapshot,\n metadata: Object.keys(metadata).length ? metadata : null,\n }\n })\n\n const adjustmentDrafts =\n seed.adjustments?.map((adj) => ({\n id: randomUUID(),\n scope: adj.scope,\n kind: adj.kind,\n code: adj.label ?? null,\n label: adj.label ?? null,\n rate: adj.rate ?? null,\n amountNet: adj.amountNet,\n amountGross: adj.amountGross ?? adj.amountNet,\n currencyCode: seed.currencyCode,\n position: adj.position ?? 0,\n metadata: adj.lineIndex !== undefined ? { lineIndex: adj.lineIndex } : null,\n })) ?? []\n\n const calculation = await calculationService.calculateDocumentTotals({\n documentKind: 'order',\n lines: lineSnapshots,\n adjustments: adjustmentDrafts,\n context: {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n currencyCode: seed.currencyCode,\n },\n })\n\n const totals = calculation.totals\n const order = em.create(SalesOrder, {\n id: orderId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n orderNumber: seed.orderNumber,\n status: seed.status ?? 'confirmed',\n fulfillmentStatus: seed.fulfillmentStatus ?? null,\n paymentStatus: seed.paymentStatus ?? null,\n customerEntityId: customer?.entity.id ?? null,\n customerContactId: customer?.contactId ?? null,\n customerSnapshot: customer?.snapshot ? toSnapshot(customer.snapshot) : null,\n currencyCode: seed.currencyCode,\n placedAt: seed.placedAt ?? null,\n expectedDeliveryAt: seed.expectedDeliveryAt ?? null,\n comments: seed.comments ?? null,\n internalNotes: seed.internalNotes ?? null,\n shippingMethodId: shippingMethod?.id ?? null,\n shippingMethodCode: shippingMethod?.code ?? seed.shippingMethodCode ?? null,\n paymentMethodId: paymentMethod?.id ?? null,\n paymentMethodCode: paymentMethod?.code ?? seed.paymentMethodCode ?? null,\n channelId: channel?.id ?? null,\n shippingMethodSnapshot: buildShippingMethodSnapshot(shippingMethod),\n paymentMethodSnapshot: buildPaymentMethodSnapshot(paymentMethod),\n metadata: seed.metadata ?? { seed: 'sales.examples' },\n subtotalNetAmount: toAmount(totals.subtotalNetAmount),\n subtotalGrossAmount: toAmount(totals.subtotalGrossAmount),\n discountTotalAmount: toAmount(totals.discountTotalAmount),\n taxTotalAmount: toAmount(totals.taxTotalAmount),\n shippingNetAmount: toAmount(totals.shippingNetAmount ?? 0),\n shippingGrossAmount: toAmount(totals.shippingGrossAmount ?? 0),\n surchargeTotalAmount: toAmount(totals.surchargeTotalAmount ?? 0),\n grandTotalNetAmount: toAmount(totals.grandTotalNetAmount),\n grandTotalGrossAmount: toAmount(totals.grandTotalGrossAmount),\n paidTotalAmount: toAmount(totals.paidTotalAmount ?? 0),\n refundedTotalAmount: toAmount(totals.refundedTotalAmount ?? 0),\n outstandingAmount: toAmount(totals.outstandingAmount ?? totals.grandTotalGrossAmount),\n totalsSnapshot: toSnapshot(totals),\n lineItemCount: seed.lines.length,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(order)\n\n const lineEntities: SalesOrderLine[] = []\n calculation.lines.forEach((lineResult, idx) => {\n const source = lineSnapshots[idx]\n const entity = em.create(SalesOrderLine, {\n id: source.id,\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n lineNumber: idx + 1,\n kind: source.kind ?? 'product',\n name: source.name,\n description: source.description,\n comment: source.comment,\n quantity: toAmount(source.quantity),\n quantityUnit: source.quantityUnit ?? null,\n normalizedQuantity: toAmount(source.normalizedQuantity ?? source.quantity),\n normalizedUnit: source.normalizedUnit ?? source.quantityUnit ?? null,\n uomSnapshot:\n source.uomSnapshot && typeof source.uomSnapshot === 'object'\n ? (toSnapshot(source.uomSnapshot as Record<string, unknown>) as typeof source.uomSnapshot)\n : null,\n reservedQuantity: '0',\n fulfilledQuantity: '0',\n invoicedQuantity: '0',\n returnedQuantity: '0',\n currencyCode: source.currencyCode,\n unitPriceNet: toAmount(source.unitPriceNet ?? 0),\n unitPriceGross: toAmount(source.unitPriceGross ?? source.unitPriceNet ?? 0),\n discountAmount: toAmount(lineResult.discountAmount),\n discountPercent:\n source.discountPercent !== null && source.discountPercent !== undefined\n ? toAmount(source.discountPercent)\n : '0',\n taxRate: toAmount(source.taxRate ?? 0),\n taxAmount: toAmount(lineResult.taxAmount),\n totalNetAmount: toAmount(lineResult.netAmount),\n totalGrossAmount: toAmount(lineResult.grossAmount),\n productId: source.productId ?? null,\n productVariantId: source.productVariantId ?? null,\n catalogSnapshot: source.catalogSnapshot ? toSnapshot(source.catalogSnapshot) : null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(entity)\n lineEntities.push(entity)\n })\n\n calculation.adjustments.forEach((adj, idx) => {\n const lineIndex = adj.metadata && typeof adj.metadata === 'object' ? (adj.metadata as any).lineIndex : null\n const lineRef =\n typeof lineIndex === 'number' && lineIndex >= 0 && lineIndex < seed.lines.length\n ? lineEntities[lineIndex] ?? null\n : null\n const adjustment = em.create(SalesOrderAdjustment, {\n id: adj.id ?? randomUUID(),\n order,\n orderLine: lineRef,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n scope: adj.scope,\n kind: adj.kind,\n code: adj.code ?? adj.label ?? null,\n label: adj.label ?? adj.code ?? null,\n calculatorKey: adj.calculatorKey ?? null,\n promotionId: adj.promotionId ?? null,\n rate: adj.rate !== null && adj.rate !== undefined ? toAmount(adj.rate) : '0',\n amountNet: toAmount(adj.amountNet ?? 0),\n amountGross: toAmount(adj.amountGross ?? adj.amountNet ?? 0),\n currencyCode: adj.currencyCode ?? seed.currencyCode,\n metadata: adj.metadata ?? null,\n position: adj.position ?? idx,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(adjustment)\n })\n\n order.subtotalNetAmount = toAmount(calculation.totals.subtotalNetAmount)\n order.subtotalGrossAmount = toAmount(calculation.totals.subtotalGrossAmount)\n order.discountTotalAmount = toAmount(calculation.totals.discountTotalAmount)\n order.taxTotalAmount = toAmount(calculation.totals.taxTotalAmount)\n order.shippingNetAmount = toAmount(calculation.totals.shippingNetAmount ?? 0)\n order.shippingGrossAmount = toAmount(calculation.totals.shippingGrossAmount ?? 0)\n order.surchargeTotalAmount = toAmount(calculation.totals.surchargeTotalAmount ?? 0)\n order.grandTotalNetAmount = toAmount(calculation.totals.grandTotalNetAmount)\n order.grandTotalGrossAmount = toAmount(calculation.totals.grandTotalGrossAmount)\n order.paidTotalAmount = toAmount(calculation.totals.paidTotalAmount ?? 0)\n order.refundedTotalAmount = toAmount(calculation.totals.refundedTotalAmount ?? 0)\n order.outstandingAmount = toAmount(calculation.totals.outstandingAmount ?? calculation.totals.grandTotalGrossAmount)\n order.totalsSnapshot = toSnapshot(calculation.totals)\n order.lineItemCount = seed.lines.length\n\n const lineMap = new Map(lineEntities.map((line) => [line.id, line]))\n if (seed.shipments?.length) {\n for (const shipmentSeed of seed.shipments) {\n const shipment = em.create(SalesShipment, {\n id: randomUUID(),\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n shipmentNumber: shipmentSeed.shipmentNumber ?? null,\n shippingMethodId: shipmentSeed.methodCode\n ? shippingMethods.get(shipmentSeed.methodCode.toLowerCase())?.id ?? null\n : null,\n status: shipmentSeed.status ?? null,\n carrierName: null,\n trackingNumbers: shipmentSeed.trackingNumbers ?? null,\n shippedAt: shipmentSeed.shippedAt ?? null,\n deliveredAt: shipmentSeed.deliveredAt ?? null,\n weightValue: shipmentSeed.weightKg ? toAmount(shipmentSeed.weightKg) : null,\n weightUnit: shipmentSeed.weightKg ? 'kg' : null,\n declaredValueNet: shipmentSeed.declaredValue ? toAmount(shipmentSeed.declaredValue) : null,\n declaredValueGross: shipmentSeed.declaredValue ? toAmount(shipmentSeed.declaredValue) : null,\n currencyCode: shipmentSeed.currencyCode ?? seed.currencyCode,\n notesText: shipmentSeed.notes ?? null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(shipment)\n\n const shipmentItems: SalesShipmentItem[] = []\n for (const item of shipmentSeed.items) {\n const line = lineEntities[item.lineIndex]\n if (!line) continue\n line.fulfilledQuantity = toAmount(\n Number(line.fulfilledQuantity ?? '0') + Math.max(item.quantity, 0)\n )\n const shipmentItem = em.create(SalesShipmentItem, {\n id: randomUUID(),\n shipment,\n orderLine: line,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n quantity: toAmount(item.quantity),\n metadata: null,\n })\n shipmentItems.push(shipmentItem)\n em.persist(shipmentItem)\n }\n await refreshShipmentItemsSnapshot(em, shipment, { items: shipmentItems, lineMap })\n }\n }\n\n let paymentTotal = 0\n if (seed.payments?.length) {\n for (const paymentSeed of seed.payments) {\n paymentTotal += paymentSeed.amount\n const method = paymentSeed.methodCode\n ? paymentMethods.get(paymentSeed.methodCode.toLowerCase()) ?? null\n : paymentMethod\n const payment = em.create(SalesPayment, {\n id: randomUUID(),\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n paymentMethod: method ?? null,\n paymentReference: paymentSeed.reference ?? null,\n status: paymentSeed.status ?? null,\n amount: toAmount(paymentSeed.amount),\n currencyCode: paymentSeed.currencyCode,\n capturedAmount: toAmount(paymentSeed.capturedAt ? paymentSeed.amount : 0),\n refundedAmount: '0',\n receivedAt: paymentSeed.receivedAt ?? null,\n capturedAt: paymentSeed.capturedAt ?? null,\n metadata: null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n em.persist(payment)\n const allocation = em.create(SalesPaymentAllocation, {\n id: randomUUID(),\n payment,\n order,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n amount: toAmount(paymentSeed.amount),\n currencyCode: paymentSeed.currencyCode,\n metadata: null,\n })\n em.persist(allocation)\n }\n }\n\n const orderAddresses = seed.addresses ?? customer?.addresses ?? []\n if (orderAddresses.length) {\n attachDocumentAddresses(em, scope, {\n documentId: orderId,\n documentKind: 'order',\n addresses: orderAddresses,\n order,\n })\n const billing = orderAddresses.find((a) => a.role === 'billing')\n const shipping = orderAddresses.find((a) => a.role === 'shipping')\n order.billingAddressId = billing?.customerAddressId ?? null\n order.shippingAddressId = shipping?.customerAddressId ?? null\n order.billingAddressSnapshot = billing ? buildAddressSnapshot(billing) : null\n order.shippingAddressSnapshot = shipping ? buildAddressSnapshot(shipping) : null\n }\n if (seed.notes?.length) {\n attachNotes(em, scope, {\n contextId: orderId,\n contextType: 'order',\n notes: seed.notes,\n order,\n })\n }\n\n const grandTotal = Number(order.grandTotalGrossAmount ?? '0')\n order.paidTotalAmount = toAmount(paymentTotal)\n order.outstandingAmount = toAmount(Math.max(grandTotal - paymentTotal, 0))\n order.paymentStatus = seed.paymentStatus ?? mapPaymentStatus(grandTotal - paymentTotal)\n const isFullyFulfilled = lineEntities.every((line, idx) => {\n const expected = Number(seed.lines[idx]?.quantity ?? 0)\n const fulfilled = Number(line.fulfilledQuantity ?? '0')\n return fulfilled >= expected\n })\n order.fulfillmentStatus = seed.fulfillmentStatus ?? (isFullyFulfilled ? 'fulfilled' : 'in_fulfillment')\n }\n\n await em.flush()\n return true\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["addresses"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { resolveNotificationService } from "../../notifications/lib/notificationService.js";
|
|
2
2
|
import { buildFeatureNotificationFromType } from "../../notifications/lib/notificationBuilder.js";
|
|
3
3
|
import { notificationTypes } from "../notifications.js";
|
|
4
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
5
|
+
const logger = createLogger("sales");
|
|
4
6
|
const metadata = {
|
|
5
7
|
event: "sales.quote.expiring",
|
|
6
8
|
persistent: true,
|
|
@@ -28,7 +30,7 @@ async function handle(payload, ctx) {
|
|
|
28
30
|
organizationId: payload.organizationId ?? null
|
|
29
31
|
});
|
|
30
32
|
} catch (err) {
|
|
31
|
-
|
|
33
|
+
logger.error("sales.quote-expiring-notification Failed to create notification", { err });
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/sales/subscribers/quote-expiring-notification.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { resolveNotificationService } from '../../notifications/lib/notificationService'\nimport { buildFeatureNotificationFromType } from '../../notifications/lib/notificationBuilder'\nimport { notificationTypes } from '../notifications'\n\nexport const metadata = {\n event: 'sales.quote.expiring',\n persistent: true,\n id: 'sales:quote-expiring-notification',\n}\n\ntype QuoteExpiringPayload = {\n quoteId: string\n quoteNumber: string\n expiresAt: string\n daysUntilExpiry: number\n customerName?: string | null\n totalAmount?: string | null\n tenantId: string\n organizationId?: string | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\nexport default async function handle(payload: QuoteExpiringPayload, ctx: ResolverContext) {\n try {\n const notificationService = resolveNotificationService(ctx)\n const typeDef = notificationTypes.find((type) => type.type === 'sales.quote.expiring')\n if (!typeDef) return\n\n const notificationInput = buildFeatureNotificationFromType(typeDef, {\n requiredFeature: 'sales.quotes.manage',\n bodyVariables: {\n quoteNumber: payload.quoteNumber,\n expiresAt: payload.expiresAt,\n daysUntilExpiry: String(payload.daysUntilExpiry),\n customerName: payload.customerName ?? '',\n },\n sourceEntityType: 'sales:quote',\n sourceEntityId: payload.quoteId,\n linkHref: `/backend/sales/quotes/${payload.quoteId}`,\n })\n\n await notificationService.createForFeature(notificationInput, {\n tenantId: payload.tenantId,\n organizationId: payload.organizationId ?? null,\n })\n } catch (err) {\n
|
|
5
|
-
"mappings": "AACA,SAAS,kCAAkC;AAC3C,SAAS,wCAAwC;AACjD,SAAS,yBAAyB;
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { resolveNotificationService } from '../../notifications/lib/notificationService'\nimport { buildFeatureNotificationFromType } from '../../notifications/lib/notificationBuilder'\nimport { notificationTypes } from '../notifications'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('sales')\n\nexport const metadata = {\n event: 'sales.quote.expiring',\n persistent: true,\n id: 'sales:quote-expiring-notification',\n}\n\ntype QuoteExpiringPayload = {\n quoteId: string\n quoteNumber: string\n expiresAt: string\n daysUntilExpiry: number\n customerName?: string | null\n totalAmount?: string | null\n tenantId: string\n organizationId?: string | null\n}\n\ntype ResolverContext = {\n resolve: <T = unknown>(name: string) => T\n}\n\nexport default async function handle(payload: QuoteExpiringPayload, ctx: ResolverContext) {\n try {\n const notificationService = resolveNotificationService(ctx)\n const typeDef = notificationTypes.find((type) => type.type === 'sales.quote.expiring')\n if (!typeDef) return\n\n const notificationInput = buildFeatureNotificationFromType(typeDef, {\n requiredFeature: 'sales.quotes.manage',\n bodyVariables: {\n quoteNumber: payload.quoteNumber,\n expiresAt: payload.expiresAt,\n daysUntilExpiry: String(payload.daysUntilExpiry),\n customerName: payload.customerName ?? '',\n },\n sourceEntityType: 'sales:quote',\n sourceEntityId: payload.quoteId,\n linkHref: `/backend/sales/quotes/${payload.quoteId}`,\n })\n\n await notificationService.createForFeature(notificationInput, {\n tenantId: payload.tenantId,\n organizationId: payload.organizationId ?? null,\n })\n } catch (err) {\n logger.error('sales.quote-expiring-notification Failed to create notification', { err })\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,kCAAkC;AAC3C,SAAS,wCAAwC;AACjD,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,OAAO;AAE5B,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAiBA,eAAO,OAA8B,SAA+B,KAAsB;AACxF,MAAI;AACF,UAAM,sBAAsB,2BAA2B,GAAG;AAC1D,UAAM,UAAU,kBAAkB,KAAK,CAAC,SAAS,KAAK,SAAS,sBAAsB;AACrF,QAAI,CAAC,QAAS;AAEd,UAAM,oBAAoB,iCAAiC,SAAS;AAAA,MAClE,iBAAiB;AAAA,MACjB,eAAe;AAAA,QACb,aAAa,QAAQ;AAAA,QACrB,WAAW,QAAQ;AAAA,QACnB,iBAAiB,OAAO,QAAQ,eAAe;AAAA,QAC/C,cAAc,QAAQ,gBAAgB;AAAA,MACxC;AAAA,MACA,kBAAkB;AAAA,MAClB,gBAAgB,QAAQ;AAAA,MACxB,UAAU,yBAAyB,QAAQ,OAAO;AAAA,IACpD,CAAC;AAED,UAAM,oBAAoB,iBAAiB,mBAAmB;AAAA,MAC5D,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ,kBAAkB;AAAA,IAC5C,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,MAAM,mEAAmE,EAAE,IAAI,CAAC;AAAA,EACzF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { SalesOrder, SalesQuote } from "@open-mercato/core/modules/sales/data/entities";
|
|
2
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
3
|
+
const logger = createLogger("sales");
|
|
2
4
|
const metadata = {
|
|
3
5
|
event: "customers.address.deleted",
|
|
4
6
|
persistent: true,
|
|
@@ -34,7 +36,7 @@ async function handle(payload, ctx) {
|
|
|
34
36
|
)
|
|
35
37
|
]);
|
|
36
38
|
} catch (err) {
|
|
37
|
-
|
|
39
|
+
logger.error("sales.reconcile-on-address-delete Failed to null address references on sales documents", { err });
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/sales/subscribers/reconcileOnAddressDelete.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { SalesOrder, SalesQuote } from '@open-mercato/core/modules/sales/data/entities'\n\nexport const metadata = {\n event: 'customers.address.deleted',\n persistent: true,\n id: 'sales:reconcile-on-address-delete',\n}\n\nexport default async function handle(\n payload: unknown,\n ctx: { resolve: <T = unknown>(name: string) => T; eventName?: string },\n): Promise<void> {\n const data = payload as Record<string, unknown>\n const addressId = data?.id as string | undefined\n const tenantId = data?.tenantId as string | undefined\n if (!addressId || !tenantId) return\n\n const em = ctx.resolve<EntityManager>('em')\n\n try {\n await Promise.all([\n em.nativeUpdate(\n SalesOrder,\n { billingAddressId: addressId, tenantId },\n { billingAddressId: null },\n ),\n em.nativeUpdate(\n SalesOrder,\n { shippingAddressId: addressId, tenantId },\n { shippingAddressId: null },\n ),\n em.nativeUpdate(\n SalesQuote,\n { billingAddressId: addressId, tenantId },\n { billingAddressId: null },\n ),\n em.nativeUpdate(\n SalesQuote,\n { shippingAddressId: addressId, tenantId },\n { shippingAddressId: null },\n ),\n ])\n } catch (err) {\n
|
|
5
|
-
"mappings": "AACA,SAAS,YAAY,kBAAkB;
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { SalesOrder, SalesQuote } from '@open-mercato/core/modules/sales/data/entities'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('sales')\n\nexport const metadata = {\n event: 'customers.address.deleted',\n persistent: true,\n id: 'sales:reconcile-on-address-delete',\n}\n\nexport default async function handle(\n payload: unknown,\n ctx: { resolve: <T = unknown>(name: string) => T; eventName?: string },\n): Promise<void> {\n const data = payload as Record<string, unknown>\n const addressId = data?.id as string | undefined\n const tenantId = data?.tenantId as string | undefined\n if (!addressId || !tenantId) return\n\n const em = ctx.resolve<EntityManager>('em')\n\n try {\n await Promise.all([\n em.nativeUpdate(\n SalesOrder,\n { billingAddressId: addressId, tenantId },\n { billingAddressId: null },\n ),\n em.nativeUpdate(\n SalesOrder,\n { shippingAddressId: addressId, tenantId },\n { shippingAddressId: null },\n ),\n em.nativeUpdate(\n SalesQuote,\n { billingAddressId: addressId, tenantId },\n { billingAddressId: null },\n ),\n em.nativeUpdate(\n SalesQuote,\n { shippingAddressId: addressId, tenantId },\n { shippingAddressId: null },\n ),\n ])\n } catch (err) {\n logger.error('sales.reconcile-on-address-delete Failed to null address references on sales documents', { err })\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,OAAO;AAE5B,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAEA,eAAO,OACL,SACA,KACe;AACf,QAAM,OAAO;AACb,QAAM,YAAY,MAAM;AACxB,QAAM,WAAW,MAAM;AACvB,MAAI,CAAC,aAAa,CAAC,SAAU;AAE7B,QAAM,KAAK,IAAI,QAAuB,IAAI;AAE1C,MAAI;AACF,UAAM,QAAQ,IAAI;AAAA,MAChB,GAAG;AAAA,QACD;AAAA,QACA,EAAE,kBAAkB,WAAW,SAAS;AAAA,QACxC,EAAE,kBAAkB,KAAK;AAAA,MAC3B;AAAA,MACA,GAAG;AAAA,QACD;AAAA,QACA,EAAE,mBAAmB,WAAW,SAAS;AAAA,QACzC,EAAE,mBAAmB,KAAK;AAAA,MAC5B;AAAA,MACA,GAAG;AAAA,QACD;AAAA,QACA,EAAE,kBAAkB,WAAW,SAAS;AAAA,QACxC,EAAE,kBAAkB,KAAK;AAAA,MAC3B;AAAA,MACA,GAAG;AAAA,QACD;AAAA,QACA,EAAE,mBAAmB,WAAW,SAAS;AAAA,QACzC,EAAE,mBAAmB,KAAK;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,MAAM,0FAA0F,EAAE,IAAI,CAAC;AAAA,EAChH;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { SalesOrder, SalesQuote } from "@open-mercato/core/modules/sales/data/entities";
|
|
2
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
3
|
+
const logger = createLogger("sales");
|
|
2
4
|
const metadata = {
|
|
3
5
|
event: "customers.company.deleted",
|
|
4
6
|
persistent: true,
|
|
@@ -24,7 +26,7 @@ async function handle(payload, ctx) {
|
|
|
24
26
|
)
|
|
25
27
|
]);
|
|
26
28
|
} catch (err) {
|
|
27
|
-
|
|
29
|
+
logger.error("sales.reconcile-on-company-delete Failed to null customerEntityId on sales documents", { err });
|
|
28
30
|
}
|
|
29
31
|
}
|
|
30
32
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/sales/subscribers/reconcileOnCompanyDelete.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { SalesOrder, SalesQuote } from '@open-mercato/core/modules/sales/data/entities'\n\nexport const metadata = {\n event: 'customers.company.deleted',\n persistent: true,\n id: 'sales:reconcile-on-company-delete',\n}\n\nexport default async function handle(\n payload: unknown,\n ctx: { resolve: <T = unknown>(name: string) => T; eventName?: string },\n): Promise<void> {\n const data = payload as Record<string, unknown>\n const entityId = (data?.entityId as string | undefined) ?? (data?.id as string | undefined)\n const tenantId = data?.tenantId as string | undefined\n if (!entityId || !tenantId) return\n\n const em = ctx.resolve<EntityManager>('em')\n\n try {\n await Promise.all([\n em.nativeUpdate(\n SalesOrder,\n { customerEntityId: entityId, tenantId },\n { customerEntityId: null },\n ),\n em.nativeUpdate(\n SalesQuote,\n { customerEntityId: entityId, tenantId },\n { customerEntityId: null },\n ),\n ])\n } catch (err) {\n
|
|
5
|
-
"mappings": "AACA,SAAS,YAAY,kBAAkB;
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { SalesOrder, SalesQuote } from '@open-mercato/core/modules/sales/data/entities'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('sales')\n\nexport const metadata = {\n event: 'customers.company.deleted',\n persistent: true,\n id: 'sales:reconcile-on-company-delete',\n}\n\nexport default async function handle(\n payload: unknown,\n ctx: { resolve: <T = unknown>(name: string) => T; eventName?: string },\n): Promise<void> {\n const data = payload as Record<string, unknown>\n const entityId = (data?.entityId as string | undefined) ?? (data?.id as string | undefined)\n const tenantId = data?.tenantId as string | undefined\n if (!entityId || !tenantId) return\n\n const em = ctx.resolve<EntityManager>('em')\n\n try {\n await Promise.all([\n em.nativeUpdate(\n SalesOrder,\n { customerEntityId: entityId, tenantId },\n { customerEntityId: null },\n ),\n em.nativeUpdate(\n SalesQuote,\n { customerEntityId: entityId, tenantId },\n { customerEntityId: null },\n ),\n ])\n } catch (err) {\n logger.error('sales.reconcile-on-company-delete Failed to null customerEntityId on sales documents', { err })\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,OAAO;AAE5B,MAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,IAAI;AACN;AAEA,eAAO,OACL,SACA,KACe;AACf,QAAM,OAAO;AACb,QAAM,WAAY,MAAM,YAAoC,MAAM;AAClE,QAAM,WAAW,MAAM;AACvB,MAAI,CAAC,YAAY,CAAC,SAAU;AAE5B,QAAM,KAAK,IAAI,QAAuB,IAAI;AAE1C,MAAI;AACF,UAAM,QAAQ,IAAI;AAAA,MAChB,GAAG;AAAA,QACD;AAAA,QACA,EAAE,kBAAkB,UAAU,SAAS;AAAA,QACvC,EAAE,kBAAkB,KAAK;AAAA,MAC3B;AAAA,MACA,GAAG;AAAA,QACD;AAAA,QACA,EAAE,kBAAkB,UAAU,SAAS;AAAA,QACvC,EAAE,kBAAkB,KAAK;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,MAAM,wFAAwF,EAAE,IAAI,CAAC;AAAA,EAC9G;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|