@open-mercato/core 0.5.1-develop.2663.2c29774b5b → 0.5.1-develop.2681.c559bb2bc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/generated/entities/action_log/index.js +8 -0
- package/dist/generated/entities/action_log/index.js.map +2 -2
- package/dist/generated/entities/customer_company_billing/index.js +23 -0
- package/dist/generated/entities/customer_company_billing/index.js.map +7 -0
- package/dist/generated/entities/customer_deal/index.js +8 -0
- package/dist/generated/entities/customer_deal/index.js.map +2 -2
- package/dist/generated/entities/customer_deal_stage_transition/index.js +31 -0
- package/dist/generated/entities/customer_deal_stage_transition/index.js.map +7 -0
- package/dist/generated/entities/customer_dictionary_kind_setting/index.js +21 -0
- package/dist/generated/entities/customer_dictionary_kind_setting/index.js.map +7 -0
- package/dist/generated/entities/customer_entity/index.js +8 -0
- package/dist/generated/entities/customer_entity/index.js.map +2 -2
- package/dist/generated/entities/customer_entity_role/index.js +23 -0
- package/dist/generated/entities/customer_entity_role/index.js.map +7 -0
- package/dist/generated/entities/customer_interaction/index.js +23 -1
- package/dist/generated/entities/customer_interaction/index.js.map +2 -2
- package/dist/generated/entities/customer_label/index.js +19 -0
- package/dist/generated/entities/customer_label/index.js.map +7 -0
- package/dist/generated/entities/customer_label_assignment/index.js +17 -0
- package/dist/generated/entities/customer_label_assignment/index.js.map +7 -0
- package/dist/generated/entities/customer_person_company_link/index.js +21 -0
- package/dist/generated/entities/customer_person_company_link/index.js.map +7 -0
- package/dist/generated/entities/customer_person_company_role/index.js +17 -0
- package/dist/generated/entities/customer_person_company_role/index.js.map +7 -0
- package/dist/generated/entities/dictionary_entry/index.js +4 -0
- package/dist/generated/entities/dictionary_entry/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +9 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +116 -1
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/attachments/api/route.js +46 -8
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/export/route.js +208 -0
- package/dist/modules/audit_logs/api/audit-logs/actions/export/route.js.map +7 -0
- package/dist/modules/audit_logs/api/audit-logs/actions/route.js +52 -6
- package/dist/modules/audit_logs/api/audit-logs/actions/route.js.map +2 -2
- package/dist/modules/audit_logs/cli.js +62 -0
- package/dist/modules/audit_logs/cli.js.map +7 -0
- package/dist/modules/audit_logs/data/entities.js +21 -1
- package/dist/modules/audit_logs/data/entities.js.map +2 -2
- package/dist/modules/audit_logs/data/validators.js +9 -1
- package/dist/modules/audit_logs/data/validators.js.map +2 -2
- package/dist/modules/audit_logs/lib/changeRows.js +34 -0
- package/dist/modules/audit_logs/lib/changeRows.js.map +7 -0
- package/dist/modules/audit_logs/lib/display-helpers.js +2 -20
- package/dist/modules/audit_logs/lib/display-helpers.js.map +3 -3
- package/dist/modules/audit_logs/lib/projections.js +58 -0
- package/dist/modules/audit_logs/lib/projections.js.map +7 -0
- package/dist/modules/audit_logs/migrations/Migration20260412160533.js +21 -0
- package/dist/modules/audit_logs/migrations/Migration20260412160533.js.map +7 -0
- package/dist/modules/audit_logs/services/actionLogService.js +313 -79
- package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
- package/dist/modules/customers/acl.js +3 -1
- package/dist/modules/customers/acl.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +4 -0
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/assignable-staff/route.js +208 -0
- package/dist/modules/customers/api/assignable-staff/route.js.map +7 -0
- package/dist/modules/customers/api/companies/[id]/people/route.js +205 -0
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +7 -0
- package/dist/modules/customers/api/companies/[id]/roles/route.js +22 -0
- package/dist/modules/customers/api/companies/[id]/roles/route.js.map +7 -0
- package/dist/modules/customers/api/companies/[id]/route.js +374 -32
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/companies/route.js +82 -7
- package/dist/modules/customers/api/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +172 -0
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +7 -0
- package/dist/modules/customers/api/deals/[id]/people/route.js +156 -0
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +7 -0
- package/dist/modules/customers/api/deals/[id]/route.js +459 -53
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +195 -0
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +7 -0
- package/dist/modules/customers/api/deals/route.js +20 -10
- package/dist/modules/customers/api/deals/route.js.map +3 -3
- package/dist/modules/customers/api/dictionaries/[kind]/[id]/route.js +105 -4
- package/dist/modules/customers/api/dictionaries/[kind]/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/[kind]/route.js +118 -42
- package/dist/modules/customers/api/dictionaries/[kind]/route.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/context.js +30 -6
- package/dist/modules/customers/api/dictionaries/context.js.map +2 -2
- package/dist/modules/customers/api/dictionaries/kind-settings/route.js +207 -0
- package/dist/modules/customers/api/dictionaries/kind-settings/route.js.map +7 -0
- package/dist/modules/customers/api/entity-roles-factory.js +471 -0
- package/dist/modules/customers/api/entity-roles-factory.js.map +7 -0
- package/dist/modules/customers/api/interactions/conflicts/route.js +158 -0
- package/dist/modules/customers/api/interactions/conflicts/route.js.map +7 -0
- package/dist/modules/customers/api/interactions/counts/route.js +92 -0
- package/dist/modules/customers/api/interactions/counts/route.js.map +7 -0
- package/dist/modules/customers/api/interactions/route.js +83 -4
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/labels/assign/route.js +189 -0
- package/dist/modules/customers/api/labels/assign/route.js.map +7 -0
- package/dist/modules/customers/api/labels/auth.js +17 -0
- package/dist/modules/customers/api/labels/auth.js.map +7 -0
- package/dist/modules/customers/api/labels/route.js +281 -0
- package/dist/modules/customers/api/labels/route.js.map +7 -0
- package/dist/modules/customers/api/labels/table-errors.js +38 -0
- package/dist/modules/customers/api/labels/table-errors.js.map +7 -0
- package/dist/modules/customers/api/labels/unassign/route.js +184 -0
- package/dist/modules/customers/api/labels/unassign/route.js.map +7 -0
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +292 -0
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +7 -0
- package/dist/modules/customers/api/people/[id]/companies/context.js +66 -0
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +7 -0
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +334 -0
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +7 -0
- package/dist/modules/customers/api/people/[id]/companies/route.js +205 -0
- package/dist/modules/customers/api/people/[id]/companies/route.js.map +7 -0
- package/dist/modules/customers/api/people/[id]/roles/route.js +22 -0
- package/dist/modules/customers/api/people/[id]/roles/route.js.map +7 -0
- package/dist/modules/customers/api/people/[id]/route.js +134 -21
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/route.js +122 -23
- package/dist/modules/customers/api/people/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +4 -0
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/api/utils.js +22 -0
- package/dist/modules/customers/api/utils.js.map +2 -2
- package/dist/modules/customers/backend/config/customers/page.js +2 -6
- package/dist/modules/customers/backend/config/customers/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +37 -26
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +265 -262
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +3 -3
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/formatters.js +23 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/formatters.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/types.js +1 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/types.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealActivities.js +43 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealActivities.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealAssociations.js +264 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealAssociations.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealClosure.js +88 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealClosure.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealData.js +41 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealData.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.js +66 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealInjectedTabs.js +39 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealInjectedTabs.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealMutationContext.js +49 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealMutationContext.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealPipeline.js +43 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealPipeline.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useScheduleDialog.js +28 -0
- package/dist/modules/customers/backend/customers/deals/[id]/hooks/useScheduleDialog.js.map +7 -0
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +556 -503
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +3 -3
- package/dist/modules/customers/backend/customers/deals/page.js +66 -21
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +36 -28
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +318 -203
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +3 -3
- package/dist/modules/customers/cli.js +105 -13
- package/dist/modules/customers/cli.js.map +2 -2
- package/dist/modules/customers/commands/activities.js +6 -0
- package/dist/modules/customers/commands/activities.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +315 -107
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/dictionaries.js +166 -32
- package/dist/modules/customers/commands/dictionaries.js.map +2 -2
- package/dist/modules/customers/commands/dictionaryKindSettings.js +208 -0
- package/dist/modules/customers/commands/dictionaryKindSettings.js.map +7 -0
- package/dist/modules/customers/commands/entity-roles.js +415 -0
- package/dist/modules/customers/commands/entity-roles.js.map +7 -0
- package/dist/modules/customers/commands/index.js +4 -0
- package/dist/modules/customers/commands/index.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js +108 -21
- package/dist/modules/customers/commands/interactions.js.map +2 -2
- package/dist/modules/customers/commands/labels.js +539 -0
- package/dist/modules/customers/commands/labels.js.map +7 -0
- package/dist/modules/customers/commands/people.js +560 -463
- package/dist/modules/customers/commands/people.js.map +3 -3
- package/dist/modules/customers/commands/personCompanyLinks.js +568 -0
- package/dist/modules/customers/commands/personCompanyLinks.js.map +7 -0
- package/dist/modules/customers/commands/shared.js +12 -4
- package/dist/modules/customers/commands/shared.js.map +2 -2
- package/dist/modules/customers/commands/todos.js +10 -1
- package/dist/modules/customers/commands/todos.js.map +2 -2
- package/dist/modules/customers/components/AddressEditor.js +1 -1
- package/dist/modules/customers/components/AddressEditor.js.map +2 -2
- package/dist/modules/customers/components/CustomersConfigurationSections.js +31 -0
- package/dist/modules/customers/components/CustomersConfigurationSections.js.map +7 -0
- package/dist/modules/customers/components/DictionarySettings.js +37 -2
- package/dist/modules/customers/components/DictionarySettings.js.map +2 -2
- package/dist/modules/customers/components/detail/ActiveDealCard.js +121 -0
- package/dist/modules/customers/components/detail/ActiveDealCard.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivitiesSection.js +222 -331
- package/dist/modules/customers/components/detail/ActivitiesSection.js.map +3 -3
- package/dist/modules/customers/components/detail/ActivityAiActions.js +36 -0
- package/dist/modules/customers/components/detail/ActivityAiActions.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivityCard.js +126 -0
- package/dist/modules/customers/components/detail/ActivityCard.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivityHistorySection.js +340 -0
- package/dist/modules/customers/components/detail/ActivityHistorySection.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivityLogTab.js +56 -0
- package/dist/modules/customers/components/detail/ActivityLogTab.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivityTimeline.js +108 -0
- package/dist/modules/customers/components/detail/ActivityTimeline.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivityTimelineFilters.js +139 -0
- package/dist/modules/customers/components/detail/ActivityTimelineFilters.js.map +7 -0
- package/dist/modules/customers/components/detail/ActivityTypeSelector.js +42 -0
- package/dist/modules/customers/components/detail/ActivityTypeSelector.js.map +7 -0
- package/dist/modules/customers/components/detail/AiActionChips.js +38 -0
- package/dist/modules/customers/components/detail/AiActionChips.js.map +7 -0
- package/dist/modules/customers/components/detail/AssignRoleDialog.js +534 -0
- package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js +79 -0
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +7 -0
- package/dist/modules/customers/components/detail/ChangelogFilters.js +176 -0
- package/dist/modules/customers/components/detail/ChangelogFilters.js.map +7 -0
- package/dist/modules/customers/components/detail/ChangelogKpiCards.js +88 -0
- package/dist/modules/customers/components/detail/ChangelogKpiCards.js.map +7 -0
- package/dist/modules/customers/components/detail/ChangelogTab.js +470 -0
- package/dist/modules/customers/components/detail/ChangelogTab.js.map +7 -0
- package/dist/modules/customers/components/detail/ComingSoonPlaceholder.js +16 -0
- package/dist/modules/customers/components/detail/ComingSoonPlaceholder.js.map +7 -0
- package/dist/modules/customers/components/detail/CompanyCard.js +283 -0
- package/dist/modules/customers/components/detail/CompanyCard.js.map +7 -0
- package/dist/modules/customers/components/detail/CompanyDashboardTab.js +133 -0
- package/dist/modules/customers/components/detail/CompanyDashboardTab.js.map +7 -0
- package/dist/modules/customers/components/detail/CompanyDetailHeader.js +191 -0
- package/dist/modules/customers/components/detail/CompanyDetailHeader.js.map +7 -0
- package/dist/modules/customers/components/detail/CompanyDetailTabs.js +123 -0
- package/dist/modules/customers/components/detail/CompanyDetailTabs.js.map +7 -0
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +174 -0
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +7 -0
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +514 -230
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyTagsDialog.js +22 -0
- package/dist/modules/customers/components/detail/CompanyTagsDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/ConfirmDealLostDialog.js +159 -0
- package/dist/modules/customers/components/detail/ConfirmDealLostDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/CreatePersonDialog.js +135 -0
- package/dist/modules/customers/components/detail/CreatePersonDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/DealClosureActionBar.js +59 -0
- package/dist/modules/customers/components/detail/DealClosureActionBar.js.map +7 -0
- package/dist/modules/customers/components/detail/DealDetailHeader.js +237 -0
- package/dist/modules/customers/components/detail/DealDetailHeader.js.map +7 -0
- package/dist/modules/customers/components/detail/DealDetailTabs.js +109 -0
- package/dist/modules/customers/components/detail/DealDetailTabs.js.map +7 -0
- package/dist/modules/customers/components/detail/DealForm.js +219 -92
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealLinkedEntitiesTab.js +295 -0
- package/dist/modules/customers/components/detail/DealLinkedEntitiesTab.js.map +7 -0
- package/dist/modules/customers/components/detail/DealLostSummaryDialog.js +107 -0
- package/dist/modules/customers/components/detail/DealLostSummaryDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/DealWonPopup.js +113 -0
- package/dist/modules/customers/components/detail/DealWonPopup.js.map +7 -0
- package/dist/modules/customers/components/detail/DealsSection.js +206 -193
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DecisionMakersFooter.js +39 -0
- package/dist/modules/customers/components/detail/DecisionMakersFooter.js.map +7 -0
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +1096 -0
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/InlineActivityComposer.js +197 -0
- package/dist/modules/customers/components/detail/InlineActivityComposer.js.map +7 -0
- package/dist/modules/customers/components/detail/ManageTagsDialog.js +1091 -0
- package/dist/modules/customers/components/detail/ManageTagsDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/MiniWeekCalendar.js +272 -0
- package/dist/modules/customers/components/detail/MiniWeekCalendar.js.map +7 -0
- package/dist/modules/customers/components/detail/MobilePersonDetail.js +106 -0
- package/dist/modules/customers/components/detail/MobilePersonDetail.js.map +7 -0
- package/dist/modules/customers/components/detail/NextStepCard.js +72 -0
- package/dist/modules/customers/components/detail/NextStepCard.js.map +7 -0
- package/dist/modules/customers/components/detail/PersonCard.js +192 -0
- package/dist/modules/customers/components/detail/PersonCard.js.map +7 -0
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +345 -0
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +7 -0
- package/dist/modules/customers/components/detail/PersonDetailHeader.js +220 -0
- package/dist/modules/customers/components/detail/PersonDetailHeader.js.map +7 -0
- package/dist/modules/customers/components/detail/PersonDetailTabs.js +122 -0
- package/dist/modules/customers/components/detail/PersonDetailTabs.js.map +7 -0
- package/dist/modules/customers/components/detail/PersonTagsDialog.js +24 -0
- package/dist/modules/customers/components/detail/PersonTagsDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/PipelineStepper.js +191 -0
- package/dist/modules/customers/components/detail/PipelineStepper.js.map +7 -0
- package/dist/modules/customers/components/detail/PlannedActivitiesSection.js +222 -0
- package/dist/modules/customers/components/detail/PlannedActivitiesSection.js.map +7 -0
- package/dist/modules/customers/components/detail/RelationshipHealthCard.js +49 -0
- package/dist/modules/customers/components/detail/RelationshipHealthCard.js.map +7 -0
- package/dist/modules/customers/components/detail/RoleAssignmentRow.js +189 -0
- package/dist/modules/customers/components/detail/RoleAssignmentRow.js.map +7 -0
- package/dist/modules/customers/components/detail/RolesSection.js +234 -0
- package/dist/modules/customers/components/detail/RolesSection.js.map +7 -0
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +410 -0
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +7 -0
- package/dist/modules/customers/components/detail/aiActionCatalog.js +41 -0
- package/dist/modules/customers/components/detail/aiActionCatalog.js.map +7 -0
- package/dist/modules/customers/components/detail/assignableStaff.js +48 -0
- package/dist/modules/customers/components/detail/assignableStaff.js.map +7 -0
- package/dist/modules/customers/components/detail/dashboard/ActiveDealWidget.js +48 -0
- package/dist/modules/customers/components/detail/dashboard/ActiveDealWidget.js.map +7 -0
- package/dist/modules/customers/components/detail/dashboard/OpenTasksWidget.js +86 -0
- package/dist/modules/customers/components/detail/dashboard/OpenTasksWidget.js.map +7 -0
- package/dist/modules/customers/components/detail/dashboard/RecentActivityWidget.js +53 -0
- package/dist/modules/customers/components/detail/dashboard/RecentActivityWidget.js.map +7 -0
- package/dist/modules/customers/components/detail/dashboard/RelationshipHealthWidget.js +30 -0
- package/dist/modules/customers/components/detail/dashboard/RelationshipHealthWidget.js.map +7 -0
- package/dist/modules/customers/components/detail/dashboard/UpcomingMeetingsWidget.js +43 -0
- package/dist/modules/customers/components/detail/dashboard/UpcomingMeetingsWidget.js.map +7 -0
- package/dist/modules/customers/components/detail/dashboard/helpers.js +71 -0
- package/dist/modules/customers/components/detail/dashboard/helpers.js.map +7 -0
- package/dist/modules/customers/components/detail/healthScoreUtils.js +69 -0
- package/dist/modules/customers/components/detail/healthScoreUtils.js.map +7 -0
- package/dist/modules/customers/components/detail/hooks/useCurrencyDictionary.js +5 -5
- package/dist/modules/customers/components/detail/hooks/useCurrencyDictionary.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/useCustomerDictionary.js +9 -8
- package/dist/modules/customers/components/detail/hooks/useCustomerDictionary.js.map +3 -3
- package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js +65 -0
- package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js.map +7 -0
- package/dist/modules/customers/components/detail/notesAdapter.js +70 -30
- package/dist/modules/customers/components/detail/notesAdapter.js.map +2 -2
- package/dist/modules/customers/components/detail/pipelineStageUtils.js +26 -0
- package/dist/modules/customers/components/detail/pipelineStageUtils.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/DateTimeFields.js +144 -0
- package/dist/modules/customers/components/detail/schedule/DateTimeFields.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/FooterFields.js +60 -0
- package/dist/modules/customers/components/detail/schedule/FooterFields.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/LinkedEntitiesField.js +216 -0
- package/dist/modules/customers/components/detail/schedule/LinkedEntitiesField.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/LocationField.js +34 -0
- package/dist/modules/customers/components/detail/schedule/LocationField.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +226 -0
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/fieldConfig.js +69 -0
- package/dist/modules/customers/components/detail/schedule/fieldConfig.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/index.js +21 -0
- package/dist/modules/customers/components/detail/schedule/index.js.map +7 -0
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +172 -0
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +7 -0
- package/dist/modules/customers/components/detail/utils.js +23 -0
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/components/formConfig.js +144 -22
- package/dist/modules/customers/components/formConfig.js.map +2 -2
- package/dist/modules/customers/components/linking/LinkEntityDialog.js +661 -0
- package/dist/modules/customers/components/linking/LinkEntityDialog.js.map +7 -0
- package/dist/modules/customers/components/linking/adapters/companyAdapter.js +252 -0
- package/dist/modules/customers/components/linking/adapters/companyAdapter.js.map +7 -0
- package/dist/modules/customers/components/linking/adapters/dealAdapter.js +384 -0
- package/dist/modules/customers/components/linking/adapters/dealAdapter.js.map +7 -0
- package/dist/modules/customers/components/linking/adapters/personAdapter.js +324 -0
- package/dist/modules/customers/components/linking/adapters/personAdapter.js.map +7 -0
- package/dist/modules/customers/components/list/CollectionPreviewCell.js +53 -0
- package/dist/modules/customers/components/list/CollectionPreviewCell.js.map +7 -0
- package/dist/modules/customers/data/entities.js +407 -1
- package/dist/modules/customers/data/entities.js.map +2 -2
- package/dist/modules/customers/data/validators.js +139 -21
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +19 -1
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/customerRoleTypes.js +19 -0
- package/dist/modules/customers/lib/customerRoleTypes.js.map +7 -0
- package/dist/modules/customers/lib/dealClosureNotification.js +39 -0
- package/dist/modules/customers/lib/dealClosureNotification.js.map +7 -0
- package/dist/modules/customers/lib/dealStageTransitionTable.js +29 -0
- package/dist/modules/customers/lib/dealStageTransitionTable.js.map +7 -0
- package/dist/modules/customers/lib/dictionaries.js +25 -0
- package/dist/modules/customers/lib/dictionaries.js.map +2 -2
- package/dist/modules/customers/lib/interactionReadModel.js +10 -0
- package/dist/modules/customers/lib/interactionReadModel.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +235 -0
- package/dist/modules/customers/lib/personCompanies.js.map +7 -0
- package/dist/modules/customers/lib/personCompanyLinkTable.js +42 -0
- package/dist/modules/customers/lib/personCompanyLinkTable.js.map +7 -0
- package/dist/modules/customers/lib/roleTypeUsage.js +104 -0
- package/dist/modules/customers/lib/roleTypeUsage.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260406214502.js +18 -0
- package/dist/modules/customers/migrations/Migration20260406214502.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260408135736.js +17 -0
- package/dist/modules/customers/migrations/Migration20260408135736.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260408225345.js +21 -0
- package/dist/modules/customers/migrations/Migration20260408225345.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260411075533.js +27 -0
- package/dist/modules/customers/migrations/Migration20260411075533.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260411103551.js +13 -0
- package/dist/modules/customers/migrations/Migration20260411103551.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260411130944.js +26 -0
- package/dist/modules/customers/migrations/Migration20260411130944.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260415095203.js +13 -0
- package/dist/modules/customers/migrations/Migration20260415095203.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260415135056.js +20 -0
- package/dist/modules/customers/migrations/Migration20260415135056.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260417140000.js +15 -0
- package/dist/modules/customers/migrations/Migration20260417140000.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260417160000.js +17 -0
- package/dist/modules/customers/migrations/Migration20260417160000.js.map +7 -0
- package/dist/modules/customers/migrations/Migration20260417235407.js +13 -0
- package/dist/modules/customers/migrations/Migration20260417235407.js.map +7 -0
- package/dist/modules/customers/setup.js +16 -1
- package/dist/modules/customers/setup.js.map +2 -2
- package/dist/modules/customers/subscribers/deal-closure-notification.js +16 -0
- package/dist/modules/customers/subscribers/deal-closure-notification.js.map +7 -0
- package/dist/modules/customers/subscribers/deal-lost-notification.js +16 -0
- package/dist/modules/customers/subscribers/deal-lost-notification.js.map +7 -0
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js +2 -0
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/reorder/route.js +154 -0
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/reorder/route.js.map +7 -0
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js +6 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/set-default/route.js +154 -0
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/set-default/route.js.map +7 -0
- package/dist/modules/dictionaries/api/context.js +8 -1
- package/dist/modules/dictionaries/api/context.js.map +2 -2
- package/dist/modules/dictionaries/api/openapi.js +18 -1
- package/dist/modules/dictionaries/api/openapi.js.map +2 -2
- package/dist/modules/dictionaries/commands/entry-operations.js +388 -0
- package/dist/modules/dictionaries/commands/entry-operations.js.map +7 -0
- package/dist/modules/dictionaries/commands/factory.js +24 -3
- package/dist/modules/dictionaries/commands/factory.js.map +2 -2
- package/dist/modules/dictionaries/commands/index.js +1 -0
- package/dist/modules/dictionaries/commands/index.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryTable.js +6 -3
- package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
- package/dist/modules/dictionaries/data/entities.js +11 -1
- package/dist/modules/dictionaries/data/entities.js.map +2 -2
- package/dist/modules/dictionaries/data/validators.js +28 -2
- package/dist/modules/dictionaries/data/validators.js.map +2 -2
- package/dist/modules/dictionaries/events.js +18 -0
- package/dist/modules/dictionaries/events.js.map +7 -0
- package/dist/modules/dictionaries/lib/clientEntries.js +43 -0
- package/dist/modules/dictionaries/lib/clientEntries.js.map +7 -0
- package/dist/modules/dictionaries/migrations/Migration20260410171544.js +45 -0
- package/dist/modules/dictionaries/migrations/Migration20260410171544.js.map +7 -0
- package/dist/modules/inbox_ops/api/proposals/[id]/route.js +4 -1
- package/dist/modules/inbox_ops/api/proposals/[id]/route.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +1 -1
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/sales/components/documents/AddressesSection.js +82 -42
- package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
- package/dist/modules/sales/lib/dictionaries.js +16 -0
- package/dist/modules/sales/lib/dictionaries.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +5 -1
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/generated/entities/action_log/index.ts +4 -0
- package/generated/entities/customer_company_billing/index.ts +10 -0
- package/generated/entities/customer_deal/index.ts +4 -0
- package/generated/entities/customer_deal_stage_transition/index.ts +14 -0
- package/generated/entities/customer_dictionary_kind_setting/index.ts +9 -0
- package/generated/entities/customer_entity/index.ts +4 -0
- package/generated/entities/customer_entity_role/index.ts +10 -0
- package/generated/entities/customer_interaction/index.ts +11 -0
- package/generated/entities/customer_label/index.ts +8 -0
- package/generated/entities/customer_label_assignment/index.ts +7 -0
- package/generated/entities/customer_person_company_link/index.ts +9 -0
- package/generated/entities/customer_person_company_role/index.ts +7 -0
- package/generated/entities/dictionary_entry/index.ts +2 -0
- package/generated/entities.ids.generated.ts +9 -1
- package/generated/entity-fields-registry.ts +116 -1
- package/package.json +3 -3
- package/src/modules/attachments/api/route.ts +48 -6
- package/src/modules/attachments/i18n/de.json +4 -0
- package/src/modules/attachments/i18n/en.json +4 -0
- package/src/modules/attachments/i18n/es.json +4 -0
- package/src/modules/attachments/i18n/pl.json +4 -0
- package/src/modules/audit_logs/api/audit-logs/actions/export/route.ts +260 -0
- package/src/modules/audit_logs/api/audit-logs/actions/route.ts +81 -6
- package/src/modules/audit_logs/cli.ts +79 -0
- package/src/modules/audit_logs/data/entities.ts +17 -0
- package/src/modules/audit_logs/data/validators.ts +9 -1
- package/src/modules/audit_logs/lib/changeRows.ts +47 -0
- package/src/modules/audit_logs/lib/display-helpers.tsx +4 -30
- package/src/modules/audit_logs/lib/projections.ts +110 -0
- package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +325 -2
- package/src/modules/audit_logs/migrations/Migration20260412160533.ts +21 -0
- package/src/modules/audit_logs/services/actionLogService.ts +455 -85
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/customer_accounts/i18n/de.json +2 -0
- package/src/modules/customer_accounts/i18n/en.json +2 -0
- package/src/modules/customer_accounts/i18n/es.json +2 -0
- package/src/modules/customer_accounts/i18n/pl.json +2 -0
- package/src/modules/customers/acl.ts +2 -0
- package/src/modules/customers/api/activities/route.ts +4 -0
- package/src/modules/customers/api/assignable-staff/route.ts +250 -0
- package/src/modules/customers/api/companies/[id]/people/route.ts +244 -0
- package/src/modules/customers/api/companies/[id]/roles/route.ts +15 -0
- package/src/modules/customers/api/companies/[id]/route.ts +458 -40
- package/src/modules/customers/api/companies/route.ts +93 -15
- package/src/modules/customers/api/deals/[id]/companies/route.ts +203 -0
- package/src/modules/customers/api/deals/[id]/people/route.ts +182 -0
- package/src/modules/customers/api/deals/[id]/route.ts +554 -57
- package/src/modules/customers/api/deals/[id]/stats/route.ts +221 -0
- package/src/modules/customers/api/deals/route.ts +35 -46
- package/src/modules/customers/api/dictionaries/[kind]/[id]/route.ts +105 -3
- package/src/modules/customers/api/dictionaries/[kind]/route.ts +143 -44
- package/src/modules/customers/api/dictionaries/context.ts +45 -16
- package/src/modules/customers/api/dictionaries/kind-settings/route.ts +232 -0
- package/src/modules/customers/api/entity-roles-factory.ts +520 -0
- package/src/modules/customers/api/interactions/conflicts/route.ts +196 -0
- package/src/modules/customers/api/interactions/counts/route.ts +112 -0
- package/src/modules/customers/api/interactions/route.ts +95 -2
- package/src/modules/customers/api/labels/assign/route.ts +202 -0
- package/src/modules/customers/api/labels/auth.ts +19 -0
- package/src/modules/customers/api/labels/route.ts +310 -0
- package/src/modules/customers/api/labels/table-errors.ts +36 -0
- package/src/modules/customers/api/labels/unassign/route.ts +197 -0
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +331 -0
- package/src/modules/customers/api/people/[id]/companies/context.ts +70 -0
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +384 -0
- package/src/modules/customers/api/people/[id]/companies/route.ts +215 -0
- package/src/modules/customers/api/people/[id]/roles/route.ts +15 -0
- package/src/modules/customers/api/people/[id]/route.ts +153 -26
- package/src/modules/customers/api/people/route.ts +134 -31
- package/src/modules/customers/api/todos/route.ts +4 -0
- package/src/modules/customers/api/utils.ts +36 -0
- package/src/modules/customers/backend/config/customers/page.tsx +2 -6
- package/src/modules/customers/backend/customers/companies/page.tsx +36 -26
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +277 -262
- package/src/modules/customers/backend/customers/deals/[id]/hooks/formatters.ts +19 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/types.ts +104 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealActivities.ts +60 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealAssociations.ts +362 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealClosure.ts +113 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealData.ts +52 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.ts +86 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealInjectedTabs.tsx +60 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealMutationContext.ts +76 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealPipeline.ts +56 -0
- package/src/modules/customers/backend/customers/deals/[id]/hooks/useScheduleDialog.ts +38 -0
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +587 -624
- package/src/modules/customers/backend/customers/deals/page.tsx +71 -28
- package/src/modules/customers/backend/customers/people/page.tsx +35 -29
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +343 -209
- package/src/modules/customers/cli.ts +107 -12
- package/src/modules/customers/commands/activities.ts +13 -0
- package/src/modules/customers/commands/deals.ts +386 -114
- package/src/modules/customers/commands/dictionaries.ts +175 -32
- package/src/modules/customers/commands/dictionaryKindSettings.ts +268 -0
- package/src/modules/customers/commands/entity-roles.ts +494 -0
- package/src/modules/customers/commands/index.ts +4 -0
- package/src/modules/customers/commands/interactions.ts +125 -21
- package/src/modules/customers/commands/labels.ts +626 -0
- package/src/modules/customers/commands/people.ts +373 -259
- package/src/modules/customers/commands/personCompanyLinks.ts +654 -0
- package/src/modules/customers/commands/shared.ts +16 -15
- package/src/modules/customers/commands/todos.ts +17 -1
- package/src/modules/customers/components/AddressEditor.tsx +1 -1
- package/src/modules/customers/components/CustomersConfigurationSections.tsx +36 -0
- package/src/modules/customers/components/DictionarySettings.tsx +43 -2
- package/src/modules/customers/components/detail/ActiveDealCard.tsx +175 -0
- package/src/modules/customers/components/detail/ActivitiesSection.tsx +267 -361
- package/src/modules/customers/components/detail/ActivityAiActions.tsx +49 -0
- package/src/modules/customers/components/detail/ActivityCard.tsx +154 -0
- package/src/modules/customers/components/detail/ActivityHistorySection.tsx +412 -0
- package/src/modules/customers/components/detail/ActivityLogTab.tsx +67 -0
- package/src/modules/customers/components/detail/ActivityTimeline.tsx +158 -0
- package/src/modules/customers/components/detail/ActivityTimelineFilters.tsx +163 -0
- package/src/modules/customers/components/detail/ActivityTypeSelector.tsx +53 -0
- package/src/modules/customers/components/detail/AiActionChips.tsx +48 -0
- package/src/modules/customers/components/detail/AssignRoleDialog.tsx +672 -0
- package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +132 -0
- package/src/modules/customers/components/detail/ChangelogFilters.tsx +193 -0
- package/src/modules/customers/components/detail/ChangelogKpiCards.tsx +107 -0
- package/src/modules/customers/components/detail/ChangelogTab.tsx +629 -0
- package/src/modules/customers/components/detail/ComingSoonPlaceholder.tsx +21 -0
- package/src/modules/customers/components/detail/CompanyCard.tsx +419 -0
- package/src/modules/customers/components/detail/CompanyDashboardTab.tsx +161 -0
- package/src/modules/customers/components/detail/CompanyDetailHeader.tsx +243 -0
- package/src/modules/customers/components/detail/CompanyDetailTabs.tsx +172 -0
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +206 -0
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +582 -288
- package/src/modules/customers/components/detail/CompanyTagsDialog.tsx +23 -0
- package/src/modules/customers/components/detail/ConfirmDealLostDialog.tsx +210 -0
- package/src/modules/customers/components/detail/CreatePersonDialog.tsx +178 -0
- package/src/modules/customers/components/detail/DealClosureActionBar.tsx +63 -0
- package/src/modules/customers/components/detail/DealDetailHeader.tsx +335 -0
- package/src/modules/customers/components/detail/DealDetailTabs.tsx +154 -0
- package/src/modules/customers/components/detail/DealForm.tsx +253 -101
- package/src/modules/customers/components/detail/DealLinkedEntitiesTab.tsx +349 -0
- package/src/modules/customers/components/detail/DealLostSummaryDialog.tsx +156 -0
- package/src/modules/customers/components/detail/DealWonPopup.tsx +164 -0
- package/src/modules/customers/components/detail/DealsSection.tsx +276 -221
- package/src/modules/customers/components/detail/DecisionMakersFooter.tsx +56 -0
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +1372 -0
- package/src/modules/customers/components/detail/InlineActivityComposer.tsx +239 -0
- package/src/modules/customers/components/detail/ManageTagsDialog.tsx +1331 -0
- package/src/modules/customers/components/detail/MiniWeekCalendar.tsx +338 -0
- package/src/modules/customers/components/detail/MobilePersonDetail.tsx +124 -0
- package/src/modules/customers/components/detail/NextStepCard.tsx +104 -0
- package/src/modules/customers/components/detail/PersonCard.tsx +238 -0
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +426 -0
- package/src/modules/customers/components/detail/PersonDetailHeader.tsx +294 -0
- package/src/modules/customers/components/detail/PersonDetailTabs.tsx +172 -0
- package/src/modules/customers/components/detail/PersonTagsDialog.tsx +26 -0
- package/src/modules/customers/components/detail/PipelineStepper.tsx +245 -0
- package/src/modules/customers/components/detail/PlannedActivitiesSection.tsx +255 -0
- package/src/modules/customers/components/detail/RelationshipHealthCard.tsx +63 -0
- package/src/modules/customers/components/detail/RoleAssignmentRow.tsx +248 -0
- package/src/modules/customers/components/detail/RolesSection.tsx +311 -0
- package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +481 -0
- package/src/modules/customers/components/detail/aiActionCatalog.ts +77 -0
- package/src/modules/customers/components/detail/assignableStaff.ts +124 -0
- package/src/modules/customers/components/detail/dashboard/ActiveDealWidget.tsx +63 -0
- package/src/modules/customers/components/detail/dashboard/OpenTasksWidget.tsx +114 -0
- package/src/modules/customers/components/detail/dashboard/RecentActivityWidget.tsx +69 -0
- package/src/modules/customers/components/detail/dashboard/RelationshipHealthWidget.tsx +40 -0
- package/src/modules/customers/components/detail/dashboard/UpcomingMeetingsWidget.tsx +64 -0
- package/src/modules/customers/components/detail/dashboard/helpers.ts +78 -0
- package/src/modules/customers/components/detail/healthScoreUtils.ts +91 -0
- package/src/modules/customers/components/detail/hooks/useCurrencyDictionary.ts +8 -8
- package/src/modules/customers/components/detail/hooks/useCustomerDictionary.ts +10 -6
- package/src/modules/customers/components/detail/hooks/useInteractionMutations.ts +91 -0
- package/src/modules/customers/components/detail/notesAdapter.ts +91 -30
- package/src/modules/customers/components/detail/pipelineStageUtils.ts +29 -0
- package/src/modules/customers/components/detail/schedule/DateTimeFields.tsx +187 -0
- package/src/modules/customers/components/detail/schedule/FooterFields.tsx +79 -0
- package/src/modules/customers/components/detail/schedule/LinkedEntitiesField.tsx +277 -0
- package/src/modules/customers/components/detail/schedule/LocationField.tsx +42 -0
- package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +255 -0
- package/src/modules/customers/components/detail/schedule/fieldConfig.ts +70 -0
- package/src/modules/customers/components/detail/schedule/index.ts +9 -0
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +221 -0
- package/src/modules/customers/components/detail/types.ts +16 -0
- package/src/modules/customers/components/detail/utils.ts +25 -0
- package/src/modules/customers/components/formConfig.tsx +223 -28
- package/src/modules/customers/components/linking/LinkEntityDialog.tsx +920 -0
- package/src/modules/customers/components/linking/adapters/companyAdapter.tsx +398 -0
- package/src/modules/customers/components/linking/adapters/dealAdapter.tsx +578 -0
- package/src/modules/customers/components/linking/adapters/personAdapter.tsx +512 -0
- package/src/modules/customers/components/list/CollectionPreviewCell.tsx +66 -0
- package/src/modules/customers/data/entities.ts +353 -1
- package/src/modules/customers/data/validators.ts +170 -19
- package/src/modules/customers/events.ts +22 -0
- package/src/modules/customers/i18n/de.json +841 -2
- package/src/modules/customers/i18n/en.json +841 -2
- package/src/modules/customers/i18n/es.json +840 -1
- package/src/modules/customers/i18n/pl.json +841 -2
- package/src/modules/customers/lib/customerRoleTypes.ts +24 -0
- package/src/modules/customers/lib/dealClosureNotification.ts +64 -0
- package/src/modules/customers/lib/dealStageTransitionTable.ts +32 -0
- package/src/modules/customers/lib/dictionaries.ts +26 -10
- package/src/modules/customers/lib/interactionReadModel.ts +10 -0
- package/src/modules/customers/lib/personCompanies.ts +317 -0
- package/src/modules/customers/lib/personCompanyLinkTable.ts +58 -0
- package/src/modules/customers/lib/roleTypeUsage.ts +146 -0
- package/src/modules/customers/migrations/.snapshot-open-mercato.json +2747 -798
- package/src/modules/customers/migrations/Migration20260406214502.ts +19 -0
- package/src/modules/customers/migrations/Migration20260408135736.ts +15 -0
- package/src/modules/customers/migrations/Migration20260408225345.ts +23 -0
- package/src/modules/customers/migrations/Migration20260411075533.ts +30 -0
- package/src/modules/customers/migrations/Migration20260411103551.ts +13 -0
- package/src/modules/customers/migrations/Migration20260411130944.ts +30 -0
- package/src/modules/customers/migrations/Migration20260415095203.ts +13 -0
- package/src/modules/customers/migrations/Migration20260415135056.ts +22 -0
- package/src/modules/customers/migrations/Migration20260417140000.ts +15 -0
- package/src/modules/customers/migrations/Migration20260417160000.ts +17 -0
- package/src/modules/customers/migrations/Migration20260417235407.ts +13 -0
- package/src/modules/customers/setup.ts +15 -0
- package/src/modules/customers/subscribers/deal-closure-notification.ts +22 -0
- package/src/modules/customers/subscribers/deal-lost-notification.ts +22 -0
- package/src/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.ts +2 -0
- package/src/modules/dictionaries/api/[dictionaryId]/entries/reorder/route.ts +162 -0
- package/src/modules/dictionaries/api/[dictionaryId]/entries/route.ts +6 -2
- package/src/modules/dictionaries/api/[dictionaryId]/entries/set-default/route.ts +162 -0
- package/src/modules/dictionaries/api/context.ts +9 -0
- package/src/modules/dictionaries/api/openapi.ts +17 -0
- package/src/modules/dictionaries/commands/entry-operations.ts +457 -0
- package/src/modules/dictionaries/commands/factory.ts +31 -3
- package/src/modules/dictionaries/commands/index.ts +1 -0
- package/src/modules/dictionaries/components/DictionaryTable.tsx +15 -6
- package/src/modules/dictionaries/data/entities.ts +9 -0
- package/src/modules/dictionaries/data/validators.ts +34 -0
- package/src/modules/dictionaries/events.ts +20 -0
- package/src/modules/dictionaries/i18n/de.json +2 -0
- package/src/modules/dictionaries/i18n/en.json +2 -0
- package/src/modules/dictionaries/i18n/es.json +2 -0
- package/src/modules/dictionaries/i18n/pl.json +2 -0
- package/src/modules/dictionaries/lib/clientEntries.ts +66 -0
- package/src/modules/dictionaries/migrations/.snapshot-open-mercato.json +185 -3
- package/src/modules/dictionaries/migrations/Migration20260410171544.ts +49 -0
- package/src/modules/inbox_ops/api/proposals/[id]/route.ts +4 -1
- package/src/modules/query_index/lib/engine.ts +9 -1
- package/src/modules/sales/components/documents/AddressesSection.tsx +92 -42
- package/src/modules/sales/i18n/de.json +28 -0
- package/src/modules/sales/i18n/en.json +28 -0
- package/src/modules/sales/i18n/es.json +28 -0
- package/src/modules/sales/i18n/pl.json +28 -0
- package/src/modules/sales/lib/dictionaries.ts +18 -0
- package/src/modules/sales/widgets/injection-table.ts +4 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import type { ActivityType } from './fieldConfig'
|
|
3
|
+
|
|
4
|
+
export type RsvpStatus = 'pending' | 'accepted' | 'declined' | 'tentative'
|
|
5
|
+
|
|
6
|
+
export type Participant = {
|
|
7
|
+
userId: string
|
|
8
|
+
name: string
|
|
9
|
+
email?: string
|
|
10
|
+
color?: string
|
|
11
|
+
status?: RsvpStatus
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type LinkedEntity = {
|
|
15
|
+
id: string
|
|
16
|
+
type: 'company' | 'deal' | 'offer'
|
|
17
|
+
label: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type ScheduleActivityEditData = {
|
|
21
|
+
id: string
|
|
22
|
+
interactionType?: string
|
|
23
|
+
title?: string | null
|
|
24
|
+
body?: string | null
|
|
25
|
+
scheduledAt?: string | null
|
|
26
|
+
durationMinutes?: number | null
|
|
27
|
+
location?: string | null
|
|
28
|
+
allDay?: boolean | null
|
|
29
|
+
recurrenceRule?: string | null
|
|
30
|
+
recurrenceEnd?: string | null
|
|
31
|
+
participants?: Array<{ userId: string; name?: string; email?: string; status?: string }> | null
|
|
32
|
+
reminderMinutes?: number | null
|
|
33
|
+
visibility?: string | null
|
|
34
|
+
linkedEntities?: Array<{ id: string; type: string; label: string }> | null
|
|
35
|
+
guestPermissions?: { canInviteOthers?: boolean; canModify?: boolean; canSeeList?: boolean } | null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const PARTICIPANT_COLORS = [
|
|
39
|
+
'bg-chart-emerald',
|
|
40
|
+
'bg-chart-blue',
|
|
41
|
+
'bg-chart-orange',
|
|
42
|
+
'bg-chart-violet',
|
|
43
|
+
'bg-chart-pink',
|
|
44
|
+
'bg-chart-teal',
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
interface UseScheduleFormStateParams {
|
|
48
|
+
open: boolean
|
|
49
|
+
editData: ScheduleActivityEditData | null | undefined
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function useScheduleFormState({ open, editData }: UseScheduleFormStateParams) {
|
|
53
|
+
const [activityType, setActivityType] = React.useState<ActivityType>('meeting')
|
|
54
|
+
const [title, setTitle] = React.useState('')
|
|
55
|
+
const [date, setDate] = React.useState(() => new Date().toISOString().slice(0, 10))
|
|
56
|
+
const [startTime, setStartTime] = React.useState('10:00')
|
|
57
|
+
const [duration, setDuration] = React.useState(30)
|
|
58
|
+
const [allDay, setAllDay] = React.useState(false)
|
|
59
|
+
const [description, setDescription] = React.useState('')
|
|
60
|
+
const [markdownEnabled, setMarkdownEnabled] = React.useState(true)
|
|
61
|
+
const [location, setLocation] = React.useState('')
|
|
62
|
+
const [reminderMinutes, setReminderMinutes] = React.useState(15)
|
|
63
|
+
const [visibility, setVisibility] = React.useState('team')
|
|
64
|
+
const [participants, setParticipants] = React.useState<Participant[]>([])
|
|
65
|
+
const [linkedEntities, setLinkedEntities] = React.useState<LinkedEntity[]>([])
|
|
66
|
+
const [recurrenceEnabled, setRecurrenceEnabled] = React.useState(false)
|
|
67
|
+
const [recurrenceDays, setRecurrenceDays] = React.useState<boolean[]>([true, false, true, false, false, false, false])
|
|
68
|
+
const [recurrenceEndType, setRecurrenceEndType] = React.useState<'never' | 'count' | 'date'>('never')
|
|
69
|
+
const [recurrenceCount, setRecurrenceCount] = React.useState(8)
|
|
70
|
+
const [recurrenceEndDate, setRecurrenceEndDate] = React.useState('')
|
|
71
|
+
const [conflict, setConflict] = React.useState<string | null>(null)
|
|
72
|
+
const [saving, setSaving] = React.useState(false)
|
|
73
|
+
const [guestPermissions, setGuestPermissions] = React.useState({ canInviteOthers: true, canModify: false, canSeeList: true })
|
|
74
|
+
|
|
75
|
+
React.useEffect(() => {
|
|
76
|
+
if (open) {
|
|
77
|
+
if (editData) {
|
|
78
|
+
// Edit mode: populate from existing interaction
|
|
79
|
+
setActivityType((editData.interactionType as ActivityType) ?? 'meeting')
|
|
80
|
+
setTitle(editData.title ?? '')
|
|
81
|
+
const scheduledDate = editData.scheduledAt ? new Date(editData.scheduledAt) : new Date()
|
|
82
|
+
setDate(scheduledDate.toISOString().slice(0, 10))
|
|
83
|
+
setStartTime(scheduledDate.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }))
|
|
84
|
+
setDuration(editData.durationMinutes ?? 30)
|
|
85
|
+
setAllDay(editData.allDay ?? false)
|
|
86
|
+
setDescription(editData.body ?? '')
|
|
87
|
+
setLocation(editData.location ?? '')
|
|
88
|
+
setReminderMinutes(editData.reminderMinutes ?? 15)
|
|
89
|
+
setVisibility(editData.visibility ?? 'team')
|
|
90
|
+
setParticipants(
|
|
91
|
+
Array.isArray(editData.participants)
|
|
92
|
+
? editData.participants.map((p, i) => ({
|
|
93
|
+
userId: p.userId,
|
|
94
|
+
name: p.name ?? p.userId,
|
|
95
|
+
email: p.email,
|
|
96
|
+
color: PARTICIPANT_COLORS[i % PARTICIPANT_COLORS.length],
|
|
97
|
+
status: (p.status ?? 'pending') as RsvpStatus,
|
|
98
|
+
}))
|
|
99
|
+
: [],
|
|
100
|
+
)
|
|
101
|
+
setLinkedEntities(
|
|
102
|
+
Array.isArray(editData.linkedEntities)
|
|
103
|
+
? editData.linkedEntities.map((e) => ({ id: e.id, type: e.type as LinkedEntity['type'], label: e.label }))
|
|
104
|
+
: [],
|
|
105
|
+
)
|
|
106
|
+
if (editData.recurrenceRule) {
|
|
107
|
+
setRecurrenceEnabled(true)
|
|
108
|
+
// Parse RRULE to set days and end type
|
|
109
|
+
const rule = editData.recurrenceRule
|
|
110
|
+
const byDayMatch = rule.match(/BYDAY=([A-Z,]+)/)
|
|
111
|
+
if (byDayMatch) {
|
|
112
|
+
const dayNames = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']
|
|
113
|
+
const activeDays = byDayMatch[1].split(',')
|
|
114
|
+
setRecurrenceDays(dayNames.map((d) => activeDays.includes(d)))
|
|
115
|
+
}
|
|
116
|
+
const countMatch = rule.match(/COUNT=(\d+)/)
|
|
117
|
+
const untilMatch = rule.match(/UNTIL=(\d{8})/)
|
|
118
|
+
if (countMatch) {
|
|
119
|
+
setRecurrenceEndType('count')
|
|
120
|
+
setRecurrenceCount(Number(countMatch[1]))
|
|
121
|
+
} else if (untilMatch) {
|
|
122
|
+
setRecurrenceEndType('date')
|
|
123
|
+
const raw = untilMatch[1]
|
|
124
|
+
setRecurrenceEndDate(`${raw.slice(0, 4)}-${raw.slice(4, 6)}-${raw.slice(6, 8)}`)
|
|
125
|
+
} else {
|
|
126
|
+
setRecurrenceEndType('never')
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
setRecurrenceEnabled(false)
|
|
130
|
+
}
|
|
131
|
+
if (editData.guestPermissions) {
|
|
132
|
+
setGuestPermissions({
|
|
133
|
+
canInviteOthers: editData.guestPermissions.canInviteOthers ?? true,
|
|
134
|
+
canModify: editData.guestPermissions.canModify ?? false,
|
|
135
|
+
canSeeList: editData.guestPermissions.canSeeList ?? true,
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
} else {
|
|
139
|
+
// Create mode: reset all fields
|
|
140
|
+
setActivityType('meeting')
|
|
141
|
+
setTitle('')
|
|
142
|
+
setDate(new Date().toISOString().slice(0, 10))
|
|
143
|
+
setStartTime('10:00')
|
|
144
|
+
setDuration(30)
|
|
145
|
+
setAllDay(false)
|
|
146
|
+
setDescription('')
|
|
147
|
+
setLocation('')
|
|
148
|
+
setReminderMinutes(15)
|
|
149
|
+
setVisibility('team')
|
|
150
|
+
setParticipants([])
|
|
151
|
+
setLinkedEntities([])
|
|
152
|
+
setRecurrenceEnabled(false)
|
|
153
|
+
}
|
|
154
|
+
setConflict(null)
|
|
155
|
+
}
|
|
156
|
+
return () => {
|
|
157
|
+
// Safety net: restore body scroll if Radix Dialog fails to clean up
|
|
158
|
+
document.body.style.removeProperty('overflow')
|
|
159
|
+
document.body.style.removeProperty('pointer-events')
|
|
160
|
+
}
|
|
161
|
+
}, [open, editData])
|
|
162
|
+
|
|
163
|
+
const removeParticipant = React.useCallback((userId: string) => {
|
|
164
|
+
setParticipants((prev) => prev.filter((p) => p.userId !== userId))
|
|
165
|
+
}, [])
|
|
166
|
+
|
|
167
|
+
const toggleRecurrenceDay = React.useCallback((index: number) => {
|
|
168
|
+
setRecurrenceDays((prev) => {
|
|
169
|
+
const next = [...prev]
|
|
170
|
+
next[index] = !next[index]
|
|
171
|
+
return next
|
|
172
|
+
})
|
|
173
|
+
}, [])
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
activityType,
|
|
177
|
+
setActivityType,
|
|
178
|
+
title,
|
|
179
|
+
setTitle,
|
|
180
|
+
date,
|
|
181
|
+
setDate,
|
|
182
|
+
startTime,
|
|
183
|
+
setStartTime,
|
|
184
|
+
duration,
|
|
185
|
+
setDuration,
|
|
186
|
+
allDay,
|
|
187
|
+
setAllDay,
|
|
188
|
+
description,
|
|
189
|
+
setDescription,
|
|
190
|
+
markdownEnabled,
|
|
191
|
+
setMarkdownEnabled,
|
|
192
|
+
location,
|
|
193
|
+
setLocation,
|
|
194
|
+
reminderMinutes,
|
|
195
|
+
setReminderMinutes,
|
|
196
|
+
visibility,
|
|
197
|
+
setVisibility,
|
|
198
|
+
participants,
|
|
199
|
+
setParticipants,
|
|
200
|
+
linkedEntities,
|
|
201
|
+
setLinkedEntities,
|
|
202
|
+
recurrenceEnabled,
|
|
203
|
+
setRecurrenceEnabled,
|
|
204
|
+
recurrenceDays,
|
|
205
|
+
setRecurrenceDays,
|
|
206
|
+
recurrenceEndType,
|
|
207
|
+
setRecurrenceEndType,
|
|
208
|
+
recurrenceCount,
|
|
209
|
+
setRecurrenceCount,
|
|
210
|
+
recurrenceEndDate,
|
|
211
|
+
setRecurrenceEndDate,
|
|
212
|
+
conflict,
|
|
213
|
+
setConflict,
|
|
214
|
+
saving,
|
|
215
|
+
setSaving,
|
|
216
|
+
guestPermissions,
|
|
217
|
+
setGuestPermissions,
|
|
218
|
+
removeParticipant,
|
|
219
|
+
toggleRecurrenceDay,
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -77,6 +77,8 @@ export type DealSummary = {
|
|
|
77
77
|
title: string
|
|
78
78
|
status?: string | null
|
|
79
79
|
pipelineStage?: string | null
|
|
80
|
+
pipelineId?: string | null
|
|
81
|
+
pipelineStageId?: string | null
|
|
80
82
|
valueAmount?: number | string | null
|
|
81
83
|
valueCurrency?: string | null
|
|
82
84
|
probability?: number | string | null
|
|
@@ -84,6 +86,9 @@ export type DealSummary = {
|
|
|
84
86
|
description?: string | null
|
|
85
87
|
ownerUserId?: string | null
|
|
86
88
|
source?: string | null
|
|
89
|
+
closureOutcome?: string | null
|
|
90
|
+
lossReasonId?: string | null
|
|
91
|
+
lossNotes?: string | null
|
|
87
92
|
createdAt?: string | null
|
|
88
93
|
updatedAt?: string | null
|
|
89
94
|
customValues?: Record<string, unknown> | null
|
|
@@ -126,6 +131,10 @@ export type InteractionSummary = {
|
|
|
126
131
|
appearanceIcon?: string | null
|
|
127
132
|
appearanceColor?: string | null
|
|
128
133
|
source?: string | null
|
|
134
|
+
location?: string | null
|
|
135
|
+
allDay?: boolean | null
|
|
136
|
+
recurrenceRule?: string | null
|
|
137
|
+
recurrenceEnd?: string | null
|
|
129
138
|
entityId?: string | null
|
|
130
139
|
dealId?: string | null
|
|
131
140
|
organizationId?: string | null
|
|
@@ -134,12 +143,19 @@ export type InteractionSummary = {
|
|
|
134
143
|
authorEmail?: string | null
|
|
135
144
|
dealTitle?: string | null
|
|
136
145
|
customValues?: Record<string, unknown> | null
|
|
146
|
+
participants?: Array<{ userId: string; name?: string; email?: string; status?: string }> | null
|
|
147
|
+
reminderMinutes?: number | null
|
|
148
|
+
visibility?: string | null
|
|
149
|
+
linkedEntities?: Array<{ id: string; type: string; label: string }> | null
|
|
150
|
+
guestPermissions?: { canInviteOthers?: boolean; canModify?: boolean; canSeeList?: boolean } | null
|
|
137
151
|
customer?: {
|
|
138
152
|
id: string | null
|
|
139
153
|
displayName: string | null
|
|
140
154
|
kind: string | null
|
|
141
155
|
} | null
|
|
142
156
|
_integrations?: Record<string, unknown>
|
|
157
|
+
pinned?: boolean
|
|
158
|
+
duration?: number | null
|
|
143
159
|
createdAt: string
|
|
144
160
|
updatedAt: string
|
|
145
161
|
}
|
|
@@ -147,3 +147,28 @@ export function createDictionarySelectLabels(
|
|
|
147
147
|
return base
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
+
|
|
151
|
+
export function getInitials(name: string): string {
|
|
152
|
+
const words = name.trim().split(/\s+/)
|
|
153
|
+
if (words.length === 0 || !words[0]) return '?'
|
|
154
|
+
if (words.length === 1) return words[0].charAt(0).toUpperCase()
|
|
155
|
+
return (words[0].charAt(0) + words[words.length - 1].charAt(0)).toUpperCase()
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export function formatCurrency(amount: number, currency?: string | null): string {
|
|
159
|
+
try {
|
|
160
|
+
return new Intl.NumberFormat(undefined, {
|
|
161
|
+
style: 'currency',
|
|
162
|
+
currency: currency || 'PLN',
|
|
163
|
+
maximumFractionDigits: 0,
|
|
164
|
+
}).format(amount)
|
|
165
|
+
} catch {
|
|
166
|
+
return `${amount.toLocaleString()} ${currency || 'PLN'}`
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function formatFallbackLabel(value: string): string {
|
|
171
|
+
return value
|
|
172
|
+
.replace(/[_-]+/g, ' ')
|
|
173
|
+
.replace(/^\w/, (c) => c.toUpperCase())
|
|
174
|
+
}
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
DictionaryEntrySelect,
|
|
32
32
|
type DictionarySelectLabels,
|
|
33
33
|
} from '@open-mercato/core/modules/dictionaries/components/DictionaryEntrySelect'
|
|
34
|
+
import { RolesSection } from './detail/RolesSection'
|
|
34
35
|
import { useQueryClient } from '@tanstack/react-query'
|
|
35
36
|
import { useEmailDuplicateCheck } from '../backend/hooks/useEmailDuplicateCheck'
|
|
36
37
|
import { lookupPhoneDuplicate } from '../utils/phoneDuplicates'
|
|
@@ -96,6 +97,11 @@ type DictionarySelectFieldProps = {
|
|
|
96
97
|
onChange: (value: string | undefined) => void
|
|
97
98
|
labels: DictionarySelectLabels
|
|
98
99
|
selectClassName?: string
|
|
100
|
+
manageHref?: string
|
|
101
|
+
allowInlineCreate?: boolean
|
|
102
|
+
allowAppearance?: boolean
|
|
103
|
+
showManage?: boolean
|
|
104
|
+
showLabelInput?: boolean
|
|
99
105
|
}
|
|
100
106
|
|
|
101
107
|
const emailValidationSchema = z.string().email()
|
|
@@ -119,6 +125,11 @@ export function DictionarySelectField({
|
|
|
119
125
|
onChange,
|
|
120
126
|
labels,
|
|
121
127
|
selectClassName,
|
|
128
|
+
manageHref,
|
|
129
|
+
allowInlineCreate = false,
|
|
130
|
+
allowAppearance = false,
|
|
131
|
+
showManage = false,
|
|
132
|
+
showLabelInput = true,
|
|
122
133
|
}: DictionarySelectFieldProps) {
|
|
123
134
|
const t = useT()
|
|
124
135
|
const queryClient = useQueryClient()
|
|
@@ -209,12 +220,12 @@ export function DictionarySelectField({
|
|
|
209
220
|
fetchOptions={fetchOptions}
|
|
210
221
|
createOption={createOption}
|
|
211
222
|
labels={labels}
|
|
223
|
+
manageHref={manageHref}
|
|
212
224
|
selectClassName={selectClassName}
|
|
213
|
-
allowInlineCreate
|
|
214
|
-
allowAppearance
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
showLabelInput
|
|
225
|
+
allowInlineCreate={allowInlineCreate}
|
|
226
|
+
allowAppearance={allowAppearance}
|
|
227
|
+
showManage={showManage}
|
|
228
|
+
showLabelInput={showLabelInput}
|
|
218
229
|
/>
|
|
219
230
|
)
|
|
220
231
|
}
|
|
@@ -275,8 +286,8 @@ const createPrimaryEmailField = (t: Translator): CrudField => ({
|
|
|
275
286
|
})
|
|
276
287
|
|
|
277
288
|
type DictionaryFieldDefinition = {
|
|
278
|
-
id: '
|
|
279
|
-
kind: '
|
|
289
|
+
id: 'status' | 'lifecycleStage' | 'source'
|
|
290
|
+
kind: 'statuses' | 'lifecycle-stages' | 'sources'
|
|
280
291
|
labelKey: string
|
|
281
292
|
placeholderKey: string
|
|
282
293
|
addLabelKey: string
|
|
@@ -286,16 +297,6 @@ type DictionaryFieldDefinition = {
|
|
|
286
297
|
}
|
|
287
298
|
|
|
288
299
|
const dictionaryFieldDefinitions: DictionaryFieldDefinition[] = [
|
|
289
|
-
{
|
|
290
|
-
id: 'jobTitle',
|
|
291
|
-
kind: 'job-titles',
|
|
292
|
-
labelKey: 'customers.people.form.jobTitle',
|
|
293
|
-
placeholderKey: 'customers.people.form.jobTitle.placeholder',
|
|
294
|
-
addLabelKey: 'customers.people.form.dictionary.addJobTitle',
|
|
295
|
-
promptKey: 'customers.people.form.dictionary.promptJobTitle',
|
|
296
|
-
dialogTitleKey: 'customers.people.form.dictionary.dialogTitleJobTitle',
|
|
297
|
-
layout: 'half',
|
|
298
|
-
},
|
|
299
300
|
{
|
|
300
301
|
id: 'status',
|
|
301
302
|
kind: 'statuses',
|
|
@@ -304,6 +305,7 @@ const dictionaryFieldDefinitions: DictionaryFieldDefinition[] = [
|
|
|
304
305
|
addLabelKey: 'customers.people.form.dictionary.addStatus',
|
|
305
306
|
promptKey: 'customers.people.form.dictionary.promptStatus',
|
|
306
307
|
dialogTitleKey: 'customers.people.form.dictionary.dialogTitleStatus',
|
|
308
|
+
layout: 'half',
|
|
307
309
|
},
|
|
308
310
|
{
|
|
309
311
|
id: 'lifecycleStage',
|
|
@@ -313,6 +315,7 @@ const dictionaryFieldDefinitions: DictionaryFieldDefinition[] = [
|
|
|
313
315
|
addLabelKey: 'customers.people.form.dictionary.addLifecycleStage',
|
|
314
316
|
promptKey: 'customers.people.form.dictionary.promptLifecycleStage',
|
|
315
317
|
dialogTitleKey: 'customers.people.form.dictionary.dialogTitleLifecycleStage',
|
|
318
|
+
layout: 'half',
|
|
316
319
|
},
|
|
317
320
|
{
|
|
318
321
|
id: 'source',
|
|
@@ -322,6 +325,7 @@ const dictionaryFieldDefinitions: DictionaryFieldDefinition[] = [
|
|
|
322
325
|
addLabelKey: 'customers.people.form.dictionary.addSource',
|
|
323
326
|
promptKey: 'customers.people.form.dictionary.promptSource',
|
|
324
327
|
dialogTitleKey: 'customers.people.form.dictionary.dialogTitleSource',
|
|
328
|
+
layout: 'half',
|
|
325
329
|
},
|
|
326
330
|
]
|
|
327
331
|
|
|
@@ -793,17 +797,20 @@ export const createDisplayNameSection = (t: Translator) =>
|
|
|
793
797
|
export const createPersonFormFields = (t: Translator): CrudField[] => {
|
|
794
798
|
const contactSection = createSectionHeadingField('__contactInformationSection', t('customers.people.form.sections.contactInformation'))
|
|
795
799
|
const companySection = createSectionHeadingField('__companyInformationSection', t('customers.people.form.sections.companyInformation'))
|
|
796
|
-
const dictionaryFields: CrudField[] = dictionaryFieldDefinitions.map((definition) => ({
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
800
|
+
const dictionaryFields: CrudField[] = dictionaryFieldDefinitions.map((definition) => ({
|
|
801
|
+
id: definition.id,
|
|
802
|
+
label: t(definition.labelKey),
|
|
803
|
+
type: 'custom',
|
|
804
|
+
layout: definition.layout ?? 'third',
|
|
805
|
+
component: ({ value, setValue }: CrudCustomFieldRenderProps) => (
|
|
806
|
+
<DictionarySelectField
|
|
807
|
+
kind={definition.kind}
|
|
808
|
+
value={typeof value === 'string' ? value : undefined}
|
|
809
|
+
onChange={(next) => setValue(next)}
|
|
806
810
|
labels={buildDictionaryLabels(t, definition)}
|
|
811
|
+
allowInlineCreate
|
|
812
|
+
allowAppearance
|
|
813
|
+
showManage
|
|
807
814
|
/>
|
|
808
815
|
),
|
|
809
816
|
}))
|
|
@@ -812,6 +819,40 @@ const dictionaryFields: CrudField[] = dictionaryFieldDefinitions.map((definition
|
|
|
812
819
|
{ id: 'displayName', label: t('customers.people.form.displayName.label'), type: 'text', required: true },
|
|
813
820
|
{ id: 'firstName', label: t('customers.people.form.firstName'), type: 'text', required: true, layout: 'half' },
|
|
814
821
|
{ id: 'lastName', label: t('customers.people.form.lastName'), type: 'text', required: true, layout: 'half' },
|
|
822
|
+
{
|
|
823
|
+
id: 'jobTitle',
|
|
824
|
+
label: t('customers.people.form.jobTitle', 'Job title'),
|
|
825
|
+
type: 'custom',
|
|
826
|
+
layout: 'half',
|
|
827
|
+
component: ({ value, setValue }: CrudCustomFieldRenderProps) => (
|
|
828
|
+
<DictionarySelectField
|
|
829
|
+
kind="job-titles"
|
|
830
|
+
value={typeof value === 'string' ? value : undefined}
|
|
831
|
+
onChange={(next) => setValue(next)}
|
|
832
|
+
labels={{
|
|
833
|
+
placeholder: t('customers.people.form.jobTitle.placeholder', 'Select a job title'),
|
|
834
|
+
addLabel: t('customers.people.form.dictionary.addJobTitle', 'Add job title'),
|
|
835
|
+
addPrompt: t('customers.people.form.dictionary.promptJobTitle', 'Enter a new job title'),
|
|
836
|
+
dialogTitle: t('customers.people.form.dictionary.dialogTitleJobTitle', 'Add job title'),
|
|
837
|
+
valueLabel: t('customers.people.form.dictionary.valueLabel', 'Value'),
|
|
838
|
+
valuePlaceholder: t('customers.people.form.dictionary.valuePlaceholder', 'Value'),
|
|
839
|
+
labelLabel: t('customers.config.dictionaries.dialog.labelLabel', 'Label'),
|
|
840
|
+
labelPlaceholder: t('customers.people.form.dictionary.labelPlaceholder', 'Display name shown in UI'),
|
|
841
|
+
emptyError: t('customers.people.form.dictionary.errorRequired'),
|
|
842
|
+
cancelLabel: t('customers.people.form.dictionary.cancel'),
|
|
843
|
+
saveLabel: t('customers.people.form.dictionary.save'),
|
|
844
|
+
successCreateLabel: undefined,
|
|
845
|
+
errorLoad: t('customers.people.form.dictionary.errorLoad'),
|
|
846
|
+
errorSave: t('customers.people.form.dictionary.error'),
|
|
847
|
+
loadingLabel: t('customers.people.form.dictionary.loading'),
|
|
848
|
+
manageTitle: t('customers.people.form.dictionary.manage'),
|
|
849
|
+
}}
|
|
850
|
+
allowInlineCreate
|
|
851
|
+
allowAppearance
|
|
852
|
+
showManage
|
|
853
|
+
/>
|
|
854
|
+
),
|
|
855
|
+
},
|
|
815
856
|
contactSection,
|
|
816
857
|
createPrimaryEmailField(t),
|
|
817
858
|
createPrimaryPhoneField(t),
|
|
@@ -924,6 +965,7 @@ export const createPersonFormGroups = (t: Translator): CrudFormGroup[] => [
|
|
|
924
965
|
id: 'details',
|
|
925
966
|
title: t('customers.people.form.groups.details'),
|
|
926
967
|
column: 1,
|
|
968
|
+
component: createDisplayNameSection(t),
|
|
927
969
|
fields: [
|
|
928
970
|
'firstName',
|
|
929
971
|
'lastName',
|
|
@@ -937,7 +979,6 @@ export const createPersonFormGroups = (t: Translator): CrudFormGroup[] => [
|
|
|
937
979
|
'lifecycleStage',
|
|
938
980
|
'source',
|
|
939
981
|
],
|
|
940
|
-
component: createDisplayNameSection(t),
|
|
941
982
|
},
|
|
942
983
|
{
|
|
943
984
|
id: 'addresses',
|
|
@@ -1507,6 +1548,14 @@ export const createCompanyEditGroups = (t: Translator): CrudFormGroup[] => [
|
|
|
1507
1548
|
column: 1,
|
|
1508
1549
|
fields: ['displayName', 'primaryEmail', 'primaryPhone', 'status', 'lifecycleStage', 'source'],
|
|
1509
1550
|
},
|
|
1551
|
+
{
|
|
1552
|
+
id: 'roles',
|
|
1553
|
+
title: t('customers.roles.groupTitle', 'Roles'),
|
|
1554
|
+
column: 1,
|
|
1555
|
+
component: ({ values }: CrudFormGroupComponentProps) => (
|
|
1556
|
+
values.id ? <RolesSection entityType="company" entityId={values.id as string} /> : null
|
|
1557
|
+
),
|
|
1558
|
+
},
|
|
1510
1559
|
{
|
|
1511
1560
|
id: 'profile',
|
|
1512
1561
|
title: t('customers.companies.form.groups.profile'),
|
|
@@ -1527,6 +1576,50 @@ export const createCompanyEditGroups = (t: Translator): CrudFormGroup[] => [
|
|
|
1527
1576
|
},
|
|
1528
1577
|
]
|
|
1529
1578
|
|
|
1579
|
+
/**
|
|
1580
|
+
* Groups for the "Dane firmy" tab layout (Figma SPEC-048 mockup).
|
|
1581
|
+
* All zone-1 groups stay in a single vertical stack so drag-and-drop ordering
|
|
1582
|
+
* applies consistently across every section and persists per page type.
|
|
1583
|
+
*/
|
|
1584
|
+
export const createCompanyDaneFiremyGroups = (t: Translator): CrudFormGroup[] => [
|
|
1585
|
+
{
|
|
1586
|
+
id: 'identity',
|
|
1587
|
+
title: t('customers.companies.form.groups.identity', 'Tożsamość').toUpperCase(),
|
|
1588
|
+
column: 1,
|
|
1589
|
+
fields: ['displayName', 'legalName', 'brandName'],
|
|
1590
|
+
},
|
|
1591
|
+
{
|
|
1592
|
+
id: 'contact',
|
|
1593
|
+
title: t('customers.companies.form.groups.contact', 'Kontakt').toUpperCase(),
|
|
1594
|
+
column: 1,
|
|
1595
|
+
fields: ['primaryEmail', 'primaryPhone', 'domain', 'websiteUrl'],
|
|
1596
|
+
},
|
|
1597
|
+
{
|
|
1598
|
+
id: 'classification',
|
|
1599
|
+
title: t('customers.companies.form.groups.classification', 'Klasyfikacja').toUpperCase(),
|
|
1600
|
+
column: 1,
|
|
1601
|
+
fields: ['status', 'lifecycleStage', 'source'],
|
|
1602
|
+
},
|
|
1603
|
+
{
|
|
1604
|
+
id: 'businessProfile',
|
|
1605
|
+
title: t('customers.companies.form.groups.businessProfile', 'Profil biznesowy').toUpperCase(),
|
|
1606
|
+
column: 1,
|
|
1607
|
+
fields: ['industry', 'sizeBucket', 'annualRevenue'],
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
id: 'notes',
|
|
1611
|
+
title: t('customers.companies.form.groups.notes', 'Notatki'),
|
|
1612
|
+
column: 1,
|
|
1613
|
+
fields: ['description'],
|
|
1614
|
+
},
|
|
1615
|
+
{
|
|
1616
|
+
id: 'customFields',
|
|
1617
|
+
title: t('customers.companies.form.groups.customAttributes', 'Atrybuty niestandardowe'),
|
|
1618
|
+
column: 1,
|
|
1619
|
+
kind: 'customFields',
|
|
1620
|
+
},
|
|
1621
|
+
]
|
|
1622
|
+
|
|
1530
1623
|
export const createPersonEditGroups = (t: Translator): CrudFormGroup[] => [
|
|
1531
1624
|
{
|
|
1532
1625
|
id: 'details',
|
|
@@ -1547,6 +1640,14 @@ export const createPersonEditGroups = (t: Translator): CrudFormGroup[] => [
|
|
|
1547
1640
|
],
|
|
1548
1641
|
component: createDisplayNameSection(t),
|
|
1549
1642
|
},
|
|
1643
|
+
{
|
|
1644
|
+
id: 'roles',
|
|
1645
|
+
title: t('customers.roles.groupTitle', 'Roles'),
|
|
1646
|
+
column: 1,
|
|
1647
|
+
component: ({ values }: CrudFormGroupComponentProps) => (
|
|
1648
|
+
values.id ? <RolesSection entityType="person" entityId={values.id as string} /> : null
|
|
1649
|
+
),
|
|
1650
|
+
},
|
|
1550
1651
|
{
|
|
1551
1652
|
id: 'social',
|
|
1552
1653
|
title: t('customers.people.form.groups.social', 'Social & links'),
|
|
@@ -1567,6 +1668,45 @@ export const createPersonEditGroups = (t: Translator): CrudFormGroup[] => [
|
|
|
1567
1668
|
},
|
|
1568
1669
|
]
|
|
1569
1670
|
|
|
1671
|
+
/**
|
|
1672
|
+
* Groups for the Person v2 "Dane osobowe" Figma layout (SPEC-048 mockup).
|
|
1673
|
+
* All groups in column 1 (Zone 1). Notes handled separately in Zone 2 tabs.
|
|
1674
|
+
*/
|
|
1675
|
+
export const createPersonPersonalDataGroups = (t: Translator): CrudFormGroup[] => [
|
|
1676
|
+
{
|
|
1677
|
+
id: 'personalData',
|
|
1678
|
+
title: t('customers.people.form.groups.personalData', 'Personal data'),
|
|
1679
|
+
column: 1,
|
|
1680
|
+
fields: ['firstName', 'lastName', 'jobTitle', 'primaryEmail', 'primaryPhone'],
|
|
1681
|
+
},
|
|
1682
|
+
{
|
|
1683
|
+
id: 'companyRole',
|
|
1684
|
+
title: t('customers.people.form.groups.companyRole', 'Company & role'),
|
|
1685
|
+
column: 1,
|
|
1686
|
+
fields: ['companyEntityId', 'status', 'lifecycleStage', 'source'],
|
|
1687
|
+
},
|
|
1688
|
+
{
|
|
1689
|
+
id: 'customFields',
|
|
1690
|
+
title: t('customers.people.form.groups.customAttributes', 'Custom attributes'),
|
|
1691
|
+
column: 1,
|
|
1692
|
+
kind: 'customFields',
|
|
1693
|
+
},
|
|
1694
|
+
{
|
|
1695
|
+
id: 'roles',
|
|
1696
|
+
title: t('customers.people.form.groups.roles', 'My roles'),
|
|
1697
|
+
column: 1,
|
|
1698
|
+
component: ({ values }: CrudFormGroupComponentProps) => (
|
|
1699
|
+
values.id ? (
|
|
1700
|
+
<RolesSection
|
|
1701
|
+
entityType="person"
|
|
1702
|
+
entityId={values.id as string}
|
|
1703
|
+
entityName={typeof values.displayName === 'string' ? values.displayName : null}
|
|
1704
|
+
/>
|
|
1705
|
+
) : null
|
|
1706
|
+
),
|
|
1707
|
+
},
|
|
1708
|
+
]
|
|
1709
|
+
|
|
1570
1710
|
// ---------------------------------------------------------------------------
|
|
1571
1711
|
// Edit-mode payload builders
|
|
1572
1712
|
// ---------------------------------------------------------------------------
|
|
@@ -1612,7 +1752,16 @@ export type CompanyPersonSummary = {
|
|
|
1612
1752
|
id: string
|
|
1613
1753
|
displayName: string
|
|
1614
1754
|
primaryEmail?: string | null
|
|
1755
|
+
primaryPhone?: string | null
|
|
1756
|
+
status?: string | null
|
|
1757
|
+
lifecycleStage?: string | null
|
|
1615
1758
|
jobTitle?: string | null
|
|
1759
|
+
department?: string | null
|
|
1760
|
+
createdAt?: string | null
|
|
1761
|
+
organizationId?: string | null
|
|
1762
|
+
source?: string | null
|
|
1763
|
+
temperature?: string | null
|
|
1764
|
+
linkedAt?: string | null
|
|
1616
1765
|
}
|
|
1617
1766
|
|
|
1618
1767
|
export type CompanyOverview = {
|
|
@@ -1631,6 +1780,8 @@ export type CompanyOverview = {
|
|
|
1631
1780
|
nextInteractionRefId?: string | null
|
|
1632
1781
|
nextInteractionIcon?: string | null
|
|
1633
1782
|
nextInteractionColor?: string | null
|
|
1783
|
+
temperature?: string | null
|
|
1784
|
+
renewalQuarter?: string | null
|
|
1634
1785
|
organizationId?: string | null
|
|
1635
1786
|
}
|
|
1636
1787
|
profile: {
|
|
@@ -1651,6 +1802,30 @@ export type CompanyOverview = {
|
|
|
1651
1802
|
deals: DealSummary[]
|
|
1652
1803
|
todos: TodoLinkSummary[]
|
|
1653
1804
|
people: CompanyPersonSummary[]
|
|
1805
|
+
counts?: {
|
|
1806
|
+
comments: number
|
|
1807
|
+
activities: number
|
|
1808
|
+
interactions: number
|
|
1809
|
+
todos: number
|
|
1810
|
+
deals: number
|
|
1811
|
+
people: number
|
|
1812
|
+
addresses: number
|
|
1813
|
+
tags: number
|
|
1814
|
+
}
|
|
1815
|
+
plannedActivitiesPreview?: InteractionSummary[]
|
|
1816
|
+
kpis?: {
|
|
1817
|
+
activeDealsCount: number
|
|
1818
|
+
activeDealsValue: number | null
|
|
1819
|
+
dealCurrency: string | null
|
|
1820
|
+
activityCount: number
|
|
1821
|
+
activityTrend: {
|
|
1822
|
+
value: number
|
|
1823
|
+
direction: 'up' | 'down' | 'unchanged'
|
|
1824
|
+
} | null
|
|
1825
|
+
ltvValue: number | null
|
|
1826
|
+
completedDealsCount: number
|
|
1827
|
+
clientTenureYears: number | null
|
|
1828
|
+
}
|
|
1654
1829
|
interactionMode?: 'canonical' | 'legacy'
|
|
1655
1830
|
viewer?: {
|
|
1656
1831
|
userId: string | null
|
|
@@ -1670,6 +1845,8 @@ export type PersonOverview = {
|
|
|
1670
1845
|
status?: string | null
|
|
1671
1846
|
lifecycleStage?: string | null
|
|
1672
1847
|
source?: string | null
|
|
1848
|
+
temperature?: string | null
|
|
1849
|
+
renewalQuarter?: string | null
|
|
1673
1850
|
nextInteractionAt?: string | null
|
|
1674
1851
|
nextInteractionName?: string | null
|
|
1675
1852
|
nextInteractionRefId?: string | null
|
|
@@ -1697,7 +1874,25 @@ export type PersonOverview = {
|
|
|
1697
1874
|
interactions: InteractionSummary[]
|
|
1698
1875
|
deals: DealSummary[]
|
|
1699
1876
|
todos: TodoLinkSummary[]
|
|
1877
|
+
counts?: {
|
|
1878
|
+
comments: number
|
|
1879
|
+
activities: number
|
|
1880
|
+
interactions: number
|
|
1881
|
+
todos: number
|
|
1882
|
+
deals: number
|
|
1883
|
+
companies: number
|
|
1884
|
+
addresses: number
|
|
1885
|
+
tags: number
|
|
1886
|
+
}
|
|
1887
|
+
plannedActivitiesPreview?: InteractionSummary[]
|
|
1700
1888
|
interactionMode?: 'canonical' | 'legacy'
|
|
1889
|
+
/** Whether this person is the primary contact for any linked company. */
|
|
1890
|
+
isPrimary?: boolean
|
|
1891
|
+
companies?: Array<{
|
|
1892
|
+
id: string
|
|
1893
|
+
displayName: string
|
|
1894
|
+
isPrimary: boolean
|
|
1895
|
+
}>
|
|
1701
1896
|
company?: {
|
|
1702
1897
|
id: string
|
|
1703
1898
|
displayName: string
|