@mj-biz-apps/orders-ng 5.6.0 → 5.7.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.
- package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts +0 -4
- package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts.map +1 -1
- package/dist/lib/custom/OrderHeader/order-header-form.component.js +139 -284
- package/dist/lib/custom/OrderHeader/order-header-form.component.js.map +1 -1
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts +38 -1
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts.map +1 -1
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.js +526 -112
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.js.map +1 -1
- package/dist/lib/custom/OrderHeader/party-address-picker.component.d.ts +67 -0
- package/dist/lib/custom/OrderHeader/party-address-picker.component.d.ts.map +1 -0
- package/dist/lib/custom/OrderHeader/party-address-picker.component.js +430 -0
- package/dist/lib/custom/OrderHeader/party-address-picker.component.js.map +1 -0
- package/dist/lib/custom/Product/product-form.component.d.ts +1 -3
- package/dist/lib/custom/Product/product-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Product/product-form.component.js +6 -7
- package/dist/lib/custom/Product/product-form.component.js.map +1 -1
- package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js +4 -9
- package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js.map +1 -1
- package/dist/lib/custom/Product/widgets/product-pricing-widget.component.d.ts +69 -4
- package/dist/lib/custom/Product/widgets/product-pricing-widget.component.d.ts.map +1 -1
- package/dist/lib/custom/Product/widgets/product-pricing-widget.component.js +845 -314
- package/dist/lib/custom/Product/widgets/product-pricing-widget.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +10 -7
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +12 -0
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/data/entity-names.d.ts +2 -0
- package/dist/lib/data/entity-names.d.ts.map +1 -1
- package/dist/lib/data/entity-names.js +2 -0
- package/dist/lib/data/entity-names.js.map +1 -1
- package/dist/lib/data/orders-queries.d.ts +11 -2
- package/dist/lib/data/orders-queries.d.ts.map +1 -1
- package/dist/lib/data/orders-queries.js +29 -41
- package/dist/lib/data/orders-queries.js.map +1 -1
- package/dist/lib/form-panels/catalog-overviews.panels.d.ts.map +1 -1
- package/dist/lib/form-panels/catalog-overviews.panels.js +7 -6
- package/dist/lib/form-panels/catalog-overviews.panels.js.map +1 -1
- package/dist/lib/form-panels/commercial-overviews.panels.js +1 -1
- package/dist/lib/form-panels/commercial-overviews.panels.js.map +1 -1
- package/dist/lib/form-panels/product-header.panel.d.ts +4 -0
- package/dist/lib/form-panels/product-header.panel.d.ts.map +1 -1
- package/dist/lib/form-panels/product-header.panel.js +17 -4
- package/dist/lib/form-panels/product-header.panel.js.map +1 -1
- package/dist/lib/form-panels/product-widget.panels.d.ts.map +1 -1
- package/dist/lib/form-panels/product-widget.panels.js +8 -5
- package/dist/lib/form-panels/product-widget.panels.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js +4 -4
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.js +39 -27
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductPrice/mjbizappsordersproductprice.form.component.js.map +1 -1
- package/dist/lib/panels/catalog-list-price.d.ts +4 -0
- package/dist/lib/panels/catalog-list-price.d.ts.map +1 -0
- package/dist/lib/panels/catalog-list-price.js +23 -0
- package/dist/lib/panels/catalog-list-price.js.map +1 -0
- package/dist/lib/services/pricing-scheduler.service.d.ts.map +1 -1
- package/dist/lib/services/pricing-scheduler.service.js +6 -3
- package/dist/lib/services/pricing-scheduler.service.js.map +1 -1
- package/package.json +6 -4
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, inject } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { CompositeKey, Metadata, } from '@memberjunction/core';
|
|
4
|
+
import { CompositeKey, Metadata, RunView, } from '@memberjunction/core';
|
|
5
5
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
6
|
import { BaseFormsModule, } from '@memberjunction/ng-base-forms';
|
|
7
|
-
import { OrderLineEntity, ClampLineQuantity, } from '@mj-biz-apps/orders-entities';
|
|
7
|
+
import { OrderLineEntity, ClampLineQuantity, ListApplicablePrices, LoadOrdersEngine, OrdersEngine, loadApplicabilityContext, moneyEqual, priceOverrideCatalogInstalled, userPriceOverrideKind, } from '@mj-biz-apps/orders-entities';
|
|
8
8
|
import { MJOConsequenceChipComponent, MJOPriceSourceBadgeComponent } from '../../panels/chips.component.js';
|
|
9
9
|
import { MJOMoneyPipe } from '../../panels/money-format.js';
|
|
10
10
|
import { MJO_ENTITIES } from '../../data/entity-names.js';
|
|
@@ -12,9 +12,11 @@ import { GetCatalogOptions } from '../../data/orders-queries.js';
|
|
|
12
12
|
import { MJOPricingScheduler } from '../../services/pricing-scheduler.service.js';
|
|
13
13
|
import { ExtensionCollapsedHint, ExtensionToggleLabel, } from './line-extension-fields.js';
|
|
14
14
|
import { CachedExtensionEntityInfo, CachedExtensionFormConfig } from './line-extension-cache.js';
|
|
15
|
+
import { anyFieldIsDirty } from '@mj-biz-apps/orders-entities';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "@angular/forms";
|
|
17
18
|
import * as i2 from "@memberjunction/ng-base-forms";
|
|
19
|
+
const _c0 = ["pickerHost"];
|
|
18
20
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
19
21
|
function MJOOrderLinesEditorComponent_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
20
22
|
i0.ɵɵtext(0);
|
|
@@ -26,14 +28,14 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_7_Template(rf, ctx) { if
|
|
|
26
28
|
} }
|
|
27
29
|
function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
28
30
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
29
|
-
i0.ɵɵelementStart(0, "button",
|
|
31
|
+
i0.ɵɵelementStart(0, "button", 24);
|
|
30
32
|
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Bump(line_r2, -1)); });
|
|
31
33
|
i0.ɵɵtext(1, "\u2212");
|
|
32
34
|
i0.ɵɵelementEnd();
|
|
33
|
-
i0.ɵɵelementStart(2, "input",
|
|
35
|
+
i0.ɵɵelementStart(2, "input", 25);
|
|
34
36
|
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r4); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SetQuantity(line_r2, $event)); });
|
|
35
37
|
i0.ɵɵelementEnd();
|
|
36
|
-
i0.ɵɵelementStart(3, "button",
|
|
38
|
+
i0.ɵɵelementStart(3, "button", 26);
|
|
37
39
|
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Bump(line_r2, 1)); });
|
|
38
40
|
i0.ɵɵtext(4, "+");
|
|
39
41
|
i0.ɵɵelementEnd();
|
|
@@ -46,7 +48,7 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_9_Template(rf, ctx) { if
|
|
|
46
48
|
i0.ɵɵproperty("disabled", ctx_r2.QuantityAtMax(line_r2));
|
|
47
49
|
} }
|
|
48
50
|
function MJOOrderLinesEditorComponent_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
-
i0.ɵɵelementStart(0, "span",
|
|
51
|
+
i0.ɵɵelementStart(0, "span", 10);
|
|
50
52
|
i0.ɵɵtext(1);
|
|
51
53
|
i0.ɵɵelementEnd();
|
|
52
54
|
} if (rf & 2) {
|
|
@@ -55,18 +57,42 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_10_Template(rf, ctx) { i
|
|
|
55
57
|
i0.ɵɵtextInterpolate(line_r2.Quantity);
|
|
56
58
|
} }
|
|
57
59
|
function MJOOrderLinesEditorComponent_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
-
i0.ɵɵ
|
|
60
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
61
|
+
i0.ɵɵelementStart(0, "button", 27);
|
|
62
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_16_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleOverrideEditor(line_r2)); });
|
|
63
|
+
i0.ɵɵelement(1, "i", 28);
|
|
64
|
+
i0.ɵɵelementEnd();
|
|
65
|
+
} if (rf & 2) {
|
|
66
|
+
const line_r2 = i0.ɵɵnextContext().$implicit;
|
|
67
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
68
|
+
i0.ɵɵattribute("aria-expanded", ctx_r2.IsOverrideEditorOpen(line_r2))("aria-label", ctx_r2.IsOverridden(line_r2) ? "Edit price override" : "Override price");
|
|
69
|
+
} }
|
|
70
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
72
|
+
i0.ɵɵtext(1, "overridden");
|
|
73
|
+
i0.ɵɵelementEnd();
|
|
74
|
+
} }
|
|
75
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelement(0, "mjo-price-source-badge", 16);
|
|
77
|
+
} if (rf & 2) {
|
|
78
|
+
let tmp_11_0;
|
|
79
|
+
const line_r2 = i0.ɵɵnextContext().$implicit;
|
|
80
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
81
|
+
i0.ɵɵproperty("Source", ((tmp_11_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_11_0.PriceSource) ?? null)("Settled", !ctx_r2.Pricing.Loading)("Overridden", false);
|
|
82
|
+
} }
|
|
83
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
59
85
|
i0.ɵɵtext(1);
|
|
60
86
|
i0.ɵɵelementEnd();
|
|
61
87
|
} if (rf & 2) {
|
|
62
88
|
i0.ɵɵadvance();
|
|
63
89
|
i0.ɵɵtextInterpolate(ctx);
|
|
64
90
|
} }
|
|
65
|
-
function
|
|
66
|
-
const
|
|
67
|
-
i0.ɵɵelementStart(0, "button",
|
|
68
|
-
i0.ɵɵlistener("click", function
|
|
69
|
-
i0.ɵɵelement(1, "i",
|
|
91
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
93
|
+
i0.ɵɵelementStart(0, "button", 29);
|
|
94
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Remove(line_r2)); });
|
|
95
|
+
i0.ɵɵelement(1, "i", 30);
|
|
70
96
|
i0.ɵɵelementEnd();
|
|
71
97
|
} if (rf & 2) {
|
|
72
98
|
let tmp_11_0;
|
|
@@ -74,39 +100,121 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_20_Template(rf, ctx) { i
|
|
|
74
100
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
75
101
|
i0.ɵɵattribute("aria-label", "Remove " + (((tmp_11_0 = ctx_r2.ProductFor(line_r2)) == null ? null : tmp_11_0.Name) ?? "line"));
|
|
76
102
|
} }
|
|
77
|
-
function
|
|
78
|
-
i0.ɵɵelementStart(0, "
|
|
103
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
104
|
+
i0.ɵɵelementStart(0, "option", 34);
|
|
105
|
+
i0.ɵɵtext(1, "Custom amount");
|
|
106
|
+
i0.ɵɵelementEnd();
|
|
107
|
+
} }
|
|
108
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_24_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelementStart(0, "option", 35);
|
|
110
|
+
i0.ɵɵtext(1);
|
|
111
|
+
i0.ɵɵpipe(2, "mjoMoney");
|
|
112
|
+
i0.ɵɵelementEnd();
|
|
113
|
+
} if (rf & 2) {
|
|
114
|
+
const price_r8 = ctx.$implicit;
|
|
115
|
+
i0.ɵɵproperty("value", price_r8.ID);
|
|
116
|
+
i0.ɵɵadvance();
|
|
117
|
+
i0.ɵɵtextInterpolate2("", price_r8.Name, " \u00B7 ", i0.ɵɵpipeBind1(2, 3, price_r8.UnitPrice));
|
|
118
|
+
} }
|
|
119
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
121
|
+
i0.ɵɵelementStart(0, "input", 42);
|
|
122
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_8_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r9); const line_r2 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.TypeAmount(line_r2, $event)); });
|
|
123
|
+
i0.ɵɵelementEnd();
|
|
124
|
+
} if (rf & 2) {
|
|
125
|
+
const line_r2 = i0.ɵɵnextContext(2).$implicit;
|
|
126
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
127
|
+
i0.ɵɵproperty("value", ctx_r2.DisplayUnit(line_r2));
|
|
128
|
+
} }
|
|
129
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
131
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 31)(2, "select", 32);
|
|
132
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_select_change_2_listener($event) { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.PickNamedPrice(line_r2, $event)); });
|
|
133
|
+
i0.ɵɵelementStart(3, "option", 33);
|
|
134
|
+
i0.ɵɵtext(4);
|
|
135
|
+
i0.ɵɵelementEnd();
|
|
136
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_5_Template, 2, 0, "option", 34);
|
|
137
|
+
i0.ɵɵrepeaterCreate(6, MJOOrderLinesEditorComponent_For_2_Conditional_24_For_7_Template, 3, 5, "option", 35, _forTrack0);
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵconditionalCreate(8, MJOOrderLinesEditorComponent_For_2_Conditional_24_Conditional_8_Template, 1, 1, "input", 36);
|
|
140
|
+
i0.ɵɵelementEnd();
|
|
141
|
+
i0.ɵɵelementStart(9, "label", 37)(10, "span");
|
|
142
|
+
i0.ɵɵtext(11, "Override Explanation");
|
|
143
|
+
i0.ɵɵelementEnd();
|
|
144
|
+
i0.ɵɵelementStart(12, "textarea", 38);
|
|
145
|
+
i0.ɵɵlistener("input", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_textarea_input_12_listener($event) { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SetOverrideReason(line_r2, $event)); });
|
|
146
|
+
i0.ɵɵelementEnd()();
|
|
147
|
+
i0.ɵɵelementStart(13, "div", 39)(14, "button", 40);
|
|
148
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.DoneOverrideEditor(line_r2)); });
|
|
149
|
+
i0.ɵɵtext(15, "Done");
|
|
150
|
+
i0.ɵɵelementEnd();
|
|
151
|
+
i0.ɵɵelementStart(16, "button", 41);
|
|
152
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_24_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r7); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetOverride(line_r2)); });
|
|
153
|
+
i0.ɵɵtext(17, "Use Default Price");
|
|
154
|
+
i0.ɵɵelementEnd()()();
|
|
155
|
+
} if (rf & 2) {
|
|
156
|
+
let tmp_11_0;
|
|
157
|
+
const line_r2 = i0.ɵɵnextContext().$implicit;
|
|
158
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
159
|
+
i0.ɵɵattribute("aria-label", "Override price for " + (((tmp_11_0 = ctx_r2.ProductFor(line_r2)) == null ? null : tmp_11_0.Name) ?? "line"));
|
|
160
|
+
i0.ɵɵadvance(2);
|
|
161
|
+
i0.ɵɵproperty("value", ctx_r2.SelectedPriceID(line_r2));
|
|
162
|
+
i0.ɵɵadvance(2);
|
|
163
|
+
i0.ɵɵtextInterpolate(ctx_r2.DefaultLabel(line_r2));
|
|
164
|
+
i0.ɵɵadvance();
|
|
165
|
+
i0.ɵɵconditional(ctx_r2.OverrideKind === "any" ? 5 : -1);
|
|
166
|
+
i0.ɵɵadvance();
|
|
167
|
+
i0.ɵɵrepeater(ctx_r2.ApplicableFor(line_r2));
|
|
168
|
+
i0.ɵɵadvance(2);
|
|
169
|
+
i0.ɵɵconditional(ctx_r2.ShowCustomAmount(line_r2) ? 8 : -1);
|
|
170
|
+
i0.ɵɵadvance();
|
|
171
|
+
i0.ɵɵclassProp("is-off", !ctx_r2.CanExplainOverride(line_r2));
|
|
172
|
+
i0.ɵɵadvance(3);
|
|
173
|
+
i0.ɵɵproperty("disabled", !ctx_r2.CanExplainOverride(line_r2))("value", ctx_r2.OverrideReasonText(line_r2));
|
|
174
|
+
} }
|
|
175
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
176
|
+
i0.ɵɵelementStart(0, "mjo-consequence-chip", 43);
|
|
79
177
|
i0.ɵɵtext(1, "Ships \u2014 holds the order at Posted");
|
|
80
178
|
i0.ɵɵelementEnd();
|
|
81
179
|
} }
|
|
82
|
-
function
|
|
83
|
-
i0.ɵɵelementStart(0, "mjo-consequence-chip",
|
|
180
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
181
|
+
i0.ɵɵelementStart(0, "mjo-consequence-chip", 44);
|
|
84
182
|
i0.ɵɵtext(1, "Untaxable");
|
|
85
183
|
i0.ɵɵelementEnd();
|
|
86
184
|
} }
|
|
87
|
-
function
|
|
88
|
-
i0.ɵɵelementStart(0, "mjo-consequence-chip",
|
|
185
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
+
i0.ɵɵelementStart(0, "mjo-consequence-chip", 45);
|
|
89
187
|
i0.ɵɵtext(1);
|
|
90
188
|
i0.ɵɵelementEnd();
|
|
91
189
|
} if (rf & 2) {
|
|
92
|
-
const
|
|
190
|
+
const product_r10 = i0.ɵɵnextContext();
|
|
93
191
|
i0.ɵɵadvance();
|
|
94
|
-
i0.ɵɵtextInterpolate1("Revenue to ",
|
|
192
|
+
i0.ɵɵtextInterpolate1("Revenue to ", product_r10.CompanyName);
|
|
95
193
|
} }
|
|
96
|
-
function
|
|
97
|
-
i0.ɵɵconditionalCreate(0,
|
|
98
|
-
i0.ɵɵconditionalCreate(1,
|
|
99
|
-
i0.ɵɵconditionalCreate(2,
|
|
194
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
195
|
+
i0.ɵɵconditionalCreate(0, MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_0_Template, 2, 0, "mjo-consequence-chip", 43);
|
|
196
|
+
i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_1_Template, 2, 0, "mjo-consequence-chip", 44);
|
|
197
|
+
i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_For_2_Conditional_26_Conditional_2_Template, 2, 1, "mjo-consequence-chip", 45);
|
|
100
198
|
} if (rf & 2) {
|
|
101
|
-
const
|
|
102
|
-
i0.ɵɵ
|
|
199
|
+
const product_r10 = ctx;
|
|
200
|
+
const line_r2 = i0.ɵɵnextContext().$implicit;
|
|
201
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
202
|
+
i0.ɵɵconditional(product_r10.TypeName === "Goods" ? 0 : -1);
|
|
203
|
+
i0.ɵɵadvance();
|
|
204
|
+
i0.ɵɵconditional(!product_r10.Taxable ? 1 : -1);
|
|
103
205
|
i0.ɵɵadvance();
|
|
104
|
-
i0.ɵɵconditional(
|
|
206
|
+
i0.ɵɵconditional(ctx_r2.ShowsForeignRevenue(line_r2) ? 2 : -1);
|
|
207
|
+
} }
|
|
208
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
210
|
+
i0.ɵɵtext(1);
|
|
211
|
+
i0.ɵɵelementEnd();
|
|
212
|
+
} if (rf & 2) {
|
|
105
213
|
i0.ɵɵadvance();
|
|
106
|
-
i0.ɵɵ
|
|
214
|
+
i0.ɵɵtextInterpolate(ctx);
|
|
107
215
|
} }
|
|
108
|
-
function
|
|
109
|
-
i0.ɵɵelementStart(0, "span",
|
|
216
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_28_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
217
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
110
218
|
i0.ɵɵtext(1);
|
|
111
219
|
i0.ɵɵelementEnd();
|
|
112
220
|
} if (rf & 2) {
|
|
@@ -115,18 +223,18 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_23_Conditional_5_Templat
|
|
|
115
223
|
i0.ɵɵadvance();
|
|
116
224
|
i0.ɵɵtextInterpolate(ctx_r2.ExtensionHint(line_r2));
|
|
117
225
|
} }
|
|
118
|
-
function
|
|
119
|
-
const
|
|
120
|
-
i0.ɵɵelementStart(0, "div",
|
|
121
|
-
i0.ɵɵlistener("click", function
|
|
122
|
-
i0.ɵɵelement(2, "i",
|
|
123
|
-
i0.ɵɵelementStart(3, "span",
|
|
226
|
+
function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
228
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "button", 47);
|
|
229
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const line_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleExtension(line_r2)); });
|
|
230
|
+
i0.ɵɵelement(2, "i", 48);
|
|
231
|
+
i0.ɵɵelementStart(3, "span", 49);
|
|
124
232
|
i0.ɵɵtext(4);
|
|
125
233
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵconditionalCreate(5,
|
|
234
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_2_Conditional_28_Conditional_5_Template, 2, 1, "span", 50);
|
|
127
235
|
i0.ɵɵelementEnd();
|
|
128
|
-
i0.ɵɵelementStart(6, "div",
|
|
129
|
-
i0.ɵɵlistener("FormCreated", function
|
|
236
|
+
i0.ɵɵelementStart(6, "div", 51)(7, "div", 52)(8, "mj-entity-form-host", 53);
|
|
237
|
+
i0.ɵɵlistener("FormCreated", function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template_mj_entity_form_host_FormCreated_8_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnExtensionFormCreated($event)); })("Navigate", function MJOOrderLinesEditorComponent_For_2_Conditional_28_Template_mj_entity_form_host_Navigate_8_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnExtensionNavigate($event)); });
|
|
130
238
|
i0.ɵɵelementEnd()()()();
|
|
131
239
|
} if (rf & 2) {
|
|
132
240
|
const line_r2 = i0.ɵɵnextContext().$implicit;
|
|
@@ -146,46 +254,48 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_23_Template(rf, ctx) { i
|
|
|
146
254
|
} }
|
|
147
255
|
function MJOOrderLinesEditorComponent_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
148
256
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
149
|
-
i0.ɵɵelementStart(0, "div",
|
|
257
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 5)(2, "div", 6)(3, "button", 7);
|
|
150
258
|
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_2_Template_button_click_3_listener($event) { const line_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenProduct(line_r2, $event)); });
|
|
151
259
|
i0.ɵɵtext(4);
|
|
152
260
|
i0.ɵɵelementEnd();
|
|
153
|
-
i0.ɵɵelementStart(5, "div",
|
|
261
|
+
i0.ɵɵelementStart(5, "div", 8);
|
|
154
262
|
i0.ɵɵtext(6);
|
|
155
263
|
i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_For_2_Conditional_7_Template, 1, 1);
|
|
156
264
|
i0.ɵɵelementEnd()();
|
|
157
|
-
i0.ɵɵelementStart(8, "div",
|
|
158
|
-
i0.ɵɵconditionalCreate(9, MJOOrderLinesEditorComponent_For_2_Conditional_9_Template, 5, 2)(10, MJOOrderLinesEditorComponent_For_2_Conditional_10_Template, 2, 1, "span",
|
|
265
|
+
i0.ɵɵelementStart(8, "div", 9);
|
|
266
|
+
i0.ɵɵconditionalCreate(9, MJOOrderLinesEditorComponent_For_2_Conditional_9_Template, 5, 2)(10, MJOOrderLinesEditorComponent_For_2_Conditional_10_Template, 2, 1, "span", 10);
|
|
159
267
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵelementStart(11, "div",
|
|
161
|
-
i0.ɵɵtext(
|
|
162
|
-
i0.ɵɵpipe(
|
|
268
|
+
i0.ɵɵelementStart(11, "div", 11)(12, "div", 12)(13, "div", 13);
|
|
269
|
+
i0.ɵɵtext(14);
|
|
270
|
+
i0.ɵɵpipe(15, "mjoMoney");
|
|
163
271
|
i0.ɵɵelementEnd();
|
|
164
|
-
i0.ɵɵ
|
|
165
|
-
i0.ɵɵconditionalCreate(16, MJOOrderLinesEditorComponent_For_2_Conditional_16_Template, 2, 1, "div", 13);
|
|
272
|
+
i0.ɵɵconditionalCreate(16, MJOOrderLinesEditorComponent_For_2_Conditional_16_Template, 2, 2, "button", 14);
|
|
166
273
|
i0.ɵɵelementEnd();
|
|
167
|
-
i0.ɵɵ
|
|
168
|
-
i0.ɵɵ
|
|
169
|
-
i0.ɵɵpipe(19, "mjoMoney");
|
|
274
|
+
i0.ɵɵconditionalCreate(17, MJOOrderLinesEditorComponent_For_2_Conditional_17_Template, 2, 0, "span", 15)(18, MJOOrderLinesEditorComponent_For_2_Conditional_18_Template, 1, 3, "mjo-price-source-badge", 16);
|
|
275
|
+
i0.ɵɵconditionalCreate(19, MJOOrderLinesEditorComponent_For_2_Conditional_19_Template, 2, 1, "div", 17);
|
|
170
276
|
i0.ɵɵelementEnd();
|
|
171
|
-
i0.ɵɵ
|
|
277
|
+
i0.ɵɵelementStart(20, "div", 18);
|
|
278
|
+
i0.ɵɵtext(21);
|
|
279
|
+
i0.ɵɵpipe(22, "mjoMoney");
|
|
172
280
|
i0.ɵɵelementEnd();
|
|
173
|
-
i0.ɵɵ
|
|
174
|
-
i0.ɵɵconditionalCreate(22, MJOOrderLinesEditorComponent_For_2_Conditional_22_Template, 3, 3);
|
|
281
|
+
i0.ɵɵconditionalCreate(23, MJOOrderLinesEditorComponent_For_2_Conditional_23_Template, 2, 1, "button", 19);
|
|
175
282
|
i0.ɵɵelementEnd();
|
|
176
|
-
i0.ɵɵconditionalCreate(
|
|
283
|
+
i0.ɵɵconditionalCreate(24, MJOOrderLinesEditorComponent_For_2_Conditional_24_Template, 18, 9, "div", 20);
|
|
284
|
+
i0.ɵɵelementStart(25, "div", 21);
|
|
285
|
+
i0.ɵɵconditionalCreate(26, MJOOrderLinesEditorComponent_For_2_Conditional_26_Template, 3, 3);
|
|
286
|
+
i0.ɵɵelementEnd();
|
|
287
|
+
i0.ɵɵconditionalCreate(27, MJOOrderLinesEditorComponent_For_2_Conditional_27_Template, 2, 1, "div", 22);
|
|
288
|
+
i0.ɵɵconditionalCreate(28, MJOOrderLinesEditorComponent_For_2_Conditional_28_Template, 9, 12, "div", 23);
|
|
177
289
|
i0.ɵɵelementEnd();
|
|
178
290
|
} if (rf & 2) {
|
|
179
291
|
let tmp_10_0;
|
|
180
292
|
let tmp_11_0;
|
|
181
293
|
let tmp_12_0;
|
|
182
|
-
let tmp_15_0;
|
|
183
|
-
let tmp_16_0;
|
|
184
294
|
let tmp_18_0;
|
|
185
295
|
let tmp_19_0;
|
|
186
|
-
let tmp_20_0;
|
|
187
296
|
let tmp_22_0;
|
|
188
297
|
let tmp_23_0;
|
|
298
|
+
let tmp_24_0;
|
|
189
299
|
const line_r2 = ctx.$implicit;
|
|
190
300
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
191
301
|
i0.ɵɵadvance(4);
|
|
@@ -198,110 +308,117 @@ function MJOOrderLinesEditorComponent_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
198
308
|
i0.ɵɵclassProp("is-locked", !ctx_r2.EditMode || ctx_r2.QuantityCappedToOne(line_r2));
|
|
199
309
|
i0.ɵɵadvance();
|
|
200
310
|
i0.ɵɵconditional(ctx_r2.EditMode && !ctx_r2.QuantityCappedToOne(line_r2) ? 9 : 10);
|
|
201
|
-
i0.ɵɵadvance(
|
|
202
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(
|
|
311
|
+
i0.ɵɵadvance(5);
|
|
312
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(15, 16, ctx_r2.DisplayUnit(line_r2)));
|
|
203
313
|
i0.ɵɵadvance(2);
|
|
204
|
-
i0.ɵɵ
|
|
314
|
+
i0.ɵɵconditional(ctx_r2.CanOverride ? 16 : -1);
|
|
205
315
|
i0.ɵɵadvance();
|
|
206
|
-
i0.ɵɵconditional(
|
|
316
|
+
i0.ɵɵconditional(ctx_r2.IsOverridden(line_r2) ? 17 : 18);
|
|
207
317
|
i0.ɵɵadvance(2);
|
|
208
|
-
i0.ɵɵ
|
|
318
|
+
i0.ɵɵconditional((tmp_18_0 = (tmp_18_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_18_0.Error) ? 19 : -1, tmp_18_0);
|
|
209
319
|
i0.ɵɵadvance(2);
|
|
210
|
-
i0.ɵɵ
|
|
320
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(22, 18, (tmp_19_0 = ctx_r2.PricedLine(line_r2)) == null ? null : tmp_19_0.NetAmount));
|
|
211
321
|
i0.ɵɵadvance(2);
|
|
212
|
-
i0.ɵɵconditional(
|
|
322
|
+
i0.ɵɵconditional(ctx_r2.EditMode ? 23 : -1);
|
|
213
323
|
i0.ɵɵadvance();
|
|
214
|
-
i0.ɵɵconditional(
|
|
324
|
+
i0.ɵɵconditional(ctx_r2.IsOverrideEditorOpen(line_r2) ? 24 : -1);
|
|
325
|
+
i0.ɵɵadvance(2);
|
|
326
|
+
i0.ɵɵconditional((tmp_22_0 = ctx_r2.ProductFor(line_r2)) ? 26 : -1, tmp_22_0);
|
|
327
|
+
i0.ɵɵadvance();
|
|
328
|
+
i0.ɵɵconditional((tmp_23_0 = ctx_r2.OverrideReasonText(line_r2)) ? 27 : -1, tmp_23_0);
|
|
329
|
+
i0.ɵɵadvance();
|
|
330
|
+
i0.ɵɵconditional((tmp_24_0 = ctx_r2.ExtensionFor(line_r2)) ? 28 : -1, tmp_24_0);
|
|
215
331
|
} }
|
|
216
332
|
function MJOOrderLinesEditorComponent_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
|
|
217
|
-
i0.ɵɵelementStart(0, "div",
|
|
218
|
-
i0.ɵɵelement(1, "i",
|
|
219
|
-
i0.ɵɵelementStart(2, "div",
|
|
333
|
+
i0.ɵɵelementStart(0, "div", 3);
|
|
334
|
+
i0.ɵɵelement(1, "i", 54);
|
|
335
|
+
i0.ɵɵelementStart(2, "div", 55);
|
|
220
336
|
i0.ɵɵtext(3, "Nothing on this order yet");
|
|
221
337
|
i0.ɵɵelementEnd();
|
|
222
338
|
i0.ɵɵelementStart(4, "div");
|
|
223
339
|
i0.ɵɵtext(5, "Search the catalog to add the first line.");
|
|
224
340
|
i0.ɵɵelementEnd()();
|
|
225
341
|
} }
|
|
226
|
-
function
|
|
227
|
-
const
|
|
228
|
-
i0.ɵɵelementStart(0, "button",
|
|
229
|
-
i0.ɵɵlistener("mousedown", function
|
|
230
|
-
i0.ɵɵelementStart(1, "span",
|
|
342
|
+
function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
343
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
344
|
+
i0.ɵɵelementStart(0, "button", 63);
|
|
345
|
+
i0.ɵɵlistener("mousedown", function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_For_2_Template_button_mousedown_0_listener() { const product_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.AddProduct(product_r14)); });
|
|
346
|
+
i0.ɵɵelementStart(1, "span", 64)(2, "span", 65);
|
|
231
347
|
i0.ɵɵtext(3);
|
|
232
348
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵelementStart(4, "span",
|
|
349
|
+
i0.ɵɵelementStart(4, "span", 66);
|
|
234
350
|
i0.ɵɵtext(5);
|
|
235
351
|
i0.ɵɵelementEnd()();
|
|
236
|
-
i0.ɵɵelementStart(6, "span",
|
|
352
|
+
i0.ɵɵelementStart(6, "span", 67)(7, "span", 68);
|
|
237
353
|
i0.ɵɵtext(8);
|
|
238
354
|
i0.ɵɵpipe(9, "mjoMoney");
|
|
239
355
|
i0.ɵɵelementEnd();
|
|
240
|
-
i0.ɵɵelementStart(10, "span",
|
|
356
|
+
i0.ɵɵelementStart(10, "span", 66);
|
|
241
357
|
i0.ɵɵtext(11);
|
|
242
358
|
i0.ɵɵelementEnd()()();
|
|
243
359
|
} if (rf & 2) {
|
|
244
|
-
const
|
|
245
|
-
const ɵ$
|
|
360
|
+
const product_r14 = ctx.$implicit;
|
|
361
|
+
const ɵ$index_165_r15 = ctx.$index;
|
|
246
362
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
247
|
-
i0.ɵɵclassProp("is-cursor", ɵ$
|
|
248
|
-
i0.ɵɵattribute("aria-selected", ɵ$
|
|
363
|
+
i0.ɵɵclassProp("is-cursor", ɵ$index_165_r15 === ctx_r2.PickerCursor);
|
|
364
|
+
i0.ɵɵattribute("aria-selected", ɵ$index_165_r15 === ctx_r2.PickerCursor);
|
|
249
365
|
i0.ɵɵadvance(3);
|
|
250
|
-
i0.ɵɵtextInterpolate(
|
|
366
|
+
i0.ɵɵtextInterpolate(product_r14.Name);
|
|
251
367
|
i0.ɵɵadvance(2);
|
|
252
|
-
i0.ɵɵtextInterpolate3("",
|
|
368
|
+
i0.ɵɵtextInterpolate3("", product_r14.SKU, " \u00B7 ", product_r14.TypeName, " \u00B7 ", product_r14.CompanyName);
|
|
253
369
|
i0.ɵɵadvance(3);
|
|
254
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 9,
|
|
370
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 9, product_r14.ListPrice));
|
|
255
371
|
i0.ɵɵadvance(3);
|
|
256
|
-
i0.ɵɵtextInterpolate(
|
|
372
|
+
i0.ɵɵtextInterpolate(product_r14.Taxable ? "taxable" : "untaxable");
|
|
257
373
|
} }
|
|
258
|
-
function
|
|
374
|
+
function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
259
375
|
i0.ɵɵtext(0);
|
|
260
376
|
} if (rf & 2) {
|
|
261
377
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
262
378
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.CatalogError, " ");
|
|
263
379
|
} }
|
|
264
|
-
function
|
|
380
|
+
function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
265
381
|
i0.ɵɵtext(0, " Loading catalog\u2026 ");
|
|
266
382
|
} }
|
|
267
|
-
function
|
|
383
|
+
function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
268
384
|
i0.ɵɵtext(0, " No product matches that. ");
|
|
269
385
|
} }
|
|
270
|
-
function
|
|
271
|
-
i0.ɵɵelementStart(0, "div",
|
|
272
|
-
i0.ɵɵconditionalCreate(2,
|
|
386
|
+
function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
+
i0.ɵɵelementStart(0, "div", 62)(1, "span", 69);
|
|
388
|
+
i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_2_Template, 1, 1)(3, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_3_Template, 1, 0)(4, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Conditional_4_Template, 1, 0);
|
|
273
389
|
i0.ɵɵelementEnd()();
|
|
274
390
|
} if (rf & 2) {
|
|
275
391
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
276
392
|
i0.ɵɵadvance(2);
|
|
277
393
|
i0.ɵɵconditional(ctx_r2.CatalogError ? 2 : ctx_r2.Catalog.length === 0 ? 3 : 4);
|
|
278
394
|
} }
|
|
279
|
-
function
|
|
280
|
-
i0.ɵɵelementStart(0, "div",
|
|
281
|
-
i0.ɵɵrepeaterCreate(1,
|
|
395
|
+
function MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
396
|
+
i0.ɵɵelementStart(0, "div", 60);
|
|
397
|
+
i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_For_2_Template, 12, 11, "button", 61, _forTrack0, false, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_ForEmpty_3_Template, 5, 1, "div", 62);
|
|
282
398
|
i0.ɵɵelementEnd();
|
|
283
399
|
} if (rf & 2) {
|
|
284
400
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
401
|
+
i0.ɵɵclassProp("is-up", ctx_r2.PickerOpensUp);
|
|
285
402
|
i0.ɵɵadvance();
|
|
286
403
|
i0.ɵɵrepeater(ctx_r2.PickerResults);
|
|
287
404
|
} }
|
|
288
405
|
function MJOOrderLinesEditorComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
-
const
|
|
290
|
-
i0.ɵɵelementStart(0, "div",
|
|
291
|
-
i0.ɵɵelement(
|
|
292
|
-
i0.ɵɵelementStart(
|
|
293
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
294
|
-
i0.ɵɵlistener("focus", function
|
|
406
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
407
|
+
i0.ɵɵelementStart(0, "div", 4, 0)(2, "div", 56);
|
|
408
|
+
i0.ɵɵelement(3, "i", 57);
|
|
409
|
+
i0.ɵɵelementStart(4, "input", 58);
|
|
410
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.ProductQuery, $event) || (ctx_r2.ProductQuery = $event); return i0.ɵɵresetView($event); });
|
|
411
|
+
i0.ɵɵlistener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_ngModelChange_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnProductQueryChange()); })("focus", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_focus_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenPicker()); })("blur", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_blur_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ClosePickerSoon()); })("keydown", function MJOOrderLinesEditorComponent_Conditional_4_Template_input_keydown_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnPickerKey($event)); });
|
|
295
412
|
i0.ɵɵelementEnd()();
|
|
296
|
-
i0.ɵɵconditionalCreate(
|
|
413
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_Conditional_4_Conditional_5_Template, 4, 3, "div", 59);
|
|
297
414
|
i0.ɵɵelementEnd();
|
|
298
415
|
} if (rf & 2) {
|
|
299
416
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
300
|
-
i0.ɵɵadvance(
|
|
417
|
+
i0.ɵɵadvance(4);
|
|
301
418
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ProductQuery);
|
|
302
419
|
i0.ɵɵattribute("aria-expanded", ctx_r2.PickerOpen);
|
|
303
420
|
i0.ɵɵadvance();
|
|
304
|
-
i0.ɵɵconditional(ctx_r2.PickerOpen ?
|
|
421
|
+
i0.ɵɵconditional(ctx_r2.PickerOpen ? 5 : -1);
|
|
305
422
|
} }
|
|
306
423
|
/**
|
|
307
424
|
* Inline catalog picker + line cards for an order header.
|
|
@@ -335,7 +452,16 @@ export class MJOOrderLinesEditorComponent {
|
|
|
335
452
|
ProductQuery = '';
|
|
336
453
|
PickerCursor = 0;
|
|
337
454
|
PickerOpen = false;
|
|
455
|
+
/** True when the catalog list would overflow the viewport below the search box. */
|
|
456
|
+
PickerOpensUp = false;
|
|
338
457
|
CatalogError = null;
|
|
458
|
+
pickerHost;
|
|
459
|
+
/** 'none' hides the picker; 'list' is named prices only; 'any' also types an amount. */
|
|
460
|
+
OverrideKind = 'none';
|
|
461
|
+
applicableByLine = new Map();
|
|
462
|
+
overrideEditorLineIds = new Set();
|
|
463
|
+
customAmountLineIds = new Set();
|
|
464
|
+
defaultUnitByLine = new Map();
|
|
339
465
|
get Lines() {
|
|
340
466
|
return [...(this._order?.Lines.Items ?? [])];
|
|
341
467
|
}
|
|
@@ -347,10 +473,16 @@ export class MJOOrderLinesEditorComponent {
|
|
|
347
473
|
OpenPicker() {
|
|
348
474
|
this.PickerOpen = true;
|
|
349
475
|
this.PickerCursor = 0;
|
|
476
|
+
this.updatePickerFlip();
|
|
477
|
+
}
|
|
478
|
+
OnProductQueryChange() {
|
|
479
|
+
if (this.PickerOpen)
|
|
480
|
+
this.updatePickerFlip();
|
|
350
481
|
}
|
|
351
482
|
ClosePickerSoon() {
|
|
352
483
|
setTimeout(() => {
|
|
353
484
|
this.PickerOpen = false;
|
|
485
|
+
this.PickerOpensUp = false;
|
|
354
486
|
this.cdr.detectChanges();
|
|
355
487
|
}, 140);
|
|
356
488
|
}
|
|
@@ -391,12 +523,14 @@ export class MJOOrderLinesEditorComponent {
|
|
|
391
523
|
this.PickerCursor = 0;
|
|
392
524
|
this.PickerOpen = false;
|
|
393
525
|
this.schedulePricing();
|
|
526
|
+
void this.refreshAllApplicable();
|
|
394
527
|
this.cdr.detectChanges();
|
|
395
528
|
}
|
|
396
529
|
Bump(line, delta) {
|
|
397
530
|
if (!this.EditMode)
|
|
398
531
|
return;
|
|
399
532
|
line.Quantity = this.clampQuantity(line, Number(line.Quantity ?? 0) + delta);
|
|
533
|
+
void this.refreshApplicable(line);
|
|
400
534
|
this.schedulePricing();
|
|
401
535
|
}
|
|
402
536
|
SetQuantity(line, event) {
|
|
@@ -406,6 +540,7 @@ export class MJOOrderLinesEditorComponent {
|
|
|
406
540
|
if (!(target instanceof HTMLInputElement))
|
|
407
541
|
return;
|
|
408
542
|
line.Quantity = this.clampQuantity(line, Number.parseFloat(target.value));
|
|
543
|
+
void this.refreshApplicable(line);
|
|
409
544
|
this.schedulePricing();
|
|
410
545
|
}
|
|
411
546
|
QuantityAtMax(line) {
|
|
@@ -419,15 +554,163 @@ export class MJOOrderLinesEditorComponent {
|
|
|
419
554
|
if (!this.EditMode)
|
|
420
555
|
return;
|
|
421
556
|
this.expandedLineIds.delete(line.ID);
|
|
557
|
+
this.overrideEditorLineIds.delete(line.ID);
|
|
558
|
+
this.customAmountLineIds.delete(line.ID);
|
|
422
559
|
this._order?.Lines.Remove(line);
|
|
423
560
|
this.schedulePricing();
|
|
424
561
|
}
|
|
425
562
|
ProductFor(line) {
|
|
426
563
|
return this.Catalog.find((p) => UUIDsEqual(p.ID, line.ProductID));
|
|
427
564
|
}
|
|
565
|
+
/** True when the line books to a different company than the order's selling company. */
|
|
566
|
+
ShowsForeignRevenue(line) {
|
|
567
|
+
const product = this.ProductFor(line);
|
|
568
|
+
if (!product?.CompanyName)
|
|
569
|
+
return false;
|
|
570
|
+
const sellingID = this._order?.CompanyID;
|
|
571
|
+
if (product.CompanyID && sellingID)
|
|
572
|
+
return !UUIDsEqual(product.CompanyID, sellingID);
|
|
573
|
+
const sellingName = this._order?.Company;
|
|
574
|
+
if (!sellingName)
|
|
575
|
+
return true;
|
|
576
|
+
return product.CompanyName.trim().toLowerCase() !== String(sellingName).trim().toLowerCase();
|
|
577
|
+
}
|
|
428
578
|
PricedLine(line) {
|
|
429
579
|
return this.Pricing.Result?.Lines.find((priced) => UUIDsEqual(priced.ClientKey, line.ID));
|
|
430
580
|
}
|
|
581
|
+
get CanOverride() {
|
|
582
|
+
return this.EditMode && this.OverrideKind !== 'none';
|
|
583
|
+
}
|
|
584
|
+
ApplicableFor(line) {
|
|
585
|
+
return this.applicableByLine.get(line.ID) ?? [];
|
|
586
|
+
}
|
|
587
|
+
SelectedPriceID(line) {
|
|
588
|
+
if (this.customAmountLineIds.has(line.ID))
|
|
589
|
+
return '__custom__';
|
|
590
|
+
if (!this.IsOverridden(line))
|
|
591
|
+
return '';
|
|
592
|
+
if (line.ProductPriceID)
|
|
593
|
+
return String(line.ProductPriceID);
|
|
594
|
+
return this.OverrideKind === 'any' ? '__custom__' : '';
|
|
595
|
+
}
|
|
596
|
+
DisplayUnit(line) {
|
|
597
|
+
if (this.IsOverridden(line))
|
|
598
|
+
return Number(line.UnitPrice ?? 0);
|
|
599
|
+
return this.PricedLine(line)?.UnitPrice ?? null;
|
|
600
|
+
}
|
|
601
|
+
DefaultLabel(line) {
|
|
602
|
+
const unit = this.DefaultUnit(line);
|
|
603
|
+
return unit == null ? 'Default price' : `Default · ${unit.toFixed(2)}`;
|
|
604
|
+
}
|
|
605
|
+
ShowCustomAmount(line) {
|
|
606
|
+
return this.OverrideKind === 'any' && this.SelectedPriceID(line) === '__custom__';
|
|
607
|
+
}
|
|
608
|
+
CanExplainOverride(line) {
|
|
609
|
+
const picked = this.SelectedPriceID(line);
|
|
610
|
+
if (picked && picked !== '__custom__')
|
|
611
|
+
return true;
|
|
612
|
+
if (picked === '__custom__') {
|
|
613
|
+
const typed = this.DisplayUnit(line);
|
|
614
|
+
const def = this.DefaultUnit(line);
|
|
615
|
+
if (typed == null || def == null)
|
|
616
|
+
return typed != null;
|
|
617
|
+
return !moneyEqual(typed, def);
|
|
618
|
+
}
|
|
619
|
+
return false;
|
|
620
|
+
}
|
|
621
|
+
DefaultUnit(line) {
|
|
622
|
+
if (this.defaultUnitByLine.has(line.ID))
|
|
623
|
+
return this.defaultUnitByLine.get(line.ID) ?? null;
|
|
624
|
+
return this.IsOverridden(line) ? null : (this.PricedLine(line)?.UnitPrice ?? null);
|
|
625
|
+
}
|
|
626
|
+
PickNamedPrice(line, event) {
|
|
627
|
+
if (!this.CanOverride)
|
|
628
|
+
return;
|
|
629
|
+
const target = event.target;
|
|
630
|
+
if (!(target instanceof HTMLSelectElement))
|
|
631
|
+
return;
|
|
632
|
+
const id = target.value;
|
|
633
|
+
if (!id) {
|
|
634
|
+
this.ResetOverride(line);
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
if (id === '__custom__') {
|
|
638
|
+
this.customAmountLineIds.add(line.ID);
|
|
639
|
+
this.stamp(line, 'ProductPriceID', null);
|
|
640
|
+
this.markOverridden(line);
|
|
641
|
+
this.cdr.detectChanges();
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
this.customAmountLineIds.delete(line.ID);
|
|
645
|
+
const hit = this.ApplicableFor(line).find((p) => UUIDsEqual(p.ID, id));
|
|
646
|
+
if (!hit)
|
|
647
|
+
return;
|
|
648
|
+
this.stamp(line, 'ProductPriceID', hit.ID);
|
|
649
|
+
this.stamp(line, 'UnitPrice', hit.UnitPrice);
|
|
650
|
+
this.markOverridden(line);
|
|
651
|
+
this.schedulePricing();
|
|
652
|
+
this.cdr.detectChanges();
|
|
653
|
+
}
|
|
654
|
+
TypeAmount(line, event) {
|
|
655
|
+
if (!this.CanOverride || this.OverrideKind !== 'any')
|
|
656
|
+
return;
|
|
657
|
+
const target = event.target;
|
|
658
|
+
if (!(target instanceof HTMLInputElement))
|
|
659
|
+
return;
|
|
660
|
+
const amount = Number.parseFloat(target.value);
|
|
661
|
+
if (!Number.isFinite(amount) || amount < 0)
|
|
662
|
+
return;
|
|
663
|
+
this.customAmountLineIds.add(line.ID);
|
|
664
|
+
this.stamp(line, 'ProductPriceID', null);
|
|
665
|
+
this.stamp(line, 'UnitPrice', amount);
|
|
666
|
+
this.markOverridden(line);
|
|
667
|
+
this.schedulePricing();
|
|
668
|
+
}
|
|
669
|
+
IsOverrideEditorOpen(line) {
|
|
670
|
+
return this.overrideEditorLineIds.has(line.ID);
|
|
671
|
+
}
|
|
672
|
+
ToggleOverrideEditor(line) {
|
|
673
|
+
if (!this.CanOverride)
|
|
674
|
+
return;
|
|
675
|
+
if (this.overrideEditorLineIds.has(line.ID)) {
|
|
676
|
+
this.overrideEditorLineIds.delete(line.ID);
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
this.overrideEditorLineIds.add(line.ID);
|
|
680
|
+
if (this.OverrideKind === 'any' && this.IsOverridden(line) && !line.ProductPriceID) {
|
|
681
|
+
this.customAmountLineIds.add(line.ID);
|
|
682
|
+
}
|
|
683
|
+
void this.refreshApplicable(line);
|
|
684
|
+
}
|
|
685
|
+
DoneOverrideEditor(line) {
|
|
686
|
+
this.overrideEditorLineIds.delete(line.ID);
|
|
687
|
+
}
|
|
688
|
+
ResetOverride(line) {
|
|
689
|
+
this.clearOverride(line);
|
|
690
|
+
this.customAmountLineIds.delete(line.ID);
|
|
691
|
+
this.overrideEditorLineIds.delete(line.ID);
|
|
692
|
+
this.schedulePricing();
|
|
693
|
+
}
|
|
694
|
+
IsOverridden(line) {
|
|
695
|
+
const flag = line.GetFieldByName('PriceOverridden');
|
|
696
|
+
if (flag && (flag.Value === true || flag.Value === 1 || flag.Value === '1'))
|
|
697
|
+
return true;
|
|
698
|
+
return anyFieldIsDirty(line, ['UnitPrice', 'ProductPriceID']);
|
|
699
|
+
}
|
|
700
|
+
OverrideReasonText(line) {
|
|
701
|
+
const field = line.GetFieldByName('PriceOverrideReason');
|
|
702
|
+
return field?.Value == null ? '' : String(field.Value);
|
|
703
|
+
}
|
|
704
|
+
SetOverrideReason(line, event) {
|
|
705
|
+
if (!this.CanExplainOverride(line))
|
|
706
|
+
return;
|
|
707
|
+
const target = event.target;
|
|
708
|
+
if (!(target instanceof HTMLTextAreaElement))
|
|
709
|
+
return;
|
|
710
|
+
const reason = target.value.trim();
|
|
711
|
+
this.stamp(line, 'PriceOverridden', true);
|
|
712
|
+
this.stamp(line, 'PriceOverrideReason', reason === '' ? null : reason);
|
|
713
|
+
}
|
|
431
714
|
OpenProduct(line, event) {
|
|
432
715
|
event.preventDefault();
|
|
433
716
|
event.stopPropagation();
|
|
@@ -497,12 +780,19 @@ export class MJOOrderLinesEditorComponent {
|
|
|
497
780
|
await this._order.Lines.Load();
|
|
498
781
|
}
|
|
499
782
|
await this.hydrateExtensions();
|
|
783
|
+
await this.resolveOverrideKind();
|
|
500
784
|
this.schedulePricing();
|
|
785
|
+
void this.refreshAllApplicable();
|
|
501
786
|
this.cdr.detectChanges();
|
|
502
787
|
}
|
|
503
788
|
unbindOrder() {
|
|
504
789
|
this.expandedLineIds.clear();
|
|
505
790
|
this.hydratingLineIds.clear();
|
|
791
|
+
this.applicableByLine.clear();
|
|
792
|
+
this.overrideEditorLineIds.clear();
|
|
793
|
+
this.customAmountLineIds.clear();
|
|
794
|
+
this.defaultUnitByLine.clear();
|
|
795
|
+
this.OverrideKind = 'none';
|
|
506
796
|
}
|
|
507
797
|
async addPlainLine(product) {
|
|
508
798
|
if (!this._order)
|
|
@@ -571,20 +861,141 @@ export class MJOOrderLinesEditorComponent {
|
|
|
571
861
|
this.CatalogError = error instanceof Error ? error.message : String(error);
|
|
572
862
|
}
|
|
573
863
|
}
|
|
864
|
+
updatePickerFlip() {
|
|
865
|
+
// Measure after the list is in the DOM so max-height (240px) is the right budget.
|
|
866
|
+
requestAnimationFrame(() => {
|
|
867
|
+
const host = this.pickerHost?.nativeElement;
|
|
868
|
+
if (!host || !this.PickerOpen) {
|
|
869
|
+
this.PickerOpensUp = false;
|
|
870
|
+
return;
|
|
871
|
+
}
|
|
872
|
+
const rect = host.getBoundingClientRect();
|
|
873
|
+
const spaceBelow = window.innerHeight - rect.bottom;
|
|
874
|
+
const spaceAbove = rect.top;
|
|
875
|
+
const listHeight = 240;
|
|
876
|
+
this.PickerOpensUp = spaceBelow < listHeight && spaceAbove > spaceBelow;
|
|
877
|
+
this.cdr.detectChanges();
|
|
878
|
+
});
|
|
879
|
+
}
|
|
574
880
|
schedulePricing() {
|
|
575
881
|
if (!this._order)
|
|
576
882
|
return;
|
|
577
883
|
this.pricing.SchedulePricing(this._order, (state) => {
|
|
578
884
|
this.Pricing = state;
|
|
579
885
|
this.PricingChanged.emit(state);
|
|
886
|
+
for (const line of this.Lines) {
|
|
887
|
+
if (!this.IsOverridden(line)) {
|
|
888
|
+
this.defaultUnitByLine.set(line.ID, this.PricedLine(line)?.UnitPrice ?? null);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
580
891
|
this.cdr.detectChanges();
|
|
581
892
|
});
|
|
582
893
|
}
|
|
894
|
+
stamp(line, fieldName, value) {
|
|
895
|
+
const field = line.GetFieldByName(fieldName);
|
|
896
|
+
if (!field)
|
|
897
|
+
return;
|
|
898
|
+
const baseline = field.OldValue;
|
|
899
|
+
field.Value = value;
|
|
900
|
+
if (!field.Dirty)
|
|
901
|
+
field.RestoreOldValue(baseline);
|
|
902
|
+
}
|
|
903
|
+
clearOverride(line) {
|
|
904
|
+
const unit = line.GetFieldByName('UnitPrice');
|
|
905
|
+
const named = line.GetFieldByName('ProductPriceID');
|
|
906
|
+
if (unit)
|
|
907
|
+
unit.Value = unit.OldValue;
|
|
908
|
+
if (named)
|
|
909
|
+
named.Value = named.OldValue;
|
|
910
|
+
this.stamp(line, 'PriceOverridden', false);
|
|
911
|
+
this.stamp(line, 'PriceOverrideReason', null);
|
|
912
|
+
}
|
|
913
|
+
markOverridden(line) {
|
|
914
|
+
this.stamp(line, 'PriceOverridden', true);
|
|
915
|
+
}
|
|
916
|
+
async resolveOverrideKind() {
|
|
917
|
+
const user = this.metadata.CurrentUser;
|
|
918
|
+
this.OverrideKind = userPriceOverrideKind(user, this.metadata);
|
|
919
|
+
if (this.OverrideKind !== 'none')
|
|
920
|
+
return;
|
|
921
|
+
if (!priceOverrideCatalogInstalled(this.metadata))
|
|
922
|
+
return;
|
|
923
|
+
this.OverrideKind = await this.overrideKindFromLiveRoles(user);
|
|
924
|
+
}
|
|
925
|
+
async overrideKindFromLiveRoles(user) {
|
|
926
|
+
const roleIDs = (user?.UserRoles ?? []).map((r) => r.RoleID).filter(Boolean);
|
|
927
|
+
if (!roleIDs.length)
|
|
928
|
+
return 'none';
|
|
929
|
+
const quoted = roleIDs.map((id) => `'${String(id).replace(/'/g, "''")}'`).join(',');
|
|
930
|
+
const rv = new RunView();
|
|
931
|
+
const res = await rv.RunView({
|
|
932
|
+
EntityName: 'MJ: Authorization Roles',
|
|
933
|
+
ExtraFilter: `RoleID IN (${quoted}) AND Type LIKE 'Allow%' AND Authorization LIKE 'MJ.BizApps.Orders.Price.Override%'`,
|
|
934
|
+
ResultType: 'simple',
|
|
935
|
+
});
|
|
936
|
+
const names = (res.Success ? res.Results : [])
|
|
937
|
+
.map((row) => String(row.Authorization ?? ''))
|
|
938
|
+
.filter(Boolean);
|
|
939
|
+
if (names.some((n) => n === 'MJ.BizApps.Orders.Price.OverrideAny' || n === 'MJ.BizApps.Orders.Price.Override')) {
|
|
940
|
+
return 'any';
|
|
941
|
+
}
|
|
942
|
+
if (names.includes('MJ.BizApps.Orders.Price.OverrideList'))
|
|
943
|
+
return 'list';
|
|
944
|
+
return 'none';
|
|
945
|
+
}
|
|
946
|
+
async refreshAllApplicable() {
|
|
947
|
+
if (!this.CanOverride)
|
|
948
|
+
return;
|
|
949
|
+
await Promise.all(this.Lines.map((line) => this.refreshApplicable(line)));
|
|
950
|
+
this.cdr.detectChanges();
|
|
951
|
+
}
|
|
952
|
+
async refreshApplicable(line) {
|
|
953
|
+
if (!this.CanOverride || !this._order || !line.ProductID)
|
|
954
|
+
return;
|
|
955
|
+
const user = this.metadata.CurrentUser;
|
|
956
|
+
if (!user)
|
|
957
|
+
return;
|
|
958
|
+
try {
|
|
959
|
+
await LoadOrdersEngine(this.metadata, user);
|
|
960
|
+
const product = OrdersEngine.Instance.ProductByID(line.ProductID);
|
|
961
|
+
const companyID = product?.CompanyID ?? this._order.CompanyID;
|
|
962
|
+
if (!companyID)
|
|
963
|
+
return;
|
|
964
|
+
const ctx = {
|
|
965
|
+
ProductID: line.ProductID,
|
|
966
|
+
ProductCategoryID: product?.ProductCategoryID ?? null,
|
|
967
|
+
CompanyID: companyID,
|
|
968
|
+
Quantity: Number(line.Quantity ?? 0),
|
|
969
|
+
AsOf: this._order.OrderDate ? new Date(this._order.OrderDate) : new Date(),
|
|
970
|
+
OrganizationID: this._order.BillToOrganizationID ?? null,
|
|
971
|
+
PersonID: this._order.BillToPersonID ?? null,
|
|
972
|
+
ApplicabilityContext: await loadApplicabilityContext({
|
|
973
|
+
OrderHeaderID: this._order.ID ?? null,
|
|
974
|
+
ProductID: line.ProductID,
|
|
975
|
+
BillToPersonID: this._order.BillToPersonID ?? null,
|
|
976
|
+
BillToOrganizationID: this._order.BillToOrganizationID ?? null,
|
|
977
|
+
ShipToPersonID: this._order.ShipToPersonID ?? null,
|
|
978
|
+
ShipToOrganizationID: this._order.ShipToOrganizationID ?? null,
|
|
979
|
+
BillToAddressID: this._order.BillToAddressID ?? null,
|
|
980
|
+
ShipToAddressID: this._order.ShipToAddressID ?? null,
|
|
981
|
+
}, this.metadata, user),
|
|
982
|
+
};
|
|
983
|
+
this.applicableByLine.set(line.ID, await ListApplicablePrices(ctx, this.metadata, user));
|
|
984
|
+
}
|
|
985
|
+
catch {
|
|
986
|
+
this.applicableByLine.set(line.ID, []);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
583
989
|
static ɵfac = function MJOOrderLinesEditorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MJOOrderLinesEditorComponent)(); };
|
|
584
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJOOrderLinesEditorComponent, selectors: [["mjo-order-lines-editor"]],
|
|
585
|
-
i0.ɵɵ
|
|
586
|
-
|
|
587
|
-
|
|
990
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJOOrderLinesEditorComponent, selectors: [["mjo-order-lines-editor"]], viewQuery: function MJOOrderLinesEditorComponent_Query(rf, ctx) { if (rf & 1) {
|
|
991
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
992
|
+
} if (rf & 2) {
|
|
993
|
+
let _t;
|
|
994
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pickerHost = _t.first);
|
|
995
|
+
} }, inputs: { Provider: "Provider", EditMode: "EditMode", Order: "Order" }, outputs: { PricingChanged: "PricingChanged", Navigate: "Navigate" }, decls: 5, vars: 2, consts: [["pickerHost", ""], [1, "mjo-ol"], [1, "mjo-ol-card"], [1, "mjo-ol-empty"], [1, "mj-typeahead", "mjo-ol-picker"], [1, "mjo-ol-card__top"], [1, "mjo-ol-card__id"], ["type", "button", 1, "mjo-ol-card__name", 3, "click"], [1, "mjo-ol-card__meta"], [1, "mjo-ol-qty"], [1, "mjo-ol-qty__value"], [1, "mjo-ol-card__price"], [1, "mjo-ol-card__price-row"], [1, "mjo-ol-card__amt"], ["type", "button", 1, "mjo-ol-iconbtn", "mjo-ol-price__pencil"], [1, "mjo-ol-overpill"], [3, "Source", "Settled", "Overridden"], [1, "mjo-ol-card__err"], [1, "mjo-ol-card__tot"], ["type", "button", 1, "mjo-ol-iconbtn"], ["role", "region", 1, "mjo-ol-override"], [1, "mjo-ol-card__conseq"], [1, "mjo-ol-card__why"], [1, "mjo-ol-ext", 3, "is-open"], ["type", "button", "aria-label", "Decrease quantity", 3, "click"], ["aria-label", "Quantity", 3, "change", "value"], ["type", "button", "aria-label", "Increase quantity", 3, "click", "disabled"], ["type", "button", 1, "mjo-ol-iconbtn", "mjo-ol-price__pencil", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-pencil"], ["type", "button", 1, "mjo-ol-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-regular", "fa-trash-can"], [1, "mjo-ol-override__row"], ["aria-label", "Named price", 1, "mjo-ol-price__pick", 3, "change", "value"], ["value", ""], ["value", "__custom__"], [3, "value"], ["type", "number", "step", "0.01", "min", "0", "aria-label", "Custom unit price", 1, "mjo-ol-price__amt", 3, "value"], [1, "mjo-ol-override__reason"], ["rows", "2", "placeholder", "Optional \u2014 why this price differs from the default", 3, "input", "disabled", "value"], [1, "mjo-ol-override__actions"], ["type", "button", 1, "mjo-ol-override__done", 3, "click"], ["type", "button", 1, "mjo-ol-override__reset", 3, "click"], ["type", "number", "step", "0.01", "min", "0", "aria-label", "Custom unit price", 1, "mjo-ol-price__amt", 3, "change", "value"], ["Kind", "fulfillment"], ["Kind", "untaxable"], ["Kind", "company"], [1, "mjo-ol-ext"], ["type", "button", 1, "mjo-ol-ext__toggle", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-right", "mjo-ol-ext__chev"], [1, "mjo-ol-ext__label"], [1, "mjo-ol-ext__hint"], [1, "mjo-ol-ext__body", 3, "id"], [1, "mjo-ol-ext__clip"], [3, "FormCreated", "Navigate", "Record", "EditMode", "Config"], ["aria-hidden", "true", 1, "fa-solid", "fa-cart-plus"], [1, "mjo-ol-empty__title"], [1, "mjo-search"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["placeholder", "Add product \u2014 type a name or SKU\u2026", "autocomplete", "off", "role", "combobox", "aria-label", "Add a product", 3, "ngModelChange", "focus", "blur", "keydown", "ngModel"], ["role", "listbox", 1, "mj-typeahead-list", "is-open", 3, "is-up"], ["role", "listbox", 1, "mj-typeahead-list", "is-open"], ["type", "button", "role", "option", 1, "mj-typeahead-item", "mjo-ol-pick", 3, "is-cursor"], [1, "mj-typeahead-item"], ["type", "button", "role", "option", 1, "mj-typeahead-item", "mjo-ol-pick", 3, "mousedown"], [1, "mjo-ol-pick__body"], [1, "name"], [1, "sub"], [1, "end"], [1, "mjo-ol-pick__price"], [1, "muted", "small"]], template: function MJOOrderLinesEditorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
996
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
997
|
+
i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_For_2_Template, 29, 20, "div", 2, _forTrack0, false, MJOOrderLinesEditorComponent_ForEmpty_3_Template, 6, 0, "div", 3);
|
|
998
|
+
i0.ɵɵconditionalCreate(4, MJOOrderLinesEditorComponent_Conditional_4_Template, 6, 3, "div", 4);
|
|
588
999
|
i0.ɵɵelementEnd();
|
|
589
1000
|
} if (rf & 2) {
|
|
590
1001
|
i0.ɵɵadvance();
|
|
@@ -592,9 +1003,9 @@ export class MJOOrderLinesEditorComponent {
|
|
|
592
1003
|
i0.ɵɵadvance(3);
|
|
593
1004
|
i0.ɵɵconditional(ctx.EditMode ? 4 : -1);
|
|
594
1005
|
} }, dependencies: [CommonModule,
|
|
595
|
-
FormsModule, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, BaseFormsModule, i2.MjEntityFormHostComponent, MJOConsequenceChipComponent,
|
|
1006
|
+
FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, BaseFormsModule, i2.MjEntityFormHostComponent, MJOConsequenceChipComponent,
|
|
596
1007
|
MJOPriceSourceBadgeComponent,
|
|
597
|
-
MJOMoneyPipe], styles: ["[_nghost-%COMP%] { display: block; }\n\n.mjo-ol[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%]:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name[_ngcontent-%COMP%] {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value[_ngcontent-%COMP%] {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price[_ngcontent-%COMP%] {\n flex: none;\n width: 118px;\n text-align: right;\n}\n\n.mjo-ol-card__amt[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-card__err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot[_ngcontent-%COMP%] {\n flex: none;\n width: 104px;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%] {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%]:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list[_ngcontent-%COMP%] {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open[_ngcontent-%COMP%] { display: block; }\n\n.mj-typeahead-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item[_ngcontent-%COMP%]:last-child { border-bottom: 0; }\n\n.mj-typeahead-item[_ngcontent-%COMP%]:hover, \n.mj-typeahead-item.is-cursor[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%] { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick[_ngcontent-%COMP%] .end[_ngcontent-%COMP%] {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev[_ngcontent-%COMP%] {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__chev[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body[_ngcontent-%COMP%] {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__body[_ngcontent-%COMP%] {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip[_ngcontent-%COMP%] {\n overflow: hidden;\n min-height: 0;\n}\n\n\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-toolbar, \n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-body, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-field:last-child, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top[_ngcontent-%COMP%] { flex-wrap: wrap; }\n .mjo-ol-card__price[_ngcontent-%COMP%], .mjo-ol-card__tot[_ngcontent-%COMP%] { width: auto; }\n}"] });
|
|
1008
|
+
MJOMoneyPipe], styles: ["[_nghost-%COMP%] { display: block; }\n\n.mjo-ol[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card[_ngcontent-%COMP%]:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name[_ngcontent-%COMP%] {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value[_ngcontent-%COMP%] {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price[_ngcontent-%COMP%] {\n flex: none;\n min-width: 108px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.mjo-ol-card__price-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 2px;\n height: 28px;\n}\n\n.mjo-ol-price__pencil[_ngcontent-%COMP%] {\n flex: none;\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-price__pencil[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-link);\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-price__pick[_ngcontent-%COMP%], \n.mjo-ol-price__amt[_ngcontent-%COMP%], \n.mjo-ol-override__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-price__pick[_ngcontent-%COMP%] {\n height: 28px;\n padding: 0 6px;\n text-align: left;\n flex: 1 1 180px;\n max-width: 240px;\n width: auto;\n}\n\n.mjo-ol-price__amt[_ngcontent-%COMP%] {\n height: 28px;\n padding: 0 8px;\n text-align: right;\n font-weight: var(--mj-font-semibold);\n width: 108px;\n flex: none;\n}\n\n.mjo-ol-override[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n padding: var(--mj-space-2);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-override__reason[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: block;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.mjo-ol-override__reason.is-off[_ngcontent-%COMP%] {\n opacity: 0.55;\n}\n\n.mjo-ol-override__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:disabled {\n cursor: not-allowed;\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\n text-align: left;\n font-variant-numeric: normal;\n}\n\n.mjo-ol-override__actions[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n justify-content: flex-end;\n}\n\n.mjo-ol-override__done[_ngcontent-%COMP%], \n.mjo-ol-override__reset[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n cursor: pointer;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-override__done[_ngcontent-%COMP%] {\n color: var(--mj-text-link);\n}\n\n.mjo-ol-override__reset[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-override__done[_ngcontent-%COMP%]:hover, \n.mjo-ol-override__reset[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-card__amt[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-overpill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-top: 4px;\n padding: 1px 8px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--mj-status-warning-text);\n background: color-mix(in srgb, var(--mj-status-warning-text) 16%, transparent);\n}\n\n.mjo-ol-card__err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot[_ngcontent-%COMP%] {\n flex: none;\n min-width: 104px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-card__why[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n line-height: 1.35;\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%] {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker[_ngcontent-%COMP%]:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list[_ngcontent-%COMP%] {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open[_ngcontent-%COMP%] { display: block; }\n\n.mj-typeahead-list.is-up[_ngcontent-%COMP%] {\n top: auto;\n bottom: calc(100% + 4px);\n}\n\n.mj-typeahead-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item[_ngcontent-%COMP%]:last-child { border-bottom: 0; }\n\n.mj-typeahead-item[_ngcontent-%COMP%]:hover, \n.mj-typeahead-item.is-cursor[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%] { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick[_ngcontent-%COMP%] .end[_ngcontent-%COMP%] {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev[_ngcontent-%COMP%] {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__chev[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body[_ngcontent-%COMP%] {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open[_ngcontent-%COMP%] .mjo-ol-ext__body[_ngcontent-%COMP%] {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip[_ngcontent-%COMP%] {\n overflow: hidden;\n min-height: 0;\n}\n\n\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-record-form-container, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-toolbar, \n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-body, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext[_ngcontent-%COMP%] mj-form-field:last-child, \n.mjo-ol-ext[_ngcontent-%COMP%] .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top[_ngcontent-%COMP%] { flex-wrap: wrap; }\n .mjo-ol-card__price[_ngcontent-%COMP%], .mjo-ol-card__tot[_ngcontent-%COMP%] { width: auto; }\n}"] });
|
|
598
1009
|
}
|
|
599
1010
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJOOrderLinesEditorComponent, [{
|
|
600
1011
|
type: Component,
|
|
@@ -605,7 +1016,7 @@ export class MJOOrderLinesEditorComponent {
|
|
|
605
1016
|
MJOConsequenceChipComponent,
|
|
606
1017
|
MJOPriceSourceBadgeComponent,
|
|
607
1018
|
MJOMoneyPipe,
|
|
608
|
-
], template: "<div class=\"mjo-ol\">\n @for (line of Lines; track line.ID) {\n <div class=\"mjo-ol-card\">\n <div class=\"mjo-ol-card__top\">\n <div class=\"mjo-ol-card__id\">\n <button type=\"button\" class=\"mjo-ol-card__name\" (click)=\"OpenProduct(line, $event)\">\n {{ ProductFor(line)?.Name ?? 'Product' }}\n </button>\n <div class=\"mjo-ol-card__meta\">\n {{ ProductFor(line)?.SKU }}\n @if (ProductFor(line)?.TypeName) {\n \u00B7 {{ ProductFor(line)?.TypeName }}\n }\n </div>\n </div>\n\n <div class=\"mjo-ol-qty\" [class.is-locked]=\"!EditMode || QuantityCappedToOne(line)\">\n @if (EditMode && !QuantityCappedToOne(line)) {\n <button type=\"button\" (click)=\"Bump(line, -1)\" aria-label=\"Decrease quantity\">\u2212</button>\n <input\n [value]=\"line.Quantity\"\n (change)=\"SetQuantity(line, $event)\"\n aria-label=\"Quantity\">\n <button type=\"button\" (click)=\"Bump(line, 1)\" [disabled]=\"QuantityAtMax(line)\" aria-label=\"Increase quantity\">+</button>\n } @else {\n <span class=\"mjo-ol-qty__value\">{{ line.Quantity }}</span>\n }\n </div>\n\n <div class=\"mjo-ol-card__price\">\n <div class=\"mjo-ol-card__amt\">{{ PricedLine(line)?.UnitPrice | mjoMoney }}</div>\n <mjo-price-source-badge\n [Source]=\"PricedLine(line)?.PriceSource ?? null\"\n [Settled]=\"!Pricing.Loading\"\n [Overridden]=\"!!PricedLine(line)?.WasStated\" />\n @if (PricedLine(line)?.Error; as why) {\n <div class=\"mjo-ol-card__err\">{{ why }}</div>\n }\n </div>\n\n <div class=\"mjo-ol-card__tot\">{{ PricedLine(line)?.NetAmount | mjoMoney }}</div>\n\n @if (EditMode) {\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn\"\n (click)=\"Remove(line)\"\n [attr.aria-label]=\"'Remove ' + (ProductFor(line)?.Name ?? 'line')\">\n <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <div class=\"mjo-ol-card__conseq\">\n @if (ProductFor(line); as product) {\n @if (product.TypeName === 'Goods') {\n <mjo-consequence-chip Kind=\"fulfillment\">Ships \u2014 holds the order at Posted</mjo-consequence-chip>\n }\n @if (!product.Taxable) {\n <mjo-consequence-chip Kind=\"untaxable\">Untaxable</mjo-consequence-chip>\n }\n @if (product.CompanyName) {\n <mjo-consequence-chip Kind=\"company\">Revenue to {{ product.CompanyName }}</mjo-consequence-chip>\n }\n }\n </div>\n\n @if (ExtensionFor(line); as ext) {\n <div class=\"mjo-ol-ext\" [class.is-open]=\"IsExtensionOpen(line)\">\n <button\n type=\"button\"\n class=\"mjo-ol-ext__toggle\"\n (click)=\"ToggleExtension(line)\"\n [attr.aria-expanded]=\"IsExtensionOpen(line)\"\n [attr.aria-controls]=\"'mjo-ol-ext-' + line.ID\">\n <i class=\"fa-solid fa-chevron-right mjo-ol-ext__chev\" aria-hidden=\"true\"></i>\n <span class=\"mjo-ol-ext__label\">{{ ExtensionLabel(line) }}</span>\n @if (!IsExtensionOpen(line)) {\n <span class=\"mjo-ol-ext__hint\">{{ ExtensionHint(line) }}</span>\n }\n </button>\n <div\n class=\"mjo-ol-ext__body\"\n [id]=\"'mjo-ol-ext-' + line.ID\"\n [attr.inert]=\"IsExtensionOpen(line) ? null : ''\"\n [attr.aria-hidden]=\"!IsExtensionOpen(line)\">\n <div class=\"mjo-ol-ext__clip\">\n <mj-entity-form-host\n [Record]=\"ext\"\n [EditMode]=\"EditMode\"\n [Config]=\"ExtensionFormConfigFor(line)\"\n (FormCreated)=\"OnExtensionFormCreated($event)\"\n (Navigate)=\"OnExtensionNavigate($event)\">\n </mj-entity-form-host>\n </div>\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"mjo-ol-empty\">\n <i class=\"fa-solid fa-cart-plus\" aria-hidden=\"true\"></i>\n <div class=\"mjo-ol-empty__title\">Nothing on this order yet</div>\n <div>Search the catalog to add the first line.</div>\n </div>\n }\n\n @if (EditMode) {\n <div class=\"mj-typeahead mjo-ol-picker\">\n <div class=\"mjo-search\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <input\n [(ngModel)]=\"ProductQuery\"\n (focus)=\"OpenPicker()\"\n (blur)=\"ClosePickerSoon()\"\n (keydown)=\"OnPickerKey($event)\"\n placeholder=\"Add product \u2014 type a name or SKU\u2026\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-label=\"Add a product\"\n [attr.aria-expanded]=\"PickerOpen\">\n </div>\n\n @if (PickerOpen) {\n <div class=\"mj-typeahead-list is-open\" role=\"listbox\">\n @for (product of PickerResults; track product.ID; let i = $index) {\n <button\n type=\"button\"\n class=\"mj-typeahead-item mjo-ol-pick\"\n [class.is-cursor]=\"i === PickerCursor\"\n role=\"option\"\n [attr.aria-selected]=\"i === PickerCursor\"\n (mousedown)=\"AddProduct(product)\">\n <span class=\"mjo-ol-pick__body\">\n <span class=\"name\">{{ product.Name }}</span>\n <span class=\"sub\">{{ product.SKU }} \u00B7 {{ product.TypeName }} \u00B7 {{ product.CompanyName }}</span>\n </span>\n <span class=\"end\">\n <span class=\"mjo-ol-pick__price\">{{ product.ListPrice | mjoMoney }}</span>\n <span class=\"sub\">{{ product.Taxable ? 'taxable' : 'untaxable' }}</span>\n </span>\n </button>\n } @empty {\n <div class=\"mj-typeahead-item\">\n <span class=\"muted small\">\n @if (CatalogError) { {{ CatalogError }} }\n @else if (Catalog.length === 0) { Loading catalog\u2026 }\n @else { No product matches that. }\n </span>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host { display: block; }\n\n.mjo-ol {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty button {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty button:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty button:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty input {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price {\n flex: none;\n width: 118px;\n text-align: right;\n}\n\n.mjo-ol-card__amt {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-card__err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot {\n flex: none;\n width: 104px;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n}\n\n.mjo-ol-iconbtn {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty i {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search i { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search input {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open { display: block; }\n\n.mj-typeahead-item {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item:last-child { border-bottom: 0; }\n\n.mj-typeahead-item:hover,\n.mj-typeahead-item.is-cursor {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick .name { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick .sub { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick .end {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__chev {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__body {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip {\n overflow: hidden;\n min-height: 0;\n}\n\n/* Flatten the embedded extension form so its fields sit in the line card. */\n.mjo-ol-ext ::ng-deep mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-toolbar,\n.mjo-ol-ext ::ng-deep mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-body,\n.mjo-ol-ext ::ng-deep .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-form-field:last-child,\n.mjo-ol-ext ::ng-deep .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top { flex-wrap: wrap; }\n .mjo-ol-card__price, .mjo-ol-card__tot { width: auto; }\n}\n"] }]
|
|
1019
|
+
], template: "<div class=\"mjo-ol\">\n @for (line of Lines; track line.ID) {\n <div class=\"mjo-ol-card\">\n <div class=\"mjo-ol-card__top\">\n <div class=\"mjo-ol-card__id\">\n <button type=\"button\" class=\"mjo-ol-card__name\" (click)=\"OpenProduct(line, $event)\">\n {{ ProductFor(line)?.Name ?? 'Product' }}\n </button>\n <div class=\"mjo-ol-card__meta\">\n {{ ProductFor(line)?.SKU }}\n @if (ProductFor(line)?.TypeName) {\n \u00B7 {{ ProductFor(line)?.TypeName }}\n }\n </div>\n </div>\n\n <div class=\"mjo-ol-qty\" [class.is-locked]=\"!EditMode || QuantityCappedToOne(line)\">\n @if (EditMode && !QuantityCappedToOne(line)) {\n <button type=\"button\" (click)=\"Bump(line, -1)\" aria-label=\"Decrease quantity\">\u2212</button>\n <input\n [value]=\"line.Quantity\"\n (change)=\"SetQuantity(line, $event)\"\n aria-label=\"Quantity\">\n <button type=\"button\" (click)=\"Bump(line, 1)\" [disabled]=\"QuantityAtMax(line)\" aria-label=\"Increase quantity\">+</button>\n } @else {\n <span class=\"mjo-ol-qty__value\">{{ line.Quantity }}</span>\n }\n </div>\n\n <div class=\"mjo-ol-card__price\">\n <div class=\"mjo-ol-card__price-row\">\n <div class=\"mjo-ol-card__amt\">{{ DisplayUnit(line) | mjoMoney }}</div>\n @if (CanOverride) {\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn mjo-ol-price__pencil\"\n (click)=\"ToggleOverrideEditor(line)\"\n [attr.aria-expanded]=\"IsOverrideEditorOpen(line)\"\n [attr.aria-label]=\"IsOverridden(line) ? 'Edit price override' : 'Override price'\">\n <i class=\"fa-solid fa-pencil\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n @if (IsOverridden(line)) {\n <span class=\"mjo-ol-overpill\">overridden</span>\n } @else {\n <mjo-price-source-badge\n [Source]=\"PricedLine(line)?.PriceSource ?? null\"\n [Settled]=\"!Pricing.Loading\"\n [Overridden]=\"false\" />\n }\n @if (PricedLine(line)?.Error; as why) {\n <div class=\"mjo-ol-card__err\">{{ why }}</div>\n }\n </div>\n\n <div class=\"mjo-ol-card__tot\">{{ PricedLine(line)?.NetAmount | mjoMoney }}</div>\n\n @if (EditMode) {\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn\"\n (click)=\"Remove(line)\"\n [attr.aria-label]=\"'Remove ' + (ProductFor(line)?.Name ?? 'line')\">\n <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n @if (IsOverrideEditorOpen(line)) {\n <div class=\"mjo-ol-override\" role=\"region\" [attr.aria-label]=\"'Override price for ' + (ProductFor(line)?.Name ?? 'line')\">\n <div class=\"mjo-ol-override__row\">\n <select\n class=\"mjo-ol-price__pick\"\n [value]=\"SelectedPriceID(line)\"\n (change)=\"PickNamedPrice(line, $event)\"\n aria-label=\"Named price\">\n <option value=\"\">{{ DefaultLabel(line) }}</option>\n @if (OverrideKind === 'any') {\n <option value=\"__custom__\">Custom amount</option>\n }\n @for (price of ApplicableFor(line); track price.ID) {\n <option [value]=\"price.ID\">{{ price.Name }} \u00B7 {{ price.UnitPrice | mjoMoney }}</option>\n }\n </select>\n @if (ShowCustomAmount(line)) {\n <input\n class=\"mjo-ol-price__amt\"\n type=\"number\"\n step=\"0.01\"\n min=\"0\"\n [value]=\"DisplayUnit(line)\"\n (change)=\"TypeAmount(line, $event)\"\n aria-label=\"Custom unit price\">\n }\n </div>\n <label class=\"mjo-ol-override__reason\" [class.is-off]=\"!CanExplainOverride(line)\">\n <span>Override Explanation</span>\n <textarea\n rows=\"2\"\n [disabled]=\"!CanExplainOverride(line)\"\n [value]=\"OverrideReasonText(line)\"\n (input)=\"SetOverrideReason(line, $event)\"\n placeholder=\"Optional \u2014 why this price differs from the default\"></textarea>\n </label>\n <div class=\"mjo-ol-override__actions\">\n <button type=\"button\" class=\"mjo-ol-override__done\" (click)=\"DoneOverrideEditor(line)\">Done</button>\n <button type=\"button\" class=\"mjo-ol-override__reset\" (click)=\"ResetOverride(line)\">Use Default Price</button>\n </div>\n </div>\n }\n\n <div class=\"mjo-ol-card__conseq\">\n @if (ProductFor(line); as product) {\n @if (product.TypeName === 'Goods') {\n <mjo-consequence-chip Kind=\"fulfillment\">Ships \u2014 holds the order at Posted</mjo-consequence-chip>\n }\n @if (!product.Taxable) {\n <mjo-consequence-chip Kind=\"untaxable\">Untaxable</mjo-consequence-chip>\n }\n @if (ShowsForeignRevenue(line)) {\n <mjo-consequence-chip Kind=\"company\">Revenue to {{ product.CompanyName }}</mjo-consequence-chip>\n }\n }\n </div>\n @if (OverrideReasonText(line); as why) {\n <div class=\"mjo-ol-card__why\">{{ why }}</div>\n }\n\n @if (ExtensionFor(line); as ext) {\n <div class=\"mjo-ol-ext\" [class.is-open]=\"IsExtensionOpen(line)\">\n <button\n type=\"button\"\n class=\"mjo-ol-ext__toggle\"\n (click)=\"ToggleExtension(line)\"\n [attr.aria-expanded]=\"IsExtensionOpen(line)\"\n [attr.aria-controls]=\"'mjo-ol-ext-' + line.ID\">\n <i class=\"fa-solid fa-chevron-right mjo-ol-ext__chev\" aria-hidden=\"true\"></i>\n <span class=\"mjo-ol-ext__label\">{{ ExtensionLabel(line) }}</span>\n @if (!IsExtensionOpen(line)) {\n <span class=\"mjo-ol-ext__hint\">{{ ExtensionHint(line) }}</span>\n }\n </button>\n <div\n class=\"mjo-ol-ext__body\"\n [id]=\"'mjo-ol-ext-' + line.ID\"\n [attr.inert]=\"IsExtensionOpen(line) ? null : ''\"\n [attr.aria-hidden]=\"!IsExtensionOpen(line)\">\n <div class=\"mjo-ol-ext__clip\">\n <mj-entity-form-host\n [Record]=\"ext\"\n [EditMode]=\"EditMode\"\n [Config]=\"ExtensionFormConfigFor(line)\"\n (FormCreated)=\"OnExtensionFormCreated($event)\"\n (Navigate)=\"OnExtensionNavigate($event)\">\n </mj-entity-form-host>\n </div>\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"mjo-ol-empty\">\n <i class=\"fa-solid fa-cart-plus\" aria-hidden=\"true\"></i>\n <div class=\"mjo-ol-empty__title\">Nothing on this order yet</div>\n <div>Search the catalog to add the first line.</div>\n </div>\n }\n\n @if (EditMode) {\n <div class=\"mj-typeahead mjo-ol-picker\" #pickerHost>\n <div class=\"mjo-search\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <input\n [(ngModel)]=\"ProductQuery\"\n (ngModelChange)=\"OnProductQueryChange()\"\n (focus)=\"OpenPicker()\"\n (blur)=\"ClosePickerSoon()\"\n (keydown)=\"OnPickerKey($event)\"\n placeholder=\"Add product \u2014 type a name or SKU\u2026\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-label=\"Add a product\"\n [attr.aria-expanded]=\"PickerOpen\">\n </div>\n\n @if (PickerOpen) {\n <div class=\"mj-typeahead-list is-open\" [class.is-up]=\"PickerOpensUp\" role=\"listbox\">\n @for (product of PickerResults; track product.ID; let i = $index) {\n <button\n type=\"button\"\n class=\"mj-typeahead-item mjo-ol-pick\"\n [class.is-cursor]=\"i === PickerCursor\"\n role=\"option\"\n [attr.aria-selected]=\"i === PickerCursor\"\n (mousedown)=\"AddProduct(product)\">\n <span class=\"mjo-ol-pick__body\">\n <span class=\"name\">{{ product.Name }}</span>\n <span class=\"sub\">{{ product.SKU }} \u00B7 {{ product.TypeName }} \u00B7 {{ product.CompanyName }}</span>\n </span>\n <span class=\"end\">\n <span class=\"mjo-ol-pick__price\">{{ product.ListPrice | mjoMoney }}</span>\n <span class=\"sub\">{{ product.Taxable ? 'taxable' : 'untaxable' }}</span>\n </span>\n </button>\n } @empty {\n <div class=\"mj-typeahead-item\">\n <span class=\"muted small\">\n @if (CatalogError) { {{ CatalogError }} }\n @else if (Catalog.length === 0) { Loading catalog\u2026 }\n @else { No product matches that. }\n </span>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host { display: block; }\n\n.mjo-ol {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-card {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n padding: var(--mj-space-3);\n}\n\n.mjo-ol-card:has(.mjo-ol-ext.is-open) {\n padding-bottom: var(--mj-space-1);\n}\n\n.mjo-ol-card__top {\n display: flex;\n align-items: flex-start;\n gap: var(--mj-space-3);\n}\n\n.mjo-ol-card__id { flex: 1; min-width: 0; }\n\n.mjo-ol-card__name {\n display: inline;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-link);\n text-align: left;\n cursor: pointer;\n text-decoration: none;\n}\n\n.mjo-ol-card__name:hover { text-decoration: underline; }\n\n.mjo-ol-card__meta {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.mjo-ol-qty {\n display: inline-flex;\n align-items: center;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n background: var(--mj-bg-surface);\n flex: none;\n}\n\n.mjo-ol-qty button {\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-secondary);\n width: 26px;\n height: 28px;\n font-size: 11px;\n}\n\n.mjo-ol-qty button:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-qty button:disabled {\n cursor: default;\n color: var(--mj-text-disabled);\n}\n\n.mjo-ol-qty input {\n border: 0;\n outline: 0;\n background: transparent;\n width: 46px;\n text-align: center;\n font: inherit;\n font-variant-numeric: tabular-nums;\n color: inherit;\n}\n\n.mjo-ol-qty.is-locked {\n border-color: var(--mj-border-default);\n background: transparent;\n}\n\n.mjo-ol-qty__value {\n min-width: 46px;\n padding: 0 10px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-card__price {\n flex: none;\n min-width: 108px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.mjo-ol-card__price-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 2px;\n height: 28px;\n}\n\n.mjo-ol-price__pencil {\n flex: none;\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-price__pencil:hover {\n color: var(--mj-text-link);\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-price__pick,\n.mjo-ol-price__amt,\n.mjo-ol-override__reason textarea {\n display: block;\n width: 100%;\n box-sizing: border-box;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-price__pick {\n height: 28px;\n padding: 0 6px;\n text-align: left;\n flex: 1 1 180px;\n max-width: 240px;\n width: auto;\n}\n\n.mjo-ol-price__amt {\n height: 28px;\n padding: 0 8px;\n text-align: right;\n font-weight: var(--mj-font-semibold);\n width: 108px;\n flex: none;\n}\n\n.mjo-ol-override {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n padding: var(--mj-space-2);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-override__reason span {\n display: block;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.mjo-ol-override__reason.is-off {\n opacity: 0.55;\n}\n\n.mjo-ol-override__reason textarea:disabled {\n cursor: not-allowed;\n background: var(--mj-bg-surface-subtle, var(--mj-bg-surface));\n}\n\n.mjo-ol-override__reason textarea {\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\n text-align: left;\n font-variant-numeric: normal;\n}\n\n.mjo-ol-override__actions {\n display: flex;\n gap: var(--mj-space-2);\n justify-content: flex-end;\n}\n\n.mjo-ol-override__done,\n.mjo-ol-override__reset {\n border: 0;\n background: transparent;\n cursor: pointer;\n font: inherit;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-override__done {\n color: var(--mj-text-link);\n}\n\n.mjo-ol-override__reset {\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-override__done:hover,\n.mjo-ol-override__reset:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-card__amt {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-overpill {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-top: 4px;\n padding: 1px 8px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--mj-status-warning-text);\n background: color-mix(in srgb, var(--mj-status-warning-text) 16%, transparent);\n}\n\n.mjo-ol-card__err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n margin-top: 2px;\n}\n\n.mjo-ol-card__tot {\n flex: none;\n min-width: 104px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n font-size: var(--mj-text-sm);\n line-height: 28px;\n}\n\n.mjo-ol-iconbtn {\n border: 0;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-iconbtn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-status-error);\n}\n\n.mjo-ol-card__conseq {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-card__why {\n margin-top: 6px;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n line-height: 1.35;\n}\n\n.mjo-ol-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mj-space-1);\n padding: var(--mj-space-4) var(--mj-space-3);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n text-align: center;\n}\n\n.mjo-ol-empty i {\n font-size: var(--mj-text-2xl);\n color: var(--mj-brand-primary);\n}\n\n.mjo-ol-empty__title {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-picker {\n position: relative;\n z-index: 20;\n}\n\n.mjo-ol-picker:has(.mj-typeahead-list.is-open) {\n z-index: 40;\n}\n\n.mjo-search {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n padding: 8px 10px;\n}\n\n.mjo-search i { color: var(--mj-text-muted); font-size: 12px; }\n\n.mjo-search input {\n border: 0;\n outline: 0;\n background: transparent;\n font: inherit;\n font-size: var(--mj-text-sm);\n color: inherit;\n width: 100%;\n}\n\n.mj-typeahead-list {\n display: none;\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 4px);\n max-height: 240px;\n overflow: auto;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md, 0 8px 24px rgba(0, 0, 0, 0.18));\n z-index: 30;\n}\n\n.mj-typeahead-list.is-open { display: block; }\n\n.mj-typeahead-list.is-up {\n top: auto;\n bottom: calc(100% + 4px);\n}\n\n.mj-typeahead-item {\n display: flex;\n align-items: center;\n gap: var(--mj-space-3);\n width: 100%;\n padding: 8px 12px;\n border: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n font: inherit;\n}\n\n.mj-typeahead-item:last-child { border-bottom: 0; }\n\n.mj-typeahead-item:hover,\n.mj-typeahead-item.is-cursor {\n background: var(--mj-bg-surface-hover);\n}\n\n.mjo-ol-pick__body {\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n}\n\n.mjo-ol-pick .name { font-size: 13px; font-weight: var(--mj-font-semibold); }\n.mjo-ol-pick .sub { font-size: 11.5px; color: var(--mj-text-muted); }\n.mjo-ol-pick .end {\n margin-left: auto;\n text-align: right;\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 0 0 auto;\n}\n.mjo-ol-pick__price {\n font-variant-numeric: tabular-nums;\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-ext-err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-ext {\n margin-top: var(--mj-space-2);\n padding-top: var(--mj-space-1);\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.mjo-ol-ext__toggle {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n width: 100%;\n padding: var(--mj-space-1) 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n border-radius: var(--mj-radius-sm);\n}\n\n.mjo-ol-ext__toggle:hover {\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-ext__toggle:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: 2px;\n}\n\n.mjo-ol-ext__chev {\n flex: none;\n width: 12px;\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 160ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__chev {\n transform: rotate(90deg);\n}\n\n.mjo-ol-ext__label {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n letter-spacing: 0.01em;\n}\n\n.mjo-ol-ext__hint {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mjo-ol-ext__body {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 180ms ease;\n}\n\n.mjo-ol-ext.is-open .mjo-ol-ext__body {\n grid-template-rows: 1fr;\n}\n\n.mjo-ol-ext__clip {\n overflow: hidden;\n min-height: 0;\n}\n\n/* Flatten the embedded extension form so its fields sit in the line card. */\n.mjo-ol-ext ::ng-deep mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-record-form-container,\n.mjo-ol-ext ::ng-deep .mj-forms-container {\n display: block;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-toolbar,\n.mjo-ol-ext ::ng-deep mj-form-toolbar {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel {\n border: 0;\n background: transparent;\n box-shadow: none;\n margin: 0;\n padding: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-collapsible-panel + mj-collapsible-panel .mj-forms-panel {\n margin-top: calc(-1 * var(--mj-space-1));\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-header {\n display: none;\n}\n\n.mjo-ol-ext ::ng-deep .mj-forms-panel-body,\n.mjo-ol-ext ::ng-deep .mj-forms-panel-content {\n max-height: none;\n overflow: visible;\n padding: 0;\n margin: 0;\n}\n\n.mjo-ol-ext ::ng-deep mj-form-field:last-child,\n.mjo-ol-ext ::ng-deep .mj-form-field:last-child {\n margin-bottom: 0;\n}\n\n@media (max-width: 720px) {\n .mjo-ol-card__top { flex-wrap: wrap; }\n .mjo-ol-card__price, .mjo-ol-card__tot { width: auto; }\n}\n"] }]
|
|
609
1020
|
}], null, { Provider: [{
|
|
610
1021
|
type: Input
|
|
611
1022
|
}], EditMode: [{
|
|
@@ -616,6 +1027,9 @@ export class MJOOrderLinesEditorComponent {
|
|
|
616
1027
|
type: Output
|
|
617
1028
|
}], Navigate: [{
|
|
618
1029
|
type: Output
|
|
1030
|
+
}], pickerHost: [{
|
|
1031
|
+
type: ViewChild,
|
|
1032
|
+
args: ['pickerHost']
|
|
619
1033
|
}] }); })();
|
|
620
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOOrderLinesEditorComponent, { className: "MJOOrderLinesEditorComponent", filePath: "lib/custom/OrderHeader/order-lines-editor.component.ts", lineNumber:
|
|
1034
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOOrderLinesEditorComponent, { className: "MJOOrderLinesEditorComponent", filePath: "lib/custom/OrderHeader/order-lines-editor.component.ts", lineNumber: 69 }); })();
|
|
621
1035
|
//# sourceMappingURL=order-lines-editor.component.js.map
|