@open-mercato/core 0.6.3-develop.3635.1.e4a05c16e8 → 0.6.3-develop.3653.1.b8558737ae

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.
Files changed (160) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities/customer_settings/index.js +2 -0
  3. package/dist/generated/entities/customer_settings/index.js.map +2 -2
  4. package/dist/generated/entity-fields-registry.js +1 -0
  5. package/dist/generated/entity-fields-registry.js.map +2 -2
  6. package/dist/modules/customers/api/deals/aggregate/route.js +332 -0
  7. package/dist/modules/customers/api/deals/aggregate/route.js.map +7 -0
  8. package/dist/modules/customers/api/deals/bulk-update-owner/route.js +188 -0
  9. package/dist/modules/customers/api/deals/bulk-update-owner/route.js.map +7 -0
  10. package/dist/modules/customers/api/deals/bulk-update-stage/route.js +188 -0
  11. package/dist/modules/customers/api/deals/bulk-update-stage/route.js.map +7 -0
  12. package/dist/modules/customers/api/deals/route.js +255 -122
  13. package/dist/modules/customers/api/deals/route.js.map +2 -2
  14. package/dist/modules/customers/api/settings/stuck-threshold/route.js +169 -0
  15. package/dist/modules/customers/api/settings/stuck-threshold/route.js.map +7 -0
  16. package/dist/modules/customers/backend/config/customers/deals/page.js +181 -0
  17. package/dist/modules/customers/backend/config/customers/deals/page.js.map +7 -0
  18. package/dist/modules/customers/backend/config/customers/deals/page.meta.js +38 -0
  19. package/dist/modules/customers/backend/config/customers/deals/page.meta.js.map +7 -0
  20. package/dist/modules/customers/backend/customers/deals/create/page.js +17 -6
  21. package/dist/modules/customers/backend/customers/deals/create/page.js.map +2 -2
  22. package/dist/modules/customers/backend/customers/deals/page.js +2 -0
  23. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  24. package/dist/modules/customers/backend/customers/deals/pipeline/components/ActivityComposerDialog.js +217 -0
  25. package/dist/modules/customers/backend/customers/deals/pipeline/components/ActivityComposerDialog.js.map +7 -0
  26. package/dist/modules/customers/backend/customers/deals/pipeline/components/AddStageDialog.js +335 -0
  27. package/dist/modules/customers/backend/customers/deals/pipeline/components/AddStageDialog.js.map +7 -0
  28. package/dist/modules/customers/backend/customers/deals/pipeline/components/AddStageLane.js +29 -0
  29. package/dist/modules/customers/backend/customers/deals/pipeline/components/AddStageLane.js.map +7 -0
  30. package/dist/modules/customers/backend/customers/deals/pipeline/components/BulkActionsBar.js +160 -0
  31. package/dist/modules/customers/backend/customers/deals/pipeline/components/BulkActionsBar.js.map +7 -0
  32. package/dist/modules/customers/backend/customers/deals/pipeline/components/ChangeOwnerDialog.js +157 -0
  33. package/dist/modules/customers/backend/customers/deals/pipeline/components/ChangeOwnerDialog.js.map +7 -0
  34. package/dist/modules/customers/backend/customers/deals/pipeline/components/ChangeStageDialog.js +114 -0
  35. package/dist/modules/customers/backend/customers/deals/pipeline/components/ChangeStageDialog.js.map +7 -0
  36. package/dist/modules/customers/backend/customers/deals/pipeline/components/ChipButton.js +36 -0
  37. package/dist/modules/customers/backend/customers/deals/pipeline/components/ChipButton.js.map +7 -0
  38. package/dist/modules/customers/backend/customers/deals/pipeline/components/CloseDateFilterPopover.js +199 -0
  39. package/dist/modules/customers/backend/customers/deals/pipeline/components/CloseDateFilterPopover.js.map +7 -0
  40. package/dist/modules/customers/backend/customers/deals/pipeline/components/CurrencyBreakdownTable.js +71 -0
  41. package/dist/modules/customers/backend/customers/deals/pipeline/components/CurrencyBreakdownTable.js.map +7 -0
  42. package/dist/modules/customers/backend/customers/deals/pipeline/components/CurrencyFilterPopover.js +233 -0
  43. package/dist/modules/customers/backend/customers/deals/pipeline/components/CurrencyFilterPopover.js.map +7 -0
  44. package/dist/modules/customers/backend/customers/deals/pipeline/components/CustomizeViewDialog.js +126 -0
  45. package/dist/modules/customers/backend/customers/deals/pipeline/components/CustomizeViewDialog.js.map +7 -0
  46. package/dist/modules/customers/backend/customers/deals/pipeline/components/DashedTileButton.js +31 -0
  47. package/dist/modules/customers/backend/customers/deals/pipeline/components/DashedTileButton.js.map +7 -0
  48. package/dist/modules/customers/backend/customers/deals/pipeline/components/DealCard.js +389 -0
  49. package/dist/modules/customers/backend/customers/deals/pipeline/components/DealCard.js.map +7 -0
  50. package/dist/modules/customers/backend/customers/deals/pipeline/components/DealCardMenu.js +181 -0
  51. package/dist/modules/customers/backend/customers/deals/pipeline/components/DealCardMenu.js.map +7 -0
  52. package/dist/modules/customers/backend/customers/deals/pipeline/components/EntityFilterPopover.js +199 -0
  53. package/dist/modules/customers/backend/customers/deals/pipeline/components/EntityFilterPopover.js.map +7 -0
  54. package/dist/modules/customers/backend/customers/deals/pipeline/components/FilterBarRow.js +44 -0
  55. package/dist/modules/customers/backend/customers/deals/pipeline/components/FilterBarRow.js.map +7 -0
  56. package/dist/modules/customers/backend/customers/deals/pipeline/components/FilterPopoverShell.js +70 -0
  57. package/dist/modules/customers/backend/customers/deals/pipeline/components/FilterPopoverShell.js.map +7 -0
  58. package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +278 -0
  59. package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +7 -0
  60. package/dist/modules/customers/backend/customers/deals/pipeline/components/LaneCurrencyBreakdown.js +135 -0
  61. package/dist/modules/customers/backend/customers/deals/pipeline/components/LaneCurrencyBreakdown.js.map +7 -0
  62. package/dist/modules/customers/backend/customers/deals/pipeline/components/LaneResizeHandle.js +83 -0
  63. package/dist/modules/customers/backend/customers/deals/pipeline/components/LaneResizeHandle.js.map +7 -0
  64. package/dist/modules/customers/backend/customers/deals/pipeline/components/PipelineFilterPopover.js +155 -0
  65. package/dist/modules/customers/backend/customers/deals/pipeline/components/PipelineFilterPopover.js.map +7 -0
  66. package/dist/modules/customers/backend/customers/deals/pipeline/components/QuickDealDialog.js +318 -0
  67. package/dist/modules/customers/backend/customers/deals/pipeline/components/QuickDealDialog.js.map +7 -0
  68. package/dist/modules/customers/backend/customers/deals/pipeline/components/SortByPopover.js +138 -0
  69. package/dist/modules/customers/backend/customers/deals/pipeline/components/SortByPopover.js.map +7 -0
  70. package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +126 -0
  71. package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +7 -0
  72. package/dist/modules/customers/backend/customers/deals/pipeline/components/ViewTabsRow.js +71 -0
  73. package/dist/modules/customers/backend/customers/deals/pipeline/components/ViewTabsRow.js.map +7 -0
  74. package/dist/modules/customers/backend/customers/deals/pipeline/components/constants.js +7 -0
  75. package/dist/modules/customers/backend/customers/deals/pipeline/components/constants.js.map +7 -0
  76. package/dist/modules/customers/backend/customers/deals/pipeline/page.js +2330 -415
  77. package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +3 -3
  78. package/dist/modules/customers/commands/deals.js +6 -0
  79. package/dist/modules/customers/commands/deals.js.map +2 -2
  80. package/dist/modules/customers/commands/pipeline-stages.js +48 -13
  81. package/dist/modules/customers/commands/pipeline-stages.js.map +3 -3
  82. package/dist/modules/customers/commands/settings.js +45 -5
  83. package/dist/modules/customers/commands/settings.js.map +2 -2
  84. package/dist/modules/customers/data/enrichers.js +130 -1
  85. package/dist/modules/customers/data/enrichers.js.map +2 -2
  86. package/dist/modules/customers/data/entities.js +4 -0
  87. package/dist/modules/customers/data/entities.js.map +2 -2
  88. package/dist/modules/customers/data/validators.js +29 -2
  89. package/dist/modules/customers/data/validators.js.map +2 -2
  90. package/dist/modules/customers/lib/bulkDeals.js +150 -0
  91. package/dist/modules/customers/lib/bulkDeals.js.map +7 -0
  92. package/dist/modules/customers/lib/kysely.js +12 -0
  93. package/dist/modules/customers/lib/kysely.js.map +7 -0
  94. package/dist/modules/customers/lib/stuckDeals.js +32 -0
  95. package/dist/modules/customers/lib/stuckDeals.js.map +7 -0
  96. package/dist/modules/customers/migrations/Migration20260513203311_customers.js +13 -0
  97. package/dist/modules/customers/migrations/Migration20260513203311_customers.js.map +7 -0
  98. package/dist/modules/customers/migrations/Migration20260519120000_pipeline_stage_color_tones.js +52 -0
  99. package/dist/modules/customers/migrations/Migration20260519120000_pipeline_stage_color_tones.js.map +7 -0
  100. package/dist/modules/customers/workers/deals-bulk-update-owner.js +41 -0
  101. package/dist/modules/customers/workers/deals-bulk-update-owner.js.map +7 -0
  102. package/dist/modules/customers/workers/deals-bulk-update-stage.js +41 -0
  103. package/dist/modules/customers/workers/deals-bulk-update-stage.js.map +7 -0
  104. package/generated/entities/customer_settings/index.ts +1 -0
  105. package/generated/entity-fields-registry.ts +1 -0
  106. package/package.json +7 -7
  107. package/src/modules/customers/api/deals/aggregate/route.ts +438 -0
  108. package/src/modules/customers/api/deals/bulk-update-owner/route.ts +216 -0
  109. package/src/modules/customers/api/deals/bulk-update-stage/route.ts +228 -0
  110. package/src/modules/customers/api/deals/route.ts +330 -135
  111. package/src/modules/customers/api/settings/stuck-threshold/route.ts +195 -0
  112. package/src/modules/customers/backend/config/customers/deals/page.meta.ts +36 -0
  113. package/src/modules/customers/backend/config/customers/deals/page.tsx +205 -0
  114. package/src/modules/customers/backend/customers/deals/create/page.tsx +25 -6
  115. package/src/modules/customers/backend/customers/deals/page.tsx +2 -0
  116. package/src/modules/customers/backend/customers/deals/pipeline/components/ActivityComposerDialog.tsx +277 -0
  117. package/src/modules/customers/backend/customers/deals/pipeline/components/AddStageDialog.tsx +425 -0
  118. package/src/modules/customers/backend/customers/deals/pipeline/components/AddStageLane.tsx +31 -0
  119. package/src/modules/customers/backend/customers/deals/pipeline/components/BulkActionsBar.tsx +171 -0
  120. package/src/modules/customers/backend/customers/deals/pipeline/components/ChangeOwnerDialog.tsx +196 -0
  121. package/src/modules/customers/backend/customers/deals/pipeline/components/ChangeStageDialog.tsx +138 -0
  122. package/src/modules/customers/backend/customers/deals/pipeline/components/ChipButton.tsx +47 -0
  123. package/src/modules/customers/backend/customers/deals/pipeline/components/CloseDateFilterPopover.tsx +232 -0
  124. package/src/modules/customers/backend/customers/deals/pipeline/components/CurrencyBreakdownTable.tsx +110 -0
  125. package/src/modules/customers/backend/customers/deals/pipeline/components/CurrencyFilterPopover.tsx +310 -0
  126. package/src/modules/customers/backend/customers/deals/pipeline/components/CustomizeViewDialog.tsx +169 -0
  127. package/src/modules/customers/backend/customers/deals/pipeline/components/DashedTileButton.tsx +54 -0
  128. package/src/modules/customers/backend/customers/deals/pipeline/components/DealCard.tsx +562 -0
  129. package/src/modules/customers/backend/customers/deals/pipeline/components/DealCardMenu.tsx +214 -0
  130. package/src/modules/customers/backend/customers/deals/pipeline/components/EntityFilterPopover.tsx +257 -0
  131. package/src/modules/customers/backend/customers/deals/pipeline/components/FilterBarRow.tsx +62 -0
  132. package/src/modules/customers/backend/customers/deals/pipeline/components/FilterPopoverShell.tsx +101 -0
  133. package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +378 -0
  134. package/src/modules/customers/backend/customers/deals/pipeline/components/LaneCurrencyBreakdown.tsx +192 -0
  135. package/src/modules/customers/backend/customers/deals/pipeline/components/LaneResizeHandle.tsx +107 -0
  136. package/src/modules/customers/backend/customers/deals/pipeline/components/PipelineFilterPopover.tsx +196 -0
  137. package/src/modules/customers/backend/customers/deals/pipeline/components/QuickDealDialog.tsx +408 -0
  138. package/src/modules/customers/backend/customers/deals/pipeline/components/SortByPopover.tsx +164 -0
  139. package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +171 -0
  140. package/src/modules/customers/backend/customers/deals/pipeline/components/ViewTabsRow.tsx +84 -0
  141. package/src/modules/customers/backend/customers/deals/pipeline/components/constants.ts +16 -0
  142. package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +2841 -550
  143. package/src/modules/customers/commands/deals.ts +19 -0
  144. package/src/modules/customers/commands/pipeline-stages.ts +68 -13
  145. package/src/modules/customers/commands/settings.ts +64 -5
  146. package/src/modules/customers/data/enrichers.ts +209 -2
  147. package/src/modules/customers/data/entities.ts +4 -1
  148. package/src/modules/customers/data/validators.ts +36 -2
  149. package/src/modules/customers/i18n/de.json +244 -0
  150. package/src/modules/customers/i18n/en.json +244 -0
  151. package/src/modules/customers/i18n/es.json +244 -0
  152. package/src/modules/customers/i18n/pl.json +244 -0
  153. package/src/modules/customers/lib/bulkDeals.ts +231 -0
  154. package/src/modules/customers/lib/kysely.ts +60 -0
  155. package/src/modules/customers/lib/stuckDeals.ts +88 -0
  156. package/src/modules/customers/migrations/.snapshot-open-mercato.json +16 -0
  157. package/src/modules/customers/migrations/Migration20260513203311_customers.ts +13 -0
  158. package/src/modules/customers/migrations/Migration20260519120000_pipeline_stage_color_tones.ts +71 -0
  159. package/src/modules/customers/workers/deals-bulk-update-owner.ts +46 -0
  160. package/src/modules/customers/workers/deals-bulk-update-stage.ts +46 -0
