@mj-biz-apps/sales-ng 6.3.3 → 6.5.0

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 (42) hide show
  1. package/dist/lib/board/deal-board.component.js +2 -2
  2. package/dist/lib/board/deal-board.component.js.map +1 -1
  3. package/dist/lib/custom/deal-form.component.d.ts +16 -2
  4. package/dist/lib/custom/deal-form.component.d.ts.map +1 -1
  5. package/dist/lib/custom/deal-form.component.js +48 -49
  6. package/dist/lib/custom/deal-form.component.js.map +1 -1
  7. package/dist/lib/form-panels/deal-form.panels.d.ts +398 -6
  8. package/dist/lib/form-panels/deal-form.panels.d.ts.map +1 -1
  9. package/dist/lib/form-panels/deal-form.panels.js +1871 -83
  10. package/dist/lib/form-panels/deal-form.panels.js.map +1 -1
  11. package/dist/lib/form-panels/deal-hero.panel.d.ts +23 -0
  12. package/dist/lib/form-panels/deal-hero.panel.d.ts.map +1 -1
  13. package/dist/lib/form-panels/deal-hero.panel.js +41 -22
  14. package/dist/lib/form-panels/deal-hero.panel.js.map +1 -1
  15. package/dist/lib/pages/dashboard-dates.d.ts +25 -0
  16. package/dist/lib/pages/dashboard-dates.d.ts.map +1 -0
  17. package/dist/lib/pages/dashboard-dates.js +32 -0
  18. package/dist/lib/pages/dashboard-dates.js.map +1 -0
  19. package/dist/lib/pages/dashboard-inspect.d.ts +50 -5
  20. package/dist/lib/pages/dashboard-inspect.d.ts.map +1 -1
  21. package/dist/lib/pages/dashboard-inspect.js +70 -13
  22. package/dist/lib/pages/dashboard-inspect.js.map +1 -1
  23. package/dist/lib/pages/dashboard-period.d.ts +144 -0
  24. package/dist/lib/pages/dashboard-period.d.ts.map +1 -0
  25. package/dist/lib/pages/dashboard-period.js +267 -0
  26. package/dist/lib/pages/dashboard-period.js.map +1 -0
  27. package/dist/lib/sections/sales-section.component.d.ts +71 -0
  28. package/dist/lib/sections/sales-section.component.d.ts.map +1 -1
  29. package/dist/lib/sections/sales-section.component.js +398 -199
  30. package/dist/lib/sections/sales-section.component.js.map +1 -1
  31. package/dist/lib/workspace/deal-workspace.component.d.ts.map +1 -1
  32. package/dist/lib/workspace/deal-workspace.component.js +4 -2
  33. package/dist/lib/workspace/deal-workspace.component.js.map +1 -1
  34. package/dist/lib/workspace/deal-workspace.service.d.ts +44 -1
  35. package/dist/lib/workspace/deal-workspace.service.d.ts.map +1 -1
  36. package/dist/lib/workspace/deal-workspace.service.js +103 -2
  37. package/dist/lib/workspace/deal-workspace.service.js.map +1 -1
  38. package/dist/public-api.d.ts +1 -0
  39. package/dist/public-api.d.ts.map +1 -1
  40. package/dist/public-api.js +4 -0
  41. package/dist/public-api.js.map +1 -1
  42. package/package.json +2 -2
@@ -583,7 +583,7 @@ export class DealBoardComponent {
583
583
  }
584
584
  TrackColumn = (_, column) => column.StageID;
585
585
  static ɵfac = function DealBoardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DealBoardComponent)(); };
