@mj-biz-apps/orders-ng 5.27.0 → 5.28.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-lines-editor.component.d.ts +18 -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 +500 -386
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.js.map +1 -1
- package/dist/lib/custom/Product/product-save-guard-form.component.js +71 -69
- package/dist/lib/custom/Product/product-save-guard-form.component.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 +34 -3
- package/dist/lib/form-panels/product-widget.panels.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.js +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersEntitlementGrant/mjbizappsordersentitlementgrant.form.component.js +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersEntitlementGrant/mjbizappsordersentitlementgrant.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.js +13 -9
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.js +19 -9
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.js +9 -7
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js +129 -123
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeaderPaymentSchedule/mjbizappsordersorderheaderpaymentschedule.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeaderPaymentSchedule/mjbizappsordersorderheaderpaymentschedule.form.component.js +23 -5
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeaderPaymentSchedule/mjbizappsordersorderheaderpaymentschedule.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js +126 -100
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.js +10 -10
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.js +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentProvider/mjbizappsorderspaymentprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js +71 -69
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.js +33 -31
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.js +25 -19
- package/dist/lib/generated/Entities/mjBizAppsOrdersSalesAuthority/mjbizappsorderssalesauthority.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.js +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSalesRule/mjbizappsorderssalesrule.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSubscription/mjbizappsorderssubscription.form.component.js +46 -42
- package/dist/lib/generated/Entities/mjBizAppsOrdersSubscription/mjbizappsorderssubscription.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionFamily/mjbizappsorderssubscriptionfamily.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionFamily/mjbizappsorderssubscriptionfamily.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionFamily/mjbizappsorderssubscriptionfamily.form.component.js +84 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersSubscriptionFamily/mjbizappsorderssubscriptionfamily.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +101 -90
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +110 -47
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +17 -17
|
@@ -4,7 +4,7 @@ import { FormsModule } from '@angular/forms';
|
|
|
4
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, CanRestoreLineDefault, IsLinePriceOverridden, LineNeedsOverrideReason, LinePriceOverrideReason, ListApplicablePrices, LoadOrdersEngine, OrdersEngine, RestoreLineDefault, loadApplicabilityContext, priceOverrideCatalogInstalled, userPriceOverrideKind, } from '@mj-biz-apps/orders-entities';
|
|
7
|
+
import { OrderLineEntity, OrdersCheckCoverageOverlapOperation, ClampLineQuantity, CanRestoreLineDefault, IsLinePriceOverridden, LineNeedsOverrideReason, LinePriceOverrideReason, ListApplicablePrices, LoadOrdersEngine, OrdersEngine, RestoreLineDefault, loadApplicabilityContext, priceOverrideCatalogInstalled, userPriceOverrideKind, } from '@mj-biz-apps/orders-entities';
|
|
8
8
|
import { MJOConsequenceChipComponent, MJOPriceSourceBadgeComponent } from '../../panels/chips.component.js';
|
|
9
9
|
import { MJOLinePricePickerComponent } from '../../panels/line-price-picker.component.js';
|
|
10
10
|
import { FormatMoney, MJOMoneyPipe } from '../../panels/money-format.js';
|
|
@@ -20,286 +20,295 @@ import * as i1 from "@angular/forms";
|
|
|
20
20
|
import * as i2 from "@memberjunction/ng-base-forms";
|
|
21
21
|
const _c0 = ["pickerHost"];
|
|
22
22
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
23
|
-
function
|
|
23
|
+
function MJOOrderLinesEditorComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
25
|
+
i0.ɵɵtext(1);
|
|
26
|
+
i0.ɵɵelementEnd();
|
|
27
|
+
} if (rf & 2) {
|
|
28
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
29
|
+
i0.ɵɵadvance();
|
|
30
|
+
i0.ɵɵtextInterpolate(ctx_r0.CoverageCheckError);
|
|
31
|
+
} }
|
|
32
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
24
33
|
i0.ɵɵtext(0);
|
|
25
34
|
} if (rf & 2) {
|
|
26
35
|
let tmp_11_0;
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
i0.ɵɵtextInterpolate1(" \u00B7 ", (tmp_11_0 =
|
|
36
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
37
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
38
|
+
i0.ɵɵtextInterpolate1(" \u00B7 ", (tmp_11_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_11_0.TypeName, " ");
|
|
30
39
|
} }
|
|
31
|
-
function
|
|
40
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
32
41
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
33
|
-
i0.ɵɵelementStart(0, "button",
|
|
34
|
-
i0.ɵɵlistener("click", function
|
|
42
|
+
i0.ɵɵelementStart(0, "button", 31);
|
|
43
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Bump(line_r3, -1)); });
|
|
35
44
|
i0.ɵɵtext(1, "\u2212");
|
|
36
45
|
i0.ɵɵelementEnd();
|
|
37
|
-
i0.ɵɵelementStart(2, "input",
|
|
38
|
-
i0.ɵɵlistener("change", function
|
|
46
|
+
i0.ɵɵelementStart(2, "input", 32);
|
|
47
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_3_Conditional_9_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r4); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetQuantity(line_r3, $event)); });
|
|
39
48
|
i0.ɵɵelementEnd();
|
|
40
|
-
i0.ɵɵelementStart(3, "button",
|
|
41
|
-
i0.ɵɵlistener("click", function
|
|
49
|
+
i0.ɵɵelementStart(3, "button", 33);
|
|
50
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_9_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Bump(line_r3, 1)); });
|
|
42
51
|
i0.ɵɵtext(4, "+");
|
|
43
52
|
i0.ɵɵelementEnd();
|
|
44
53
|
} if (rf & 2) {
|
|
45
|
-
const
|
|
46
|
-
const
|
|
54
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
55
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
47
56
|
i0.ɵɵadvance(2);
|
|
48
|
-
i0.ɵɵproperty("value",
|
|
57
|
+
i0.ɵɵproperty("value", line_r3.Quantity);
|
|
49
58
|
i0.ɵɵadvance();
|
|
50
|
-
i0.ɵɵproperty("disabled",
|
|
59
|
+
i0.ɵɵproperty("disabled", ctx_r0.QuantityAtMax(line_r3));
|
|
51
60
|
} }
|
|
52
|
-
function
|
|
53
|
-
i0.ɵɵelementStart(0, "span",
|
|
61
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
54
63
|
i0.ɵɵtext(1);
|
|
55
64
|
i0.ɵɵelementEnd();
|
|
56
65
|
} if (rf & 2) {
|
|
57
|
-
const
|
|
66
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
58
67
|
i0.ɵɵadvance();
|
|
59
|
-
i0.ɵɵtextInterpolate(
|
|
68
|
+
i0.ɵɵtextInterpolate(line_r3.Quantity);
|
|
60
69
|
} }
|
|
61
|
-
function
|
|
70
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
62
71
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
63
|
-
i0.ɵɵelementStart(0, "button",
|
|
64
|
-
i0.ɵɵlistener("click", function
|
|
65
|
-
i0.ɵɵelement(1, "i",
|
|
72
|
+
i0.ɵɵelementStart(0, "button", 34);
|
|
73
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_16_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ToggleOverrideEditor(line_r3)); });
|
|
74
|
+
i0.ɵɵelement(1, "i", 35);
|
|
66
75
|
i0.ɵɵelementEnd();
|
|
67
76
|
} if (rf & 2) {
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
i0.ɵɵattribute("aria-expanded",
|
|
77
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
78
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
79
|
+
i0.ɵɵattribute("aria-expanded", ctx_r0.IsOverrideEditorOpen(line_r3))("aria-label", ctx_r0.CanOverride ? ctx_r0.IsOverridden(line_r3) ? "Edit price override" : "Override price or discount line" : "Discount line");
|
|
71
80
|
} }
|
|
72
|
-
function
|
|
73
|
-
i0.ɵɵelementStart(0, "span",
|
|
81
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵelementStart(0, "span", 17);
|
|
74
83
|
i0.ɵɵtext(1, "overridden");
|
|
75
84
|
i0.ɵɵelementEnd();
|
|
76
85
|
} }
|
|
77
|
-
function
|
|
78
|
-
i0.ɵɵelement(0, "mjo-price-source-badge",
|
|
86
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
i0.ɵɵelement(0, "mjo-price-source-badge", 18);
|
|
79
88
|
} if (rf & 2) {
|
|
80
89
|
let tmp_11_0;
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
i0.ɵɵproperty("Source", ((tmp_11_0 =
|
|
90
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
91
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
92
|
+
i0.ɵɵproperty("Source", ((tmp_11_0 = ctx_r0.PricedLine(line_r3)) == null ? null : tmp_11_0.PriceSource) ?? null)("Settled", !ctx_r0.Pricing.Loading)("Overridden", false);
|
|
84
93
|
} }
|
|
85
|
-
function
|
|
86
|
-
i0.ɵɵelementStart(0, "span",
|
|
94
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
87
96
|
i0.ɵɵtext(1);
|
|
88
97
|
i0.ɵɵpipe(2, "mjoMoney");
|
|
89
98
|
i0.ɵɵelementEnd();
|
|
90
99
|
} if (rf & 2) {
|
|
91
|
-
const
|
|
92
|
-
const
|
|
100
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
101
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
93
102
|
i0.ɵɵadvance();
|
|
94
|
-
i0.ɵɵtextInterpolate1("\u2212", i0.ɵɵpipeBind1(2, 1,
|
|
103
|
+
i0.ɵɵtextInterpolate1("\u2212", i0.ɵɵpipeBind1(2, 1, ctx_r0.AppliedDiscount(line_r3)));
|
|
95
104
|
} }
|
|
96
|
-
function
|
|
97
|
-
i0.ɵɵelementStart(0, "div",
|
|
105
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
98
107
|
i0.ɵɵtext(1);
|
|
99
108
|
i0.ɵɵelementEnd();
|
|
100
109
|
} if (rf & 2) {
|
|
101
110
|
i0.ɵɵadvance();
|
|
102
111
|
i0.ɵɵtextInterpolate(ctx);
|
|
103
112
|
} }
|
|
104
|
-
function
|
|
113
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
105
114
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
106
|
-
i0.ɵɵelementStart(0, "button",
|
|
107
|
-
i0.ɵɵlistener("click", function
|
|
108
|
-
i0.ɵɵelement(1, "i",
|
|
115
|
+
i0.ɵɵelementStart(0, "button", 22);
|
|
116
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Remove(line_r3)); });
|
|
117
|
+
i0.ɵɵelement(1, "i", 36);
|
|
109
118
|
i0.ɵɵelementEnd();
|
|
110
119
|
} if (rf & 2) {
|
|
111
120
|
let tmp_11_0;
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
i0.ɵɵattribute("aria-label", "Remove " + (((tmp_11_0 =
|
|
121
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
122
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
123
|
+
i0.ɵɵattribute("aria-label", "Remove " + (((tmp_11_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_11_0.Name) ?? "line"));
|
|
115
124
|
} }
|
|
116
|
-
function
|
|
125
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
117
126
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
118
|
-
i0.ɵɵelementStart(0, "mjo-line-price-picker",
|
|
119
|
-
i0.ɵɵlistener("PriceChanged", function
|
|
127
|
+
i0.ɵɵelementStart(0, "mjo-line-price-picker", 43);
|
|
128
|
+
i0.ɵɵlistener("PriceChanged", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_1_Template_mjo_line_price_picker_PriceChanged_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnLinePriceChanged()); });
|
|
120
129
|
i0.ɵɵelementEnd();
|
|
121
130
|
} if (rf & 2) {
|
|
122
131
|
let tmp_15_0;
|
|
123
132
|
let tmp_17_0;
|
|
124
133
|
let tmp_18_0;
|
|
125
|
-
const
|
|
126
|
-
const
|
|
127
|
-
i0.ɵɵproperty("Line",
|
|
134
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
135
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
136
|
+
i0.ɵɵproperty("Line", line_r3)("OverrideKind", ctx_r0.OverrideKind)("Applicable", ctx_r0.ApplicableFor(line_r3))("EngineDefault", (tmp_15_0 = ctx_r0.PricedLine(line_r3)) == null ? null : tmp_15_0.Default)("DefaultUnit", ctx_r0.DefaultUnit(line_r3))("PriceSource", ((tmp_17_0 = ctx_r0.PricedLine(line_r3)) == null ? null : tmp_17_0.PriceSource) ?? null)("PricedUnit", ((tmp_18_0 = ctx_r0.PricedLine(line_r3)) == null ? null : tmp_18_0.UnitPrice) ?? null);
|
|
128
137
|
} }
|
|
129
|
-
function
|
|
138
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
130
139
|
i0.ɵɵtext(0);
|
|
131
140
|
i0.ɵɵpipe(1, "mjoMoney");
|
|
132
141
|
i0.ɵɵpipe(2, "mjoMoney");
|
|
133
142
|
} if (rf & 2) {
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
i0.ɵɵtextInterpolate2(" \u2212", i0.ɵɵpipeBind1(1, 2, ctx), " of ", i0.ɵɵpipeBind1(2, 4,
|
|
143
|
+
const line_r3 = i0.ɵɵnextContext(4).$implicit;
|
|
144
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
145
|
+
i0.ɵɵtextInterpolate2(" \u2212", i0.ɵɵpipeBind1(1, 2, ctx), " of ", i0.ɵɵpipeBind1(2, 4, ctx_r0.DiscountBase(line_r3)), " ");
|
|
137
146
|
} }
|
|
138
|
-
function
|
|
147
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
139
148
|
i0.ɵɵtext(0);
|
|
140
149
|
i0.ɵɵpipe(1, "mjoMoney");
|
|
141
150
|
} if (rf & 2) {
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(1, 1,
|
|
151
|
+
const line_r3 = i0.ɵɵnextContext(4).$implicit;
|
|
152
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
153
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(1, 1, ctx_r0.DiscountBase(line_r3)), " left to discount ");
|
|
145
154
|
} }
|
|
146
|
-
function
|
|
147
|
-
i0.ɵɵelementStart(0, "em",
|
|
155
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "em", 53);
|
|
148
157
|
i0.ɵɵtext(1, "*");
|
|
149
158
|
i0.ɵɵelementEnd();
|
|
150
159
|
} }
|
|
151
|
-
function
|
|
152
|
-
i0.ɵɵelementStart(0, "div",
|
|
160
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
i0.ɵɵelementStart(0, "div", 55);
|
|
153
162
|
i0.ɵɵtext(1);
|
|
154
163
|
i0.ɵɵelementEnd();
|
|
155
164
|
} if (rf & 2) {
|
|
156
165
|
i0.ɵɵadvance();
|
|
157
166
|
i0.ɵɵtextInterpolate(ctx);
|
|
158
167
|
} }
|
|
159
|
-
function
|
|
168
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
160
169
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
161
|
-
i0.ɵɵelementStart(0, "div",
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "span");
|
|
162
171
|
i0.ɵɵtext(2, "Applies when this order is saved.");
|
|
163
172
|
i0.ɵɵelementEnd();
|
|
164
|
-
i0.ɵɵelementStart(3, "button",
|
|
165
|
-
i0.ɵɵlistener("click", function
|
|
173
|
+
i0.ɵɵelementStart(3, "button", 57);
|
|
174
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_16_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const line_r3 = i0.ɵɵnextContext(4).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ClearDiscount(line_r3)); });
|
|
166
175
|
i0.ɵɵtext(4, "Remove");
|
|
167
176
|
i0.ɵɵelementEnd()();
|
|
168
177
|
} }
|
|
169
|
-
function
|
|
178
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
170
179
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
171
|
-
i0.ɵɵelementStart(0, "div",
|
|
172
|
-
i0.ɵɵlistener("click", function
|
|
180
|
+
i0.ɵɵelementStart(0, "div", 47)(1, "div", 48)(2, "button", 49);
|
|
181
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetDiscountMode(line_r3, "percent")); });
|
|
173
182
|
i0.ɵɵtext(3, "%");
|
|
174
183
|
i0.ɵɵelementEnd();
|
|
175
|
-
i0.ɵɵelementStart(4, "button",
|
|
176
|
-
i0.ɵɵlistener("click", function
|
|
184
|
+
i0.ɵɵelementStart(4, "button", 49);
|
|
185
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetDiscountMode(line_r3, "amount")); });
|
|
177
186
|
i0.ɵɵtext(5, "Amount");
|
|
178
187
|
i0.ɵɵelementEnd()();
|
|
179
|
-
i0.ɵɵelementStart(6, "input",
|
|
180
|
-
i0.ɵɵlistener("input", function
|
|
188
|
+
i0.ɵɵelementStart(6, "input", 50);
|
|
189
|
+
i0.ɵɵlistener("input", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Template_input_input_6_listener($event) { i0.ɵɵrestoreView(_r9); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetDiscountValue(line_r3, $event)); });
|
|
181
190
|
i0.ɵɵelementEnd();
|
|
182
|
-
i0.ɵɵelementStart(7, "span",
|
|
183
|
-
i0.ɵɵconditionalCreate(8,
|
|
191
|
+
i0.ɵɵelementStart(7, "span", 51);
|
|
192
|
+
i0.ɵɵconditionalCreate(8, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_8_Template, 3, 6)(9, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_9_Template, 2, 3);
|
|
184
193
|
i0.ɵɵelementEnd()();
|
|
185
|
-
i0.ɵɵelementStart(10, "label",
|
|
194
|
+
i0.ɵɵelementStart(10, "label", 52)(11, "span");
|
|
186
195
|
i0.ɵɵtext(12, "Discount Reason ");
|
|
187
|
-
i0.ɵɵconditionalCreate(13,
|
|
196
|
+
i0.ɵɵconditionalCreate(13, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_13_Template, 2, 0, "em", 53);
|
|
188
197
|
i0.ɵɵelementEnd();
|
|
189
|
-
i0.ɵɵelementStart(14, "textarea",
|
|
190
|
-
i0.ɵɵlistener("input", function
|
|
198
|
+
i0.ɵɵelementStart(14, "textarea", 54);
|
|
199
|
+
i0.ɵɵlistener("input", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Template_textarea_input_14_listener($event) { i0.ɵɵrestoreView(_r9); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetDiscountReason(line_r3, $event)); });
|
|
191
200
|
i0.ɵɵelementEnd()();
|
|
192
|
-
i0.ɵɵconditionalCreate(15,
|
|
193
|
-
i0.ɵɵconditionalCreate(16,
|
|
201
|
+
i0.ɵɵconditionalCreate(15, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_15_Template, 2, 1, "div", 55);
|
|
202
|
+
i0.ɵɵconditionalCreate(16, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Conditional_16_Template, 5, 0, "div", 56);
|
|
194
203
|
} if (rf & 2) {
|
|
195
204
|
let tmp_20_0;
|
|
196
205
|
let tmp_24_0;
|
|
197
|
-
const
|
|
198
|
-
const
|
|
206
|
+
const line_r3 = i0.ɵɵnextContext(3).$implicit;
|
|
207
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
199
208
|
i0.ɵɵadvance(2);
|
|
200
|
-
i0.ɵɵclassProp("is-on",
|
|
201
|
-
i0.ɵɵattribute("aria-checked",
|
|
209
|
+
i0.ɵɵclassProp("is-on", ctx_r0.DiscountDraft(line_r3).Mode === "percent");
|
|
210
|
+
i0.ɵɵattribute("aria-checked", ctx_r0.DiscountDraft(line_r3).Mode === "percent");
|
|
202
211
|
i0.ɵɵadvance(2);
|
|
203
|
-
i0.ɵɵclassProp("is-on",
|
|
204
|
-
i0.ɵɵattribute("aria-checked",
|
|
212
|
+
i0.ɵɵclassProp("is-on", ctx_r0.DiscountDraft(line_r3).Mode === "amount");
|
|
213
|
+
i0.ɵɵattribute("aria-checked", ctx_r0.DiscountDraft(line_r3).Mode === "amount");
|
|
205
214
|
i0.ɵɵadvance(2);
|
|
206
|
-
i0.ɵɵproperty("value",
|
|
207
|
-
i0.ɵɵattribute("placeholder",
|
|
215
|
+
i0.ɵɵproperty("value", ctx_r0.DiscountDraft(line_r3).Value);
|
|
216
|
+
i0.ɵɵattribute("placeholder", ctx_r0.DiscountDraft(line_r3).Mode === "percent" ? "0" : "0.00")("aria-label", ctx_r0.DiscountDraft(line_r3).Mode === "percent" ? "Discount percent" : "Discount amount");
|
|
208
217
|
i0.ɵɵadvance(2);
|
|
209
|
-
i0.ɵɵconditional((tmp_20_0 =
|
|
218
|
+
i0.ɵɵconditional((tmp_20_0 = ctx_r0.DraftDiscountAmount(line_r3)) ? 8 : 9, tmp_20_0);
|
|
210
219
|
i0.ɵɵadvance(2);
|
|
211
|
-
i0.ɵɵclassProp("is-required",
|
|
220
|
+
i0.ɵɵclassProp("is-required", ctx_r0.NeedsDiscountReason(line_r3));
|
|
212
221
|
i0.ɵɵadvance(3);
|
|
213
|
-
i0.ɵɵconditional(
|
|
222
|
+
i0.ɵɵconditional(ctx_r0.DraftDiscountAmount(line_r3) ? 13 : -1);
|
|
214
223
|
i0.ɵɵadvance();
|
|
215
|
-
i0.ɵɵproperty("value",
|
|
224
|
+
i0.ɵɵproperty("value", ctx_r0.DiscountDraft(line_r3).Reason);
|
|
216
225
|
i0.ɵɵadvance();
|
|
217
|
-
i0.ɵɵconditional((tmp_24_0 =
|
|
226
|
+
i0.ɵɵconditional((tmp_24_0 = ctx_r0.DiscountError(line_r3)) ? 15 : -1, tmp_24_0);
|
|
218
227
|
i0.ɵɵadvance();
|
|
219
|
-
i0.ɵɵconditional(
|
|
228
|
+
i0.ɵɵconditional(ctx_r0.HasStagedDiscount(line_r3) ? 16 : -1);
|
|
220
229
|
} }
|
|
221
|
-
function
|
|
222
|
-
i0.ɵɵelementStart(0, "div",
|
|
230
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
231
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
223
232
|
i0.ɵɵtext(1, " This line is booked, so its money is frozen. Reverse the line to re-sell it at a discounted price. ");
|
|
224
233
|
i0.ɵɵelementEnd();
|
|
225
234
|
} }
|
|
226
|
-
function
|
|
227
|
-
i0.ɵɵelementStart(0, "div",
|
|
235
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
236
|
+
i0.ɵɵelementStart(0, "div", 38)(1, "div", 44)(2, "span", 45);
|
|
228
237
|
i0.ɵɵtext(3, "Discount");
|
|
229
238
|
i0.ɵɵelementEnd();
|
|
230
|
-
i0.ɵɵelementStart(4, "span",
|
|
239
|
+
i0.ɵɵelementStart(4, "span", 46);
|
|
231
240
|
i0.ɵɵtext(5);
|
|
232
241
|
i0.ɵɵelementEnd()();
|
|
233
|
-
i0.ɵɵconditionalCreate(6,
|
|
242
|
+
i0.ɵɵconditionalCreate(6, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_6_Template, 17, 16)(7, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Conditional_7_Template, 2, 0, "div", 39);
|
|
234
243
|
i0.ɵɵelementEnd();
|
|
235
244
|
} if (rf & 2) {
|
|
236
245
|
let tmp_12_0;
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
i0.ɵɵattribute("aria-label", "Discount for " + (((tmp_12_0 =
|
|
246
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
247
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
248
|
+
i0.ɵɵattribute("aria-label", "Discount for " + (((tmp_12_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_12_0.Name) ?? "line"));
|
|
240
249
|
i0.ɵɵadvance(5);
|
|
241
|
-
i0.ɵɵtextInterpolate1("your authority: ",
|
|
250
|
+
i0.ɵɵtextInterpolate1("your authority: ", ctx_r0.DiscountCapLabel);
|
|
242
251
|
i0.ɵɵadvance();
|
|
243
|
-
i0.ɵɵconditional(
|
|
252
|
+
i0.ɵɵconditional(ctx_r0.CanDiscountLine(line_r3) ? 6 : 7);
|
|
244
253
|
} }
|
|
245
|
-
function
|
|
246
|
-
i0.ɵɵelementStart(0, "div",
|
|
254
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
247
256
|
i0.ɵɵtext(1);
|
|
248
257
|
i0.ɵɵelementEnd();
|
|
249
258
|
} if (rf & 2) {
|
|
250
259
|
i0.ɵɵadvance();
|
|
251
260
|
i0.ɵɵtextInterpolate(ctx);
|
|
252
261
|
} }
|
|
253
|
-
function
|
|
262
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
254
263
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
255
|
-
i0.ɵɵelementStart(0, "button",
|
|
256
|
-
i0.ɵɵlistener("click", function
|
|
264
|
+
i0.ɵɵelementStart(0, "button", 58);
|
|
265
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const line_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ResetOverride(line_r3)); });
|
|
257
266
|
i0.ɵɵtext(1, "Use Default Price");
|
|
258
267
|
i0.ɵɵelementEnd();
|
|
259
268
|
} if (rf & 2) {
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
i0.ɵɵproperty("disabled", !
|
|
269
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
270
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
271
|
+
i0.ɵɵproperty("disabled", !ctx_r0.CanRestoreDefault(line_r3));
|
|
263
272
|
} }
|
|
264
|
-
function
|
|
273
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
265
274
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
266
|
-
i0.ɵɵelementStart(0, "div",
|
|
267
|
-
i0.ɵɵconditionalCreate(1,
|
|
268
|
-
i0.ɵɵconditionalCreate(2,
|
|
269
|
-
i0.ɵɵelementStart(4, "div",
|
|
270
|
-
i0.ɵɵlistener("click", function
|
|
275
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
276
|
+
i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_1_Template, 1, 7, "mjo-line-price-picker", 37);
|
|
277
|
+
i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_2_Template, 8, 3, "div", 38)(3, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_3_Template, 2, 1, "div", 39);
|
|
278
|
+
i0.ɵɵelementStart(4, "div", 40)(5, "button", 41);
|
|
279
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_27_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r7); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.DoneOverrideEditor(line_r3)); });
|
|
271
280
|
i0.ɵɵtext(6, "Done");
|
|
272
281
|
i0.ɵɵelementEnd();
|
|
273
|
-
i0.ɵɵconditionalCreate(7,
|
|
282
|
+
i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_For_3_Conditional_27_Conditional_7_Template, 2, 1, "button", 42);
|
|
274
283
|
i0.ɵɵelementEnd()();
|
|
275
284
|
} if (rf & 2) {
|
|
276
285
|
let tmp_11_0;
|
|
277
286
|
let tmp_13_0;
|
|
278
|
-
const
|
|
279
|
-
const
|
|
280
|
-
i0.ɵɵattribute("aria-label", "Price and discount for " + (((tmp_11_0 =
|
|
287
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
288
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
289
|
+
i0.ɵɵattribute("aria-label", "Price and discount for " + (((tmp_11_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_11_0.Name) ?? "line"));
|
|
281
290
|
i0.ɵɵadvance();
|
|
282
|
-
i0.ɵɵconditional(
|
|
291
|
+
i0.ɵɵconditional(ctx_r0.CanOverride ? 1 : -1);
|
|
283
292
|
i0.ɵɵadvance();
|
|
284
|
-
i0.ɵɵconditional(
|
|
293
|
+
i0.ɵɵconditional(ctx_r0.CanDiscount ? 2 : (tmp_13_0 = ctx_r0.DiscountUnavailableReason) ? 3 : -1, tmp_13_0);
|
|
285
294
|
i0.ɵɵadvance(3);
|
|
286
|
-
i0.ɵɵproperty("disabled",
|
|
287
|
-
i0.ɵɵattribute("title",
|
|
295
|
+
i0.ɵɵproperty("disabled", ctx_r0.NeedsOverrideReason(line_r3) || ctx_r0.NeedsDiscountReason(line_r3));
|
|
296
|
+
i0.ɵɵattribute("title", ctx_r0.NeedsOverrideReason(line_r3) ? "Enter a reason for the price override" : ctx_r0.NeedsDiscountReason(line_r3) ? "Enter a reason for the discount" : null);
|
|
288
297
|
i0.ɵɵadvance(2);
|
|
289
|
-
i0.ɵɵconditional(
|
|
298
|
+
i0.ɵɵconditional(ctx_r0.CanOverride ? 7 : -1);
|
|
290
299
|
} }
|
|
291
|
-
function
|
|
292
|
-
i0.ɵɵelementStart(0, "mjo-consequence-chip",
|
|
300
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_29_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
301
|
+
i0.ɵɵelementStart(0, "mjo-consequence-chip", 59);
|
|
293
302
|
i0.ɵɵtext(1, "Ships \u2014 holds the order at Posted");
|
|
294
303
|
i0.ɵɵelementEnd();
|
|
295
304
|
} }
|
|
296
|
-
function
|
|
297
|
-
i0.ɵɵelementStart(0, "mjo-consequence-chip",
|
|
305
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_29_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
306
|
+
i0.ɵɵelementStart(0, "mjo-consequence-chip", 60);
|
|
298
307
|
i0.ɵɵtext(1, "Untaxable");
|
|
299
308
|
i0.ɵɵelementEnd();
|
|
300
309
|
} }
|
|
301
|
-
function
|
|
302
|
-
i0.ɵɵelementStart(0, "mjo-consequence-chip",
|
|
310
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_29_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
i0.ɵɵelementStart(0, "mjo-consequence-chip", 61);
|
|
303
312
|
i0.ɵɵtext(1);
|
|
304
313
|
i0.ɵɵelementEnd();
|
|
305
314
|
} if (rf & 2) {
|
|
@@ -307,311 +316,342 @@ function MJOOrderLinesEditorComponent_For_2_Conditional_29_Conditional_2_Templat
|
|
|
307
316
|
i0.ɵɵadvance();
|
|
308
317
|
i0.ɵɵtextInterpolate1("Revenue to ", product_r12.CompanyName);
|
|
309
318
|
} }
|
|
310
|
-
function
|
|
311
|
-
i0.ɵɵconditionalCreate(0,
|
|
312
|
-
i0.ɵɵconditionalCreate(1,
|
|
313
|
-
i0.ɵɵconditionalCreate(2,
|
|
319
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
+
i0.ɵɵconditionalCreate(0, MJOOrderLinesEditorComponent_For_3_Conditional_29_Conditional_0_Template, 2, 0, "mjo-consequence-chip", 59);
|
|
321
|
+
i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_For_3_Conditional_29_Conditional_1_Template, 2, 0, "mjo-consequence-chip", 60);
|
|
322
|
+
i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_For_3_Conditional_29_Conditional_2_Template, 2, 1, "mjo-consequence-chip", 61);
|
|
314
323
|
} if (rf & 2) {
|
|
315
324
|
const product_r12 = ctx;
|
|
316
|
-
const
|
|
317
|
-
const
|
|
325
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
326
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
318
327
|
i0.ɵɵconditional(product_r12.TypeName === "Goods" ? 0 : -1);
|
|
319
328
|
i0.ɵɵadvance();
|
|
320
329
|
i0.ɵɵconditional(!product_r12.Taxable ? 1 : -1);
|
|
321
330
|
i0.ɵɵadvance();
|
|
322
|
-
i0.ɵɵconditional(
|
|
331
|
+
i0.ɵɵconditional(ctx_r0.ShowsForeignRevenue(line_r3) ? 2 : -1);
|
|
323
332
|
} }
|
|
324
|
-
function
|
|
325
|
-
i0.ɵɵelementStart(0, "div",
|
|
333
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
334
|
+
i0.ɵɵelementStart(0, "div", 27);
|
|
326
335
|
i0.ɵɵtext(1);
|
|
327
336
|
i0.ɵɵelementEnd();
|
|
328
337
|
} if (rf & 2) {
|
|
329
338
|
i0.ɵɵadvance();
|
|
330
339
|
i0.ɵɵtextInterpolate(ctx);
|
|
331
340
|
} }
|
|
332
|
-
function
|
|
333
|
-
i0.ɵɵelementStart(0, "span",
|
|
341
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
342
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
334
343
|
i0.ɵɵtext(1);
|
|
335
344
|
i0.ɵɵelementEnd();
|
|
336
345
|
} if (rf & 2) {
|
|
337
|
-
const
|
|
338
|
-
const
|
|
346
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
347
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
339
348
|
i0.ɵɵadvance();
|
|
340
|
-
i0.ɵɵtextInterpolate(
|
|
349
|
+
i0.ɵɵtextInterpolate(ctx_r0.ContinuationStartValue(line_r3));
|
|
341
350
|
} }
|
|
342
|
-
function
|
|
351
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
343
352
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
344
|
-
i0.ɵɵelementStart(0, "button",
|
|
345
|
-
i0.ɵɵlistener("click", function
|
|
353
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
354
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_4_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ResetTermStart(line_r3)); });
|
|
346
355
|
i0.ɵɵtext(1, " Reset to order date ");
|
|
347
356
|
i0.ɵɵelementEnd();
|
|
348
357
|
} }
|
|
349
|
-
function
|
|
358
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
350
359
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
351
|
-
i0.ɵɵelementStart(0, "input",
|
|
352
|
-
i0.ɵɵlistener("change", function
|
|
360
|
+
i0.ɵɵelementStart(0, "input", 67);
|
|
361
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_4_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r13); const line_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetTermStart(line_r3, $event)); });
|
|
353
362
|
i0.ɵɵelementEnd();
|
|
354
|
-
i0.ɵɵconditionalCreate(1,
|
|
363
|
+
i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_4_Conditional_1_Template, 2, 0, "button", 68);
|
|
355
364
|
} if (rf & 2) {
|
|
356
|
-
const
|
|
357
|
-
const
|
|
358
|
-
i0.ɵɵclassProp("is-default",
|
|
359
|
-
i0.ɵɵproperty("id", "mjo-ol-term-" +
|
|
365
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
366
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
367
|
+
i0.ɵɵclassProp("is-default", ctx_r0.TermStartFollowsOrderDate(line_r3));
|
|
368
|
+
i0.ɵɵproperty("id", "mjo-ol-term-" + line_r3.ID)("value", ctx_r0.TermStartValue(line_r3));
|
|
360
369
|
i0.ɵɵadvance();
|
|
361
|
-
i0.ɵɵconditional(!
|
|
370
|
+
i0.ɵɵconditional(!ctx_r0.TermStartFollowsOrderDate(line_r3) ? 1 : -1);
|
|
362
371
|
} }
|
|
363
|
-
function
|
|
364
|
-
i0.ɵɵelementStart(0, "span",
|
|
372
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
373
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
365
374
|
i0.ɵɵtext(1);
|
|
366
375
|
i0.ɵɵelementEnd();
|
|
367
376
|
} if (rf & 2) {
|
|
368
|
-
const
|
|
369
|
-
const
|
|
377
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
378
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
370
379
|
i0.ɵɵadvance();
|
|
371
|
-
i0.ɵɵtextInterpolate(
|
|
380
|
+
i0.ɵɵtextInterpolate(ctx_r0.TermStartValue(line_r3));
|
|
372
381
|
} }
|
|
373
|
-
function
|
|
382
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
374
383
|
i0.ɵɵtext(0, " Continuing existing coverage, so the term begins the day after the current one ends \u2014 not something this line can set. ");
|
|
375
384
|
} }
|
|
376
|
-
function
|
|
385
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
377
386
|
i0.ɵɵtext(0, " Following the order date. The subscription type's rules may still adjust the actual start. ");
|
|
378
387
|
} }
|
|
379
|
-
function
|
|
388
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
380
389
|
i0.ɵɵtext(0, " Stated on this line, so a later change to the order date leaves it alone. ");
|
|
381
390
|
} }
|
|
382
|
-
function
|
|
391
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
383
392
|
i0.ɵɵtext(0);
|
|
384
393
|
} if (rf & 2) {
|
|
385
394
|
const holding_r15 = i0.ɵɵnextContext();
|
|
386
|
-
const
|
|
387
|
-
i0.ɵɵtextInterpolate1(" (covered through ",
|
|
395
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
396
|
+
i0.ɵɵtextInterpolate1(" (covered through ", ctx_r0.HoldingCoverageEnd(holding_r15), ") ");
|
|
388
397
|
} }
|
|
389
|
-
function
|
|
398
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
390
399
|
i0.ɵɵtext(0);
|
|
391
400
|
} if (rf & 2) {
|
|
392
401
|
const holding_r15 = i0.ɵɵnextContext(2);
|
|
393
|
-
const
|
|
394
|
-
i0.ɵɵtextInterpolate1(" (starts ",
|
|
402
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
403
|
+
i0.ɵɵtextInterpolate1(" (starts ", ctx_r0.HoldingContinuationStart(holding_r15), ") ");
|
|
395
404
|
} }
|
|
396
|
-
function
|
|
405
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
397
406
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
398
|
-
i0.ɵɵelementStart(0, "div",
|
|
399
|
-
i0.ɵɵlistener("click", function
|
|
407
|
+
i0.ɵɵelementStart(0, "div", 71)(1, "button", 72);
|
|
408
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r16); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetSubscriptionAction(line_r3, "ExtendExisting")); });
|
|
400
409
|
i0.ɵɵtext(2, " Add as next term ");
|
|
401
|
-
i0.ɵɵconditionalCreate(3,
|
|
410
|
+
i0.ɵɵconditionalCreate(3, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_5_Conditional_3_Template, 1, 1);
|
|
402
411
|
i0.ɵɵelementEnd();
|
|
403
|
-
i0.ɵɵelementStart(4, "button",
|
|
404
|
-
i0.ɵɵlistener("click", function
|
|
412
|
+
i0.ɵɵelementStart(4, "button", 72);
|
|
413
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_5_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const line_r3 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetSubscriptionAction(line_r3, "CreateNew")); });
|
|
405
414
|
i0.ɵɵtext(5, " New subscription (keeps this line's dates) ");
|
|
406
415
|
i0.ɵɵelementEnd()();
|
|
407
416
|
} if (rf & 2) {
|
|
408
417
|
const holding_r15 = i0.ɵɵnextContext();
|
|
409
|
-
const
|
|
410
|
-
const
|
|
418
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
419
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
411
420
|
i0.ɵɵadvance();
|
|
412
|
-
i0.ɵɵclassProp("is-selected",
|
|
413
|
-
i0.ɵɵattribute("aria-pressed",
|
|
421
|
+
i0.ɵɵclassProp("is-selected", line_r3.SubscriptionAction === "ExtendExisting");
|
|
422
|
+
i0.ɵɵattribute("aria-pressed", line_r3.SubscriptionAction === "ExtendExisting");
|
|
414
423
|
i0.ɵɵadvance(2);
|
|
415
|
-
i0.ɵɵconditional(
|
|
424
|
+
i0.ɵɵconditional(ctx_r0.HoldingContinuationStart(holding_r15) ? 3 : -1);
|
|
416
425
|
i0.ɵɵadvance();
|
|
417
|
-
i0.ɵɵclassProp("is-selected",
|
|
418
|
-
i0.ɵɵattribute("aria-pressed",
|
|
426
|
+
i0.ɵɵclassProp("is-selected", line_r3.SubscriptionAction === "CreateNew");
|
|
427
|
+
i0.ɵɵattribute("aria-pressed", line_r3.SubscriptionAction === "CreateNew");
|
|
419
428
|
} }
|
|
420
|
-
function
|
|
429
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
421
430
|
i0.ɵɵtext(0, " Confirm starts a separate subscription on this line's service period. ");
|
|
422
431
|
} }
|
|
423
|
-
function
|
|
432
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
424
433
|
i0.ɵɵtext(0);
|
|
425
434
|
} if (rf & 2) {
|
|
426
435
|
const holding_r15 = i0.ɵɵnextContext();
|
|
427
436
|
i0.ɵɵtextInterpolate1(" Confirm adds a term to ", holding_r15.SubscriptionNumber, ", starting the day after its coverage ends. ");
|
|
428
437
|
} }
|
|
429
|
-
function
|
|
438
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
430
439
|
i0.ɵɵtext(0, " Not chosen. The subscription type's rule will decide at confirm, and it may move this line's dates. ");
|
|
431
440
|
} }
|
|
432
|
-
function
|
|
433
|
-
i0.ɵɵelementStart(0, "div",
|
|
441
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "span", 70);
|
|
434
443
|
i0.ɵɵtext(2);
|
|
435
|
-
i0.ɵɵconditionalCreate(3,
|
|
444
|
+
i0.ɵɵconditionalCreate(3, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_3_Template, 1, 1);
|
|
436
445
|
i0.ɵɵtext(4, ". ");
|
|
437
446
|
i0.ɵɵelementEnd();
|
|
438
|
-
i0.ɵɵconditionalCreate(5,
|
|
439
|
-
i0.ɵɵelementStart(6, "span",
|
|
440
|
-
i0.ɵɵconditionalCreate(7,
|
|
447
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_5_Template, 6, 7, "div", 71);
|
|
448
|
+
i0.ɵɵelementStart(6, "span", 65);
|
|
449
|
+
i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_7_Template, 1, 0)(8, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_8_Template, 1, 1)(9, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Conditional_9_Template, 1, 0);
|
|
441
450
|
i0.ɵɵelementEnd()();
|
|
442
451
|
} if (rf & 2) {
|
|
443
452
|
const holding_r15 = ctx;
|
|
444
|
-
const
|
|
445
|
-
const
|
|
453
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
454
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
446
455
|
i0.ɵɵattribute("aria-label", "Existing subscription " + holding_r15.SubscriptionNumber);
|
|
447
456
|
i0.ɵɵadvance(2);
|
|
448
457
|
i0.ɵɵtextInterpolate1(" The customer already holds ", holding_r15.SubscriptionNumber, " for this product ");
|
|
449
458
|
i0.ɵɵadvance();
|
|
450
|
-
i0.ɵɵconditional(
|
|
459
|
+
i0.ɵɵconditional(ctx_r0.HoldingCoverageEnd(holding_r15) ? 3 : -1);
|
|
451
460
|
i0.ɵɵadvance(2);
|
|
452
|
-
i0.ɵɵconditional(
|
|
461
|
+
i0.ɵɵconditional(ctx_r0.CanEditServicePeriod() ? 5 : -1);
|
|
453
462
|
i0.ɵɵadvance();
|
|
454
|
-
i0.ɵɵclassProp("is-error", !
|
|
463
|
+
i0.ɵɵclassProp("is-error", !line_r3.SubscriptionAction);
|
|
455
464
|
i0.ɵɵadvance();
|
|
456
|
-
i0.ɵɵconditional(
|
|
465
|
+
i0.ɵɵconditional(line_r3.SubscriptionAction === "CreateNew" ? 7 : line_r3.SubscriptionAction === "ExtendExisting" ? 8 : 9);
|
|
457
466
|
} }
|
|
458
|
-
function
|
|
459
|
-
i0.ɵɵelementStart(0, "div",
|
|
467
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
468
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "label", 62);
|
|
460
469
|
i0.ɵɵtext(2, " Term start ");
|
|
461
470
|
i0.ɵɵelementEnd();
|
|
462
|
-
i0.ɵɵconditionalCreate(3,
|
|
463
|
-
i0.ɵɵelementStart(6, "span",
|
|
464
|
-
i0.ɵɵconditionalCreate(7,
|
|
471
|
+
i0.ɵɵconditionalCreate(3, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_3_Template, 2, 1, "span", 63)(4, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_4_Template, 2, 5)(5, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_5_Template, 2, 1, "span", 64);
|
|
472
|
+
i0.ɵɵelementStart(6, "span", 65);
|
|
473
|
+
i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_7_Template, 1, 0)(8, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_8_Template, 1, 0)(9, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_9_Template, 1, 0);
|
|
465
474
|
i0.ɵɵelementEnd()();
|
|
466
|
-
i0.ɵɵconditionalCreate(10,
|
|
475
|
+
i0.ɵɵconditionalCreate(10, MJOOrderLinesEditorComponent_For_3_Conditional_31_Conditional_10_Template, 10, 7, "div", 66);
|
|
467
476
|
} if (rf & 2) {
|
|
468
477
|
let tmp_14_0;
|
|
469
|
-
const
|
|
470
|
-
const
|
|
478
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
479
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
471
480
|
i0.ɵɵadvance();
|
|
472
|
-
i0.ɵɵattribute("for",
|
|
481
|
+
i0.ɵɵattribute("for", ctx_r0.EditMode && !ctx_r0.TermStartIsDictated(line_r3) ? "mjo-ol-term-" + line_r3.ID : null);
|
|
473
482
|
i0.ɵɵadvance(2);
|
|
474
|
-
i0.ɵɵconditional(
|
|
483
|
+
i0.ɵɵconditional(ctx_r0.TermStartIsDictated(line_r3) ? 3 : ctx_r0.EditMode ? 4 : 5);
|
|
475
484
|
i0.ɵɵadvance(4);
|
|
476
|
-
i0.ɵɵconditional(
|
|
485
|
+
i0.ɵɵconditional(ctx_r0.TermStartIsDictated(line_r3) ? 7 : ctx_r0.TermStartFollowsOrderDate(line_r3) ? 8 : 9);
|
|
477
486
|
i0.ɵɵadvance(3);
|
|
478
|
-
i0.ɵɵconditional((tmp_14_0 =
|
|
487
|
+
i0.ɵɵconditional((tmp_14_0 = ctx_r0.ExistingHoldingFor(line_r3)) ? 10 : -1, tmp_14_0);
|
|
479
488
|
} }
|
|
480
|
-
function
|
|
489
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
481
490
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
482
|
-
i0.ɵɵelementStart(0, "input",
|
|
483
|
-
i0.ɵɵlistener("change", function
|
|
491
|
+
i0.ɵɵelementStart(0, "input", 74);
|
|
492
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_3_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r17); const line_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetServicePeriod(line_r3, "Start", $event)); });
|
|
484
493
|
i0.ɵɵelementEnd();
|
|
485
|
-
i0.ɵɵelementStart(1, "span",
|
|
494
|
+
i0.ɵɵelementStart(1, "span", 75);
|
|
486
495
|
i0.ɵɵtext(2, "to");
|
|
487
496
|
i0.ɵɵelementEnd();
|
|
488
|
-
i0.ɵɵelementStart(3, "input",
|
|
489
|
-
i0.ɵɵlistener("change", function
|
|
497
|
+
i0.ɵɵelementStart(3, "input", 76);
|
|
498
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_3_Template_input_change_3_listener($event) { i0.ɵɵrestoreView(_r17); const line_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetServicePeriod(line_r3, "End", $event)); });
|
|
490
499
|
i0.ɵɵelementEnd();
|
|
491
500
|
} if (rf & 2) {
|
|
492
|
-
const
|
|
493
|
-
const
|
|
494
|
-
i0.ɵɵproperty("id", "mjo-ol-sp-start-" +
|
|
501
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
502
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
503
|
+
i0.ɵɵproperty("id", "mjo-ol-sp-start-" + line_r3.ID)("value", ctx_r0.ServicePeriodValue(line_r3, "Start"));
|
|
495
504
|
i0.ɵɵadvance(3);
|
|
496
|
-
i0.ɵɵproperty("value",
|
|
505
|
+
i0.ɵɵproperty("value", ctx_r0.ServicePeriodValue(line_r3, "End"));
|
|
497
506
|
} }
|
|
498
|
-
function
|
|
499
|
-
i0.ɵɵelementStart(0, "span",
|
|
507
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
508
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
500
509
|
i0.ɵɵtext(1);
|
|
501
510
|
i0.ɵɵelementEnd();
|
|
502
511
|
} if (rf & 2) {
|
|
503
|
-
const
|
|
504
|
-
const
|
|
512
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
513
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
505
514
|
i0.ɵɵadvance();
|
|
506
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
515
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r0.ServicePeriodValue(line_r3, "Start") || "\u2014", " to ", ctx_r0.ServicePeriodValue(line_r3, "End") || "\u2014", " ");
|
|
507
516
|
} }
|
|
508
|
-
function
|
|
509
|
-
i0.ɵɵelementStart(0, "span",
|
|
517
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
518
|
+
i0.ɵɵelementStart(0, "span", 73);
|
|
510
519
|
i0.ɵɵtext(1, " End date must be on or after the start date. ");
|
|
511
520
|
i0.ɵɵelementEnd();
|
|
512
521
|
} }
|
|
513
|
-
function
|
|
514
|
-
i0.ɵɵelementStart(0, "span",
|
|
522
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
523
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
515
524
|
i0.ɵɵtext(1, " Needed to confirm: revenue on this line is recognized against these dates. ");
|
|
516
525
|
i0.ɵɵelementEnd();
|
|
517
526
|
} }
|
|
518
|
-
function
|
|
519
|
-
i0.ɵɵelementStart(0, "div",
|
|
527
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
528
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "label", 62);
|
|
520
529
|
i0.ɵɵtext(2, " Service period ");
|
|
521
530
|
i0.ɵɵelementEnd();
|
|
522
|
-
i0.ɵɵconditionalCreate(3,
|
|
523
|
-
i0.ɵɵconditionalCreate(5,
|
|
531
|
+
i0.ɵɵconditionalCreate(3, MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_3_Template, 4, 3)(4, MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_4_Template, 2, 2, "span", 64);
|
|
532
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_5_Template, 2, 0, "span", 73)(6, MJOOrderLinesEditorComponent_For_3_Conditional_32_Conditional_6_Template, 2, 0, "span", 65);
|
|
524
533
|
i0.ɵɵelementEnd();
|
|
525
534
|
} if (rf & 2) {
|
|
526
|
-
const
|
|
527
|
-
const
|
|
535
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
536
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
528
537
|
i0.ɵɵadvance();
|
|
529
|
-
i0.ɵɵattribute("for",
|
|
538
|
+
i0.ɵɵattribute("for", ctx_r0.CanEditServicePeriod() ? "mjo-ol-sp-start-" + line_r3.ID : null);
|
|
530
539
|
i0.ɵɵadvance(2);
|
|
531
|
-
i0.ɵɵconditional(
|
|
540
|
+
i0.ɵɵconditional(ctx_r0.CanEditServicePeriod() ? 3 : 4);
|
|
532
541
|
i0.ɵɵadvance(2);
|
|
533
|
-
i0.ɵɵconditional(
|
|
542
|
+
i0.ɵɵconditional(ctx_r0.ServicePeriodBackwards(line_r3) ? 5 : ctx_r0.ServicePeriodMissing(line_r3) ? 6 : -1);
|
|
543
|
+
} }
|
|
544
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_33_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
545
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
546
|
+
i0.ɵɵelementStart(0, "label", 80)(1, "input", 81);
|
|
547
|
+
i0.ɵɵlistener("change", function MJOOrderLinesEditorComponent_For_3_Conditional_33_Conditional_5_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r18); const line_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetOverlapAcknowledged(line_r3, $event)); });
|
|
548
|
+
i0.ɵɵelementEnd();
|
|
549
|
+
i0.ɵɵtext(2, " Run alongside the existing coverage. Both will be billed. ");
|
|
550
|
+
i0.ɵɵelementEnd();
|
|
551
|
+
} if (rf & 2) {
|
|
552
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
553
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
554
|
+
i0.ɵɵadvance();
|
|
555
|
+
i0.ɵɵproperty("checked", line_r3.AcknowledgesCoverageOverlap)("disabled", !ctx_r0.EditMode);
|
|
534
556
|
} }
|
|
535
|
-
function
|
|
536
|
-
i0.ɵɵelementStart(0, "
|
|
557
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
558
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
559
|
+
i0.ɵɵelement(1, "i", 78);
|
|
560
|
+
i0.ɵɵelementStart(2, "div", 79)(3, "span");
|
|
561
|
+
i0.ɵɵtext(4);
|
|
562
|
+
i0.ɵɵelementEnd();
|
|
563
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_3_Conditional_33_Conditional_5_Template, 3, 2, "label", 80);
|
|
564
|
+
i0.ɵɵelementEnd()();
|
|
565
|
+
} if (rf & 2) {
|
|
566
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
567
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
568
|
+
i0.ɵɵclassProp("is-blocking", ctx_r0.OverlapBlocksConfirm(line_r3));
|
|
569
|
+
i0.ɵɵadvance(4);
|
|
570
|
+
i0.ɵɵtextInterpolate(ctx.Message);
|
|
571
|
+
i0.ɵɵadvance();
|
|
572
|
+
i0.ɵɵconditional(ctx_r0.CanAcknowledgeOverlap(line_r3) ? 5 : -1);
|
|
573
|
+
} }
|
|
574
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_34_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
575
|
+
i0.ɵɵelementStart(0, "span", 86);
|
|
537
576
|
i0.ɵɵtext(1);
|
|
538
577
|
i0.ɵɵelementEnd();
|
|
539
578
|
} if (rf & 2) {
|
|
540
|
-
const
|
|
541
|
-
const
|
|
579
|
+
const line_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
580
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
542
581
|
i0.ɵɵadvance();
|
|
543
|
-
i0.ɵɵtextInterpolate(
|
|
582
|
+
i0.ɵɵtextInterpolate(ctx_r0.ExtensionHint(line_r3));
|
|
544
583
|
} }
|
|
545
|
-
function
|
|
546
|
-
const
|
|
547
|
-
i0.ɵɵelementStart(0, "div",
|
|
548
|
-
i0.ɵɵlistener("click", function
|
|
549
|
-
i0.ɵɵelement(2, "i",
|
|
550
|
-
i0.ɵɵelementStart(3, "span",
|
|
584
|
+
function MJOOrderLinesEditorComponent_For_3_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
585
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
586
|
+
i0.ɵɵelementStart(0, "div", 82)(1, "button", 83);
|
|
587
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Conditional_34_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r19); const line_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ToggleExtension(line_r3)); });
|
|
588
|
+
i0.ɵɵelement(2, "i", 84);
|
|
589
|
+
i0.ɵɵelementStart(3, "span", 85);
|
|
551
590
|
i0.ɵɵtext(4);
|
|
552
591
|
i0.ɵɵelementEnd();
|
|
553
|
-
i0.ɵɵconditionalCreate(5,
|
|
592
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_For_3_Conditional_34_Conditional_5_Template, 2, 1, "span", 86);
|
|
554
593
|
i0.ɵɵelementEnd();
|
|
555
|
-
i0.ɵɵelementStart(6, "div",
|
|
556
|
-
i0.ɵɵlistener("FormCreated", function
|
|
594
|
+
i0.ɵɵelementStart(6, "div", 87)(7, "div", 88)(8, "mj-entity-form-host", 89);
|
|
595
|
+
i0.ɵɵlistener("FormCreated", function MJOOrderLinesEditorComponent_For_3_Conditional_34_Template_mj_entity_form_host_FormCreated_8_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnExtensionFormCreated($event)); })("Navigate", function MJOOrderLinesEditorComponent_For_3_Conditional_34_Template_mj_entity_form_host_Navigate_8_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnExtensionNavigate($event)); });
|
|
557
596
|
i0.ɵɵelementEnd()()()();
|
|
558
597
|
} if (rf & 2) {
|
|
559
|
-
const
|
|
560
|
-
const
|
|
561
|
-
i0.ɵɵclassProp("is-open",
|
|
598
|
+
const line_r3 = i0.ɵɵnextContext().$implicit;
|
|
599
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
600
|
+
i0.ɵɵclassProp("is-open", ctx_r0.IsExtensionOpen(line_r3));
|
|
562
601
|
i0.ɵɵadvance();
|
|
563
|
-
i0.ɵɵattribute("aria-expanded",
|
|
602
|
+
i0.ɵɵattribute("aria-expanded", ctx_r0.IsExtensionOpen(line_r3))("aria-controls", "mjo-ol-ext-" + line_r3.ID);
|
|
564
603
|
i0.ɵɵadvance(3);
|
|
565
|
-
i0.ɵɵtextInterpolate(
|
|
604
|
+
i0.ɵɵtextInterpolate(ctx_r0.ExtensionLabel(line_r3));
|
|
566
605
|
i0.ɵɵadvance();
|
|
567
|
-
i0.ɵɵconditional(!
|
|
606
|
+
i0.ɵɵconditional(!ctx_r0.IsExtensionOpen(line_r3) ? 5 : -1);
|
|
568
607
|
i0.ɵɵadvance();
|
|
569
|
-
i0.ɵɵproperty("id", "mjo-ol-ext-" +
|
|
570
|
-
i0.ɵɵattribute("inert",
|
|
608
|
+
i0.ɵɵproperty("id", "mjo-ol-ext-" + line_r3.ID);
|
|
609
|
+
i0.ɵɵattribute("inert", ctx_r0.IsExtensionOpen(line_r3) ? null : "")("aria-hidden", !ctx_r0.IsExtensionOpen(line_r3));
|
|
571
610
|
i0.ɵɵadvance(2);
|
|
572
|
-
i0.ɵɵproperty("Record", ctx)("EditMode",
|
|
611
|
+
i0.ɵɵproperty("Record", ctx)("EditMode", ctx_r0.EditMode)("Config", ctx_r0.ExtensionFormConfigFor(line_r3));
|
|
573
612
|
} }
|
|
574
|
-
function
|
|
575
|
-
const
|
|
576
|
-
i0.ɵɵelementStart(0, "div",
|
|
577
|
-
i0.ɵɵlistener("click", function
|
|
613
|
+
function MJOOrderLinesEditorComponent_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
614
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
615
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "div", 7)(2, "div", 8)(3, "button", 9);
|
|
616
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Template_button_click_3_listener($event) { const line_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OpenProduct(line_r3, $event)); });
|
|
578
617
|
i0.ɵɵtext(4);
|
|
579
618
|
i0.ɵɵelementEnd();
|
|
580
|
-
i0.ɵɵelementStart(5, "div",
|
|
619
|
+
i0.ɵɵelementStart(5, "div", 10);
|
|
581
620
|
i0.ɵɵtext(6);
|
|
582
|
-
i0.ɵɵconditionalCreate(7,
|
|
621
|
+
i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_For_3_Conditional_7_Template, 1, 1);
|
|
583
622
|
i0.ɵɵelementEnd()();
|
|
584
|
-
i0.ɵɵelementStart(8, "div",
|
|
585
|
-
i0.ɵɵconditionalCreate(9,
|
|
623
|
+
i0.ɵɵelementStart(8, "div", 11);
|
|
624
|
+
i0.ɵɵconditionalCreate(9, MJOOrderLinesEditorComponent_For_3_Conditional_9_Template, 5, 2)(10, MJOOrderLinesEditorComponent_For_3_Conditional_10_Template, 2, 1, "span", 12);
|
|
586
625
|
i0.ɵɵelementEnd();
|
|
587
|
-
i0.ɵɵelementStart(11, "div",
|
|
626
|
+
i0.ɵɵelementStart(11, "div", 13)(12, "div", 14)(13, "div", 15);
|
|
588
627
|
i0.ɵɵtext(14);
|
|
589
628
|
i0.ɵɵpipe(15, "mjoMoney");
|
|
590
629
|
i0.ɵɵelementEnd();
|
|
591
|
-
i0.ɵɵconditionalCreate(16,
|
|
630
|
+
i0.ɵɵconditionalCreate(16, MJOOrderLinesEditorComponent_For_3_Conditional_16_Template, 2, 2, "button", 16);
|
|
592
631
|
i0.ɵɵelementEnd();
|
|
593
|
-
i0.ɵɵconditionalCreate(17,
|
|
594
|
-
i0.ɵɵconditionalCreate(19,
|
|
595
|
-
i0.ɵɵconditionalCreate(20,
|
|
632
|
+
i0.ɵɵconditionalCreate(17, MJOOrderLinesEditorComponent_For_3_Conditional_17_Template, 2, 0, "span", 17)(18, MJOOrderLinesEditorComponent_For_3_Conditional_18_Template, 1, 3, "mjo-price-source-badge", 18);
|
|
633
|
+
i0.ɵɵconditionalCreate(19, MJOOrderLinesEditorComponent_For_3_Conditional_19_Template, 3, 3, "span", 19);
|
|
634
|
+
i0.ɵɵconditionalCreate(20, MJOOrderLinesEditorComponent_For_3_Conditional_20_Template, 2, 1, "div", 20);
|
|
596
635
|
i0.ɵɵelementEnd();
|
|
597
|
-
i0.ɵɵelementStart(21, "div",
|
|
636
|
+
i0.ɵɵelementStart(21, "div", 21);
|
|
598
637
|
i0.ɵɵtext(22);
|
|
599
638
|
i0.ɵɵpipe(23, "mjoMoney");
|
|
600
639
|
i0.ɵɵelementEnd();
|
|
601
|
-
i0.ɵɵelementStart(24, "button",
|
|
602
|
-
i0.ɵɵlistener("click", function
|
|
603
|
-
i0.ɵɵelement(25, "i",
|
|
640
|
+
i0.ɵɵelementStart(24, "button", 22);
|
|
641
|
+
i0.ɵɵlistener("click", function MJOOrderLinesEditorComponent_For_3_Template_button_click_24_listener($event) { const line_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OpenDetails(line_r3, $event)); });
|
|
642
|
+
i0.ɵɵelement(25, "i", 23);
|
|
604
643
|
i0.ɵɵelementEnd();
|
|
605
|
-
i0.ɵɵconditionalCreate(26,
|
|
644
|
+
i0.ɵɵconditionalCreate(26, MJOOrderLinesEditorComponent_For_3_Conditional_26_Template, 2, 1, "button", 24);
|
|
606
645
|
i0.ɵɵelementEnd();
|
|
607
|
-
i0.ɵɵconditionalCreate(27,
|
|
608
|
-
i0.ɵɵelementStart(28, "div",
|
|
609
|
-
i0.ɵɵconditionalCreate(29,
|
|
646
|
+
i0.ɵɵconditionalCreate(27, MJOOrderLinesEditorComponent_For_3_Conditional_27_Template, 8, 6, "div", 25);
|
|
647
|
+
i0.ɵɵelementStart(28, "div", 26);
|
|
648
|
+
i0.ɵɵconditionalCreate(29, MJOOrderLinesEditorComponent_For_3_Conditional_29_Template, 3, 3);
|
|
610
649
|
i0.ɵɵelementEnd();
|
|
611
|
-
i0.ɵɵconditionalCreate(30,
|
|
612
|
-
i0.ɵɵconditionalCreate(31,
|
|
613
|
-
i0.ɵɵconditionalCreate(32,
|
|
614
|
-
i0.ɵɵconditionalCreate(33,
|
|
650
|
+
i0.ɵɵconditionalCreate(30, MJOOrderLinesEditorComponent_For_3_Conditional_30_Template, 2, 1, "div", 27);
|
|
651
|
+
i0.ɵɵconditionalCreate(31, MJOOrderLinesEditorComponent_For_3_Conditional_31_Template, 11, 4);
|
|
652
|
+
i0.ɵɵconditionalCreate(32, MJOOrderLinesEditorComponent_For_3_Conditional_32_Template, 7, 3, "div", 28);
|
|
653
|
+
i0.ɵɵconditionalCreate(33, MJOOrderLinesEditorComponent_For_3_Conditional_33_Template, 6, 4, "div", 29);
|
|
654
|
+
i0.ɵɵconditionalCreate(34, MJOOrderLinesEditorComponent_For_3_Conditional_34_Template, 9, 12, "div", 30);
|
|
615
655
|
i0.ɵɵelementEnd();
|
|
616
656
|
} if (rf & 2) {
|
|
617
657
|
let tmp_10_0;
|
|
@@ -623,154 +663,157 @@ function MJOOrderLinesEditorComponent_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
623
663
|
let tmp_25_0;
|
|
624
664
|
let tmp_26_0;
|
|
625
665
|
let tmp_29_0;
|
|
626
|
-
|
|
627
|
-
const
|
|
666
|
+
let tmp_30_0;
|
|
667
|
+
const line_r3 = ctx.$implicit;
|
|
668
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
628
669
|
i0.ɵɵadvance(4);
|
|
629
|
-
i0.ɵɵtextInterpolate1(" ", ((tmp_10_0 =
|
|
670
|
+
i0.ɵɵtextInterpolate1(" ", ((tmp_10_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_10_0.Name) ?? "Product", " ");
|
|
630
671
|
i0.ɵɵadvance(2);
|
|
631
|
-
i0.ɵɵtextInterpolate1(" ", (tmp_11_0 =
|
|
672
|
+
i0.ɵɵtextInterpolate1(" ", (tmp_11_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_11_0.SKU, " ");
|
|
632
673
|
i0.ɵɵadvance();
|
|
633
|
-
i0.ɵɵconditional(((tmp_12_0 =
|
|
674
|
+
i0.ɵɵconditional(((tmp_12_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_12_0.TypeName) ? 7 : -1);
|
|
634
675
|
i0.ɵɵadvance();
|
|
635
|
-
i0.ɵɵclassProp("is-locked", !
|
|
676
|
+
i0.ɵɵclassProp("is-locked", !ctx_r0.EditMode || ctx_r0.QuantityCappedToOne(line_r3));
|
|
636
677
|
i0.ɵɵadvance();
|
|
637
|
-
i0.ɵɵconditional(
|
|
678
|
+
i0.ɵɵconditional(ctx_r0.EditMode && !ctx_r0.QuantityCappedToOne(line_r3) ? 9 : 10);
|
|
638
679
|
i0.ɵɵadvance(5);
|
|
639
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(15,
|
|
680
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(15, 22, ctx_r0.DisplayUnit(line_r3)));
|
|
640
681
|
i0.ɵɵadvance(2);
|
|
641
|
-
i0.ɵɵconditional(
|
|
682
|
+
i0.ɵɵconditional(ctx_r0.CanOverride || ctx_r0.CanDiscount ? 16 : -1);
|
|
642
683
|
i0.ɵɵadvance();
|
|
643
|
-
i0.ɵɵconditional(
|
|
684
|
+
i0.ɵɵconditional(ctx_r0.IsOverridden(line_r3) ? 17 : 18);
|
|
644
685
|
i0.ɵɵadvance(2);
|
|
645
|
-
i0.ɵɵconditional(
|
|
686
|
+
i0.ɵɵconditional(ctx_r0.HasDiscount(line_r3) ? 19 : -1);
|
|
646
687
|
i0.ɵɵadvance();
|
|
647
|
-
i0.ɵɵconditional((tmp_19_0 = (tmp_19_0 =
|
|
688
|
+
i0.ɵɵconditional((tmp_19_0 = (tmp_19_0 = ctx_r0.PricedLine(line_r3)) == null ? null : tmp_19_0.Error) ? 20 : -1, tmp_19_0);
|
|
648
689
|
i0.ɵɵadvance(2);
|
|
649
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(23,
|
|
690
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(23, 24, (tmp_20_0 = ctx_r0.PricedLine(line_r3)) == null ? null : tmp_20_0.NetAmount));
|
|
650
691
|
i0.ɵɵadvance(2);
|
|
651
|
-
i0.ɵɵattribute("title",
|
|
692
|
+
i0.ɵɵattribute("title", ctx_r0.DimensionSummary(line_r3))("aria-label", "Details for " + (((tmp_22_0 = ctx_r0.ProductFor(line_r3)) == null ? null : tmp_22_0.Name) ?? "line"));
|
|
652
693
|
i0.ɵɵadvance(2);
|
|
653
|
-
i0.ɵɵconditional(
|
|
694
|
+
i0.ɵɵconditional(ctx_r0.EditMode ? 26 : -1);
|
|
654
695
|
i0.ɵɵadvance();
|
|
655
|
-
i0.ɵɵconditional(
|
|
696
|
+
i0.ɵɵconditional(ctx_r0.IsOverrideEditorOpen(line_r3) ? 27 : -1);
|
|
656
697
|
i0.ɵɵadvance(2);
|
|
657
|
-
i0.ɵɵconditional((tmp_25_0 =
|
|
698
|
+
i0.ɵɵconditional((tmp_25_0 = ctx_r0.ProductFor(line_r3)) ? 29 : -1, tmp_25_0);
|
|
699
|
+
i0.ɵɵadvance();
|
|
700
|
+
i0.ɵɵconditional((tmp_26_0 = ctx_r0.OverrideReasonText(line_r3)) ? 30 : -1, tmp_26_0);
|
|
658
701
|
i0.ɵɵadvance();
|
|
659
|
-
i0.ɵɵconditional(
|
|
702
|
+
i0.ɵɵconditional(ctx_r0.IsSubscriptionLine(line_r3) ? 31 : -1);
|
|
660
703
|
i0.ɵɵadvance();
|
|
661
|
-
i0.ɵɵconditional(
|
|
704
|
+
i0.ɵɵconditional(ctx_r0.NeedsStatedServicePeriod(line_r3) ? 32 : -1);
|
|
662
705
|
i0.ɵɵadvance();
|
|
663
|
-
i0.ɵɵconditional(
|
|
706
|
+
i0.ɵɵconditional((tmp_29_0 = ctx_r0.CoverageOverlapFor(line_r3)) ? 33 : -1, tmp_29_0);
|
|
664
707
|
i0.ɵɵadvance();
|
|
665
|
-
i0.ɵɵconditional((
|
|
708
|
+
i0.ɵɵconditional((tmp_30_0 = ctx_r0.ExtensionFor(line_r3)) ? 34 : -1, tmp_30_0);
|
|
666
709
|
} }
|
|
667
|
-
function
|
|
668
|
-
i0.ɵɵelementStart(0, "div",
|
|
669
|
-
i0.ɵɵelement(1, "i",
|
|
670
|
-
i0.ɵɵelementStart(2, "div",
|
|
710
|
+
function MJOOrderLinesEditorComponent_ForEmpty_4_Template(rf, ctx) { if (rf & 1) {
|
|
711
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
712
|
+
i0.ɵɵelement(1, "i", 90);
|
|
713
|
+
i0.ɵɵelementStart(2, "div", 91);
|
|
671
714
|
i0.ɵɵtext(3, "Nothing on this order yet");
|
|
672
715
|
i0.ɵɵelementEnd();
|
|
673
716
|
i0.ɵɵelementStart(4, "div");
|
|
674
717
|
i0.ɵɵtext(5, "Search the catalog to add the first line.");
|
|
675
718
|
i0.ɵɵelementEnd()();
|
|
676
719
|
} }
|
|
677
|
-
function
|
|
678
|
-
i0.ɵɵelementStart(0, "span",
|
|
679
|
-
i0.ɵɵelement(1, "i",
|
|
720
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
721
|
+
i0.ɵɵelementStart(0, "span", 107);
|
|
722
|
+
i0.ɵɵelement(1, "i", 108);
|
|
680
723
|
i0.ɵɵtext(2);
|
|
681
724
|
i0.ɵɵelementEnd();
|
|
682
725
|
} if (rf & 2) {
|
|
683
|
-
const
|
|
684
|
-
const
|
|
685
|
-
i0.ɵɵclassProp("is-foreign",
|
|
686
|
-
i0.ɵɵattribute("title",
|
|
726
|
+
const product_r22 = i0.ɵɵnextContext().$implicit;
|
|
727
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
728
|
+
i0.ɵɵclassProp("is-foreign", ctx_r0.IsForeignCompany(product_r22));
|
|
729
|
+
i0.ɵɵattribute("title", ctx_r0.IsForeignCompany(product_r22) ? "Sold by " + product_r22.CompanyName + ", not this order's company" : product_r22.CompanyName);
|
|
687
730
|
i0.ɵɵadvance(2);
|
|
688
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
731
|
+
i0.ɵɵtextInterpolate1(" ", product_r22.CompanyName, " ");
|
|
689
732
|
} }
|
|
690
|
-
function
|
|
691
|
-
const
|
|
692
|
-
i0.ɵɵelementStart(0, "button",
|
|
693
|
-
i0.ɵɵlistener("mousedown", function
|
|
694
|
-
i0.ɵɵelementStart(1, "span",
|
|
733
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
734
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
735
|
+
i0.ɵɵelementStart(0, "button", 99);
|
|
736
|
+
i0.ɵɵlistener("mousedown", function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_For_2_Template_button_mousedown_0_listener() { const product_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AddProduct(product_r22)); });
|
|
737
|
+
i0.ɵɵelementStart(1, "span", 100)(2, "span", 101);
|
|
695
738
|
i0.ɵɵtext(3);
|
|
696
739
|
i0.ɵɵelementEnd();
|
|
697
|
-
i0.ɵɵelementStart(4, "span",
|
|
740
|
+
i0.ɵɵelementStart(4, "span", 102)(5, "span", 103);
|
|
698
741
|
i0.ɵɵtext(6);
|
|
699
742
|
i0.ɵɵelementEnd();
|
|
700
|
-
i0.ɵɵconditionalCreate(7,
|
|
743
|
+
i0.ɵɵconditionalCreate(7, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_For_2_Conditional_7_Template, 3, 4, "span", 104);
|
|
701
744
|
i0.ɵɵelementEnd()();
|
|
702
|
-
i0.ɵɵelementStart(8, "span",
|
|
745
|
+
i0.ɵɵelementStart(8, "span", 105)(9, "span", 106);
|
|
703
746
|
i0.ɵɵtext(10);
|
|
704
747
|
i0.ɵɵpipe(11, "mjoMoney");
|
|
705
748
|
i0.ɵɵelementEnd();
|
|
706
|
-
i0.ɵɵelementStart(12, "span",
|
|
749
|
+
i0.ɵɵelementStart(12, "span", 103);
|
|
707
750
|
i0.ɵɵtext(13);
|
|
708
751
|
i0.ɵɵelementEnd()()();
|
|
709
752
|
} if (rf & 2) {
|
|
710
|
-
const
|
|
711
|
-
const ɵ$
|
|
712
|
-
const
|
|
713
|
-
i0.ɵɵclassProp("is-cursor", ɵ$
|
|
714
|
-
i0.ɵɵattribute("aria-selected", ɵ$
|
|
753
|
+
const product_r22 = ctx.$implicit;
|
|
754
|
+
const ɵ$index_320_r23 = ctx.$index;
|
|
755
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
756
|
+
i0.ɵɵclassProp("is-cursor", ɵ$index_320_r23 === ctx_r0.PickerCursor);
|
|
757
|
+
i0.ɵɵattribute("aria-selected", ɵ$index_320_r23 === ctx_r0.PickerCursor);
|
|
715
758
|
i0.ɵɵadvance(3);
|
|
716
|
-
i0.ɵɵtextInterpolate(
|
|
759
|
+
i0.ɵɵtextInterpolate(product_r22.Name);
|
|
717
760
|
i0.ɵɵadvance(3);
|
|
718
|
-
i0.ɵɵtextInterpolate2("",
|
|
761
|
+
i0.ɵɵtextInterpolate2("", product_r22.SKU, " \u00B7 ", product_r22.TypeName);
|
|
719
762
|
i0.ɵɵadvance();
|
|
720
|
-
i0.ɵɵconditional(
|
|
763
|
+
i0.ɵɵconditional(product_r22.CompanyName ? 7 : -1);
|
|
721
764
|
i0.ɵɵadvance(3);
|
|
722
|
-
i0.ɵɵtextInterpolate(
|
|
765
|
+
i0.ɵɵtextInterpolate(product_r22.ListPrice === null ? "No price" : i0.ɵɵpipeBind1(11, 9, product_r22.ListPrice));
|
|
723
766
|
i0.ɵɵadvance(3);
|
|
724
|
-
i0.ɵɵtextInterpolate(
|
|
767
|
+
i0.ɵɵtextInterpolate(product_r22.Taxable ? "taxable" : "untaxable");
|
|
725
768
|
} }
|
|
726
|
-
function
|
|
769
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
727
770
|
i0.ɵɵtext(0);
|
|
728
771
|
} if (rf & 2) {
|
|
729
|
-
const
|
|
730
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
772
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
773
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.CatalogError, " ");
|
|
731
774
|
} }
|
|
732
|
-
function
|
|
775
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
733
776
|
i0.ɵɵtext(0, " Loading catalog\u2026 ");
|
|
734
777
|
} }
|
|
735
|
-
function
|
|
778
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
736
779
|
i0.ɵɵtext(0, " No product matches that. ");
|
|
737
780
|
} }
|
|
738
|
-
function
|
|
739
|
-
i0.ɵɵelementStart(0, "div",
|
|
740
|
-
i0.ɵɵconditionalCreate(2,
|
|
781
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
|
|
782
|
+
i0.ɵɵelementStart(0, "div", 98)(1, "span", 109);
|
|
783
|
+
i0.ɵɵconditionalCreate(2, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Conditional_2_Template, 1, 1)(3, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Conditional_3_Template, 1, 0)(4, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Conditional_4_Template, 1, 0);
|
|
741
784
|
i0.ɵɵelementEnd()();
|
|
742
785
|
} if (rf & 2) {
|
|
743
|
-
const
|
|
786
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
744
787
|
i0.ɵɵadvance(2);
|
|
745
|
-
i0.ɵɵconditional(
|
|
788
|
+
i0.ɵɵconditional(ctx_r0.CatalogError ? 2 : ctx_r0.Catalog.length === 0 ? 3 : 4);
|
|
746
789
|
} }
|
|
747
|
-
function
|
|
748
|
-
i0.ɵɵelementStart(0, "div",
|
|
749
|
-
i0.ɵɵrepeaterCreate(1,
|
|
790
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
+
i0.ɵɵelementStart(0, "div", 96);
|
|
792
|
+
i0.ɵɵrepeaterCreate(1, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_For_2_Template, 14, 11, "button", 97, _forTrack0, false, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_ForEmpty_3_Template, 5, 1, "div", 98);
|
|
750
793
|
i0.ɵɵelementEnd();
|
|
751
794
|
} if (rf & 2) {
|
|
752
|
-
const
|
|
753
|
-
i0.ɵɵclassProp("is-up",
|
|
795
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
796
|
+
i0.ɵɵclassProp("is-up", ctx_r0.PickerOpensUp);
|
|
754
797
|
i0.ɵɵadvance();
|
|
755
|
-
i0.ɵɵrepeater(
|
|
798
|
+
i0.ɵɵrepeater(ctx_r0.PickerResults);
|
|
756
799
|
} }
|
|
757
|
-
function
|
|
758
|
-
const
|
|
759
|
-
i0.ɵɵelementStart(0, "div",
|
|
760
|
-
i0.ɵɵelement(3, "i",
|
|
761
|
-
i0.ɵɵelementStart(4, "input",
|
|
762
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
763
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
800
|
+
function MJOOrderLinesEditorComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
801
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
802
|
+
i0.ɵɵelementStart(0, "div", 5, 0)(2, "div", 92);
|
|
803
|
+
i0.ɵɵelement(3, "i", 93);
|
|
804
|
+
i0.ɵɵelementStart(4, "input", 94);
|
|
805
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_5_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.ProductQuery, $event) || (ctx_r0.ProductQuery = $event); return i0.ɵɵresetView($event); });
|
|
806
|
+
i0.ɵɵlistener("ngModelChange", function MJOOrderLinesEditorComponent_Conditional_5_Template_input_ngModelChange_4_listener() { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnProductQueryChange()); })("focus", function MJOOrderLinesEditorComponent_Conditional_5_Template_input_focus_4_listener() { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OpenPicker()); })("blur", function MJOOrderLinesEditorComponent_Conditional_5_Template_input_blur_4_listener() { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ClosePickerSoon()); })("keydown", function MJOOrderLinesEditorComponent_Conditional_5_Template_input_keydown_4_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnPickerKey($event)); });
|
|
764
807
|
i0.ɵɵelementEnd()();
|
|
765
|
-
i0.ɵɵconditionalCreate(5,
|
|
808
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_Conditional_5_Conditional_5_Template, 4, 3, "div", 95);
|
|
766
809
|
i0.ɵɵelementEnd();
|
|
767
810
|
} if (rf & 2) {
|
|
768
|
-
const
|
|
811
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
769
812
|
i0.ɵɵadvance(4);
|
|
770
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
771
|
-
i0.ɵɵattribute("aria-expanded",
|
|
813
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.ProductQuery);
|
|
814
|
+
i0.ɵɵattribute("aria-expanded", ctx_r0.PickerOpen);
|
|
772
815
|
i0.ɵɵadvance();
|
|
773
|
-
i0.ɵɵconditional(
|
|
816
|
+
i0.ɵɵconditional(ctx_r0.PickerOpen ? 5 : -1);
|
|
774
817
|
} }
|
|
775
818
|
/**
|
|
776
819
|
* The draft a line has when nobody has typed anything.
|
|
@@ -1058,6 +1101,70 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1058
1101
|
this.loadingContinuations.delete(subscriptionID);
|
|
1059
1102
|
}
|
|
1060
1103
|
}
|
|
1104
|
+
/* ── Coverage overlap with another band of the family (golive #276) ──
|
|
1105
|
+
*
|
|
1106
|
+
* Confirm refuses a band whose term would overlap coverage the holder already has for another
|
|
1107
|
+
* band, unless the subscription type allows it or the line acknowledges it. The editor asks the
|
|
1108
|
+
* server the same question after each save, through the operation that runs confirm's own
|
|
1109
|
+
* check, so the notice cannot disagree with the refusal. Only saved lines are checked; a new
|
|
1110
|
+
* line is checked on the next save.
|
|
1111
|
+
*/
|
|
1112
|
+
/** Server answers by line id (lower-cased — ids come back from the server in either case). */
|
|
1113
|
+
coverageByLine = new Map();
|
|
1114
|
+
/** Set when the check itself failed, so a missing notice is not read as "no overlap". */
|
|
1115
|
+
CoverageCheckError = null;
|
|
1116
|
+
CoverageOverlapFor(line) {
|
|
1117
|
+
return this.coverageByLine.get((line.ID ?? '').toLowerCase()) ?? null;
|
|
1118
|
+
}
|
|
1119
|
+
/** True when ticking the acknowledgment changes what confirm does — `ExtendExisting` only. */
|
|
1120
|
+
CanAcknowledgeOverlap(line) {
|
|
1121
|
+
const found = this.CoverageOverlapFor(line);
|
|
1122
|
+
return found?.Outcome === 'NeedsAck' || found?.Outcome === 'Acknowledged';
|
|
1123
|
+
}
|
|
1124
|
+
/**
|
|
1125
|
+
* True while confirm would refuse this line. Read from the checkbox as it stands, not the
|
|
1126
|
+
* server's last answer, so ticking it clears the warning before the next save.
|
|
1127
|
+
*/
|
|
1128
|
+
OverlapBlocksConfirm(line) {
|
|
1129
|
+
const found = this.CoverageOverlapFor(line);
|
|
1130
|
+
if (!found)
|
|
1131
|
+
return false;
|
|
1132
|
+
if (found.Outcome === 'Refused')
|
|
1133
|
+
return true;
|
|
1134
|
+
return this.CanAcknowledgeOverlap(line) && !line.AcknowledgesCoverageOverlap;
|
|
1135
|
+
}
|
|
1136
|
+
SetOverlapAcknowledged(line, event) {
|
|
1137
|
+
if (!this.EditMode)
|
|
1138
|
+
return;
|
|
1139
|
+
const target = event.target;
|
|
1140
|
+
if (!(target instanceof HTMLInputElement))
|
|
1141
|
+
return;
|
|
1142
|
+
line.AcknowledgesCoverageOverlap = target.checked;
|
|
1143
|
+
}
|
|
1144
|
+
async refreshCoverage() {
|
|
1145
|
+
const order = this._order;
|
|
1146
|
+
if (!order?.IsSaved || order.Status !== 'Draft') {
|
|
1147
|
+
this.coverageByLine.clear();
|
|
1148
|
+
this.CoverageCheckError = null;
|
|
1149
|
+
return;
|
|
1150
|
+
}
|
|
1151
|
+
const result = await new OrdersCheckCoverageOverlapOperation().Execute({ OrderHeaderID: order.ID });
|
|
1152
|
+
// The order may have been swapped while the call was in flight.
|
|
1153
|
+
if (this._order !== order)
|
|
1154
|
+
return;
|
|
1155
|
+
this.coverageByLine.clear();
|
|
1156
|
+
if (!result.Success || !result.Output) {
|
|
1157
|
+
this.CoverageCheckError =
|
|
1158
|
+
result.ErrorMessage?.trim() ||
|
|
1159
|
+
'Whether these subscriptions overlap coverage the customer already has could not be checked. Confirm still checks.';
|
|
1160
|
+
}
|
|
1161
|
+
else {
|
|
1162
|
+
this.CoverageCheckError = null;
|
|
1163
|
+
for (const row of result.Output.Lines)
|
|
1164
|
+
this.coverageByLine.set(row.OrderLineID.toLowerCase(), row);
|
|
1165
|
+
}
|
|
1166
|
+
this.cdr.detectChanges();
|
|
1167
|
+
}
|
|
1061
1168
|
/* ── The customer already holds this product (golive #299) ──
|
|
1062
1169
|
*
|
|
1063
1170
|
* At confirm, a subscription line whose subscriber already holds a live subscription to the
|
|
@@ -1574,6 +1681,7 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1574
1681
|
* `Adjustments.Remove` — the rows this map points at are already gone by the time it runs.
|
|
1575
1682
|
*/
|
|
1576
1683
|
onOrderSaved() {
|
|
1684
|
+
void this.refreshCoverage();
|
|
1577
1685
|
if (!this.stagedDiscounts.size)
|
|
1578
1686
|
return;
|
|
1579
1687
|
this.stagedDiscounts.clear();
|
|
@@ -1734,6 +1842,7 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1734
1842
|
}) ?? null;
|
|
1735
1843
|
this.schedulePricing();
|
|
1736
1844
|
void this.refreshAllApplicable();
|
|
1845
|
+
void this.refreshCoverage();
|
|
1737
1846
|
this.cdr.detectChanges();
|
|
1738
1847
|
}
|
|
1739
1848
|
unbindOrder() {
|
|
@@ -1754,6 +1863,8 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1754
1863
|
// Dropped on rebind rather than kept: coverage moves when any renewal confirms anywhere, so
|
|
1755
1864
|
// a cached continuation date is only trustworthy for as long as one order is open.
|
|
1756
1865
|
this.continuationStarts.clear();
|
|
1866
|
+
this.coverageByLine.clear();
|
|
1867
|
+
this.CoverageCheckError = null;
|
|
1757
1868
|
this.applicableByLine.clear();
|
|
1758
1869
|
this.overrideEditorLineIds.clear();
|
|
1759
1870
|
this.defaultUnitByLine.clear();
|
|
@@ -1939,29 +2050,32 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1939
2050
|
} if (rf & 2) {
|
|
1940
2051
|
let _t;
|
|
1941
2052
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pickerHost = _t.first);
|
|
1942
|
-
} }, inputs: { Provider: "Provider", EditMode: "EditMode", Order: "Order" }, outputs: { PricingChanged: "PricingChanged", Navigate: "Navigate" }, decls:
|
|
2053
|
+
} }, inputs: { Provider: "Provider", EditMode: "EditMode", Order: "Order" }, outputs: { PricingChanged: "PricingChanged", Navigate: "Navigate" }, decls: 7, vars: 9, consts: [["pickerHost", ""], [1, "mjo-ol"], ["role", "status", 1, "mjo-ol-overlap-err"], [1, "mjo-ol-card"], [1, "mjo-ol-empty"], [1, "mj-typeahead", "mjo-ol-picker"], [3, "Closed", "Line", "ProductName", "ProductSKU", "ProductType", "Dimensions", "EditMode"], [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"], ["title", "Discount on this line", 1, "mjo-ol-discpill"], [1, "mjo-ol-card__err"], [1, "mjo-ol-card__tot"], ["type", "button", 1, "mjo-ol-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-sliders"], ["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-term"], ["role", "status", 1, "mjo-ol-overlap", 3, "is-blocking"], [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"], ["aria-hidden", "true", 1, "fa-regular", "fa-trash-can"], [3, "Line", "OverrideKind", "Applicable", "EngineDefault", "DefaultUnit", "PriceSource", "PricedUnit"], ["role", "group", 1, "mjo-ol-discount"], [1, "mjo-ol-discount__note"], [1, "mjo-ol-override__actions"], ["type", "button", 1, "mjo-ol-override__done", 3, "click", "disabled"], ["type", "button", 1, "mjo-ol-override__reset", 3, "disabled"], [3, "PriceChanged", "Line", "OverrideKind", "Applicable", "EngineDefault", "DefaultUnit", "PriceSource", "PricedUnit"], [1, "mjo-ol-discount__head"], [1, "mjo-ol-discount__title"], [1, "mjo-ol-discount__cap"], [1, "mjo-ol-discount__row"], ["role", "radiogroup", "aria-label", "Discount expressed as", 1, "mjo-ol-discount__mode"], ["type", "button", "role", "radio", 3, "click"], ["type", "number", "step", "0.01", "min", "0", 1, "mjo-ol-discount__val", 3, "input", "value"], [1, "mjo-ol-discount__calc"], [1, "mjo-ol-discount__reason"], ["aria-hidden", "true", 1, "mjo-ol-override__req"], ["rows", "2", "placeholder", "Required \u2014 why value was given away on this line", 3, "input", "value"], ["role", "alert", 1, "mjo-ol-discount__err"], [1, "mjo-ol-discount__staged"], ["type", "button", 1, "mjo-ol-discount__clear", 3, "click"], ["type", "button", 1, "mjo-ol-override__reset", 3, "click", "disabled"], ["Kind", "fulfillment"], ["Kind", "untaxable"], ["Kind", "company"], [1, "mjo-ol-term__label"], [1, "mjo-ol-term__value", "is-dictated"], [1, "mjo-ol-term__value"], [1, "mjo-ol-term__hint"], ["role", "group", 1, "mjo-ol-holding"], ["type", "date", 1, "mjo-ol-term__input", 3, "change", "id", "value"], ["type", "button", 1, "mjo-ol-term__reset"], ["type", "button", 1, "mjo-ol-term__reset", 3, "click"], [1, "mjo-ol-holding__text"], [1, "mjo-ol-holding__choices"], ["type", "button", 1, "mjo-ol-holding__choice", 3, "click"], ["role", "alert", 1, "mjo-ol-term__hint", "is-error"], ["type", "date", "aria-label", "Service period start", 1, "mjo-ol-term__input", 3, "change", "id", "value"], ["aria-hidden", "true", 1, "mjo-ol-term__label"], ["type", "date", "aria-label", "Service period end", 1, "mjo-ol-term__input", 3, "change", "value"], ["role", "status", 1, "mjo-ol-overlap"], ["aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation"], [1, "mjo-ol-overlap__body"], [1, "mjo-ol-overlap__ack"], ["type", "checkbox", 3, "change", "checked", "disabled"], [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, "mjo-ol-pick__meta"], [1, "sub"], [1, "mjo-ol-pick__company", 3, "is-foreign"], [1, "end"], [1, "mjo-ol-pick__price"], [1, "mjo-ol-pick__company"], ["aria-hidden", "true", 1, "fa-solid", "fa-building"], [1, "muted", "small"]], template: function MJOOrderLinesEditorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1943
2054
|
i0.ɵɵelementStart(0, "div", 1);
|
|
1944
|
-
i0.ɵɵ
|
|
1945
|
-
i0.ɵɵ
|
|
1946
|
-
i0.ɵɵ
|
|
1947
|
-
i0.ɵɵ
|
|
2055
|
+
i0.ɵɵconditionalCreate(1, MJOOrderLinesEditorComponent_Conditional_1_Template, 2, 1, "div", 2);
|
|
2056
|
+
i0.ɵɵrepeaterCreate(2, MJOOrderLinesEditorComponent_For_3_Template, 35, 26, "div", 3, _forTrack0, false, MJOOrderLinesEditorComponent_ForEmpty_4_Template, 6, 0, "div", 4);
|
|
2057
|
+
i0.ɵɵconditionalCreate(5, MJOOrderLinesEditorComponent_Conditional_5_Template, 6, 3, "div", 5);
|
|
2058
|
+
i0.ɵɵelementStart(6, "mjo-order-line-details-panel", 6);
|
|
2059
|
+
i0.ɵɵlistener("Closed", function MJOOrderLinesEditorComponent_Template_mjo_order_line_details_panel_Closed_6_listener() { return ctx.CloseDetails(); });
|
|
1948
2060
|
i0.ɵɵelementEnd()();
|
|
1949
2061
|
} if (rf & 2) {
|
|
1950
|
-
let tmp_3_0;
|
|
1951
2062
|
let tmp_4_0;
|
|
1952
2063
|
let tmp_5_0;
|
|
2064
|
+
let tmp_6_0;
|
|
2065
|
+
i0.ɵɵadvance();
|
|
2066
|
+
i0.ɵɵconditional(ctx.CoverageCheckError ? 1 : -1);
|
|
1953
2067
|
i0.ɵɵadvance();
|
|
1954
2068
|
i0.ɵɵrepeater(ctx.Lines);
|
|
1955
2069
|
i0.ɵɵadvance(3);
|
|
1956
|
-
i0.ɵɵconditional(ctx.EditMode ?
|
|
2070
|
+
i0.ɵɵconditional(ctx.EditMode ? 5 : -1);
|
|
1957
2071
|
i0.ɵɵadvance();
|
|
1958
|
-
i0.ɵɵproperty("Line", ctx.DetailsLine)("ProductName", ctx.DetailsLine ? ((
|
|
2072
|
+
i0.ɵɵproperty("Line", ctx.DetailsLine)("ProductName", ctx.DetailsLine ? ((tmp_4_0 = ctx.ProductFor(ctx.DetailsLine)) == null ? null : tmp_4_0.Name) ?? "" : "")("ProductSKU", ctx.DetailsLine ? ((tmp_5_0 = ctx.ProductFor(ctx.DetailsLine)) == null ? null : tmp_5_0.SKU) ?? "" : "")("ProductType", ctx.DetailsLine ? ((tmp_6_0 = ctx.ProductFor(ctx.DetailsLine)) == null ? null : tmp_6_0.TypeName) ?? "" : "")("Dimensions", ctx.DimensionCatalog)("EditMode", ctx.EditMode);
|
|
1959
2073
|
} }, dependencies: [CommonModule,
|
|
1960
2074
|
FormsModule, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, BaseFormsModule, i2.MjEntityFormHostComponent, MJOConsequenceChipComponent,
|
|
1961
2075
|
MJOPriceSourceBadgeComponent,
|
|
1962
2076
|
MJOLinePricePickerComponent,
|
|
1963
2077
|
MJOOrderLineDetailsPanelComponent,
|
|
1964
|
-
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-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__req[_ngcontent-%COMP%] {\n font-style: normal;\n color: var(--mj-status-danger-text, #b42318);\n margin-left: 2px;\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-override__done[_ngcontent-%COMP%]:disabled {\n color: var(--mj-text-muted);\n cursor: not-allowed;\n background: transparent;\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\n\n\n.mjo-ol-term[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-term__label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__input[_ngcontent-%COMP%] {\n height: 28px;\n padding: 0 var(--mj-space-2);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n.mjo-ol-term__input.is-default[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__value[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n\n\n\n.mjo-ol-term__value.is-dictated[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__reset[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n padding: 0;\n color: var(--mj-text-link);\n font-size: var(--mj-text-xs);\n cursor: pointer;\n}\n\n.mjo-ol-term__reset[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.mjo-ol-term__hint[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__hint.is-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error-text);\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\n\n\n\n\n\n\n\n.mjo-ol-pick__meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.mjo-ol-pick__company[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: 0 0 auto;\n font-size: 11px;\n line-height: 1.2;\n padding: 2px 6px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-pick__company[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9.5px; color: var(--mj-text-muted); }\n\n\n\n.mjo-ol-pick__company.is-foreign[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-info); }\n.mjo-ol-pick__company.is-foreign[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\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}\n\n\n\n\n\n\n\n.mjo-ol-discount[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n padding-top: var(--mj-space-2);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.mjo-ol-discount__head[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n.mjo-ol-discount__title[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-discount__cap[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] {\n display: inline-flex;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n overflow: hidden;\n}\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 0;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font: inherit;\n font-size: var(--mj-text-xs);\n padding: 0 10px;\n height: 28px;\n cursor: pointer;\n}\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-strong);\n}\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] button.is-on[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-discount__val[_ngcontent-%COMP%] {\n width: 96px;\n height: 28px;\n box-sizing: border-box;\n padding: 0 8px;\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 text-align: right;\n}\n\n.mjo-ol-discount__calc[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-discount__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-discount__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\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}\n\n.mjo-ol-discount__reason.is-required[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n border-color: var(--mj-status-danger-text, #b42318);\n}\n\n.mjo-ol-discount__err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-discount__note[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__staged[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__clear[_ngcontent-%COMP%] {\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 height: 24px;\n padding: 0 10px;\n cursor: pointer;\n}\n\n\n\n\n.mjo-ol-discpill[_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 font-variant-numeric: tabular-nums;\n color: var(--mj-status-success-text);\n background: color-mix(in srgb, var(--mj-status-success-text) 16%, transparent);\n}\n\n\n\n.mjo-ol-holding[_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) var(--mj-space-3);\n border: 1px solid var(--mj-status-warning-border);\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-warning-bg);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-holding__choices[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-holding__choice[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n cursor: pointer;\n}\n\n.mjo-ol-holding__choice.is-selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-semibold);\n}"] });
|
|
2078
|
+
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-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__req[_ngcontent-%COMP%] {\n font-style: normal;\n color: var(--mj-status-danger-text, #b42318);\n margin-left: 2px;\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-override__done[_ngcontent-%COMP%]:disabled {\n color: var(--mj-text-muted);\n cursor: not-allowed;\n background: transparent;\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\n\n\n.mjo-ol-term[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-term__label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__input[_ngcontent-%COMP%] {\n height: 28px;\n padding: 0 var(--mj-space-2);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n.mjo-ol-term__input.is-default[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__value[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n\n\n\n.mjo-ol-term__value.is-dictated[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__reset[_ngcontent-%COMP%] {\n border: 0;\n background: transparent;\n padding: 0;\n color: var(--mj-text-link);\n font-size: var(--mj-text-xs);\n cursor: pointer;\n}\n\n.mjo-ol-term__reset[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.mjo-ol-term__hint[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__hint.is-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error-text);\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\n\n\n\n\n\n\n\n.mjo-ol-pick__meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.mjo-ol-pick__company[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: 0 0 auto;\n font-size: 11px;\n line-height: 1.2;\n padding: 2px 6px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-pick__company[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9.5px; color: var(--mj-text-muted); }\n\n\n\n.mjo-ol-pick__company.is-foreign[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-info); }\n.mjo-ol-pick__company.is-foreign[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\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\n\n\n.mjo-ol-overlap[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n line-height: 1.35;\n color: var(--mj-text-secondary);\n}\n.mjo-ol-overlap.is-blocking[_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning-border);\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n.mjo-ol-overlap__body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1);\n}\n.mjo-ol-overlap__ack[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1);\n font-weight: var(--mj-font-semibold);\n cursor: pointer;\n}\n.mjo-ol-overlap-err[_ngcontent-%COMP%] {\n margin-bottom: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\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}\n\n\n\n\n\n\n\n.mjo-ol-discount[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n padding-top: var(--mj-space-2);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.mjo-ol-discount__head[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n.mjo-ol-discount__title[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-discount__cap[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] {\n display: inline-flex;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n overflow: hidden;\n}\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border: 0;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font: inherit;\n font-size: var(--mj-text-xs);\n padding: 0 10px;\n height: 28px;\n cursor: pointer;\n}\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-strong);\n}\n\n.mjo-ol-discount__mode[_ngcontent-%COMP%] button.is-on[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-discount__val[_ngcontent-%COMP%] {\n width: 96px;\n height: 28px;\n box-sizing: border-box;\n padding: 0 8px;\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 text-align: right;\n}\n\n.mjo-ol-discount__calc[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-discount__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-discount__reason[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\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}\n\n.mjo-ol-discount__reason.is-required[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n border-color: var(--mj-status-danger-text, #b42318);\n}\n\n.mjo-ol-discount__err[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-discount__note[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__staged[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__clear[_ngcontent-%COMP%] {\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 height: 24px;\n padding: 0 10px;\n cursor: pointer;\n}\n\n\n\n\n.mjo-ol-discpill[_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 font-variant-numeric: tabular-nums;\n color: var(--mj-status-success-text);\n background: color-mix(in srgb, var(--mj-status-success-text) 16%, transparent);\n}\n\n\n\n.mjo-ol-holding[_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) var(--mj-space-3);\n border: 1px solid var(--mj-status-warning-border);\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-warning-bg);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-holding__choices[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-holding__choice[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n cursor: pointer;\n}\n\n.mjo-ol-holding__choice.is-selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-semibold);\n}"] });
|
|
1965
2079
|
}
|
|
1966
2080
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJOOrderLinesEditorComponent, [{
|
|
1967
2081
|
type: Component,
|
|
@@ -1974,7 +2088,7 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1974
2088
|
MJOLinePricePickerComponent,
|
|
1975
2089
|
MJOMoneyPipe,
|
|
1976
2090
|
MJOOrderLineDetailsPanelComponent,
|
|
1977
|
-
], 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 <!-- The pencil opens the PRICE editor, the DISCOUNT editor, or both \u2014 a user\n may hold one authority without the other, and an order that can be\n discounted but not re-priced still needs a way in. -->\n @if (CanOverride || CanDiscount) {\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]=\"CanOverride ? (IsOverridden(line) ? 'Edit price override' : 'Override price or discount line') : 'Discount line'\">\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 <!-- A DISCOUNT IS NOT AN OVERRIDE, and the badge says so in its own words: the\n list price held and this much was given away. -->\n @if (HasDiscount(line)) {\n <span class=\"mjo-ol-discpill\" title=\"Discount on this line\">\u2212{{ AppliedDiscount(line) | mjoMoney }}</span>\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 <!-- Details, on every line and not just editable ones: a booked line's dimensions are\n what its journal entry carries, which is exactly when someone wants to look. -->\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn\"\n (click)=\"OpenDetails(line, $event)\"\n [attr.title]=\"DimensionSummary(line)\"\n [attr.aria-label]=\"'Details for ' + (ProductFor(line)?.Name ?? 'line')\">\n <i class=\"fa-solid fa-sliders\" aria-hidden=\"true\"></i>\n </button>\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]=\"'Price and discount for ' + (ProductFor(line)?.Name ?? 'line')\">\n @if (CanOverride) {\n <mjo-line-price-picker\n [Line]=\"line\"\n [OverrideKind]=\"OverrideKind\"\n [Applicable]=\"ApplicableFor(line)\"\n [EngineDefault]=\"PricedLine(line)?.Default\"\n [DefaultUnit]=\"DefaultUnit(line)\"\n [PriceSource]=\"PricedLine(line)?.PriceSource ?? null\"\n [PricedUnit]=\"PricedLine(line)?.UnitPrice ?? null\"\n (PriceChanged)=\"OnLinePriceChanged()\"></mjo-line-price-picker>\n }\n\n <!--\n DISCOUNT \u2014 deliberately its own block, below the price picker and labelled\n apart from it (golive #252). An override restates the price; a discount says\n the list price held and value was given away, and only the second reaches the\n Sales Discounts leg of the booking entry. Presenting them as one control is\n what left the whole discount concept unreachable from the product.\n -->\n @if (CanDiscount) {\n <div class=\"mjo-ol-discount\" role=\"group\" [attr.aria-label]=\"'Discount for ' + (ProductFor(line)?.Name ?? 'line')\">\n <div class=\"mjo-ol-discount__head\">\n <span class=\"mjo-ol-discount__title\">Discount</span>\n <span class=\"mjo-ol-discount__cap\">your authority: {{ DiscountCapLabel }}</span>\n </div>\n @if (CanDiscountLine(line)) {\n <div class=\"mjo-ol-discount__row\">\n <div class=\"mjo-ol-discount__mode\" role=\"radiogroup\" aria-label=\"Discount expressed as\">\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"DiscountDraft(line).Mode === 'percent'\"\n [class.is-on]=\"DiscountDraft(line).Mode === 'percent'\"\n (click)=\"SetDiscountMode(line, 'percent')\">%</button>\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"DiscountDraft(line).Mode === 'amount'\"\n [class.is-on]=\"DiscountDraft(line).Mode === 'amount'\"\n (click)=\"SetDiscountMode(line, 'amount')\">Amount</button>\n </div>\n <input\n class=\"mjo-ol-discount__val\"\n type=\"number\"\n step=\"0.01\"\n min=\"0\"\n [value]=\"DiscountDraft(line).Value\"\n (input)=\"SetDiscountValue(line, $event)\"\n [attr.placeholder]=\"DiscountDraft(line).Mode === 'percent' ? '0' : '0.00'\"\n [attr.aria-label]=\"DiscountDraft(line).Mode === 'percent' ? 'Discount percent' : 'Discount amount'\">\n <span class=\"mjo-ol-discount__calc\">\n @if (DraftDiscountAmount(line); as amount) {\n \u2212{{ amount | mjoMoney }} of {{ DiscountBase(line) | mjoMoney }}\n } @else {\n {{ DiscountBase(line) | mjoMoney }} left to discount\n }\n </span>\n </div>\n <label class=\"mjo-ol-discount__reason\" [class.is-required]=\"NeedsDiscountReason(line)\">\n <span>Discount Reason @if (DraftDiscountAmount(line)) {<em class=\"mjo-ol-override__req\" aria-hidden=\"true\">*</em>}</span>\n <textarea\n rows=\"2\"\n [value]=\"DiscountDraft(line).Reason\"\n (input)=\"SetDiscountReason(line, $event)\"\n placeholder=\"Required \u2014 why value was given away on this line\"></textarea>\n </label>\n @if (DiscountError(line); as problem) {\n <div class=\"mjo-ol-discount__err\" role=\"alert\">{{ problem }}</div>\n }\n @if (HasStagedDiscount(line)) {\n <div class=\"mjo-ol-discount__staged\">\n <span>Applies when this order is saved.</span>\n <button type=\"button\" class=\"mjo-ol-discount__clear\" (click)=\"ClearDiscount(line)\">Remove</button>\n </div>\n }\n } @else {\n <div class=\"mjo-ol-discount__note\">\n This line is booked, so its money is frozen. Reverse the line to re-sell it at a\n discounted price.\n </div>\n }\n </div>\n } @else if (DiscountUnavailableReason; as why) {\n <div class=\"mjo-ol-discount__note\">{{ why }}</div>\n }\n\n <div class=\"mjo-ol-override__actions\">\n <button\n type=\"button\"\n class=\"mjo-ol-override__done\"\n [disabled]=\"NeedsOverrideReason(line) || NeedsDiscountReason(line)\"\n [attr.title]=\"NeedsOverrideReason(line) ? 'Enter a reason for the price override' : (NeedsDiscountReason(line) ? 'Enter a reason for the discount' : null)\"\n (click)=\"DoneOverrideEditor(line)\">Done</button>\n @if (CanOverride) {\n <button type=\"button\" class=\"mjo-ol-override__reset\" [disabled]=\"!CanRestoreDefault(line)\" (click)=\"ResetOverride(line)\">Use Default Price</button>\n }\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 <!--\n TERM START \u2014 subscription lines only (D-TERMSTART).\n The order date says when the sale was booked; this says when coverage begins, and an\n agreement settles the two independently. Shown on the card rather than behind the\n extension disclosure because it is a term fact, and not every subscription product\n type has an extension form to hide it in.\n -->\n @if (IsSubscriptionLine(line)) {\n <div class=\"mjo-ol-term\">\n <!-- `for` only when there IS an input to point at. A label targeting a missing\n id is a dead control to a screen reader. -->\n <label\n class=\"mjo-ol-term__label\"\n [attr.for]=\"EditMode && !TermStartIsDictated(line) ? 'mjo-ol-term-' + line.ID : null\">\n Term start\n </label>\n <!-- A renewal of LIVE coverage has no choice to offer: the term begins the day\n after the current one ends. Read-only rather than editable-and-ignored. -->\n @if (TermStartIsDictated(line)) {\n <span class=\"mjo-ol-term__value is-dictated\">{{ ContinuationStartValue(line) }}</span>\n } @else if (EditMode) {\n <input\n type=\"date\"\n class=\"mjo-ol-term__input\"\n [class.is-default]=\"TermStartFollowsOrderDate(line)\"\n [id]=\"'mjo-ol-term-' + line.ID\"\n [value]=\"TermStartValue(line)\"\n (change)=\"SetTermStart(line, $event)\">\n <!-- Offered only when there is something to reset. A button that clears a\n value the line never stated does nothing and invites the reader to\n wonder what it did. -->\n @if (!TermStartFollowsOrderDate(line)) {\n <button\n type=\"button\"\n class=\"mjo-ol-term__reset\"\n (click)=\"ResetTermStart(line)\">\n Reset to order date\n </button>\n }\n } @else {\n <span class=\"mjo-ol-term__value\">{{ TermStartValue(line) }}</span>\n }\n <span class=\"mjo-ol-term__hint\">\n @if (TermStartIsDictated(line)) {\n Continuing existing coverage, so the term begins the day after the current\n one ends \u2014 not something this line can set.\n } @else if (TermStartFollowsOrderDate(line)) {\n Following the order date. The subscription type's rules may still adjust\n the actual start.\n } @else {\n Stated on this line, so a later change to the order date leaves it alone.\n }\n </span>\n </div>\n\n <!-- The customer already holds this product (golive #299): ask whether this line\n extends that subscription or starts another, instead of letting the type's\n rule decide silently at confirm. -->\n @if (ExistingHoldingFor(line); as holding) {\n <div class=\"mjo-ol-holding\" role=\"group\" [attr.aria-label]=\"'Existing subscription ' + holding.SubscriptionNumber\">\n <span class=\"mjo-ol-holding__text\">\n The customer already holds {{ holding.SubscriptionNumber }} for this product\n @if (HoldingCoverageEnd(holding)) { (covered through {{ HoldingCoverageEnd(holding) }}) }.\n </span>\n @if (CanEditServicePeriod()) {\n <div class=\"mjo-ol-holding__choices\">\n <button\n type=\"button\"\n class=\"mjo-ol-holding__choice\"\n [class.is-selected]=\"line.SubscriptionAction === 'ExtendExisting'\"\n [attr.aria-pressed]=\"line.SubscriptionAction === 'ExtendExisting'\"\n (click)=\"SetSubscriptionAction(line, 'ExtendExisting')\">\n Add as next term\n @if (HoldingContinuationStart(holding)) { (starts {{ HoldingContinuationStart(holding) }}) }\n </button>\n <button\n type=\"button\"\n class=\"mjo-ol-holding__choice\"\n [class.is-selected]=\"line.SubscriptionAction === 'CreateNew'\"\n [attr.aria-pressed]=\"line.SubscriptionAction === 'CreateNew'\"\n (click)=\"SetSubscriptionAction(line, 'CreateNew')\">\n New subscription (keeps this line's dates)\n </button>\n </div>\n }\n <span class=\"mjo-ol-term__hint\" [class.is-error]=\"!line.SubscriptionAction\">\n @if (line.SubscriptionAction === 'CreateNew') {\n Confirm starts a separate subscription on this line's service period.\n } @else if (line.SubscriptionAction === 'ExtendExisting') {\n Confirm adds a term to {{ holding.SubscriptionNumber }}, starting the day after its coverage ends.\n } @else {\n Not chosen. The subscription type's rule will decide at confirm, and it may move this\n line's dates.\n }\n </span>\n </div>\n }\n }\n\n <!--\n SERVICE PERIOD \u2014 deferred lines that neither an event nor a subscription dates.\n The recognition type earns against this window, so the order cannot be confirmed\n without it.\n -->\n @if (NeedsStatedServicePeriod(line)) {\n <div class=\"mjo-ol-term\">\n <label\n class=\"mjo-ol-term__label\"\n [attr.for]=\"CanEditServicePeriod() ? 'mjo-ol-sp-start-' + line.ID : null\">\n Service period\n </label>\n @if (CanEditServicePeriod()) {\n <input\n type=\"date\"\n class=\"mjo-ol-term__input\"\n aria-label=\"Service period start\"\n [id]=\"'mjo-ol-sp-start-' + line.ID\"\n [value]=\"ServicePeriodValue(line, 'Start')\"\n (change)=\"SetServicePeriod(line, 'Start', $event)\">\n <span class=\"mjo-ol-term__label\" aria-hidden=\"true\">to</span>\n <input\n type=\"date\"\n class=\"mjo-ol-term__input\"\n aria-label=\"Service period end\"\n [value]=\"ServicePeriodValue(line, 'End')\"\n (change)=\"SetServicePeriod(line, 'End', $event)\">\n } @else {\n <span class=\"mjo-ol-term__value\">\n {{ ServicePeriodValue(line, 'Start') || '\u2014' }} to {{ ServicePeriodValue(line, 'End') || '\u2014' }}\n </span>\n }\n @if (ServicePeriodBackwards(line)) {\n <span class=\"mjo-ol-term__hint is-error\" role=\"alert\">\n End date must be on or after the start date.\n </span>\n } @else if (ServicePeriodMissing(line)) {\n <span class=\"mjo-ol-term__hint\">\n Needed to confirm: revenue on this line is recognized against these dates.\n </span>\n }\n </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=\"mjo-ol-pick__meta\">\n <span class=\"sub\">{{ product.SKU }} \u00B7 {{ product.TypeName }}</span>\n @if (product.CompanyName) {\n <span\n class=\"mjo-ol-pick__company\"\n [class.is-foreign]=\"IsForeignCompany(product)\"\n [attr.title]=\"IsForeignCompany(product)\n ? 'Sold by ' + product.CompanyName + ', not this order\\'s company'\n : product.CompanyName\">\n <i class=\"fa-solid fa-building\" aria-hidden=\"true\"></i>\n {{ product.CompanyName }}\n </span>\n }\n </span>\n </span>\n <span class=\"end\">\n <span class=\"mjo-ol-pick__price\">{{ product.ListPrice === null ? 'No 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\n <!-- Line details. Rendered once and handed whichever line is open, rather than one per card:\n the panel is modal, so a second instance could never be visible. -->\n <mjo-order-line-details-panel\n [Line]=\"DetailsLine\"\n [ProductName]=\"DetailsLine ? (ProductFor(DetailsLine)?.Name ?? '') : ''\"\n [ProductSKU]=\"DetailsLine ? (ProductFor(DetailsLine)?.SKU ?? '') : ''\"\n [ProductType]=\"DetailsLine ? (ProductFor(DetailsLine)?.TypeName ?? '') : ''\"\n [Dimensions]=\"DimensionCatalog\"\n [EditMode]=\"EditMode\"\n (Closed)=\"CloseDetails()\">\n </mjo-order-line-details-panel>\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-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__req {\n font-style: normal;\n color: var(--mj-status-danger-text, #b42318);\n margin-left: 2px;\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-override__done:disabled {\n color: var(--mj-text-muted);\n cursor: not-allowed;\n background: transparent;\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/* Term start \u2014 subscription lines only. One row that wraps, so the hint drops below the field on a\n narrow card rather than squeezing the date input. */\n.mjo-ol-term {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-term__label {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__input {\n height: 28px;\n padding: 0 var(--mj-space-2);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n font-size: var(--mj-text-sm);\n}\n\n/* A DEFAULT reads quieter than a stated value \u2014 the same distinction the order header draws\n between a date somebody chose and one that fell out of a rule. */\n.mjo-ol-term__input.is-default {\n border-color: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__value {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n/* A dictated date is a FACT, not a disabled input: shown in the read-mode weight in edit mode too,\n so nothing on the card suggests a control that has been switched off. */\n.mjo-ol-term__value.is-dictated {\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__reset {\n border: 0;\n background: transparent;\n padding: 0;\n color: var(--mj-text-link);\n font-size: var(--mj-text-xs);\n cursor: pointer;\n}\n\n.mjo-ol-term__reset:hover {\n text-decoration: underline;\n}\n\n.mjo-ol-term__hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__hint.is-error {\n color: var(--mj-status-error-text);\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\n/*\n COMPANY IS ITS OWN ELEMENT, not the third item in a muted \"SKU \u00B7 type \u00B7 company\" run.\n Two similarly named products from different companies are exactly what this picker has to let\n someone tell apart before they pick, and a company set in the same muted grey as everything\n else, in third position, is not something anyone reads at speed.\n*/\n.mjo-ol-pick__meta {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.mjo-ol-pick__company {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: 0 0 auto;\n font-size: 11px;\n line-height: 1.2;\n padding: 2px 6px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-pick__company i { font-size: 9.5px; color: var(--mj-text-muted); }\n\n/* Another company's product \u2014 offered on purpose (BCC sells SoundPost), so it is marked, not hidden. */\n.mjo-ol-pick__company.is-foreign i { color: var(--mj-status-info); }\n.mjo-ol-pick__company.is-foreign {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\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\n/* \u2500\u2500 DISCOUNT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Its own bordered block inside the price editor, because a discount and a price\n override are different economics and the report that produced this control said\n so: presenting them as one thing is what made the discount concept unreachable.\n The rule above the block is the separator \u2014 the two never read as one form. */\n.mjo-ol-discount {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n padding-top: var(--mj-space-2);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.mjo-ol-discount__head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n.mjo-ol-discount__title {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-discount__cap {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n/* Two buttons that behave as one control, so they are drawn as one. */\n.mjo-ol-discount__mode {\n display: inline-flex;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n overflow: hidden;\n}\n\n.mjo-ol-discount__mode button {\n border: 0;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font: inherit;\n font-size: var(--mj-text-xs);\n padding: 0 10px;\n height: 28px;\n cursor: pointer;\n}\n\n.mjo-ol-discount__mode button + button {\n border-left: 1px solid var(--mj-border-strong);\n}\n\n.mjo-ol-discount__mode button.is-on {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-discount__val {\n width: 96px;\n height: 28px;\n box-sizing: border-box;\n padding: 0 8px;\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 text-align: right;\n}\n\n.mjo-ol-discount__calc {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-discount__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-discount__reason textarea {\n display: block;\n width: 100%;\n box-sizing: border-box;\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\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}\n\n.mjo-ol-discount__reason.is-required textarea {\n border-color: var(--mj-status-danger-text, #b42318);\n}\n\n.mjo-ol-discount__err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-discount__note {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__staged {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__clear {\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 height: 24px;\n padding: 0 10px;\n cursor: pointer;\n}\n\n/* The discount's own badge on the line card. Deliberately NOT the override pill's\n warning colour: giving away value on purpose is not a caution. */\n.mjo-ol-discpill {\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 font-variant-numeric: tabular-nums;\n color: var(--mj-status-success-text);\n background: color-mix(in srgb, var(--mj-status-success-text) 16%, transparent);\n}\n\n/* The customer already holds this product (golive #299). */\n.mjo-ol-holding {\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) var(--mj-space-3);\n border: 1px solid var(--mj-status-warning-border);\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-warning-bg);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-holding__choices {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-holding__choice {\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n cursor: pointer;\n}\n\n.mjo-ol-holding__choice.is-selected {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-semibold);\n}\n"] }]
|
|
2091
|
+
], template: "<div class=\"mjo-ol\">\n @if (CoverageCheckError) {\n <div class=\"mjo-ol-overlap-err\" role=\"status\">{{ CoverageCheckError }}</div>\n }\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 <!-- The pencil opens the PRICE editor, the DISCOUNT editor, or both \u2014 a user\n may hold one authority without the other, and an order that can be\n discounted but not re-priced still needs a way in. -->\n @if (CanOverride || CanDiscount) {\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]=\"CanOverride ? (IsOverridden(line) ? 'Edit price override' : 'Override price or discount line') : 'Discount line'\">\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 <!-- A DISCOUNT IS NOT AN OVERRIDE, and the badge says so in its own words: the\n list price held and this much was given away. -->\n @if (HasDiscount(line)) {\n <span class=\"mjo-ol-discpill\" title=\"Discount on this line\">\u2212{{ AppliedDiscount(line) | mjoMoney }}</span>\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 <!-- Details, on every line and not just editable ones: a booked line's dimensions are\n what its journal entry carries, which is exactly when someone wants to look. -->\n <button\n type=\"button\"\n class=\"mjo-ol-iconbtn\"\n (click)=\"OpenDetails(line, $event)\"\n [attr.title]=\"DimensionSummary(line)\"\n [attr.aria-label]=\"'Details for ' + (ProductFor(line)?.Name ?? 'line')\">\n <i class=\"fa-solid fa-sliders\" aria-hidden=\"true\"></i>\n </button>\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]=\"'Price and discount for ' + (ProductFor(line)?.Name ?? 'line')\">\n @if (CanOverride) {\n <mjo-line-price-picker\n [Line]=\"line\"\n [OverrideKind]=\"OverrideKind\"\n [Applicable]=\"ApplicableFor(line)\"\n [EngineDefault]=\"PricedLine(line)?.Default\"\n [DefaultUnit]=\"DefaultUnit(line)\"\n [PriceSource]=\"PricedLine(line)?.PriceSource ?? null\"\n [PricedUnit]=\"PricedLine(line)?.UnitPrice ?? null\"\n (PriceChanged)=\"OnLinePriceChanged()\"></mjo-line-price-picker>\n }\n\n <!--\n DISCOUNT \u2014 deliberately its own block, below the price picker and labelled\n apart from it (golive #252). An override restates the price; a discount says\n the list price held and value was given away, and only the second reaches the\n Sales Discounts leg of the booking entry. Presenting them as one control is\n what left the whole discount concept unreachable from the product.\n -->\n @if (CanDiscount) {\n <div class=\"mjo-ol-discount\" role=\"group\" [attr.aria-label]=\"'Discount for ' + (ProductFor(line)?.Name ?? 'line')\">\n <div class=\"mjo-ol-discount__head\">\n <span class=\"mjo-ol-discount__title\">Discount</span>\n <span class=\"mjo-ol-discount__cap\">your authority: {{ DiscountCapLabel }}</span>\n </div>\n @if (CanDiscountLine(line)) {\n <div class=\"mjo-ol-discount__row\">\n <div class=\"mjo-ol-discount__mode\" role=\"radiogroup\" aria-label=\"Discount expressed as\">\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"DiscountDraft(line).Mode === 'percent'\"\n [class.is-on]=\"DiscountDraft(line).Mode === 'percent'\"\n (click)=\"SetDiscountMode(line, 'percent')\">%</button>\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"DiscountDraft(line).Mode === 'amount'\"\n [class.is-on]=\"DiscountDraft(line).Mode === 'amount'\"\n (click)=\"SetDiscountMode(line, 'amount')\">Amount</button>\n </div>\n <input\n class=\"mjo-ol-discount__val\"\n type=\"number\"\n step=\"0.01\"\n min=\"0\"\n [value]=\"DiscountDraft(line).Value\"\n (input)=\"SetDiscountValue(line, $event)\"\n [attr.placeholder]=\"DiscountDraft(line).Mode === 'percent' ? '0' : '0.00'\"\n [attr.aria-label]=\"DiscountDraft(line).Mode === 'percent' ? 'Discount percent' : 'Discount amount'\">\n <span class=\"mjo-ol-discount__calc\">\n @if (DraftDiscountAmount(line); as amount) {\n \u2212{{ amount | mjoMoney }} of {{ DiscountBase(line) | mjoMoney }}\n } @else {\n {{ DiscountBase(line) | mjoMoney }} left to discount\n }\n </span>\n </div>\n <label class=\"mjo-ol-discount__reason\" [class.is-required]=\"NeedsDiscountReason(line)\">\n <span>Discount Reason @if (DraftDiscountAmount(line)) {<em class=\"mjo-ol-override__req\" aria-hidden=\"true\">*</em>}</span>\n <textarea\n rows=\"2\"\n [value]=\"DiscountDraft(line).Reason\"\n (input)=\"SetDiscountReason(line, $event)\"\n placeholder=\"Required \u2014 why value was given away on this line\"></textarea>\n </label>\n @if (DiscountError(line); as problem) {\n <div class=\"mjo-ol-discount__err\" role=\"alert\">{{ problem }}</div>\n }\n @if (HasStagedDiscount(line)) {\n <div class=\"mjo-ol-discount__staged\">\n <span>Applies when this order is saved.</span>\n <button type=\"button\" class=\"mjo-ol-discount__clear\" (click)=\"ClearDiscount(line)\">Remove</button>\n </div>\n }\n } @else {\n <div class=\"mjo-ol-discount__note\">\n This line is booked, so its money is frozen. Reverse the line to re-sell it at a\n discounted price.\n </div>\n }\n </div>\n } @else if (DiscountUnavailableReason; as why) {\n <div class=\"mjo-ol-discount__note\">{{ why }}</div>\n }\n\n <div class=\"mjo-ol-override__actions\">\n <button\n type=\"button\"\n class=\"mjo-ol-override__done\"\n [disabled]=\"NeedsOverrideReason(line) || NeedsDiscountReason(line)\"\n [attr.title]=\"NeedsOverrideReason(line) ? 'Enter a reason for the price override' : (NeedsDiscountReason(line) ? 'Enter a reason for the discount' : null)\"\n (click)=\"DoneOverrideEditor(line)\">Done</button>\n @if (CanOverride) {\n <button type=\"button\" class=\"mjo-ol-override__reset\" [disabled]=\"!CanRestoreDefault(line)\" (click)=\"ResetOverride(line)\">Use Default Price</button>\n }\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 <!--\n TERM START \u2014 subscription lines only (D-TERMSTART).\n The order date says when the sale was booked; this says when coverage begins, and an\n agreement settles the two independently. Shown on the card rather than behind the\n extension disclosure because it is a term fact, and not every subscription product\n type has an extension form to hide it in.\n -->\n @if (IsSubscriptionLine(line)) {\n <div class=\"mjo-ol-term\">\n <!-- `for` only when there IS an input to point at. A label targeting a missing\n id is a dead control to a screen reader. -->\n <label\n class=\"mjo-ol-term__label\"\n [attr.for]=\"EditMode && !TermStartIsDictated(line) ? 'mjo-ol-term-' + line.ID : null\">\n Term start\n </label>\n <!-- A renewal of LIVE coverage has no choice to offer: the term begins the day\n after the current one ends. Read-only rather than editable-and-ignored. -->\n @if (TermStartIsDictated(line)) {\n <span class=\"mjo-ol-term__value is-dictated\">{{ ContinuationStartValue(line) }}</span>\n } @else if (EditMode) {\n <input\n type=\"date\"\n class=\"mjo-ol-term__input\"\n [class.is-default]=\"TermStartFollowsOrderDate(line)\"\n [id]=\"'mjo-ol-term-' + line.ID\"\n [value]=\"TermStartValue(line)\"\n (change)=\"SetTermStart(line, $event)\">\n <!-- Offered only when there is something to reset. A button that clears a\n value the line never stated does nothing and invites the reader to\n wonder what it did. -->\n @if (!TermStartFollowsOrderDate(line)) {\n <button\n type=\"button\"\n class=\"mjo-ol-term__reset\"\n (click)=\"ResetTermStart(line)\">\n Reset to order date\n </button>\n }\n } @else {\n <span class=\"mjo-ol-term__value\">{{ TermStartValue(line) }}</span>\n }\n <span class=\"mjo-ol-term__hint\">\n @if (TermStartIsDictated(line)) {\n Continuing existing coverage, so the term begins the day after the current\n one ends \u2014 not something this line can set.\n } @else if (TermStartFollowsOrderDate(line)) {\n Following the order date. The subscription type's rules may still adjust\n the actual start.\n } @else {\n Stated on this line, so a later change to the order date leaves it alone.\n }\n </span>\n </div>\n\n <!-- The customer already holds this product (golive #299): ask whether this line\n extends that subscription or starts another, instead of letting the type's\n rule decide silently at confirm. -->\n @if (ExistingHoldingFor(line); as holding) {\n <div class=\"mjo-ol-holding\" role=\"group\" [attr.aria-label]=\"'Existing subscription ' + holding.SubscriptionNumber\">\n <span class=\"mjo-ol-holding__text\">\n The customer already holds {{ holding.SubscriptionNumber }} for this product\n @if (HoldingCoverageEnd(holding)) { (covered through {{ HoldingCoverageEnd(holding) }}) }.\n </span>\n @if (CanEditServicePeriod()) {\n <div class=\"mjo-ol-holding__choices\">\n <button\n type=\"button\"\n class=\"mjo-ol-holding__choice\"\n [class.is-selected]=\"line.SubscriptionAction === 'ExtendExisting'\"\n [attr.aria-pressed]=\"line.SubscriptionAction === 'ExtendExisting'\"\n (click)=\"SetSubscriptionAction(line, 'ExtendExisting')\">\n Add as next term\n @if (HoldingContinuationStart(holding)) { (starts {{ HoldingContinuationStart(holding) }}) }\n </button>\n <button\n type=\"button\"\n class=\"mjo-ol-holding__choice\"\n [class.is-selected]=\"line.SubscriptionAction === 'CreateNew'\"\n [attr.aria-pressed]=\"line.SubscriptionAction === 'CreateNew'\"\n (click)=\"SetSubscriptionAction(line, 'CreateNew')\">\n New subscription (keeps this line's dates)\n </button>\n </div>\n }\n <span class=\"mjo-ol-term__hint\" [class.is-error]=\"!line.SubscriptionAction\">\n @if (line.SubscriptionAction === 'CreateNew') {\n Confirm starts a separate subscription on this line's service period.\n } @else if (line.SubscriptionAction === 'ExtendExisting') {\n Confirm adds a term to {{ holding.SubscriptionNumber }}, starting the day after its coverage ends.\n } @else {\n Not chosen. The subscription type's rule will decide at confirm, and it may move this\n line's dates.\n }\n </span>\n </div>\n }\n }\n\n <!--\n SERVICE PERIOD \u2014 deferred lines that neither an event nor a subscription dates.\n The recognition type earns against this window, so the order cannot be confirmed\n without it.\n -->\n @if (NeedsStatedServicePeriod(line)) {\n <div class=\"mjo-ol-term\">\n <label\n class=\"mjo-ol-term__label\"\n [attr.for]=\"CanEditServicePeriod() ? 'mjo-ol-sp-start-' + line.ID : null\">\n Service period\n </label>\n @if (CanEditServicePeriod()) {\n <input\n type=\"date\"\n class=\"mjo-ol-term__input\"\n aria-label=\"Service period start\"\n [id]=\"'mjo-ol-sp-start-' + line.ID\"\n [value]=\"ServicePeriodValue(line, 'Start')\"\n (change)=\"SetServicePeriod(line, 'Start', $event)\">\n <span class=\"mjo-ol-term__label\" aria-hidden=\"true\">to</span>\n <input\n type=\"date\"\n class=\"mjo-ol-term__input\"\n aria-label=\"Service period end\"\n [value]=\"ServicePeriodValue(line, 'End')\"\n (change)=\"SetServicePeriod(line, 'End', $event)\">\n } @else {\n <span class=\"mjo-ol-term__value\">\n {{ ServicePeriodValue(line, 'Start') || '\u2014' }} to {{ ServicePeriodValue(line, 'End') || '\u2014' }}\n </span>\n }\n @if (ServicePeriodBackwards(line)) {\n <span class=\"mjo-ol-term__hint is-error\" role=\"alert\">\n End date must be on or after the start date.\n </span>\n } @else if (ServicePeriodMissing(line)) {\n <span class=\"mjo-ol-term__hint\">\n Needed to confirm: revenue on this line is recognized against these dates.\n </span>\n }\n </div>\n }\n\n <!--\n COVERAGE OVERLAP \u2014 another band of the same subscription family (golive #276).\n The text is the server's own confirm check (Orders.CheckCoverageOverlap), so what\n this says is what confirm will do. Checked after each save.\n -->\n @if (CoverageOverlapFor(line); as overlap) {\n <div class=\"mjo-ol-overlap\" [class.is-blocking]=\"OverlapBlocksConfirm(line)\" role=\"status\">\n <i class=\"fa-solid fa-triangle-exclamation\" aria-hidden=\"true\"></i>\n <div class=\"mjo-ol-overlap__body\">\n <span>{{ overlap.Message }}</span>\n @if (CanAcknowledgeOverlap(line)) {\n <label class=\"mjo-ol-overlap__ack\">\n <input\n type=\"checkbox\"\n [checked]=\"line.AcknowledgesCoverageOverlap\"\n [disabled]=\"!EditMode\"\n (change)=\"SetOverlapAcknowledged(line, $event)\">\n Run alongside the existing coverage. Both will be billed.\n </label>\n }\n </div>\n </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=\"mjo-ol-pick__meta\">\n <span class=\"sub\">{{ product.SKU }} \u00B7 {{ product.TypeName }}</span>\n @if (product.CompanyName) {\n <span\n class=\"mjo-ol-pick__company\"\n [class.is-foreign]=\"IsForeignCompany(product)\"\n [attr.title]=\"IsForeignCompany(product)\n ? 'Sold by ' + product.CompanyName + ', not this order\\'s company'\n : product.CompanyName\">\n <i class=\"fa-solid fa-building\" aria-hidden=\"true\"></i>\n {{ product.CompanyName }}\n </span>\n }\n </span>\n </span>\n <span class=\"end\">\n <span class=\"mjo-ol-pick__price\">{{ product.ListPrice === null ? 'No 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\n <!-- Line details. Rendered once and handed whichever line is open, rather than one per card:\n the panel is modal, so a second instance could never be visible. -->\n <mjo-order-line-details-panel\n [Line]=\"DetailsLine\"\n [ProductName]=\"DetailsLine ? (ProductFor(DetailsLine)?.Name ?? '') : ''\"\n [ProductSKU]=\"DetailsLine ? (ProductFor(DetailsLine)?.SKU ?? '') : ''\"\n [ProductType]=\"DetailsLine ? (ProductFor(DetailsLine)?.TypeName ?? '') : ''\"\n [Dimensions]=\"DimensionCatalog\"\n [EditMode]=\"EditMode\"\n (Closed)=\"CloseDetails()\">\n </mjo-order-line-details-panel>\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-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__req {\n font-style: normal;\n color: var(--mj-status-danger-text, #b42318);\n margin-left: 2px;\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-override__done:disabled {\n color: var(--mj-text-muted);\n cursor: not-allowed;\n background: transparent;\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/* Term start \u2014 subscription lines only. One row that wraps, so the hint drops below the field on a\n narrow card rather than squeezing the date input. */\n.mjo-ol-term {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n margin-top: var(--mj-space-2);\n}\n\n.mjo-ol-term__label {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__input {\n height: 28px;\n padding: 0 var(--mj-space-2);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n font-size: var(--mj-text-sm);\n}\n\n/* A DEFAULT reads quieter than a stated value \u2014 the same distinction the order header draws\n between a date somebody chose and one that fell out of a rule. */\n.mjo-ol-term__input.is-default {\n border-color: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__value {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n/* A dictated date is a FACT, not a disabled input: shown in the read-mode weight in edit mode too,\n so nothing on the card suggests a control that has been switched off. */\n.mjo-ol-term__value.is-dictated {\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-term__reset {\n border: 0;\n background: transparent;\n padding: 0;\n color: var(--mj-text-link);\n font-size: var(--mj-text-xs);\n cursor: pointer;\n}\n\n.mjo-ol-term__reset:hover {\n text-decoration: underline;\n}\n\n.mjo-ol-term__hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-term__hint.is-error {\n color: var(--mj-status-error-text);\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\n/*\n COMPANY IS ITS OWN ELEMENT, not the third item in a muted \"SKU \u00B7 type \u00B7 company\" run.\n Two similarly named products from different companies are exactly what this picker has to let\n someone tell apart before they pick, and a company set in the same muted grey as everything\n else, in third position, is not something anyone reads at speed.\n*/\n.mjo-ol-pick__meta {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.mjo-ol-pick__company {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: 0 0 auto;\n font-size: 11px;\n line-height: 1.2;\n padding: 2px 6px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.mjo-ol-pick__company i { font-size: 9.5px; color: var(--mj-text-muted); }\n\n/* Another company's product \u2014 offered on purpose (BCC sells SoundPost), so it is marked, not hidden. */\n.mjo-ol-pick__company.is-foreign i { color: var(--mj-status-info); }\n.mjo-ol-pick__company.is-foreign {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\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/* Coverage overlap with another band (golive #276). Warning colour while confirm would refuse the\n line; muted once it will proceed, because then it is information, not a problem. */\n.mjo-ol-overlap {\n display: flex;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n line-height: 1.35;\n color: var(--mj-text-secondary);\n}\n.mjo-ol-overlap.is-blocking {\n border-color: var(--mj-status-warning-border);\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n.mjo-ol-overlap__body {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1);\n}\n.mjo-ol-overlap__ack {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1);\n font-weight: var(--mj-font-semibold);\n cursor: pointer;\n}\n.mjo-ol-overlap-err {\n margin-bottom: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\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\n/* \u2500\u2500 DISCOUNT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Its own bordered block inside the price editor, because a discount and a price\n override are different economics and the report that produced this control said\n so: presenting them as one thing is what made the discount concept unreachable.\n The rule above the block is the separator \u2014 the two never read as one form. */\n.mjo-ol-discount {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n padding-top: var(--mj-space-2);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.mjo-ol-discount__head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n.mjo-ol-discount__title {\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-discount__cap {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-wrap: wrap;\n}\n\n/* Two buttons that behave as one control, so they are drawn as one. */\n.mjo-ol-discount__mode {\n display: inline-flex;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n overflow: hidden;\n}\n\n.mjo-ol-discount__mode button {\n border: 0;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font: inherit;\n font-size: var(--mj-text-xs);\n padding: 0 10px;\n height: 28px;\n cursor: pointer;\n}\n\n.mjo-ol-discount__mode button + button {\n border-left: 1px solid var(--mj-border-strong);\n}\n\n.mjo-ol-discount__mode button.is-on {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n font-weight: var(--mj-font-semibold);\n}\n\n.mjo-ol-discount__val {\n width: 96px;\n height: 28px;\n box-sizing: border-box;\n padding: 0 8px;\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 text-align: right;\n}\n\n.mjo-ol-discount__calc {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-variant-numeric: tabular-nums;\n}\n\n.mjo-ol-discount__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-discount__reason textarea {\n display: block;\n width: 100%;\n box-sizing: border-box;\n resize: vertical;\n min-height: 48px;\n padding: 6px 8px;\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}\n\n.mjo-ol-discount__reason.is-required textarea {\n border-color: var(--mj-status-danger-text, #b42318);\n}\n\n.mjo-ol-discount__err {\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error-text);\n}\n\n.mjo-ol-discount__note {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__staged {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.mjo-ol-discount__clear {\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 height: 24px;\n padding: 0 10px;\n cursor: pointer;\n}\n\n/* The discount's own badge on the line card. Deliberately NOT the override pill's\n warning colour: giving away value on purpose is not a caution. */\n.mjo-ol-discpill {\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 font-variant-numeric: tabular-nums;\n color: var(--mj-status-success-text);\n background: color-mix(in srgb, var(--mj-status-success-text) 16%, transparent);\n}\n\n/* The customer already holds this product (golive #299). */\n.mjo-ol-holding {\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) var(--mj-space-3);\n border: 1px solid var(--mj-status-warning-border);\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-warning-bg);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.mjo-ol-holding__choices {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n}\n\n.mjo-ol-holding__choice {\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font: inherit;\n cursor: pointer;\n}\n\n.mjo-ol-holding__choice.is-selected {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: var(--mj-font-semibold);\n}\n"] }]
|
|
1978
2092
|
}], null, { Provider: [{
|
|
1979
2093
|
type: Input
|
|
1980
2094
|
}], EditMode: [{
|
|
@@ -1989,5 +2103,5 @@ export class MJOOrderLinesEditorComponent {
|
|
|
1989
2103
|
type: ViewChild,
|
|
1990
2104
|
args: ['pickerHost']
|
|
1991
2105
|
}] }); })();
|
|
1992
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOOrderLinesEditorComponent, { className: "MJOOrderLinesEditorComponent", filePath: "lib/custom/OrderHeader/order-lines-editor.component.ts", lineNumber:
|
|
2106
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJOOrderLinesEditorComponent, { className: "MJOOrderLinesEditorComponent", filePath: "lib/custom/OrderHeader/order-lines-editor.component.ts", lineNumber: 141 }); })();
|
|
1993
2107
|
//# sourceMappingURL=order-lines-editor.component.js.map
|