@@ -864,6 +864,248 @@
864
864
  "customers.deals.form.people.searchPlaceholder": "Personen suchen…",
865
865
  "customers.deals.form.pipeline.placeholder": "Pipeline-Phase auswählen",
866
866
  "customers.deals.form.status.placeholder": "Deal-Status auswählen",
867
+ "customers.deals.kanban.activityComposer.body": "Notes",
868
+ "customers.deals.kanban.activityComposer.body.placeholder": "What happened? Markdown supported.",
869
+ "customers.deals.kanban.activityComposer.call": "Log a call",
870
+ "customers.deals.kanban.activityComposer.context": "Deal: {title}",
871
+ "customers.deals.kanban.activityComposer.email": "Send email",
872
+ "customers.deals.kanban.activityComposer.error": "Failed to save activity.",
873
+ "customers.deals.kanban.activityComposer.noEntity": "Link a company to this deal before logging activities here.",
874
+ "customers.deals.kanban.activityComposer.note": "Add a note",
875
+ "customers.deals.kanban.activityComposer.phone": "Phone number",
876
+ "customers.deals.kanban.activityComposer.required": "Add a title or body before saving.",
877
+ "customers.deals.kanban.activityComposer.required.email": "Füge einen Betreff oder Inhalt hinzu, bevor du speicherst.",
878
+ "customers.deals.kanban.activityComposer.required.titleOrBody": "Füge einen Titel oder Inhalt hinzu, bevor du speicherst.",
879
+ "customers.deals.kanban.activityComposer.submit": "Save activity",
880
+ "customers.deals.kanban.activityComposer.success": "Activity saved.",
881
+ "customers.deals.kanban.activityComposer.title": "Subject",
882
+ "customers.deals.kanban.activityComposer.title.placeholder": "Short summary (optional)",
883
+ "customers.deals.kanban.addStage.color": "Color",
884
+ "customers.deals.kanban.addStage.color.amber": "Amber",
885
+ "customers.deals.kanban.addStage.color.blue": "Blue",
886
+ "customers.deals.kanban.addStage.color.brand": "Violett",
887
+ "customers.deals.kanban.addStage.color.error": "Rot",
888
+ "customers.deals.kanban.addStage.color.gray": "Gray",
889
+ "customers.deals.kanban.addStage.color.green": "Green",
890
+ "customers.deals.kanban.addStage.color.info": "Blau",
891
+ "customers.deals.kanban.addStage.color.neutral": "Grau",
892
+ "customers.deals.kanban.addStage.color.none": "No color",
893
+ "customers.deals.kanban.addStage.color.pink": "Pink",
894
+ "customers.deals.kanban.addStage.color.red": "Red",
895
+ "customers.deals.kanban.addStage.color.success": "Grün",
896
+ "customers.deals.kanban.addStage.color.violet": "Violet",
897
+ "customers.deals.kanban.addStage.color.warning": "Bernstein",
898
+ "customers.deals.kanban.addStage.context": "Pipeline: {pipeline}",
899
+ "customers.deals.kanban.addStage.error": "Failed to add stage.",
900
+ "customers.deals.kanban.addStage.label": "Stage name",
901
+ "customers.deals.kanban.addStage.label.placeholder": "e.g. Discovery",
902
+ "customers.deals.kanban.addStage.label.required": "Stage name is required.",
903
+ "customers.deals.kanban.addStage.position": "Position in pipeline",
904
+ "customers.deals.kanban.addStage.position.after": "After {label}",
905
+ "customers.deals.kanban.addStage.position.end": "At the end (default)",
906
+ "customers.deals.kanban.addStage.position.help": "Choose where the new stage appears on the kanban. Existing stages after the chosen position shift one step to the right.",
907
+ "customers.deals.kanban.addStage.position.start": "At the start",
908
+ "customers.deals.kanban.addStage.submit": "Add stage",
909
+ "customers.deals.kanban.addStage.success": "Stage added.",
910
+ "customers.deals.kanban.addStage.title": "New stage",
911
+ "customers.deals.kanban.board.scrollNext": "Scroll to next stage",
912
+ "customers.deals.kanban.board.scrollPrev": "Scroll to previous stage",
913
+ "customers.deals.kanban.boardSummary.breakdownTrigger": "Breakdown",
914
+ "customers.deals.kanban.boardSummary.count": "{count} deals",
915
+ "customers.deals.kanban.boardSummary.headingLabel": "PIPELINE",
916
+ "customers.deals.kanban.boardSummary.partial": "partial",
917
+ "customers.deals.kanban.boardSummary.partialHint": "Missing FX rates for {currencies} — excluded from total",
918
+ "customers.deals.kanban.breadcrumb.dashboard": "Dashboard",
919
+ "customers.deals.kanban.breadcrumb.deals": "Deals",
920
+ "customers.deals.kanban.bulk.aria.bar": "Bulk actions",
921
+ "customers.deals.kanban.bulk.aria.clear": "Clear selection",
922
+ "customers.deals.kanban.bulk.changeOwner": "Change owner",
923
+ "customers.deals.kanban.bulk.changeOwner.confirm": "Reassign {count} deals",
924
+ "customers.deals.kanban.bulk.changeOwner.empty": "No staff members found.",
925
+ "customers.deals.kanban.bulk.changeOwner.error": "Failed to start bulk owner update.",
926
+ "customers.deals.kanban.bulk.changeOwner.helper": "Pick a staff member who will own all selected deals.",
927
+ "customers.deals.kanban.bulk.changeOwner.progress.description": "{count} deals queued for owner reassignment",
928
+ "customers.deals.kanban.bulk.changeOwner.progress.name": "Reassign selected deals to a new owner",
929
+ "customers.deals.kanban.bulk.changeOwner.queued": "Bulk owner update started ({count} deals).",
930
+ "customers.deals.kanban.bulk.changeOwner.search": "Search by name or email…",
931
+ "customers.deals.kanban.bulk.changeOwner.title": "Change owner for {count} deals",
932
+ "customers.deals.kanban.bulk.changeStage": "Change stage",
933
+ "customers.deals.kanban.bulk.changeStage.confirm": "Move {count} deals",
934
+ "customers.deals.kanban.bulk.changeStage.context": "Pipeline: {pipeline}",
935
+ "customers.deals.kanban.bulk.changeStage.error": "Failed to start bulk stage update.",
936
+ "customers.deals.kanban.bulk.changeStage.progress.description": "{count} deals queued for stage update",
937
+ "customers.deals.kanban.bulk.changeStage.progress.name": "Move selected deals to a new stage",
938
+ "customers.deals.kanban.bulk.changeStage.queued": "Bulk stage update started ({count} deals).",
939
+ "customers.deals.kanban.bulk.changeStage.title": "Change stage for {count} deals",
940
+ "customers.deals.kanban.bulk.delete": "Delete",
941
+ "customers.deals.kanban.bulk.delete.failedGroup": "{count} deals could not be deleted: {message}",
942
+ "customers.deals.kanban.bulk.delete.progress.description": "{count} deals queued for deletion",
943
+ "customers.deals.kanban.bulk.delete.progress.name": "Delete selected deals",
944
+ "customers.deals.kanban.bulk.delete.success": "{count} deals deleted.",
945
+ "customers.deals.kanban.bulk.delete.text": "This action cannot be undone.",
946
+ "customers.deals.kanban.bulk.delete.title": "Delete {count} deals?",
947
+ "customers.deals.kanban.bulk.dragOverlayBadge": "{count} more selected",
948
+ "customers.deals.kanban.bulk.exportCsv": "Export CSV",
949
+ "customers.deals.kanban.bulk.selectedCount": "selected",
950
+ "customers.deals.kanban.bulk.totalValue": "Total {value}",
951
+ "customers.deals.kanban.card.action.call": "Call",
952
+ "customers.deals.kanban.card.action.disabledNoCompany": "Link a company to this deal before logging activities.",
953
+ "customers.deals.kanban.card.action.email": "Email",
954
+ "customers.deals.kanban.card.action.note": "Note",
955
+ "customers.deals.kanban.card.aria": "Deal: {title}",
956
+ "customers.deals.kanban.card.aria.menu": "Deal actions",
957
+ "customers.deals.kanban.card.aria.moreCompanies": "{count} more companies",
958
+ "customers.deals.kanban.card.aria.openActivities": "{count} open activities",
959
+ "customers.deals.kanban.card.aria.probability": "Wahrscheinlichkeit: {value}",
960
+ "customers.deals.kanban.card.aria.roledescription": "Deal-Karte",
961
+ "customers.deals.kanban.card.aria.select": "Select deal",
962
+ "customers.deals.kanban.card.daysInStage": "in {days}d",
963
+ "customers.deals.kanban.card.noValue": "No value",
964
+ "customers.deals.kanban.card.overdueLabel": "Overdue",
965
+ "customers.deals.kanban.card.statusOverdue": "OVERDUE",
966
+ "customers.deals.kanban.card.statusStuck": "STUCK",
967
+ "customers.deals.kanban.comingSoon": "{feature} arrives in the next iteration.",
968
+ "customers.deals.kanban.cta.customize": "Customize view",
969
+ "customers.deals.kanban.cta.newDeal": "New deal",
970
+ "customers.deals.kanban.cta.newStage": "New stage",
971
+ "customers.deals.kanban.cta.quickDeal": "Quick deal",
972
+ "customers.deals.kanban.currencyBreakdown.basePill": "BASE",
973
+ "customers.deals.kanban.currencyBreakdown.colCurrency": "Currency",
974
+ "customers.deals.kanban.currencyBreakdown.colDeals": "Deals",
975
+ "customers.deals.kanban.currencyBreakdown.colNativeTotal": "Native total",
976
+ "customers.deals.kanban.currencyBreakdown.footerCredit": "NBP mid rate · {date}",
977
+ "customers.deals.kanban.currencyBreakdown.headingCount": "({count} deals)",
978
+ "customers.deals.kanban.currencyBreakdown.title": "Lane breakdown",
979
+ "customers.deals.kanban.currencyFilter.allCurrencies": "All currencies",
980
+ "customers.deals.kanban.currencyFilter.apply": "Apply filter",
981
+ "customers.deals.kanban.currencyFilter.chipLabel": "Currency",
982
+ "customers.deals.kanban.currencyFilter.footerCredit": "NBP mid conversion rate · {date}",
983
+ "customers.deals.kanban.currencyFilter.subtitle": "{label} · {count} deals · {total} {currency}",
984
+ "customers.deals.kanban.currencyFilter.title": "Filter kanban by currency",
985
+ "customers.deals.kanban.customize.actions": "Actions",
986
+ "customers.deals.kanban.customize.configCols": "Configure card fields",
987
+ "customers.deals.kanban.customize.configCols.help": "Show / hide / reorder",
988
+ "customers.deals.kanban.customize.manageStages": "Manage pipeline stages",
989
+ "customers.deals.kanban.customize.manageStages.help": "Edit names, colors, required fields",
990
+ "customers.deals.kanban.customize.reset": "Reset to default",
991
+ "customers.deals.kanban.customize.resetDefault": "Reset to default",
992
+ "customers.deals.kanban.customize.resetDefault.help": "Clear filters and restore columns",
993
+ "customers.deals.kanban.customize.resetWidths": "Reset column widths",
994
+ "customers.deals.kanban.customize.resetWidths.helpCount": "Restore the default width on {count} resized column(s)",
995
+ "customers.deals.kanban.customize.resetWidths.helpEmpty": "No columns have been resized yet",
996
+ "customers.deals.kanban.customize.title": "Customize view",
997
+ "customers.deals.kanban.filter.add": "+ More",
998
+ "customers.deals.kanban.filter.all": "All",
999
+ "customers.deals.kanban.filter.allCount": "All ({count})",
1000
+ "customers.deals.kanban.filter.any": "Any",
1001
+ "customers.deals.kanban.filter.apply": "Apply",
1002
+ "customers.deals.kanban.filter.aria.chip": "Filter by {label}",
1003
+ "customers.deals.kanban.filter.cancel": "Cancel",
1004
+ "customers.deals.kanban.filter.clear": "Clear",
1005
+ "customers.deals.kanban.filter.close": "Close",
1006
+ "customers.deals.kanban.filter.close.title": "Filter · Expected close",
1007
+ "customers.deals.kanban.filter.companies": "Companies",
1008
+ "customers.deals.kanban.filter.from": "From {date}",
1009
+ "customers.deals.kanban.filter.label": "Filter",
1010
+ "customers.deals.kanban.filter.more": "More filters",
1011
+ "customers.deals.kanban.filter.multipleSelected": "{count} selected",
1012
+ "customers.deals.kanban.filter.noResults": "No matches",
1013
+ "customers.deals.kanban.filter.owner": "Owner",
1014
+ "customers.deals.kanban.filter.people": "People",
1015
+ "customers.deals.kanban.filter.pipeline": "Pipeline",
1016
+ "customers.deals.kanban.filter.pipeline.all": "All pipelines",
1017
+ "customers.deals.kanban.filter.pipeline.allHelper": "{count} pipelines",
1018
+ "customers.deals.kanban.filter.pipeline.selectedNone": "No pipeline filter",
1019
+ "customers.deals.kanban.filter.pipeline.selectedOne": "1 selected · {name}",
1020
+ "customers.deals.kanban.filter.pipeline.title": "Filter · Pipeline",
1021
+ "customers.deals.kanban.filter.preset.next30": "Next 30 days",
1022
+ "customers.deals.kanban.filter.preset.next90": "Next 90 days",
1023
+ "customers.deals.kanban.filter.preset.overdue": "Overdue",
1024
+ "customers.deals.kanban.filter.preset.thisMonth": "This month",
1025
+ "customers.deals.kanban.filter.preset.thisQuarter": "This quarter",
1026
+ "customers.deals.kanban.filter.searchPlaceholder": "Search…",
1027
+ "customers.deals.kanban.filter.selected": "selected",
1028
+ "customers.deals.kanban.filter.status": "Status",
1029
+ "customers.deals.kanban.filter.status.lost": "Lost",
1030
+ "customers.deals.kanban.filter.status.open": "Open",
1031
+ "customers.deals.kanban.filter.status.title": "Filter · Status",
1032
+ "customers.deals.kanban.filter.status.won": "Won",
1033
+ "customers.deals.kanban.filter.title": "Filter · {label}",
1034
+ "customers.deals.kanban.filter.to": "To",
1035
+ "customers.deals.kanban.filter.until": "Until {date}",
1036
+ "customers.deals.kanban.footer.count": "Showing {visible} of {total} deals in {pipeline} pipeline",
1037
+ "customers.deals.kanban.helper.dragHint": "Drag cards between lanes to update stage",
1038
+ "customers.deals.kanban.lane.aria.loadMore": "Load more deals in {stage}",
1039
+ "customers.deals.kanban.lane.aria.partialCount": "Showing {visible} of {total}",
1040
+ "customers.deals.kanban.lane.aria.quickAdd": "Quickly add a deal to {stage}",
1041
+ "customers.deals.kanban.lane.currencyBreakdown.count": "({count})",
1042
+ "customers.deals.kanban.lane.currencyBreakdown.missingRate": "No FX rate to {base} — excluded from the converted total",
1043
+ "customers.deals.kanban.lane.currencyBreakdown.missingRatesHint": "Missing FX rates for {currencies} — excluded from total. Configure exchange rates to see the full converted value.",
1044
+ "customers.deals.kanban.lane.currencyBreakdown.partialTotal": "Total (partial)",
1045
+ "customers.deals.kanban.lane.currencyBreakdown.title": "Per-currency breakdown",
1046
+ "customers.deals.kanban.lane.currencyBreakdown.total": "Total",
1047
+ "customers.deals.kanban.lane.currencyBreakdown.trigger": "Show per-currency breakdown ({count} currencies)",
1048
+ "customers.deals.kanban.lane.empty": "No deals in this stage yet.",
1049
+ "customers.deals.kanban.lane.loadMore": "Show more ({remaining})",
1050
+ "customers.deals.kanban.lane.loadingMore": "Loading…",
1051
+ "customers.deals.kanban.lane.resizeHandle": "Drag to resize column. Double-click to reset width.",
1052
+ "customers.deals.kanban.menu.delete": "Delete",
1053
+ "customers.deals.kanban.menu.delete.confirmText": "This action cannot be undone.",
1054
+ "customers.deals.kanban.menu.delete.confirmTitle": "Delete deal “{title}”?",
1055
+ "customers.deals.kanban.menu.delete.error": "Failed to delete deal.",
1056
+ "customers.deals.kanban.menu.delete.success": "Deal deleted.",
1057
+ "customers.deals.kanban.menu.duplicate": "Duplicate",
1058
+ "customers.deals.kanban.menu.duplicate.error": "Failed to duplicate deal.",
1059
+ "customers.deals.kanban.menu.duplicate.success": "Deal duplicated.",
1060
+ "customers.deals.kanban.menu.duplicate.titleSuffix": "{title} (copy)",
1061
+ "customers.deals.kanban.menu.edit": "Edit",
1062
+ "customers.deals.kanban.menu.error.status": "Failed to update deal status.",
1063
+ "customers.deals.kanban.menu.markLost": "Mark as Lost",
1064
+ "customers.deals.kanban.menu.markLost.success": "Deal marked as lost.",
1065
+ "customers.deals.kanban.menu.markWon": "Mark as Won",
1066
+ "customers.deals.kanban.menu.markWon.success": "Deal marked as won.",
1067
+ "customers.deals.kanban.menu.moveStage": "Move stage…",
1068
+ "customers.deals.kanban.menu.open": "Open deal",
1069
+ "customers.deals.kanban.pageTitle": "Deals",
1070
+ "customers.deals.kanban.quickDeal.cancel": "Cancel",
1071
+ "customers.deals.kanban.quickDeal.company": "Company",
1072
+ "customers.deals.kanban.quickDeal.companyPh": "Pick a company or add new…",
1073
+ "customers.deals.kanban.quickDeal.context": "Pipeline: {pipeline} · Stage: {stage}",
1074
+ "customers.deals.kanban.quickDeal.currency": "Currency",
1075
+ "customers.deals.kanban.quickDeal.description": "Description",
1076
+ "customers.deals.kanban.quickDeal.description.placeholder": "Short context, decision makers or next steps. Markdown supported.",
1077
+ "customers.deals.kanban.quickDeal.expectedClose": "Expected close",
1078
+ "customers.deals.kanban.quickDeal.more": "More details (probability, close date, description)",
1079
+ "customers.deals.kanban.quickDeal.owner": "Owner",
1080
+ "customers.deals.kanban.quickDeal.probability": "Probability",
1081
+ "customers.deals.kanban.quickDeal.status": "Status",
1082
+ "customers.deals.kanban.quickDeal.status.in_progress": "In Bearbeitung",
1083
+ "customers.deals.kanban.quickDeal.status.loose": "Stagniert",
1084
+ "customers.deals.kanban.quickDeal.status.open": "Offen",
1085
+ "customers.deals.kanban.quickDeal.status.win": "Gewonnen",
1086
+ "customers.deals.kanban.quickDeal.submit": "Add deal",
1087
+ "customers.deals.kanban.quickDeal.success": "Deal added to {stage}.",
1088
+ "customers.deals.kanban.quickDeal.title": "Quick deal",
1089
+ "customers.deals.kanban.quickDeal.title.label": "Deal title",
1090
+ "customers.deals.kanban.quickDeal.title.placeholder": "e.g. Q3 Expansion — Lighting Package",
1091
+ "customers.deals.kanban.quickDeal.title.required": "Title is required.",
1092
+ "customers.deals.kanban.quickDeal.value": "Value",
1093
+ "customers.deals.kanban.search.placeholder": "Search deals…",
1094
+ "customers.deals.kanban.sort.default": "Default",
1095
+ "customers.deals.kanban.sort.defaultHint": "Default: {label}",
1096
+ "customers.deals.kanban.sort.label": "Sort",
1097
+ "customers.deals.kanban.sort.option.closeSoonest": "Close date (soonest)",
1098
+ "customers.deals.kanban.sort.option.createdNewest": "Created (newest)",
1099
+ "customers.deals.kanban.sort.option.ownerAsc": "Owner (A → Z)",
1100
+ "customers.deals.kanban.sort.option.probabilityHigh": "Probability (high to low)",
1101
+ "customers.deals.kanban.sort.option.updatedNewest": "Updated (newest)",
1102
+ "customers.deals.kanban.sort.option.updatedOldest": "Updated (oldest)",
1103
+ "customers.deals.kanban.sort.option.valueHigh": "Value (high to low)",
1104
+ "customers.deals.kanban.sort.option.valueLow": "Value (low to high)",
1105
+ "customers.deals.kanban.sort.title": "Sort by",
1106
+ "customers.deals.kanban.view.kanban": "Kanban",
1107
+ "customers.deals.kanban.view.list": "List",
1108
+ "customers.deals.kanban.view.tablistLabel": "Deals views",
867
1109
  "customers.deals.list.actions.delete": "Löschen",