586
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DealBoardComponent, selectors: [["mjs-deal-board"]], inputs: { Deals: "Deals", Pipelines: "Pipelines", Stages: "Stages", DealStatusTypes: "DealStatusTypes" }, outputs: { DealOpened: "DealOpened", StageMoved: "StageMoved" }, decls: 11, vars: 3, consts: [[1, "db"], [1, "db-bar"], [1, "db-bar__label"], ["role", "tablist", "aria-label", "Pipeline", 1, "db-bar__pipes"], ["type", "button", "role", "tab", 1, "db-pipe", 3, "db-pipe--on"], [1, "db-bar__busy"], ["role", "status", 1, "db-msg"], [1, "db-empty"], ["type", "button", "role", "tab", 1, "db-pipe", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "fa-spin"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-info"], [1, "db-cols"], [1, "db-col", 3, "db-col--closing"], [1, "db-unstaged"], [1, "db-col"], [1, "db-col__head"], [1, "db-col__name"], ["aria-hidden", "true", "title", "Arriving here closes and locks the deal \u2014 close it from the deal form.", 1, "fa-solid", "fa-lock", "db-col__lock"], [1, "db-col__meta"], [1, "db-col__count"], ["title", "This stage holds deals in more than one currency, so a single total would be meaningless.", 1, "db-col__total", "db-col__total--mixed"], [1, "db-col__total", 3, "db-col__total--stated"], [1, "db-col__partial", 3, "title"], ["cdkDropList", "", 1, "db-col__drop", 3, "cdkDropListDropped", "id", "cdkDropListData", "cdkDropListConnectedTo", "cdkDropListEnterPredicate"], ["cdkDrag", "", "tabindex", "0", "role", "button", 1, "db-card", 3, "cdkDragData", "cdkDragDisabled"], [1, "db-col__empty"], [1, "db-col__total"], ["aria-hidden", "true", 1, "fa-solid", "fa-pen-nib"], ["cdkDrag", "", "tabindex", "0", "role", "button", 1, "db-card", 3, "click", "keydown.enter", "cdkDragData", "cdkDragDisabled"], [1, "db-card__name"], [1, "db-card__customer"], ["aria-hidden", "true", 1, "fa-solid", "fa-building"], [1, "db-card__figures"], [1, "db-card__amount"], ["title", "No amount recorded yet", 1, "db-card__noamount"], [1, "db-card__prob"], [1, "db-card__foot"], [1, "db-card__owner"], [1, "db-card__close"], ["class", "db-card__ghost", 4, "cdkDragPreview"], ["aria-hidden", "true", "title", "Priced by the orders engine", 1, "fa-solid", "fa-calculator", "db-card__computed"], ["aria-hidden", "true", "title", "Stated by a person, not priced by the orders engine", 1, "fa-solid", "fa-pen-nib", "db-card__stated"], [1, "db-card__ghost"], [1, "db-unstaged__head"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-question"], [1, "db-unstaged__list"], ["type", "button", 1, "db-chip"], ["type", "button", 1, "db-chip", 3, "click"]], template: function DealBoardComponent_Template(rf, ctx) { if (rf & 1) {
586
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DealBoardComponent, selectors: [["mjs-deal-board"]], inputs: { Deals: "Deals", Pipelines: "Pipelines", Stages: "Stages", DealStatusTypes: "DealStatusTypes" }, outputs: { DealOpened: "DealOpened", StageMoved: "StageMoved" }, decls: 11, vars: 3, consts: [[1, "db"], [1, "db-bar"], [1, "db-bar__label"], ["role", "tablist", "aria-label", "Pipeline", 1, "db-bar__pipes"], ["type", "button", "role", "tab", 1, "db-pipe", 3, "db-pipe--on"], [1, "db-bar__busy"], ["role", "status", 1, "db-msg"], [1, "db-empty"], ["type", "button", "role", "tab", 1, "db-pipe", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "fa-spin"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-info"], [1, "db-cols"], [1, "db-col", 3, "db-col--closing"], [1, "db-unstaged"], [1, "db-col"], [1, "db-col__head"], [1, "db-col__name"], ["aria-hidden", "true", "title", "Deals cannot be moved here. Close a deal from the deal form.", 1, "fa-solid", "fa-lock", "db-col__lock"], [1, "db-col__meta"], [1, "db-col__count"], ["title", "This stage holds deals in more than one currency, so a single total would be meaningless.", 1, "db-col__total", "db-col__total--mixed"], [1, "db-col__total", 3, "db-col__total--stated"], [1, "db-col__partial", 3, "title"], ["cdkDropList", "", 1, "db-col__drop", 3, "cdkDropListDropped", "id", "cdkDropListData", "cdkDropListConnectedTo", "cdkDropListEnterPredicate"], ["cdkDrag", "", "tabindex", "0", "role", "button", 1, "db-card", 3, "cdkDragData", "cdkDragDisabled"], [1, "db-col__empty"], [1, "db-col__total"], ["aria-hidden", "true", 1, "fa-solid", "fa-pen-nib"], ["cdkDrag", "", "tabindex", "0", "role", "button", 1, "db-card", 3, "click", "keydown.enter", "cdkDragData", "cdkDragDisabled"], [1, "db-card__name"], [1, "db-card__customer"], ["aria-hidden", "true", 1, "fa-solid", "fa-building"], [1, "db-card__figures"], [1, "db-card__amount"], ["title", "No amount recorded yet", 1, "db-card__noamount"], [1, "db-card__prob"], [1, "db-card__foot"], [1, "db-card__owner"], [1, "db-card__close"], ["class", "db-card__ghost", 4, "cdkDragPreview"], ["aria-hidden", "true", "title", "Priced by Orders", 1, "fa-solid", "fa-calculator", "db-card__computed"], ["aria-hidden", "true", "title", "Entered manually rather than priced by Orders", 1, "fa-solid", "fa-pen-nib", "db-card__stated"], [1, "db-card__ghost"], [1, "db-unstaged__head"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-question"], [1, "db-unstaged__list"], ["type", "button", 1, "db-chip"], ["type", "button", 1, "db-chip", 3, "click"]], template: function DealBoardComponent_Template(rf, ctx) { if (rf & 1) {
587
587
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "span", 2);
588
588
  i0.ɵɵtext(3, "Pipeline");
589
589
  i0.ɵɵelementEnd();
@@ -608,7 +608,7 @@ export class DealBoardComponent {
608
608
  }
609
609
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DealBoardComponent, [{
610
610
  type: Component,
611
- args: [{ selector: 'mjs-deal-board', standalone: true, imports: [CommonModule, CdkDropList, CdkDrag], template: "<!--\n The pipeline board. Columns are stages in DisplayOrder; cards are deals.\n\n A closing column renders disabled with a hint rather than being hidden: hiding it would make the board\n lie about the pipeline's shape, and a rep looking for \"where do won deals go\" needs to see that the\n answer is \"not by dragging\".\n-->\n<div class=\"db\">\n\n <!-- Pipeline switcher. A pipeline defines the stages, so this is the board's one real control. -->\n <div class=\"db-bar\">\n <span class=\"db-bar__label\">Pipeline</span>\n <div class=\"db-bar__pipes\" role=\"tablist\" aria-label=\"Pipeline\">\n @for (pipeline of Pipelines; track pipeline.ID) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"db-pipe\"\n [class.db-pipe--on]=\"pipeline.ID === ActivePipelineID\"\n [attr.aria-selected]=\"pipeline.ID === ActivePipelineID\"\n (click)=\"SelectPipeline(pipeline.ID)\">\n {{ pipeline.Name }}\n </button>\n }\n </div>\n @if (Moving) {\n <span class=\"db-bar__busy\"><i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i> Moving\u2026</span>\n }\n </div>\n\n @if (Message) {\n <p class=\"db-msg\" role=\"status\">\n <i class=\"fa-solid fa-circle-info\" aria-hidden=\"true\"></i> {{ Message }}\n </p>\n }\n\n @if (Columns.length === 0) {\n <p class=\"db-empty\">This pipeline has no stages yet.</p>\n } @else {\n <div class=\"db-cols\">\n @for (column of Columns; track TrackColumn($index, column)) {\n <section\n class=\"db-col\"\n [class.db-col--closing]=\"column.IsClosing\"\n [attr.aria-label]=\"column.Label\">\n\n <header class=\"db-col__head\">\n <span class=\"db-col__name\">\n {{ column.Label }}\n @if (column.IsClosing) {\n <i class=\"fa-solid fa-lock db-col__lock\"\n aria-hidden=\"true\"\n title=\"Arriving here closes and locks the deal \u2014 close it from the deal form.\"></i>\n }\n </span>\n <span class=\"db-col__meta\">\n <span class=\"db-col__count\">{{ column.Cards.length }}</span>\n <!--\n A SUM of stored Deal.Amount values. This app prices nothing; the marker says whether the\n ORDERS engine did, and the currency question is separate from the provenance question.\n\n NO TOTAL WHEN THE COLUMN MIXES CURRENCIES. Adding EUR to USD produces a number that is\n wrong in a way nobody can see; an absent figure prompts a question instead.\n\n UNIONED, and the board branch's half needed one correction to survive: it carried\n `currency:'USD'`, which is the hardcoding the currency work removed. The `--stated` class\n is its contribution and is kept; the literal is not.\n -->\n @if (column.MixedCurrency) {\n <span class=\"db-col__total db-col__total--mixed\"\n title=\"This stage holds deals in more than one currency, so a single total would be meaningless.\">\n mixed currencies\n </span>\n } @else {\n <span class=\"db-col__total\" [class.db-col__total--stated]=\"column.Unpriced > 0\">\n <!-- `?? DefaultCurrency` because Currency is null in two different situations and only\n one of them is \"mixed\": an EMPTY column has no currency to disagree about, and its\n total is 0. The mixed case never reaches here \u2014 it is the @if above. -->\n {{ column.Total | currency:(column.Currency ?? DefaultCurrency):'symbol':'1.0-0' }}\n </span>\n }\n </span>\n @if (column.Unpriced > 0) {\n <!--\n SAYS WHICH OF THE TWO IT IS. A total nobody priced and a total that is only partly\n priced are different claims, and collapsing them is how a stated figure passes for an\n authoritative one. The wording lives in PricingNote() -- a template expression cannot\n hold a sentence without becoming unreadable.\n -->\n <span class=\"db-col__partial\" [title]=\"PricingNote(column)\">\n <i class=\"fa-solid fa-pen-nib\" aria-hidden=\"true\"></i>\n @if (column.NonePriced) {\n stated, not priced\n } @else {\n {{ column.Unpriced }} of {{ column.Cards.length }} stated\n }\n </span>\n }\n </header>\n\n <div\n class=\"db-col__drop\"\n cdkDropList\n [id]=\"'col-' + column.StageID\"\n [cdkDropListData]=\"column\"\n [cdkDropListConnectedTo]=\"ColumnIDs\"\n [cdkDropListEnterPredicate]=\"CanDropInto(column)\"\n (cdkDropListDropped)=\"OnDrop($event, column)\">\n\n @for (deal of column.Cards; track TrackCard($index, deal)) {\n <article\n class=\"db-card\"\n cdkDrag\n [cdkDragData]=\"deal\"\n [cdkDragDisabled]=\"Moving\"\n (click)=\"OpenCard(deal)\"\n (keydown.enter)=\"OpenCard(deal)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Open ' + deal.Name\">\n\n <div class=\"db-card__name\">{{ deal.Name }}</div>\n <div class=\"db-card__customer\">\n <i class=\"fa-solid fa-building\" aria-hidden=\"true\"></i> {{ deal.CustomerName }}\n </div>\n\n <div class=\"db-card__figures\">\n <span class=\"db-card__amount\">\n @if (deal.Amount === null) {\n <span class=\"db-card__noamount\" title=\"No amount recorded yet\">\u2014</span>\n } @else {\n {{ deal.Amount | currency:(deal.CurrencyID ?? DefaultCurrency):'symbol':'1.0-0' }}\n }\n <!--\n BOTH CASES ARE MARKED, and marking only one was the defect. A calculator on the\n priced figure and nothing on the stated one means the reader has to notice an\n ABSENCE to learn anything -- and on data where nothing is priced, no card carries\n a marker at all, so the whole board reads as authoritative. A positive mark on\n each says which it is without anyone having to know the convention.\n -->\n @if (deal.Amount !== null) {\n @if (deal.AmountIsComputed) {\n <i class=\"fa-solid fa-calculator db-card__computed\"\n aria-hidden=\"true\"\n title=\"Priced by the orders engine\"></i>\n } @else {\n <i class=\"fa-solid fa-pen-nib db-card__stated\"\n aria-hidden=\"true\"\n title=\"Stated by a person, not priced by the orders engine\"></i>\n }\n }\n </span>\n @if (deal.Probability !== null) {\n <span class=\"db-card__prob\">{{ deal.Probability }}%</span>\n }\n </div>\n\n <div class=\"db-card__foot\">\n <span class=\"db-card__owner\">{{ deal.OwnerEmployee ?? 'Unassigned' }}</span>\n <span class=\"db-card__close\">{{ deal.ExpectedCloseDate ? (deal.ExpectedCloseDate | date:'MMM d, y') : 'No date' }}</span>\n </div>\n\n <div class=\"db-card__ghost\" *cdkDragPreview>{{ deal.Name }}</div>\n </article>\n }\n\n @if (column.Cards.length === 0) {\n <p class=\"db-col__empty\">\n @if (column.IsClosing) { Close deals from the deal form. } @else { Nothing here. }\n </p>\n }\n </div>\n </section>\n }\n </div>\n\n @if (Unstaged.length > 0) {\n <!-- Deals with no stage would otherwise be invisible on a board built from stage columns, and\n \"missing from the board\" is indistinguishable from \"does not exist\". -->\n <section class=\"db-unstaged\">\n <h4 class=\"db-unstaged__head\">\n <i class=\"fa-solid fa-circle-question\" aria-hidden=\"true\"></i>\n No stage set ({{ Unstaged.length }})\n </h4>\n <div class=\"db-unstaged__list\">\n @for (deal of Unstaged; track TrackCard($index, deal)) {\n <button type=\"button\" class=\"db-chip\" (click)=\"OpenCard(deal)\">\n {{ deal.Name }}\n </button>\n }\n </div>\n </section>\n }\n }\n</div>\n", styles: ["/*\n Board styles.\n\n SEMANTIC TOKENS ONLY \u2014 the same `--mj-*` set the workspace uses, so the board inherits dark mode rather\n than needing its own. No hardcoded colour appears in this file.\n*/\n\n.db {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n min-height: 0;\n}\n\n/* \u2500\u2500 Pipeline switcher \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.db-bar {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n flex-wrap: wrap;\n}\n\n.db-bar__label {\n font-size: 0.8125rem;\n color: var(--mj-text-muted);\n}\n\n.db-bar__pipes {\n display: flex;\n gap: 0.25rem;\n}\n\n.db-bar__busy {\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n}\n\n.db-pipe {\n padding: 0.3rem 0.75rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n cursor: pointer;\n}\n\n.db-pipe:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.db-pipe--on {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.db-msg {\n margin: 0;\n padding: 0.5rem 0.75rem;\n border: 1px solid var(--mj-status-warning-border);\n border-radius: 4px;\n color: var(--mj-status-warning);\n font-size: 0.8125rem;\n}\n\n.db-empty {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n}\n\n/* \u2500\u2500 Columns \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/*\n Horizontal scroll lives HERE rather than on the page: a board with eight stages must not make the whole\n shell scroll sideways, which would drag the rail and the header out of view.\n*/\n.db-cols {\n display: flex;\n gap: 0.75rem;\n overflow-x: auto;\n padding-bottom: 0.5rem;\n align-items: flex-start;\n}\n\n.db-col {\n flex: 0 0 15rem;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n min-height: 8rem;\n}\n\n/* A closing column is visibly inert \u2014 it accepts no drops, and should not invite one. */\n.db-col--closing {\n border-style: dashed;\n opacity: 0.75;\n}\n\n.db-col__head {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n padding: 0.5rem 0.625rem;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.db-col__name {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.375rem;\n}\n\n.db-col__lock {\n color: var(--mj-text-muted);\n font-size: 0.6875rem;\n}\n\n.db-col__meta {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 0.5rem;\n}\n\n.db-col__count {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.db-col__total {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n font-variant-numeric: tabular-nums;\n}\n\n/* A total that nobody priced still reads as a figure -- this keeps it from reading as a FINAL one. */\n.db-col__total--stated {\n font-style: italic;\n}\n\n.db-col__partial {\n font-size: 0.6875rem;\n color: var(--mj-status-warning);\n}\n\n.db-col__drop {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n padding: 0.5rem;\n min-height: 4rem;\n}\n\n.db-col__empty {\n margin: 0;\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n text-align: center;\n padding: 0.75rem 0.25rem;\n}\n\n/* \u2500\u2500 Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.db-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 0.5rem 0.625rem;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.db-card:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.db-card:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 1px;\n}\n\n.db-card__name {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.25;\n}\n\n.db-card__customer {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.3rem;\n}\n\n.db-card__figures {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 0.5rem;\n}\n\n.db-card__amount {\n font-size: 0.8125rem;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n display: flex;\n align-items: center;\n gap: 0.3rem;\n}\n\n/*\n * The two provenance markers are deliberately the SAME weight as each other.\n *\n * Making the stated one louder would read as an error, which it is not -- a stated amount is a\n * legitimate answer, just a different kind of fact from a priced one. Making it quieter would put us\n * back where we started, with the reader learning nothing unless they notice an absence.\n */\n.db-card__stated,\n.db-card__noamount,\n.db-card__computed {\n color: var(--mj-text-muted);\n font-size: 0.6875rem;\n}\n\n.db-card__prob {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.db-card__foot {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n font-size: 0.6875rem;\n color: var(--mj-text-muted);\n}\n\n.db-card__owner,\n.db-card__close {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.db-card__ghost {\n padding: 0.375rem 0.625rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 0.8125rem;\n color: var(--mj-text-primary);\n}\n\n/* \u2500\u2500 Unstaged \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.db-unstaged {\n border-top: 1px solid var(--mj-border-default);\n padding-top: 0.625rem;\n}\n\n.db-unstaged__head {\n margin: 0 0 0.375rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 0.375rem;\n}\n\n.db-unstaged__list {\n display: flex;\n flex-wrap: wrap;\n gap: 0.375rem;\n}\n\n.db-chip {\n padding: 0.25rem 0.625rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.75rem;\n cursor: pointer;\n}\n\n.db-chip:hover {\n background: var(--mj-bg-surface-hover);\n}\n"] }]
611
+ args: [{ selector: 'mjs-deal-board', standalone: true, imports: [CommonModule, CdkDropList, CdkDrag], template: "<!--\n The pipeline board. Columns are stages in DisplayOrder; cards are deals.\n\n A closing column renders disabled with a hint rather than being hidden: hiding it would make the board\n lie about the pipeline's shape, and a rep looking for \"where do won deals go\" needs to see that the\n answer is \"not by dragging\".\n-->\n<div class=\"db\">\n\n <!-- Pipeline switcher. A pipeline defines the stages, so this is the board's one real control. -->\n <div class=\"db-bar\">\n <span class=\"db-bar__label\">Pipeline</span>\n <div class=\"db-bar__pipes\" role=\"tablist\" aria-label=\"Pipeline\">\n @for (pipeline of Pipelines; track pipeline.ID) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"db-pipe\"\n [class.db-pipe--on]=\"pipeline.ID === ActivePipelineID\"\n [attr.aria-selected]=\"pipeline.ID === ActivePipelineID\"\n (click)=\"SelectPipeline(pipeline.ID)\">\n {{ pipeline.Name }}\n </button>\n }\n </div>\n @if (Moving) {\n <span class=\"db-bar__busy\"><i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i> Moving\u2026</span>\n }\n </div>\n\n @if (Message) {\n <p class=\"db-msg\" role=\"status\">\n <i class=\"fa-solid fa-circle-info\" aria-hidden=\"true\"></i> {{ Message }}\n </p>\n }\n\n @if (Columns.length === 0) {\n <p class=\"db-empty\">This pipeline has no stages yet.</p>\n } @else {\n <div class=\"db-cols\">\n @for (column of Columns; track TrackColumn($index, column)) {\n <section\n class=\"db-col\"\n [class.db-col--closing]=\"column.IsClosing\"\n [attr.aria-label]=\"column.Label\">\n\n <header class=\"db-col__head\">\n <span class=\"db-col__name\">\n {{ column.Label }}\n @if (column.IsClosing) {\n <!--\n THIS SAID THE OPPOSITE OF WHAT HAPPENS. \"Arriving here closes and locks the\n deal\" describes a behaviour the server deliberately refuses: a stage whose\n status locks contributes NO status to a save, so a deal moved into this\n column keeps the status it had (`planStageDefaults` gates on `LocksDeal`).\n A rep reading the old text would think a drag closes the deal.\n\n And the drag cannot happen either: `CanDropInto` returns false for a closing\n column, with a second guard behind it. So the tooltip says what the lock icon\n actually means -- this column is not a destination -- and where closing lives,\n which is the same place the empty state below points.\n -->\n <i class=\"fa-solid fa-lock db-col__lock\"\n aria-hidden=\"true\"\n title=\"Deals cannot be moved here. Close a deal from the deal form.\"></i>\n }\n </span>\n <span class=\"db-col__meta\">\n <span class=\"db-col__count\">{{ column.Cards.length }}</span>\n <!--\n A SUM of stored Deal.Amount values. This app prices nothing; the marker says whether the\n ORDERS engine did, and the currency question is separate from the provenance question.\n\n NO TOTAL WHEN THE COLUMN MIXES CURRENCIES. Adding EUR to USD produces a number that is\n wrong in a way nobody can see; an absent figure prompts a question instead.\n\n UNIONED, and the board branch's half needed one correction to survive: it carried\n `currency:'USD'`, which is the hardcoding the currency work removed. The `--stated` class\n is its contribution and is kept; the literal is not.\n -->\n @if (column.MixedCurrency) {\n <span class=\"db-col__total db-col__total--mixed\"\n title=\"This stage holds deals in more than one currency, so a single total would be meaningless.\">\n mixed currencies\n </span>\n } @else {\n <span class=\"db-col__total\" [class.db-col__total--stated]=\"column.Unpriced > 0\">\n <!-- `?? DefaultCurrency` because Currency is null in two different situations and only\n one of them is \"mixed\": an EMPTY column has no currency to disagree about, and its\n total is 0. The mixed case never reaches here \u2014 it is the @if above. -->\n {{ column.Total | currency:(column.Currency ?? DefaultCurrency):'symbol':'1.0-0' }}\n </span>\n }\n </span>\n @if (column.Unpriced > 0) {\n <!--\n SAYS WHICH OF THE TWO IT IS. A total nobody priced and a total that is only partly\n priced are different claims, and collapsing them is how a stated figure passes for an\n authoritative one. The wording lives in PricingNote() -- a template expression cannot\n hold a sentence without becoming unreadable.\n -->\n <span class=\"db-col__partial\" [title]=\"PricingNote(column)\">\n <i class=\"fa-solid fa-pen-nib\" aria-hidden=\"true\"></i>\n @if (column.NonePriced) {\n stated, not priced\n } @else {\n {{ column.Unpriced }} of {{ column.Cards.length }} stated\n }\n </span>\n }\n </header>\n\n <div\n class=\"db-col__drop\"\n cdkDropList\n [id]=\"'col-' + column.StageID\"\n [cdkDropListData]=\"column\"\n [cdkDropListConnectedTo]=\"ColumnIDs\"\n [cdkDropListEnterPredicate]=\"CanDropInto(column)\"\n (cdkDropListDropped)=\"OnDrop($event, column)\">\n\n @for (deal of column.Cards; track TrackCard($index, deal)) {\n <article\n class=\"db-card\"\n cdkDrag\n [cdkDragData]=\"deal\"\n [cdkDragDisabled]=\"Moving\"\n (click)=\"OpenCard(deal)\"\n (keydown.enter)=\"OpenCard(deal)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Open ' + deal.Name\">\n\n <div class=\"db-card__name\">{{ deal.Name }}</div>\n <div class=\"db-card__customer\">\n <i class=\"fa-solid fa-building\" aria-hidden=\"true\"></i> {{ deal.CustomerName }}\n </div>\n\n <div class=\"db-card__figures\">\n <span class=\"db-card__amount\">\n @if (deal.Amount === null) {\n <span class=\"db-card__noamount\" title=\"No amount recorded yet\">\u2014</span>\n } @else {\n {{ deal.Amount | currency:(deal.CurrencyID ?? DefaultCurrency):'symbol':'1.0-0' }}\n }\n <!--\n BOTH CASES ARE MARKED, and marking only one was the defect. A calculator on the\n priced figure and nothing on the stated one means the reader has to notice an\n ABSENCE to learn anything -- and on data where nothing is priced, no card carries\n a marker at all, so the whole board reads as authoritative. A positive mark on\n each says which it is without anyone having to know the convention.\n -->\n @if (deal.Amount !== null) {\n @if (deal.AmountIsComputed) {\n <i class=\"fa-solid fa-calculator db-card__computed\"\n aria-hidden=\"true\"\n title=\"Priced by Orders\"></i>\n } @else {\n <i class=\"fa-solid fa-pen-nib db-card__stated\"\n aria-hidden=\"true\"\n title=\"Entered manually rather than priced by Orders\"></i>\n }\n }\n </span>\n @if (deal.Probability !== null) {\n <span class=\"db-card__prob\">{{ deal.Probability }}%</span>\n }\n </div>\n\n <div class=\"db-card__foot\">\n <span class=\"db-card__owner\">{{ deal.OwnerEmployee ?? 'Unassigned' }}</span>\n <span class=\"db-card__close\">{{ deal.ExpectedCloseDate ? (deal.ExpectedCloseDate | date:'MMM d, y') : 'No date' }}</span>\n </div>\n\n <div class=\"db-card__ghost\" *cdkDragPreview>{{ deal.Name }}</div>\n </article>\n }\n\n @if (column.Cards.length === 0) {\n <p class=\"db-col__empty\">\n @if (column.IsClosing) { Close deals from the deal form. } @else { Nothing here. }\n </p>\n }\n </div>\n </section>\n }\n </div>\n\n @if (Unstaged.length > 0) {\n <!-- Deals with no stage would otherwise be invisible on a board built from stage columns, and\n \"missing from the board\" is indistinguishable from \"does not exist\". -->\n <section class=\"db-unstaged\">\n <h4 class=\"db-unstaged__head\">\n <i class=\"fa-solid fa-circle-question\" aria-hidden=\"true\"></i>\n No stage set ({{ Unstaged.length }})\n </h4>\n <div class=\"db-unstaged__list\">\n @for (deal of Unstaged; track TrackCard($index, deal)) {\n <button type=\"button\" class=\"db-chip\" (click)=\"OpenCard(deal)\">\n {{ deal.Name }}\n </button>\n }\n </div>\n </section>\n }\n }\n</div>\n", styles: ["/*\n Board styles.\n\n SEMANTIC TOKENS ONLY \u2014 the same `--mj-*` set the workspace uses, so the board inherits dark mode rather\n than needing its own. No hardcoded colour appears in this file.\n*/\n\n.db {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n min-height: 0;\n}\n\n/* \u2500\u2500 Pipeline switcher \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.db-bar {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n flex-wrap: wrap;\n}\n\n.db-bar__label {\n font-size: 0.8125rem;\n color: var(--mj-text-muted);\n}\n\n.db-bar__pipes {\n display: flex;\n gap: 0.25rem;\n}\n\n.db-bar__busy {\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n}\n\n.db-pipe {\n padding: 0.3rem 0.75rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n cursor: pointer;\n}\n\n.db-pipe:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.db-pipe--on {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.db-msg {\n margin: 0;\n padding: 0.5rem 0.75rem;\n border: 1px solid var(--mj-status-warning-border);\n border-radius: 4px;\n color: var(--mj-status-warning);\n font-size: 0.8125rem;\n}\n\n.db-empty {\n color: var(--mj-text-muted);\n font-size: 0.875rem;\n}\n\n/* \u2500\u2500 Columns \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/*\n Horizontal scroll lives HERE rather than on the page: a board with eight stages must not make the whole\n shell scroll sideways, which would drag the rail and the header out of view.\n*/\n.db-cols {\n display: flex;\n gap: 0.75rem;\n overflow-x: auto;\n padding-bottom: 0.5rem;\n align-items: flex-start;\n}\n\n.db-col {\n flex: 0 0 15rem;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n min-height: 8rem;\n}\n\n/* A closing column is visibly inert \u2014 it accepts no drops, and should not invite one. */\n.db-col--closing {\n border-style: dashed;\n opacity: 0.75;\n}\n\n.db-col__head {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n padding: 0.5rem 0.625rem;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.db-col__name {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.375rem;\n}\n\n.db-col__lock {\n color: var(--mj-text-muted);\n font-size: 0.6875rem;\n}\n\n.db-col__meta {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 0.5rem;\n}\n\n.db-col__count {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.db-col__total {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n font-variant-numeric: tabular-nums;\n}\n\n/* A total that nobody priced still reads as a figure -- this keeps it from reading as a FINAL one. */\n.db-col__total--stated {\n font-style: italic;\n}\n\n.db-col__partial {\n font-size: 0.6875rem;\n color: var(--mj-status-warning);\n}\n\n.db-col__drop {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n padding: 0.5rem;\n min-height: 4rem;\n}\n\n.db-col__empty {\n margin: 0;\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n text-align: center;\n padding: 0.75rem 0.25rem;\n}\n\n/* \u2500\u2500 Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.db-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 0.5rem 0.625rem;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.db-card:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.db-card:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 1px;\n}\n\n.db-card__name {\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.25;\n}\n\n.db-card__customer {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.3rem;\n}\n\n.db-card__figures {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 0.5rem;\n}\n\n.db-card__amount {\n font-size: 0.8125rem;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n display: flex;\n align-items: center;\n gap: 0.3rem;\n}\n\n/*\n * The two provenance markers are deliberately the SAME weight as each other.\n *\n * Making the stated one louder would read as an error, which it is not -- a stated amount is a\n * legitimate answer, just a different kind of fact from a priced one. Making it quieter would put us\n * back where we started, with the reader learning nothing unless they notice an absence.\n */\n.db-card__stated,\n.db-card__noamount,\n.db-card__computed {\n color: var(--mj-text-muted);\n font-size: 0.6875rem;\n}\n\n.db-card__prob {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.db-card__foot {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n font-size: 0.6875rem;\n color: var(--mj-text-muted);\n}\n\n.db-card__owner,\n.db-card__close {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.db-card__ghost {\n padding: 0.375rem 0.625rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 0.8125rem;\n color: var(--mj-text-primary);\n}\n\n/* \u2500\u2500 Unstaged \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.db-unstaged {\n border-top: 1px solid var(--mj-border-default);\n padding-top: 0.625rem;\n}\n\n.db-unstaged__head {\n margin: 0 0 0.375rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 0.375rem;\n}\n\n.db-unstaged__list {\n display: flex;\n flex-wrap: wrap;\n gap: 0.375rem;\n}\n\n.db-chip {\n padding: 0.25rem 0.625rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.75rem;\n cursor: pointer;\n}\n\n.db-chip:hover {\n background: var(--mj-bg-surface-hover);\n}\n"] }]
612
612
  }], null, { Deals: [{
613
613
  type: Input
614
614
  }], Pipelines: [{
@@ -1 +1 @@
1
- {"version":3,"file":"deal-board.component.js","sourceRoot":"","sources":["../../../src/lib/board/deal-board.component.ts","../../../src/lib/board/deal-board.component.html"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deal-board.component.js","sourceRoot":"","sources":["../../../src/lib/board/deal-board.component.ts","../../../src/lib/board/deal-board.component.html"],"names":[],"mappings":"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"}
@@ -5,9 +5,16 @@ import * as i0 from "@angular/core";
5
5
  export declare class DealFormComponentExtended extends mjBizAppsSalesDealFormComponent {
6
6
  /** True when the PERSISTED status locks the deal. Resolved once per load. */
7
7
  IsLocked: boolean;
8
+ /**
9
+ * Whether the locking status is a LOSS — which decides exactly one field.
10
+ *
11
+ * golive#206 keeps Loss Notes editable on a lost deal and frozen on a won one. Resolved once, with
12
+ * the lock, by `ResolveDealLockState`, and handed to the panels; nothing here reads a status name.
13
+ */
14
+ IsLost: boolean;
8
15
  /** Shown when locked, so the greyed-out-ness the form cannot render is at least explained. */
9
16
  LockNotice: string | null;
10
- /** Set when `Deal.Amount` predates its line set. Null when the amount is trustworthy or absent. */
17
+ /** Set when `Deal.Amount` no longer matches its order's total. Null when trustworthy, absent or locked. */
11
18
  StaleAmountNotice: string | null;
12
19
  ngOnInit(): Promise<void>;
13
20
  /** The fields a user may still edit right now — everything when open, the carve-outs when locked. */
@@ -20,7 +27,14 @@ export declare class DealFormComponentExtended extends mjBizAppsSalesDealFormCom
20
27
  */
21
28
  private resolveCloseLock;
22
29
  /**
23
- * Compares the amount's stamp against the lines it claims to describe. No arithmetic.
30
+ * Compares the cached amount against the order it claims to describe. No arithmetic.
31
+ *
32
+ * The rule lives in `ResolveDealAmountFreshness` so this form and the deal hero cannot answer it
33
+ * differently — the same reason `ResolveDealLockState` is shared. Read that file's header for why
34
+ * this is no longer a timestamp comparison (golive#230).
35
+ *
36
+ * ORDER MATTERS: `resolveCloseLock()` runs first in `ngOnInit`, so `IsLocked` is settled before it
37
+ * is passed here. A locked deal never warns.
24
38
  */
25
39
  private resolveAmountFreshness;
26
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deal-form.component.d.ts","sourceRoot":"","sources":["../../../src/lib/custom/deal-form.component.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,4EAA4E,CAAC;;AAM7H,0GAA0G;AAC1G,qBAMa,yBAA0B,SAAQ,+BAA+B;IAC1E,6EAA6E;IACtE,QAAQ,UAAS;IAExB,8FAA8F;IACvF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC,mGAAmG;IAC5F,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C,qGAAqG;IAC9F,kBAAkB,IAAI,SAAS,MAAM,EAAE,GAAG,IAAI;IAIrD;;;;;OAKG;YACW,gBAAgB;IAO9B;;OAEG;YACW,sBAAsB;IA4CpC;;;;;OAKG;IACa,QAAQ,IAAI,gBAAgB;yCAxFnC,yBAAyB;2CAAzB,yBAAyB;CAkHrC;AAED,gCAAgC;AAChC,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
1
+ {"version":3,"file":"deal-form.component.d.ts","sourceRoot":"","sources":["../../../src/lib/custom/deal-form.component.ts"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,4EAA4E,CAAC;;AAE7H,0GAA0G;AAC1G,qBAMa,yBAA0B,SAAQ,+BAA+B;IAC1E,6EAA6E;IACtE,QAAQ,UAAS;IAExB;;;;;OAKG;IACI,MAAM,UAAS;IAEtB,8FAA8F;IACvF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC,2GAA2G;IACpG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C,qGAAqG;IAC9F,kBAAkB,IAAI,SAAS,MAAM,EAAE,GAAG,IAAI;IAIrD;;;;;OAKG;YACW,gBAAgB;IAQ9B;;;;;;;;;OASG;YACW,sBAAsB;IAepC;;;;;OAKG;IACa,QAAQ,IAAI,gBAAgB;yCA3EnC,yBAAyB;2CAAzB,yBAAyB;CA4GrC;AAED,gCAAgC;AAChC,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -29,18 +29,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
29
29
  *
30
30
  * `Deal.Amount` is a CACHED ANSWER from Orders, stamped with `AmountIsComputed` / `AmountComputedAt` /
31
31
  * `AmountSourceHash`. Sales never recomputes it — this form does not add, multiply or round anything. It
32
- * only COMPARES timestamps: if a line has been touched since the amount was computed, the amount on
33
- * screen predates the line set it claims to describe, and the form says so.
32
+ * only COMPARES the cached figure with the order's current total: if they differ, the number on screen
33
+ * no longer describes the order it claims to, and the form says so.
34
34
  *
35
35
  * That comparison is not pricing. It is the difference between showing a number and vouching for one.
36
36
  *
37
+ * It compares the NUMBER, not a timestamp, and `amount-freshness.ts` records why: the timestamp test
38
+ * asked whether a line had been touched, and closing a deal touches every line without moving a price —
39
+ * so every Won deal warned forever about an amount it was simultaneously forbidden to change
40
+ * (golive#230).
41
+ *
37
42
  * @module @mj-biz-apps/sales-ng
38
43
  */
39
44
  import { Component } from '@angular/core';
40
- import { RunView } from '@memberjunction/core';
41
45
  import { RegisterClass } from '@memberjunction/global';
42
46
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
43
- import { DEAL_FIELDS_EDITABLE_WHILE_LOCKED, ResolveDealLockState } from '@mj-biz-apps/sales-entities';
47
+ import { DealFieldsEditableWhileLocked, ResolveDealAmountFreshness, ResolveDealLockState, } from '@mj-biz-apps/sales-entities';
44
48
  import { mjBizAppsSalesDealFormComponent } from '../generated/Entities/mjBizAppsSalesDeal/mjbizappssalesdeal.form.component';
45
49
  import * as i0 from "@angular/core";
46
50
  import * as i1 from "@memberjunction/ng-base-forms";
@@ -84,16 +88,20 @@ function DealFormComponentExtended_Conditional_57_Template(rf, ctx) { if (rf & 1
84
88
  i0.ɵɵadvance();
85
89
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ_BizApps_Sales: Deal Payment Schedules", "DealID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ_BizApps_Sales: Deal Payment Schedules", "DealID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJBizAppsSalesDealPaymentSchedules"))("ShowToolbar", true);
86
90
  } }
87
- // The lines whose freshness the stale-amount notice checks are ORDER lines now (S-US4), reached
88
- // through the deal's embedded order rather than by DealID -- see the filter below.
89
- const E_ORDER_LINE = 'MJ_BizApps_Orders: Order Lines';
90
91
  /** See `deal-stage-event-form.component.ts` for why the priority is explicit rather than import-order. */
91
92
  let DealFormComponentExtended = class DealFormComponentExtended extends mjBizAppsSalesDealFormComponent {
92
93
  /** True when the PERSISTED status locks the deal. Resolved once per load. */
93
94
  IsLocked = false;
95
+ /**
96
+ * Whether the locking status is a LOSS — which decides exactly one field.
97
+ *
98
+ * golive#206 keeps Loss Notes editable on a lost deal and frozen on a won one. Resolved once, with
99
+ * the lock, by `ResolveDealLockState`, and handed to the panels; nothing here reads a status name.
100
+ */
101
+ IsLost = false;
94
102
  /** Shown when locked, so the greyed-out-ness the form cannot render is at least explained. */
95
103
  LockNotice = null;
96
- /** Set when `Deal.Amount` predates its line set. Null when the amount is trustworthy or absent. */
104
+ /** Set when `Deal.Amount` no longer matches its order's total. Null when trustworthy, absent or locked. */
97
105
  StaleAmountNotice = null;
98
106
  async ngOnInit() {
99
107
  await super.ngOnInit();
@@ -103,7 +111,7 @@ let DealFormComponentExtended = class DealFormComponentExtended extends mjBizApp
103
111
  }
104
112
  /** The fields a user may still edit right now — everything when open, the carve-outs when locked. */
105
113
  EditableFieldNames() {
106
- return this.IsLocked ? [...DEAL_FIELDS_EDITABLE_WHILE_LOCKED] : null;
114
+ return this.IsLocked ? [...DealFieldsEditableWhileLocked(this.IsLost)] : null;
107
115
  }
108
116
  /**
109
117
  * Resolves the lock through the SHARED rule in `sales-entities`.
@@ -115,50 +123,31 @@ let DealFormComponentExtended = class DealFormComponentExtended extends mjBizApp
115
123
  const persisted = this.record?.GetFieldByName('DealStatusTypeID')?.OldValue;
116
124
  const lock = await ResolveDealLockState(persisted);
117
125
  this.IsLocked = lock.IsLocked;
126
+ this.IsLost = lock.IsLost;
118
127
  this.LockNotice = lock.Notice;
119
128
  }
120
129
  /**
121
- * Compares the amount's stamp against the lines it claims to describe. No arithmetic.
130
+ * Compares the cached amount against the order it claims to describe. No arithmetic.
131
+ *
132
+ * The rule lives in `ResolveDealAmountFreshness` so this form and the deal hero cannot answer it
133
+ * differently — the same reason `ResolveDealLockState` is shared. Read that file's header for why
134
+ * this is no longer a timestamp comparison (golive#230).
135
+ *
136
+ * ORDER MATTERS: `resolveCloseLock()` runs first in `ngOnInit`, so `IsLocked` is settled before it
137
+ * is passed here. A locked deal never warns.
122
138
  */
123
139
  async resolveAmountFreshness() {
124
- const computedAt = this.record?.Get?.('AmountComputedAt');
125
- const isComputed = this.record?.Get?.('AmountIsComputed');
126
- if (!isComputed || !computedAt || !this.record?.Get?.('ID')) {
140
+ this.StaleAmountNotice = null;
141
+ if (!this.record?.Get?.('ID')) {
127
142
  return;
128
143
  }
129
- // No order means no lines, so nothing can have gone stale.
130
- const orderID = this.record.Get('OrderID');
131
- if (!orderID) {
132
- return;
133
- }
134
- const rv = new RunView();
135
- /**
136
- * `__mj_UpdatedAt` is typed as `string | Date` because BOTH arrive.
137
- *
138
- * MJ v6 hands back real `Date` objects where v5 handed back ISO strings, and this repo has already
139
- * been caught by that once (`7e55bae`, "dates arrive as Date, not string — the Sales UI assumed
140
- * string"). Typing it `string` compiles perfectly and would be wrong at runtime the moment the
141
- * value is used as one. `new Date()` accepts either, so the comparison below is safe on both.
142
- */
143
- const result = await rv.RunView({
144
- EntityName: E_ORDER_LINE,
145
- // BY OrderHeaderID, NOT DealID. An order line carries no DealID -- the deal reaches its lines
146
- // through OrderID. Filtering on the deal's own key would have matched nothing and the notice
147
- // would simply never appear again: a warning that silently stops warning.
148
- ExtraFilter: `OrderHeaderID = '${String(orderID).replace(/'/g, "''")}'`,
149
- OrderBy: '__mj_UpdatedAt DESC',
150
- ResultType: 'simple',
151
- Fields: ['__mj_UpdatedAt'],
144
+ const freshness = await ResolveDealAmountFreshness({
145
+ IsLocked: this.IsLocked,
146
+ AmountIsComputed: this.record.Get('AmountIsComputed'),
147
+ Amount: this.record.Get('Amount'),
148
+ OrderID: this.record.Get('OrderID'),
152
149
  });
153
- const newest = result?.Success ? (result.Results ?? [])[0]?.__mj_UpdatedAt : undefined;
154
- if (!newest) {
155
- return;
156
- }
157
- if (new Date(newest).getTime() > new Date(computedAt).getTime()) {
158
- this.StaleAmountNotice =
159
- 'A line has changed since this amount was priced, so the total shown is out of date. ' +
160
- 'Reprice the deal to get a current figure from Orders — Sales does not recalculate it here.';
161
- }
150
+ this.StaleAmountNotice = freshness.Notice;
162
151
  }
163
152
  /**
164
153
  * Refuses a locked edit BEFORE the round trip, naming the fields.
@@ -171,7 +160,8 @@ let DealFormComponentExtended = class DealFormComponentExtended extends mjBizApp
171
160
  if (!this.IsLocked || !this.record) {
172
161
  return result;
173
162
  }
174
- const frozen = this.record.Fields.filter((f) => f.Dirty && !DEAL_FIELDS_EDITABLE_WHILE_LOCKED.has(f.Name));
163
+ const editable = DealFieldsEditableWhileLocked(this.IsLost);
164
+ const frozen = this.record.Fields.filter((f) => f.Dirty && !editable.has(f.Name));
175
165
  if (frozen.length === 0) {
176
166
  return result;
177
167
  }
@@ -179,8 +169,17 @@ let DealFormComponentExtended = class DealFormComponentExtended extends mjBizApp
179
169
  for (const field of frozen) {
180
170
  result.Errors.push({
181
171
  Source: field.Name,
182
- Message: 'Frozen: this deal is closed and locked. Reopen it through Sales.ReopenDeal, which ' +
183
- 'records a reason, if this genuinely needs to change.',
172
+ /**
173
+ * golive#207 row 17, verbatim: "This deal is closed. Set the status back to Open
174
+ * before changing this field."
175
+ *
176
+ * The old text named `Sales.ReopenDeal` — an API operation — to a person who had just
177
+ * typed into a form field. It also said "Frozen:" twice over, once as a prefix and
178
+ * once as the sentence. What a person needs here is the one action that unblocks them,
179
+ * and since golive#205 that action is genuinely available from this form: the status
180
+ * control routes to the reopen.
181
+ */
182
+ Message: 'This deal is closed. Set the status back to Open before changing this field.',
184
183
  Value: field.Value,
185
184
  Type: 'Failure',
186
185
  });
@@ -338,7 +337,7 @@ export { DealFormComponentExtended };
338
337
  type: Component,
339
338
  args: [{ standalone: false, selector: 'mjs-deal-form', template: "<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n FIELD PANELS\n ======================================== -->\n <!-- Details Section -->\n <mj-collapsible-panel\n SectionKey=\"details\"\n SectionName=\"Details\"\n Icon=\"fa fa-align-left\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"DealNumber\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PipelineID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PipelineStageID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"DealTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"DealStatusTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AccountID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrimaryContactID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"BillingContactID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CompanyID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OwnerEmployeeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Amount\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AmountIsComputed\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AmountComputedAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AmountSourceHash\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CurrencyID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"MRR\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ARR\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"TermMonths\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EstimatedProjectWeeks\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ExecutionDate\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StartDate\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ExpectedCloseDate\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ActualCloseDate\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Probability\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ForecastCategoryTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"LossReasonID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"LossNotes\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"LeadSourceTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CampaignID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContractID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"RenewsContractID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AutoRenew\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AnnualIncreasePctOverride\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CancellationNoticeDaysOverride\"\n Type=\"number\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PaymentMethod\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContractVariances\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"NextStep\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"NextStepDate\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ClosedAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ClosedByUserID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OrderID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StandardAgreementModified\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n\n <!-- Deal Contact Roles Section -->\n <mj-collapsible-panel\n SectionKey=\"mJBizAppsSalesDealContactRoles\"\n SectionName=\"Deal Contact Roles\"\n Icon=\"fa fa-table\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJBizAppsSalesDealContactRoles')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ_BizApps_Sales: Deal Contact Roles','DealID')\"\n [NewRecordValues]=\"NewRecordValues('MJ_BizApps_Sales: Deal Contact Roles','DealID')\"\n [AllowLoad]=\"IsSectionExpanded('mJBizAppsSalesDealContactRoles')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJBizAppsSalesDealContactRoles', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Deal Stage Events Section -->\n <mj-collapsible-panel\n SectionKey=\"mJBizAppsSalesDealStageEvents\"\n SectionName=\"Deal Stage Events\"\n Icon=\"fa fa-table\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJBizAppsSalesDealStageEvents')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ_BizApps_Sales: Deal Stage Events','DealID')\"\n [NewRecordValues]=\"NewRecordValues('MJ_BizApps_Sales: Deal Stage Events','DealID')\"\n [AllowLoad]=\"IsSectionExpanded('mJBizAppsSalesDealStageEvents')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJBizAppsSalesDealStageEvents', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Deal Team Members Section -->\n <mj-collapsible-panel\n SectionKey=\"mJBizAppsSalesDealTeamMembers\"\n SectionName=\"Deal Team Members\"\n Icon=\"fa fa-table\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJBizAppsSalesDealTeamMembers')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ_BizApps_Sales: Deal Team Members','DealID')\"\n [NewRecordValues]=\"NewRecordValues('MJ_BizApps_Sales: Deal Team Members','DealID')\"\n [AllowLoad]=\"IsSectionExpanded('mJBizAppsSalesDealTeamMembers')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJBizAppsSalesDealTeamMembers', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Deal Payment Schedules Section -->\n <mj-collapsible-panel\n SectionKey=\"mJBizAppsSalesDealPaymentSchedules\"\n SectionName=\"Deal Payment Schedules\"\n Icon=\"fa fa-table\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJBizAppsSalesDealPaymentSchedules')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ_BizApps_Sales: Deal Payment Schedules','DealID')\"\n [NewRecordValues]=\"NewRecordValues('MJ_BizApps_Sales: Deal Payment Schedules','DealID')\"\n [AllowLoad]=\"IsSectionExpanded('mJBizAppsSalesDealPaymentSchedules')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJBizAppsSalesDealPaymentSchedules', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n " }]
340
339
  }], null, null); })();
341
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DealFormComponentExtended, { className: "DealFormComponentExtended", filePath: "lib/custom/deal-form.component.ts", lineNumber: 53 }); })();
340
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DealFormComponentExtended, { className: "DealFormComponentExtended", filePath: "lib/custom/deal-form.component.ts", lineNumber: 57 }); })();
342
341
  /** Anti-tree-shaking anchor. */
343
342
  export function LoadDealForm() {
344
343
  /* keeps the registration alive */
@@ -1 +1 @@
1
- {"version":3,"file":"deal-form.component.js","sourceRoot":"","sources":["../../../src/lib/custom/deal-form.component.ts","../../../src/lib/generated/Entities/mjBizAppsSalesDeal/mjbizappssalesdeal.form.component.html"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGtG,OAAO,EAAE,+BAA+B,EAAE,MAAM,4EAA4E,CAAC;;;;;IC+XjH,AADJ,2BAAK,uCAQI;IADD,AADA,gOAAY,6BAAsB,KAAC,6NAClB,0BAAmB,gCAAgC,uBAAuB,KAAC;IAGpG,AADI,iBAA+B,EAC7B;;;IARE,cAAmG;IAGnG,AADA,AADA,AADA,yHAAmG,6FACf,yEACnB,qBAC7C;;;;IAqBxB,AADJ,2BAAK,uCAQI;IADD,AADA,gOAAY,6BAAsB,KAAC,6NAClB,0BAAmB,+BAA+B,uBAAuB,KAAC;IAGnG,AADI,iBAA+B,EAC7B;;;IARE,cAAkG;IAGlG,AADA,AADA,AADA,wHAAkG,4FACf,wEACnB,qBAC5C;;;;IAqBxB,AADJ,2BAAK,uCAQI;IADD,AADA,gOAAY,6BAAsB,KAAC,6NAClB,0BAAmB,+BAA+B,uBAAuB,KAAC;IAGnG,AADI,iBAA+B,EAC7B;;;IARE,cAAkG;IAGlG,AADA,AADA,AADA,wHAAkG,4FACf,wEACnB,qBAC5C;;;;IAqBxB,AADJ,2BAAK,uCAQI;IADD,AADA,gOAAY,6BAAsB,KAAC,6NAClB,0BAAmB,oCAAoC,uBAAuB,KAAC;IAGxG,AADI,iBAA+B,EAC7B;;;IARE,cAAuG;IAGvG,AADA,AADA,AADA,6HAAuG,iGACf,6EACnB,qBACjD;;AD5cpC,gGAAgG;AAChG,mFAAmF;AACnF,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAEtD,0GAA0G;AAOnG,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,+BAA+B;IAC1E,6EAA6E;IACtE,QAAQ,GAAG,KAAK,CAAC;IAExB,8FAA8F;IACvF,UAAU,GAAkB,IAAI,CAAC;IAExC,mGAAmG;IAC5F,iBAAiB,GAAkB,IAAI,CAAC;IAE/B,KAAK,CAAC,QAAQ;QAC1B,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,qGAAqG;IAC9F,kBAAkB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,iCAAiC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,kBAAkB,CAAC,EAAE,QAAqC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAqC,CAAC;QAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAA+B,CAAC;QACxF,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,OAAO;QACX,CAAC;QAED,2DAA2D;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB;;;;;;;WAOG;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAoC;YAC/D,UAAU,EAAE,YAAY;YACxB,8FAA8F;YAC9F,6FAA6F;YAC7F,0EAA0E;YAC1E,WAAW,EAAE,oBAAoB,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;YACvE,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,CAAC,gBAAgB,CAAC;SAC7B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QAED,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC,iBAAiB;gBAClB,sFAAsF;oBACtF,4FAA4F,CAAC;QACrG,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACa,QAAQ;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACnE,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,KAAK,CAAC,IAAI;gBAClB,OAAO,EACH,oFAAoF;oBACpF,sDAAsD;gBAC1D,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,SAAS;aAClB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;iRAjHQ,yBAAyB,yBAAzB,yBAAyB;6DAAzB,yBAAyB;YCpDtC,mDAK4D;YAAxD,AADA,AADA,AADA,AADA,oIAAY,0BAAsB,IAAC,+HAChB,uBAAmB,IAAC,+HACpB,uBAAmB,IAAC,iIACnB,wBAAoB,IAAC,+IACd,+BAA2B,IAAC;YAEvD,wCAAuK;YAMvK,+CAKgC;YAuX5B,AATA,AARA,AARA,AATA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AATA,AARA,AATA,AATA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AARA,AATA,AATA,AATA,AATA,AATA,AATA,AATA,AATA,AATA,AARA,AARA,mCAOiB,uBAQA,uBASA,uBASA,uBASA,uBASA,uBASA,yBASA,yBASA,yBASA,yBASA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBASA,yBASA,yBAQA,yBASA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBAQA,yBASA,yBAQA,yBAQA,yBASA,yBAQA;YAErB,iBAAuB;YAEvB,0CAAsK;YAOtK,iDAQ8B;YAC1B,0FAAsB;YAa1B,iBAAuB;YAGvB,iDAQ8B;YAC1B,0FAAsB;YAa1B,iBAAuB;YAGvB,iDAQ8B;YAC1B,0FAAsB;YAa1B,iBAAuB;YAGvB,iDAQ8B;YAC1B,0FAAsB;YAa1B,iBAAuB;YAEvB,0CAAuK;YAC3K,iBAA2B;;YA/fiB,AAAlB,mCAAiB,sBAAuB;YAO1C,cAAmC;YAA+D,AAAvB,AAAlB,AAAzD,wBAAA,4CAAmC,CAAA,sBAAuC,sBAAuB,gCAA4B;YAU7I,cAAa;YACb,AADA,0BAAa,gCACc;YAEvB,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAG3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAI3B,cAAiB;YAKjB,AADA,AAHA,AADA,mCAAiB,mBACC,0BAGG,gCACM;YAKf,cAAmC;YAA8D,AAAvB,AAAlB,AAAxD,wBAAA,4CAAmC,CAAA,sBAAsC,sBAAuB,gCAA4B;YAY5I,cAAa;YAGb,AADA,AADA,AADA,0BAAa,gCACc,wEACwC,0BAC1C;YACzB,cAYC;YAZD,8CAYC;YASD,cAAa;YAGb,AADA,AADA,AADA,0BAAa,gCACc,uEACuC,0BACzC;YACzB,cAYC;YAZD,8CAYC;YASD,cAAa;YAGb,AADA,AADA,AADA,0BAAa,gCACc,uEACuC,0BACzC;YACzB,cAYC;YAZD,8CAYC;YASD,cAAa;YAGb,AADA,AADA,AADA,0BAAa,gCACc,4EAC4C,0BAC9C;YACzB,cAYC;YAZD,8CAYC;YAGe,cAAmC;YAA+D,AAAvB,AAAlB,AAAzD,wBAAA,4CAAmC,CAAA,sBAAuC,sBAAuB,gCAA4B;;;AD1cxI,yBAAyB;IANrC,aAAa,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,CAAC,CAAC;GAMlD,yBAAyB,CAkHrC;;iFAlHY,yBAAyB;cALrC,SAAS;6BACM,KAAK,YACP,eAAe;;kFAGhB,yBAAyB;AAoHtC,gCAAgC;AAChC,MAAM,UAAU,YAAY;IACxB,kCAAkC;AACtC,CAAC"}
1
+ {"version":3,"file":"deal-form.component.js","sourceRoot":"","sources":["../../../src/lib/custom/deal-form.component.ts","../../../src/lib/generated/Entities/mjBizAppsSalesDeal/mjbizappssalesdeal.form.component.html"],"names":[],"mappings":"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"}