868
1110
  "customers.deals.list.actions.deleting": "Wird gelöscht…",
869
1111
  "customers.deals.list.actions.edit": "Bearbeiten",
@@ -944,6 +1186,7 @@
944
1186
  "customers.errors.assign_failed": "Tag konnte nicht zugewiesen werden",
945
1187
  "customers.errors.assignable_staff_load_failed": "Verfügbare Mitarbeitende konnten nicht geladen werden",
946
1188
  "customers.errors.authentication_required": "Authentifizierung erforderlich",
1189
+ "customers.errors.bulk_enqueue_failed": "Massenauftrag konnte nicht in die Warteschlange gestellt werden",
947
1190
  "customers.errors.comment_required": "Notiz-ID ist erforderlich",
948
1191
  "customers.errors.company_not_found": "Unternehmen nicht gefunden",
949
1192
  "customers.errors.company_people_load_failed": "Verknüpfte Personen konnten nicht geladen werden",
@@ -965,6 +1208,7 @@
965
1208
  "customers.errors.internal": "Interner Serverfehler",
966
1209
  "customers.errors.internalError": "Interner Serverfehler",
967
1210
  "customers.errors.invalid_date_time": "Ungültiges Datum/Uhrzeit",
1211
+ "customers.errors.invalid_payload": "Ungültige Anfragedaten",
968
1212
  "customers.errors.invalid_query": "Ungültige Abfrageparameter",
969
1213
  "customers.errors.kind_settings_load_failed": "Einstellungen der Kategorie konnten nicht geladen werden",
970
1214
  "customers.errors.label_duplicate": "Ein Label mit diesem Slug existiert bereits",
@@ -864,6 +864,248 @@
864
864
  "customers.deals.form.people.searchPlaceholder": "Search people…",
865
865
  "customers.deals.form.pipeline.placeholder": "Select a pipeline stage",
866
866
  "customers.deals.form.status.placeholder": "Select a deal status",
867
+ "customers.deals.kanban.activityComposer.body": "Notes",
868
+ "customers.deals.kanban.activityComposer.body.placeholder": "What happened? Markdown supported.",
869
+ "customers.deals.kanban.activityComposer.call": "Log a call",
870
+ "customers.deals.kanban.activityComposer.context": "Deal: {title}",
871
+ "customers.deals.kanban.activityComposer.email": "Send email",
872
+ "customers.deals.kanban.activityComposer.error": "Failed to save activity.",
873
+ "customers.deals.kanban.activityComposer.noEntity": "Link a company to this deal before logging activities here.",
874
+ "customers.deals.kanban.activityComposer.note": "Add a note",
875
+ "customers.deals.kanban.activityComposer.phone": "Phone number",
876
+ "customers.deals.kanban.activityComposer.required": "Add a title or body before saving.",
877
+ "customers.deals.kanban.activityComposer.required.email": "Add a subject or body before saving.",
878
+ "customers.deals.kanban.activityComposer.required.titleOrBody": "Add a title or body before saving.",
879
+ "customers.deals.kanban.activityComposer.submit": "Save activity",
880
+ "customers.deals.kanban.activityComposer.success": "Activity saved.",
881
+ "customers.deals.kanban.activityComposer.title": "Subject",
882
+ "customers.deals.kanban.activityComposer.title.placeholder": "Short summary (optional)",
883
+ "customers.deals.kanban.addStage.color": "Color",
884
+ "customers.deals.kanban.addStage.color.amber": "Amber",
885
+ "customers.deals.kanban.addStage.color.blue": "Blue",
886
+ "customers.deals.kanban.addStage.color.brand": "Violet",
887
+ "customers.deals.kanban.addStage.color.error": "Red",
888
+ "customers.deals.kanban.addStage.color.gray": "Gray",
889
+ "customers.deals.kanban.addStage.color.green": "Green",
890
+ "customers.deals.kanban.addStage.color.info": "Blue",
891
+ "customers.deals.kanban.addStage.color.neutral": "Gray",
892
+ "customers.deals.kanban.addStage.color.none": "No color",
893
+ "customers.deals.kanban.addStage.color.pink": "Pink",
894
+ "customers.deals.kanban.addStage.color.red": "Red",
895
+ "customers.deals.kanban.addStage.color.success": "Green",
896
+ "customers.deals.kanban.addStage.color.violet": "Violet",
897
+ "customers.deals.kanban.addStage.color.warning": "Amber",
898
+ "customers.deals.kanban.addStage.context": "Pipeline: {pipeline}",
899
+ "customers.deals.kanban.addStage.error": "Failed to add stage.",
900
+ "customers.deals.kanban.addStage.label": "Stage name",
901
+ "customers.deals.kanban.addStage.label.placeholder": "e.g. Discovery",
902
+ "customers.deals.kanban.addStage.label.required": "Stage name is required.",
903
+ "customers.deals.kanban.addStage.position": "Position in pipeline",
904
+ "customers.deals.kanban.addStage.position.after": "After {label}",
905
+ "customers.deals.kanban.addStage.position.end": "At the end (default)",
906
+ "customers.deals.kanban.addStage.position.help": "Choose where the new stage appears on the kanban. Existing stages after the chosen position shift one step to the right.",
907
+ "customers.deals.kanban.addStage.position.start": "At the start",
908
+ "customers.deals.kanban.addStage.submit": "Add stage",
909
+ "customers.deals.kanban.addStage.success": "Stage added.",
910
+ "customers.deals.kanban.addStage.title": "New stage",
911
+ "customers.deals.kanban.board.scrollNext": "Scroll to next stage",
912
+ "customers.deals.kanban.board.scrollPrev": "Scroll to previous stage",
913
+ "customers.deals.kanban.boardSummary.breakdownTrigger": "Breakdown",
914
+ "customers.deals.kanban.boardSummary.count": "{count} deals",
915
+ "customers.deals.kanban.boardSummary.headingLabel": "PIPELINE",
916
+ "customers.deals.kanban.boardSummary.partial": "partial",
917
+ "customers.deals.kanban.boardSummary.partialHint": "Missing FX rates for {currencies} — excluded from total",
918
+ "customers.deals.kanban.breadcrumb.dashboard": "Dashboard",
919
+ "customers.deals.kanban.breadcrumb.deals": "Deals",
920
+ "customers.deals.kanban.bulk.aria.bar": "Bulk actions",
921
+ "customers.deals.kanban.bulk.aria.clear": "Clear selection",
922
+ "customers.deals.kanban.bulk.changeOwner": "Change owner",
923
+ "customers.deals.kanban.bulk.changeOwner.confirm": "Reassign {count} deals",
924
+ "customers.deals.kanban.bulk.changeOwner.empty": "No staff members found.",
925
+ "customers.deals.kanban.bulk.changeOwner.error": "Failed to start bulk owner update.",
926
+ "customers.deals.kanban.bulk.changeOwner.helper": "Pick a staff member who will own all selected deals.",
927
+ "customers.deals.kanban.bulk.changeOwner.progress.description": "{count} deals queued for owner reassignment",
928
+ "customers.deals.kanban.bulk.changeOwner.progress.name": "Reassign selected deals to a new owner",
929
+ "customers.deals.kanban.bulk.changeOwner.queued": "Bulk owner update started ({count} deals).",
930
+ "customers.deals.kanban.bulk.changeOwner.search": "Search by name or email…",
931
+ "customers.deals.kanban.bulk.changeOwner.title": "Change owner for {count} deals",
932
+ "customers.deals.kanban.bulk.changeStage": "Change stage",
933
+ "customers.deals.kanban.bulk.changeStage.confirm": "Move {count} deals",
934
+ "customers.deals.kanban.bulk.changeStage.context": "Pipeline: {pipeline}",
935
+ "customers.deals.kanban.bulk.changeStage.error": "Failed to start bulk stage update.",
936
+ "customers.deals.kanban.bulk.changeStage.progress.description": "{count} deals queued for stage update",
937
+ "customers.deals.kanban.bulk.changeStage.progress.name": "Move selected deals to a new stage",
938
+ "customers.deals.kanban.bulk.changeStage.queued": "Bulk stage update started ({count} deals).",
939
+ "customers.deals.kanban.bulk.changeStage.title": "Change stage for {count} deals",
940
+ "customers.deals.kanban.bulk.delete": "Delete",
941
+ "customers.deals.kanban.bulk.delete.failedGroup": "{count} deals could not be deleted: {message}",
942
+ "customers.deals.kanban.bulk.delete.progress.description": "{count} deals queued for deletion",
943
+ "customers.deals.kanban.bulk.delete.progress.name": "Delete selected deals",
944
+ "customers.deals.kanban.bulk.delete.success": "{count} deals deleted.",
945
+ "customers.deals.kanban.bulk.delete.text": "This action cannot be undone.",
946
+ "customers.deals.kanban.bulk.delete.title": "Delete {count} deals?",
947
+ "customers.deals.kanban.bulk.dragOverlayBadge": "{count} more selected",
948
+ "customers.deals.kanban.bulk.exportCsv": "Export CSV",
949
+ "customers.deals.kanban.bulk.selectedCount": "selected",
950
+ "customers.deals.kanban.bulk.totalValue": "Total {value}",
951
+ "customers.deals.kanban.card.action.call": "Call",
952
+ "customers.deals.kanban.card.action.disabledNoCompany": "Link a company to this deal before logging activities.",
953
+ "customers.deals.kanban.card.action.email": "Email",
954
+ "customers.deals.kanban.card.action.note": "Note",
955
+ "customers.deals.kanban.card.aria": "Deal: {title}",
956
+ "customers.deals.kanban.card.aria.menu": "Deal actions",
957
+ "customers.deals.kanban.card.aria.moreCompanies": "{count} more companies",
958
+ "customers.deals.kanban.card.aria.openActivities": "{count} open activities",
959
+ "customers.deals.kanban.card.aria.probability": "Probability: {value}",
960
+ "customers.deals.kanban.card.aria.roledescription": "deal card",
961
+ "customers.deals.kanban.card.aria.select": "Select deal",
962
+ "customers.deals.kanban.card.daysInStage": "in {days}d",
963
+ "customers.deals.kanban.card.noValue": "No value",
964
+ "customers.deals.kanban.card.overdueLabel": "Overdue",
965
+ "customers.deals.kanban.card.statusOverdue": "OVERDUE",
966
+ "customers.deals.kanban.card.statusStuck": "STUCK",
967
+ "customers.deals.kanban.comingSoon": "{feature} arrives in the next iteration.",
968
+ "customers.deals.kanban.cta.customize": "Customize view",
969
+ "customers.deals.kanban.cta.newDeal": "New deal",
970
+ "customers.deals.kanban.cta.newStage": "New stage",
971
+ "customers.deals.kanban.cta.quickDeal": "Quick deal",
972
+ "customers.deals.kanban.currencyBreakdown.basePill": "BASE",
973
+ "customers.deals.kanban.currencyBreakdown.colCurrency": "Currency",
974
+ "customers.deals.kanban.currencyBreakdown.colDeals": "Deals",
975
+ "customers.deals.kanban.currencyBreakdown.colNativeTotal": "Native total",
976
+ "customers.deals.kanban.currencyBreakdown.footerCredit": "NBP mid rate · {date}",
977
+ "customers.deals.kanban.currencyBreakdown.headingCount": "({count} deals)",
978
+ "customers.deals.kanban.currencyBreakdown.title": "Lane breakdown",
979
+ "customers.deals.kanban.currencyFilter.allCurrencies": "All currencies",
980
+ "customers.deals.kanban.currencyFilter.apply": "Apply filter",
981
+ "customers.deals.kanban.currencyFilter.chipLabel": "Currency",
982
+ "customers.deals.kanban.currencyFilter.footerCredit": "NBP mid conversion rate · {date}",
983
+ "customers.deals.kanban.currencyFilter.subtitle": "{label} · {count} deals · {total} {currency}",
984
+ "customers.deals.kanban.currencyFilter.title": "Filter kanban by currency",
985
+ "customers.deals.kanban.customize.actions": "Actions",
986
+ "customers.deals.kanban.customize.configCols": "Configure card fields",
987
+ "customers.deals.kanban.customize.configCols.help": "Show / hide / reorder",
988
+ "customers.deals.kanban.customize.manageStages": "Manage pipeline stages",
989
+ "customers.deals.kanban.customize.manageStages.help": "Edit names, colors, required fields",
990
+ "customers.deals.kanban.customize.reset": "Reset to default",
991
+ "customers.deals.kanban.customize.resetDefault": "Reset to default",
992
+ "customers.deals.kanban.customize.resetDefault.help": "Clear filters and restore columns",
993
+ "customers.deals.kanban.customize.resetWidths": "Reset column widths",
994
+ "customers.deals.kanban.customize.resetWidths.helpCount": "Restore the default width on {count} resized column(s)",
995
+ "customers.deals.kanban.customize.resetWidths.helpEmpty": "No columns have been resized yet",
996
+ "customers.deals.kanban.customize.title": "Customize view",
997
+ "customers.deals.kanban.filter.add": "+ More",
998
+ "customers.deals.kanban.filter.all": "All",
999
+ "customers.deals.kanban.filter.allCount": "All ({count})",
1000
+ "customers.deals.kanban.filter.any": "Any",
1001
+ "customers.deals.kanban.filter.apply": "Apply",
1002
+ "customers.deals.kanban.filter.aria.chip": "Filter by {label}",
1003
+ "customers.deals.kanban.filter.cancel": "Cancel",
1004
+ "customers.deals.kanban.filter.clear": "Clear",
1005
+ "customers.deals.kanban.filter.close": "Close",
1006
+ "customers.deals.kanban.filter.close.title": "Filter · Expected close",
1007
+ "customers.deals.kanban.filter.companies": "Companies",
1008
+ "customers.deals.kanban.filter.from": "From {date}",
1009
+ "customers.deals.kanban.filter.label": "Filter",
1010
+ "customers.deals.kanban.filter.more": "More filters",
1011
+ "customers.deals.kanban.filter.multipleSelected": "{count} selected",
1012
+ "customers.deals.kanban.filter.noResults": "No matches",
1013
+ "customers.deals.kanban.filter.owner": "Owner",
1014
+ "customers.deals.kanban.filter.people": "People",
1015
+ "customers.deals.kanban.filter.pipeline": "Pipeline",
1016
+ "customers.deals.kanban.filter.pipeline.all": "All pipelines",
1017
+ "customers.deals.kanban.filter.pipeline.allHelper": "{count} pipelines",
1018
+ "customers.deals.kanban.filter.pipeline.selectedNone": "No pipeline filter",
1019
+ "customers.deals.kanban.filter.pipeline.selectedOne": "1 selected · {name}",
1020
+ "customers.deals.kanban.filter.pipeline.title": "Filter · Pipeline",
1021
+ "customers.deals.kanban.filter.preset.next30": "Next 30 days",
1022
+ "customers.deals.kanban.filter.preset.next90": "Next 90 days",
1023
+ "customers.deals.kanban.filter.preset.overdue": "Overdue",
1024
+ "customers.deals.kanban.filter.preset.thisMonth": "This month",
1025
+ "customers.deals.kanban.filter.preset.thisQuarter": "This quarter",
1026
+ "customers.deals.kanban.filter.searchPlaceholder": "Search…",
1027
+ "customers.deals.kanban.filter.selected": "selected",
1028
+ "customers.deals.kanban.filter.status": "Status",
1029
+ "customers.deals.kanban.filter.status.lost": "Lost",
1030
+ "customers.deals.kanban.filter.status.open": "Open",
1031
+ "customers.deals.kanban.filter.status.title": "Filter · Status",
1032
+ "customers.deals.kanban.filter.status.won": "Won",
1033
+ "customers.deals.kanban.filter.title": "Filter · {label}",
1034
+ "customers.deals.kanban.filter.to": "To",
1035
+ "customers.deals.kanban.filter.until": "Until {date}",
1036
+ "customers.deals.kanban.footer.count": "Showing {visible} of {total} deals in {pipeline} pipeline",
1037
+ "customers.deals.kanban.helper.dragHint": "Drag cards between lanes to update stage",
1038
+ "customers.deals.kanban.lane.aria.loadMore": "Load more deals in {stage}",
1039
+ "customers.deals.kanban.lane.aria.partialCount": "Showing {visible} of {total}",
1040
+ "customers.deals.kanban.lane.aria.quickAdd": "Quickly add a deal to {stage}",
1041
+ "customers.deals.kanban.lane.currencyBreakdown.count": "({count})",
1042
+ "customers.deals.kanban.lane.currencyBreakdown.missingRate": "No FX rate to {base} — excluded from the converted total",
1043
+ "customers.deals.kanban.lane.currencyBreakdown.missingRatesHint": "Missing FX rates for {currencies} — excluded from total. Configure exchange rates to see the full converted value.",
1044
+ "customers.deals.kanban.lane.currencyBreakdown.partialTotal": "Total (partial)",
1045
+ "customers.deals.kanban.lane.currencyBreakdown.title": "Per-currency breakdown",
1046
+ "customers.deals.kanban.lane.currencyBreakdown.total": "Total",
1047
+ "customers.deals.kanban.lane.currencyBreakdown.trigger": "Show per-currency breakdown ({count} currencies)",
1048
+ "customers.deals.kanban.lane.empty": "No deals in this stage yet.",
1049
+ "customers.deals.kanban.lane.loadMore": "Show more ({remaining})",
1050
+ "customers.deals.kanban.lane.loadingMore": "Loading…",
1051
+ "customers.deals.kanban.lane.resizeHandle": "Drag to resize column. Double-click to reset width.",
1052
+ "customers.deals.kanban.menu.delete": "Delete",
1053
+ "customers.deals.kanban.menu.delete.confirmText": "This action cannot be undone.",
1054
+ "customers.deals.kanban.menu.delete.confirmTitle": "Delete deal “{title}”?",
1055
+ "customers.deals.kanban.menu.delete.error": "Failed to delete deal.",
1056
+ "customers.deals.kanban.menu.delete.success": "Deal deleted.",
1057
+ "customers.deals.kanban.menu.duplicate": "Duplicate",
1058
+ "customers.deals.kanban.menu.duplicate.error": "Failed to duplicate deal.",
1059
+ "customers.deals.kanban.menu.duplicate.success": "Deal duplicated.",
1060
+ "customers.deals.kanban.menu.duplicate.titleSuffix": "{title} (copy)",
1061
+ "customers.deals.kanban.menu.edit": "Edit",
1062
+ "customers.deals.kanban.menu.error.status": "Failed to update deal status.",
1063
+ "customers.deals.kanban.menu.markLost": "Mark as Lost",
1064
+ "customers.deals.kanban.menu.markLost.success": "Deal marked as lost.",
1065
+ "customers.deals.kanban.menu.markWon": "Mark as Won",
1066
+ "customers.deals.kanban.menu.markWon.success": "Deal marked as won.",
1067
+ "customers.deals.kanban.menu.moveStage": "Move stage…",
1068
+ "customers.deals.kanban.menu.open": "Open deal",
1069
+ "customers.deals.kanban.pageTitle": "Deals",
1070
+ "customers.deals.kanban.quickDeal.cancel": "Cancel",
1071
+ "customers.deals.kanban.quickDeal.company": "Company",
1072
+ "customers.deals.kanban.quickDeal.companyPh": "Pick a company or add new…",
1073
+ "customers.deals.kanban.quickDeal.context": "Pipeline: {pipeline} · Stage: {stage}",
1074
+ "customers.deals.kanban.quickDeal.currency": "Currency",
1075
+ "customers.deals.kanban.quickDeal.description": "Description",
1076
+ "customers.deals.kanban.quickDeal.description.placeholder": "Short context, decision makers or next steps. Markdown supported.",
1077
+ "customers.deals.kanban.quickDeal.expectedClose": "Expected close",
1078
+ "customers.deals.kanban.quickDeal.more": "More details (probability, close date, description)",
1079
+ "customers.deals.kanban.quickDeal.owner": "Owner",
1080
+ "customers.deals.kanban.quickDeal.probability": "Probability",
1081
+ "customers.deals.kanban.quickDeal.status": "Status",
1082
+ "customers.deals.kanban.quickDeal.status.in_progress": "In progress",
1083
+ "customers.deals.kanban.quickDeal.status.loose": "Stalled",
1084
+ "customers.deals.kanban.quickDeal.status.open": "Open",
1085
+ "customers.deals.kanban.quickDeal.status.win": "Won",
1086
+ "customers.deals.kanban.quickDeal.submit": "Add deal",
1087
+ "customers.deals.kanban.quickDeal.success": "Deal added to {stage}.",
1088
+ "customers.deals.kanban.quickDeal.title": "Quick deal",
1089
+ "customers.deals.kanban.quickDeal.title.label": "Deal title",
1090
+ "customers.deals.kanban.quickDeal.title.placeholder": "e.g. Q3 Expansion — Lighting Package",
1091
+ "customers.deals.kanban.quickDeal.title.required": "Title is required.",
1092
+ "customers.deals.kanban.quickDeal.value": "Value",
1093
+ "customers.deals.kanban.search.placeholder": "Search deals…",
1094
+ "customers.deals.kanban.sort.default": "Default",
1095
+ "customers.deals.kanban.sort.defaultHint": "Default: {label}",
1096
+ "customers.deals.kanban.sort.label": "Sort",
1097
+ "customers.deals.kanban.sort.option.closeSoonest": "Close date (soonest)",
1098
+ "customers.deals.kanban.sort.option.createdNewest": "Created (newest)",
1099
+ "customers.deals.kanban.sort.option.ownerAsc": "Owner (A → Z)",
1100
+ "customers.deals.kanban.sort.option.probabilityHigh": "Probability (high to low)",
1101
+ "customers.deals.kanban.sort.option.updatedNewest": "Updated (newest)",
1102
+ "customers.deals.kanban.sort.option.updatedOldest": "Updated (oldest)",
1103
+ "customers.deals.kanban.sort.option.valueHigh": "Value (high to low)",
1104
+ "customers.deals.kanban.sort.option.valueLow": "Value (low to high)",
1105
+ "customers.deals.kanban.sort.title": "Sort by",
1106
+ "customers.deals.kanban.view.kanban": "Kanban",
1107
+ "customers.deals.kanban.view.list": "List",
1108
+ "customers.deals.kanban.view.tablistLabel": "Deals views",
867
1109
  "customers.deals.list.actions.delete": "Delete",
868
1110
  "customers.deals.list.actions.deleting": "Deleting…",
869
1111
  "customers.deals.list.actions.edit": "Edit",
@@ -944,6 +1186,7 @@
944
1186
  "customers.errors.assign_failed": "Failed to assign tag",
945
1187
  "customers.errors.assignable_staff_load_failed": "Failed to load assignable staff",
946
1188
  "customers.errors.authentication_required": "Authentication required",
1189
+ "customers.errors.bulk_enqueue_failed": "Failed to enqueue bulk job",
947
1190
  "customers.errors.comment_required": "Comment id is required",
948
1191
  "customers.errors.company_not_found": "Company not found",
949
1192
  "customers.errors.company_people_load_failed": "Failed to load linked people",
@@ -965,6 +1208,7 @@
965
1208
  "customers.errors.internal": "Internal server error",
966
1209
  "customers.errors.internalError": "Internal server error",
967
1210
  "customers.errors.invalid_date_time": "Invalid date/time",
1211
+ "customers.errors.invalid_payload": "Invalid payload",
968
1212
  "customers.errors.invalid_query": "Invalid query parameters",
969
1213
  "customers.errors.kind_settings_load_failed": "Failed to load kind settings",
970
1214
  "customers.errors.label_duplicate": "A label with this slug already exists",