techlify-inventory-common 18.34.0 → 18.36.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/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +5 -5
- package/esm2022/lib/inventory-common/stock-issuances/grouped-stock-issue-list/grouped-stock-issue-list.component.mjs +139 -0
- package/esm2022/lib/inventory-common/stock-issuances/itemized-stock-issue-products-list/itemized-stock-issue-products-list.component.mjs +138 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-batch-form/stock-issue-batch-form.component.mjs +49 -6
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.mjs +5 -5
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.mjs +8 -4
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-list/stock-issue-list.component.mjs +49 -95
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-list/stock-issue-list.module.mjs +33 -13
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-product-form/stock-issue-product-form-button/stock-issue-product-form-button.component.mjs +35 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-product-form/stock-issue-product-form.component.mjs +102 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-product.service.mjs +16 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-routing.module.mjs +6 -1
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue.module.mjs +1 -17
- package/esm2022/lib/inventory-common/stock-receipts/grouped-stock-receipt-list/grouped-stock-receipt-list.component.mjs +151 -0
- package/esm2022/lib/inventory-common/stock-receipts/itemized-stock-receipt-products-list/itemized-stock-receipt-products-list.component.mjs +146 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-batch-form/stock-receipt-batch-form.component.mjs +64 -8
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.mjs +6 -5
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.mjs +12 -5
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form-button/stock-receipt-product-form-button.component.mjs +37 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.mjs +80 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product.service.mjs +18 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.mjs +41 -129
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-routing.module.mjs +6 -1
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts.module.mjs +26 -8
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-view/purchase-order-view.component.mjs +6 -5
- package/esm2022/public-api.mjs +10 -1
- package/fesm2022/{techlify-inventory-common-category.module-BfcXygNN.mjs → techlify-inventory-common-category.module-CUqub2ML.mjs} +14 -14
- package/fesm2022/techlify-inventory-common-category.module-CUqub2ML.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-measure.module-DIygZTaE.mjs → techlify-inventory-common-measure.module-CIonhS7Z.mjs} +11 -11
- package/fesm2022/{techlify-inventory-common-measure.module-DIygZTaE.mjs.map → techlify-inventory-common-measure.module-CIonhS7Z.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-CnfNn5jL.mjs → techlify-inventory-common-purchase-order-view.component-5zmdBnE-.mjs} +13 -12
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-5zmdBnE-.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issue-batch-form.component-CneSorqd.mjs → techlify-inventory-common-stock-issue-batch-form.component-CnRySjgj.mjs} +55 -12
- package/fesm2022/techlify-inventory-common-stock-issue-batch-form.component-CnRySjgj.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-m3tsNDT-.mjs → techlify-inventory-common-stock-issue-view.component-D1sTvEWD.mjs} +4 -4
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-m3tsNDT-.mjs.map → techlify-inventory-common-stock-issue-view.component-D1sTvEWD.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-BoJjioLF.mjs → techlify-inventory-common-techlify-inventory-common-DVM9NowZ.mjs} +977 -277
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-DVM9NowZ.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +4 -4
- package/lib/inventory-common/stock-issuances/grouped-stock-issue-list/grouped-stock-issue-list.component.d.ts +28 -0
- package/lib/inventory-common/stock-issuances/itemized-stock-issue-products-list/itemized-stock-issue-products-list.component.d.ts +27 -0
- package/lib/inventory-common/stock-issuances/stock-issue-batch-form/stock-issue-batch-form.component.d.ts +6 -2
- package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.d.ts +2 -1
- package/lib/inventory-common/stock-issuances/stock-issue-list/stock-issue-list.component.d.ts +12 -13
- package/lib/inventory-common/stock-issuances/stock-issue-list/stock-issue-list.module.d.ts +15 -12
- package/lib/inventory-common/stock-issuances/stock-issue-product-form/stock-issue-product-form-button/stock-issue-product-form-button.component.d.ts +12 -0
- package/lib/inventory-common/stock-issuances/stock-issue-product-form/stock-issue-product-form.component.d.ts +21 -0
- package/lib/inventory-common/stock-issuances/stock-issue-product.service.d.ts +7 -0
- package/lib/inventory-common/stock-issuances/stock-issue.module.d.ts +6 -10
- package/lib/inventory-common/stock-receipts/grouped-stock-receipt-list/grouped-stock-receipt-list.component.d.ts +30 -0
- package/lib/inventory-common/stock-receipts/itemized-stock-receipt-products-list/itemized-stock-receipt-products-list.component.d.ts +28 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-batch-form/stock-receipt-batch-form.component.d.ts +8 -2
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.d.ts +2 -1
- package/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form-button/stock-receipt-product-form-button.component.d.ts +12 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.d.ts +17 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-product.service.d.ts +7 -0
- package/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.d.ts +13 -21
- package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +16 -13
- package/lib/inventory-common/supplier/purchase-order/purchase-order-view/purchase-order-view.component.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +9 -0
- package/fesm2022/techlify-inventory-common-category.module-BfcXygNN.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-CnfNn5jL.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-stock-issue-batch-form.component-CneSorqd.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-BoJjioLF.mjs.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, effect, input, output } from "@angular/core";
|
|
3
|
+
import { TechlifyListingControllerInterface } from 'ngx-techlify-core';
|
|
4
|
+
import { UntilDestroy } from "@ngneat/until-destroy";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../stock-issue-product.service";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "ngx-techlify-core";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "@angular/material/sort";
|
|
11
|
+
import * as i6 from "@angular/material/table";
|
|
12
|
+
import * as i7 from "@angular/material/card";
|
|
13
|
+
import * as i8 from "@angular/material/tooltip";
|
|
14
|
+
import * as i9 from "@angular/material/progress-bar";
|
|
15
|
+
import * as i10 from "ngx-infinite-scroll";
|
|
16
|
+
import * as i11 from "@angular/router";
|
|
17
|
+
import * as i12 from "../../product/widgets/product-category-badges/product-category-badges.component";
|
|
18
|
+
import * as i13 from "../stock-issue-product-form/stock-issue-product-form-button/stock-issue-product-form-button.component";
|
|
19
|
+
let ItemizedStockIssueProductsListComponent = class ItemizedStockIssueProductsListComponent extends TechlifyListingControllerInterface {
|
|
20
|
+
service;
|
|
21
|
+
formBuilder;
|
|
22
|
+
featureService;
|
|
23
|
+
filters = input({});
|
|
24
|
+
isProductView = input(false);
|
|
25
|
+
selectedColumns = input([]);
|
|
26
|
+
exportInProgress = input(false);
|
|
27
|
+
listUpdated = output();
|
|
28
|
+
columnConfigReady = output();
|
|
29
|
+
productViewHiddenColumns = ['product', 'sku', 'measure'];
|
|
30
|
+
_defaultSelectedColumns = [];
|
|
31
|
+
columnConfig = [
|
|
32
|
+
{ label: '#', def: 'no', isSelected: true, isEditable: false },
|
|
33
|
+
{ label: 'IID', def: 'iid', isSelected: true, isEditable: false },
|
|
34
|
+
{ label: 'Product', def: 'product', isSelected: true, isEditable: false },
|
|
35
|
+
{ label: 'Product Categories', def: 'product_categories', isSelected: false, isEditable: true, isExportable: false },
|
|
36
|
+
{ label: 'Categories', def: 'categories', isSelected: false, isEditable: false, isExportable: true },
|
|
37
|
+
{ label: 'SKU', def: 'sku', isSelected: true, isEditable: false },
|
|
38
|
+
{ label: 'Date', def: 'date', isSelected: true, isEditable: false },
|
|
39
|
+
{ label: 'Quantity', def: 'quantity', isSelected: true, isEditable: false },
|
|
40
|
+
{ label: 'Measure', def: 'measure', isSelected: true, isEditable: true },
|
|
41
|
+
{ label: 'Location', def: 'location', isSelected: true, isEditable: false },
|
|
42
|
+
{ label: 'Related', def: 'related', isSelected: true, isEditable: false },
|
|
43
|
+
{ label: 'Particulars', def: 'particulars', isSelected: true, isEditable: false },
|
|
44
|
+
{ label: 'Creator', def: 'creator', isSelected: false, isEditable: true },
|
|
45
|
+
{ label: 'Actions', def: 'actions', isSelected: true, isEditable: false, isExportable: false },
|
|
46
|
+
];
|
|
47
|
+
get displayedColumns() {
|
|
48
|
+
const cols = this.selectedColumns().length > 0 ? this.selectedColumns() : this._defaultSelectedColumns;
|
|
49
|
+
const selectedDefs = new Set(cols.map(col => col.def));
|
|
50
|
+
return this.columnConfig.filter(col => {
|
|
51
|
+
if (this.isProductView() && this.productViewHiddenColumns.includes(col.def)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (this.exportInProgress()) {
|
|
55
|
+
if (col.isExportable === true) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
if (col.isExportable === false) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return selectedDefs.has(col.def);
|
|
63
|
+
}).map(col => col.def);
|
|
64
|
+
}
|
|
65
|
+
get totalQuantity() {
|
|
66
|
+
return this.models.reduce((sum, model) => sum + Number(model?.quantity ?? 0), 0);
|
|
67
|
+
}
|
|
68
|
+
get footerColumns() {
|
|
69
|
+
return this.displayedColumns.map(col => `footer-${col}`);
|
|
70
|
+
}
|
|
71
|
+
constructor(service, formBuilder, featureService) {
|
|
72
|
+
super();
|
|
73
|
+
this.service = service;
|
|
74
|
+
this.formBuilder = formBuilder;
|
|
75
|
+
this.featureService = featureService;
|
|
76
|
+
this.filterFormConfiguration = {
|
|
77
|
+
date_from: { date: true },
|
|
78
|
+
date_to: { date: true },
|
|
79
|
+
category_ids: { multiple: true },
|
|
80
|
+
location_ids: { multiple: true },
|
|
81
|
+
measure_ids: { multiple: true },
|
|
82
|
+
product_ids: { multiple: true },
|
|
83
|
+
};
|
|
84
|
+
this.filterForm = this.formBuilder.group({
|
|
85
|
+
category_ids: [''],
|
|
86
|
+
date_from: [''],
|
|
87
|
+
date_to: [''],
|
|
88
|
+
duration: [''],
|
|
89
|
+
location_ids: [''],
|
|
90
|
+
measure_ids: [''],
|
|
91
|
+
product_ids: [''],
|
|
92
|
+
search: [''],
|
|
93
|
+
sort_by: ['date|desc'],
|
|
94
|
+
page: this.page,
|
|
95
|
+
perPage: this.perPage,
|
|
96
|
+
});
|
|
97
|
+
let initialized = false;
|
|
98
|
+
effect(() => {
|
|
99
|
+
const filters = this.filters();
|
|
100
|
+
if (!initialized) {
|
|
101
|
+
initialized = true;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.filterForm.patchValue(filters, { emitEvent: true });
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
ngOnInit() {
|
|
108
|
+
this.loadFeatures();
|
|
109
|
+
this._defaultSelectedColumns = this.columnConfig.filter(col => col.isSelected);
|
|
110
|
+
this.columnConfigReady.emit(this.columnConfig);
|
|
111
|
+
const initialFilters = this.filters();
|
|
112
|
+
if (initialFilters) {
|
|
113
|
+
this.filterForm.patchValue(initialFilters, { emitEvent: false });
|
|
114
|
+
}
|
|
115
|
+
this.patchFiltersFromRoute();
|
|
116
|
+
this.listenFilterChanges();
|
|
117
|
+
this.loadData();
|
|
118
|
+
}
|
|
119
|
+
loadFeatures() {
|
|
120
|
+
if (this.featureService.isFeatureExists('product-batch-numbers')) {
|
|
121
|
+
const qtyIndex = this.columnConfig.findIndex(c => c.def === 'quantity');
|
|
122
|
+
if (qtyIndex >= 0) {
|
|
123
|
+
this.columnConfig.splice(qtyIndex + 1, 0, { label: 'Batch', def: 'batch', isSelected: true, isEditable: false });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ItemizedStockIssueProductsListComponent, deps: [{ token: i1.StockIssueProductService }, { token: i2.FormBuilder }, { token: i3.TechlifyFeatureService }], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ItemizedStockIssueProductsListComponent, selector: "app-itemized-stock-issue-products-list", inputs: { filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, isProductView: { classPropertyName: "isProductView", publicName: "isProductView", isSignal: true, isRequired: false, transformFunction: null }, selectedColumns: { classPropertyName: "selectedColumns", publicName: "selectedColumns", isSignal: true, isRequired: false, transformFunction: null }, exportInProgress: { classPropertyName: "exportInProgress", publicName: "exportInProgress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { listUpdated: "listUpdated", columnConfigReady: "columnConfigReady" }, usesInheritance: true, ngImport: i0, template: "<mat-card>\n <mat-card-header *ngIf=\"isProductView()\" class=\"d-flex align-items-center gap-2\">\n <mat-card-title>Stock Issues</mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\" aria-describedby=\"Stock Issue Products\" infiniteScroll\n id=\"stockIssueTable\" [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" matSort\n (matSortChange)=\"sortColumn($event)\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"no\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- IID Column -->\n <ng-container matColumnDef=\"iid\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"Stock Issue ID\">IID</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-decoration-none text-dark\"\n [routerLink]=\"['/inventory/stock-issues', element?.stock_issue_id, 'view']\">\n {{ element?.stock_issue_id }}\n </a>\n </td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-decoration-none text-dark\"\n [routerLink]=\"['/inventory/products', element?.product?.id, 'view']\">\n {{ element?.product?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Product Categories Column -->\n <ng-container matColumnDef=\"product_categories\">\n <th mat-header-cell *matHeaderCellDef>Product Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element?.product\"></app-product-category-badges>\n </td>\n </ng-container>\n\n <!-- Categories Column (export only) -->\n <ng-container matColumnDef=\"categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <span *ngFor=\"let category of element?.product?.categories; let last = last\">\n {{ category?.title }}<ng-container *ngIf=\"!last\">, </ng-container>\n </span>\n </td>\n </ng-container>\n\n <!-- SKU Column -->\n <ng-container matColumnDef=\"sku\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.sku }}</td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Date</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.stock_issue?.date | date }}</td>\n </ng-container>\n\n <!-- Quantity Column -->\n <ng-container matColumnDef=\"quantity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Quantity</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.quantity }} {{ element?.product?.measure?.title }}\n </td>\n </ng-container>\n\n <!-- Batch Column -->\n <ng-container matColumnDef=\"batch\">\n <th mat-header-cell *matHeaderCellDef>Batch</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\" *ngIf=\"element?.batch?.batch_number\">{{ element?.batch?.batch_number }}</p>\n <small class=\"text-secondary\" *ngIf=\"element?.batch?.expires_on\">\n Expires {{ element?.batch?.expires_on | date }}\n </small>\n </td>\n </ng-container>\n\n <!-- Measure Column -->\n <ng-container matColumnDef=\"measure\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Measure</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.measure?.title }}</td>\n </ng-container>\n\n <!-- Location Column -->\n <ng-container matColumnDef=\"location\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Location</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-decoration-none text-dark\"\n [routerLink]=\"['/inventory/locations', element?.location_id, 'view']\">\n {{ element?.location?.title }}\n </a>\n </td>\n </ng-container>\n\n <!-- Related Column -->\n <ng-container matColumnDef=\"related\">\n <th mat-header-cell *matHeaderCellDef>Related</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-dark\" *ngIf=\"element?.stock_issue?.issuable\"\n [routerLink]=\"['/maintenances', element?.stock_issue?.issuable_id, 'view']\">\n Maintenance for {{ element?.stock_issue?.issuable?.fixed_asset?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Particulars Column -->\n <ng-container matColumnDef=\"particulars\">\n <th mat-header-cell *matHeaderCellDef>Particulars</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.particulars }}</td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator\">\n <th mat-header-cell *matHeaderCellDef>Creator</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-1\">{{ element?.stock_issue?.creator?.name }}</p>\n <small class=\"text-secondary\">{{ element?.stock_issue?.created_at | date }}</small>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex gap-1 text-secondary\">\n <app-techlify-icon name=\"view\" size=\"md\"\n [routerLink]=\"['/inventory', 'stock-issues', element?.stock_issue_id, 'view']\"></app-techlify-icon>\n <app-stock-issue-product-form-button [stockIssueProduct]=\"element\" [stockIssueId]=\"element?.stock_issue_id\"\n (saved)=\"reload()\">\n </app-stock-issue-product-form-button>\n <app-techlify-delete-button [service]=\"service\" [model]=\"element\"\n [data]='{title: element?.product?.name, type: \"Stock Issue Product\"}'\n (deleted)=\"reload()\"></app-techlify-delete-button>\n </div>\n </td>\n </ng-container>\n\n <!-- Footer Cells for Total Row -->\n <ng-container matColumnDef=\"footer-no\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-iid\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-product\">\n <td mat-footer-cell *matFooterCellDef><strong>Total</strong></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-product_categories\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-sku\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-categories\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-date\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-quantity\">\n <td mat-footer-cell *matFooterCellDef><strong>{{ totalQuantity }}</strong></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-batch\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-measure\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-location\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-related\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-particulars\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-creator\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-actions\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr mat-footer-row *matFooterRowDef=\"footerColumns\"></tr>\n </table>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i5.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i6.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i6.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i6.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: i11.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i12.ProductCategoryBadgesComponent, selector: "app-product-category-badges", inputs: ["product"] }, { kind: "component", type: i3.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: i13.StockIssueProductFormButtonComponent, selector: "app-stock-issue-product-form-button", inputs: ["stockIssueProduct", "stockIssueId"], outputs: ["saved"] }, { kind: "component", type: i3.TechlifyDeleteButtonComponent, selector: "app-techlify-delete-button", inputs: ["data", "model", "message", "service"], outputs: ["deleted"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }], preserveWhitespaces: true });
|
|
129
|
+
};
|
|
130
|
+
ItemizedStockIssueProductsListComponent = __decorate([
|
|
131
|
+
UntilDestroy()
|
|
132
|
+
], ItemizedStockIssueProductsListComponent);
|
|
133
|
+
export { ItemizedStockIssueProductsListComponent };
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ItemizedStockIssueProductsListComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ selector: 'app-itemized-stock-issue-products-list', template: "<mat-card>\n <mat-card-header *ngIf=\"isProductView()\" class=\"d-flex align-items-center gap-2\">\n <mat-card-title>Stock Issues</mat-card-title>\n </mat-card-header>\n\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\" aria-describedby=\"Stock Issue Products\" infiniteScroll\n id=\"stockIssueTable\" [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" matSort\n (matSortChange)=\"sortColumn($event)\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"no\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- IID Column -->\n <ng-container matColumnDef=\"iid\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"Stock Issue ID\">IID</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-decoration-none text-dark\"\n [routerLink]=\"['/inventory/stock-issues', element?.stock_issue_id, 'view']\">\n {{ element?.stock_issue_id }}\n </a>\n </td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-decoration-none text-dark\"\n [routerLink]=\"['/inventory/products', element?.product?.id, 'view']\">\n {{ element?.product?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Product Categories Column -->\n <ng-container matColumnDef=\"product_categories\">\n <th mat-header-cell *matHeaderCellDef>Product Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element?.product\"></app-product-category-badges>\n </td>\n </ng-container>\n\n <!-- Categories Column (export only) -->\n <ng-container matColumnDef=\"categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <span *ngFor=\"let category of element?.product?.categories; let last = last\">\n {{ category?.title }}<ng-container *ngIf=\"!last\">, </ng-container>\n </span>\n </td>\n </ng-container>\n\n <!-- SKU Column -->\n <ng-container matColumnDef=\"sku\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.sku }}</td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Date</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.stock_issue?.date | date }}</td>\n </ng-container>\n\n <!-- Quantity Column -->\n <ng-container matColumnDef=\"quantity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Quantity</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.quantity }} {{ element?.product?.measure?.title }}\n </td>\n </ng-container>\n\n <!-- Batch Column -->\n <ng-container matColumnDef=\"batch\">\n <th mat-header-cell *matHeaderCellDef>Batch</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\" *ngIf=\"element?.batch?.batch_number\">{{ element?.batch?.batch_number }}</p>\n <small class=\"text-secondary\" *ngIf=\"element?.batch?.expires_on\">\n Expires {{ element?.batch?.expires_on | date }}\n </small>\n </td>\n </ng-container>\n\n <!-- Measure Column -->\n <ng-container matColumnDef=\"measure\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Measure</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.product?.measure?.title }}</td>\n </ng-container>\n\n <!-- Location Column -->\n <ng-container matColumnDef=\"location\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Location</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-decoration-none text-dark\"\n [routerLink]=\"['/inventory/locations', element?.location_id, 'view']\">\n {{ element?.location?.title }}\n </a>\n </td>\n </ng-container>\n\n <!-- Related Column -->\n <ng-container matColumnDef=\"related\">\n <th mat-header-cell *matHeaderCellDef>Related</th>\n <td mat-cell *matCellDef=\"let element\">\n <a class=\"text-dark\" *ngIf=\"element?.stock_issue?.issuable\"\n [routerLink]=\"['/maintenances', element?.stock_issue?.issuable_id, 'view']\">\n Maintenance for {{ element?.stock_issue?.issuable?.fixed_asset?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Particulars Column -->\n <ng-container matColumnDef=\"particulars\">\n <th mat-header-cell *matHeaderCellDef>Particulars</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.particulars }}</td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator\">\n <th mat-header-cell *matHeaderCellDef>Creator</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-1\">{{ element?.stock_issue?.creator?.name }}</p>\n <small class=\"text-secondary\">{{ element?.stock_issue?.created_at | date }}</small>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex gap-1 text-secondary\">\n <app-techlify-icon name=\"view\" size=\"md\"\n [routerLink]=\"['/inventory', 'stock-issues', element?.stock_issue_id, 'view']\"></app-techlify-icon>\n <app-stock-issue-product-form-button [stockIssueProduct]=\"element\" [stockIssueId]=\"element?.stock_issue_id\"\n (saved)=\"reload()\">\n </app-stock-issue-product-form-button>\n <app-techlify-delete-button [service]=\"service\" [model]=\"element\"\n [data]='{title: element?.product?.name, type: \"Stock Issue Product\"}'\n (deleted)=\"reload()\"></app-techlify-delete-button>\n </div>\n </td>\n </ng-container>\n\n <!-- Footer Cells for Total Row -->\n <ng-container matColumnDef=\"footer-no\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-iid\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-product\">\n <td mat-footer-cell *matFooterCellDef><strong>Total</strong></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-product_categories\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-sku\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-categories\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-date\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-quantity\">\n <td mat-footer-cell *matFooterCellDef><strong>{{ totalQuantity }}</strong></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-batch\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-measure\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-location\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-related\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-particulars\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-creator\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <ng-container matColumnDef=\"footer-actions\">\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr mat-footer-row *matFooterRowDef=\"footerColumns\"></tr>\n </table>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>" }]
|
|
137
|
+
}], ctorParameters: () => [{ type: i1.StockIssueProductService }, { type: i2.FormBuilder }, { type: i3.TechlifyFeatureService }] });
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbWl6ZWQtc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdG9jay1pc3N1YW5jZXMvaXRlbWl6ZWQtc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC9pdGVtaXplZC1zdG9jay1pc3N1ZS1wcm9kdWN0cy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3N0b2NrLWlzc3VhbmNlcy9pdGVtaXplZC1zdG9jay1pc3N1ZS1wcm9kdWN0cy1saXN0L2l0ZW1pemVkLXN0b2NrLWlzc3VlLXByb2R1Y3RzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUVMLGtDQUFrQyxFQUNuQyxNQUFNLG1CQUFtQixDQUFDO0FBRzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUTlDLElBQU0sdUNBQXVDLEdBQTdDLE1BQU0sdUNBQXdDLFNBQVEsa0NBQWtDO0lBd0R4RTtJQUNYO0lBQ0E7SUF6RFYsT0FBTyxHQUFHLEtBQUssQ0FBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixhQUFhLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLGVBQWUsR0FBRyxLQUFLLENBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLGdCQUFnQixHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QyxXQUFXLEdBQUcsTUFBTSxFQUFP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QUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7d0dBdEhVLHVDQUF1Qzs0RkFBdkMsdUNBQXVDLCt2QkNmcEQsK3lSQXVOVzs7QUR4TUUsdUNBQXVDO0lBTm5ELFlBQVksRUFBRTtHQU1GLHVDQUF1QyxDQXVIbkQ7OzRGQXZIWSx1Q0FBdUM7a0JBTG5ELFNBQVM7K0JBQ0Usd0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGVmZmVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBDb2x1bW5Db25maWcsIFRlY2hsaWZ5RmVhdHVyZVNlcnZpY2UsXG4gIFRlY2hsaWZ5TGlzdGluZ0NvbnRyb2xsZXJJbnRlcmZhY2Vcbn0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgU3RvY2tJc3N1ZVByb2R1Y3RTZXJ2aWNlIH0gZnJvbSBcIi4uL3N0b2NrLWlzc3VlLXByb2R1Y3Quc2VydmljZVwiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFVudGlsRGVzdHJveSB9IGZyb20gXCJAbmduZWF0L3VudGlsLWRlc3Ryb3lcIjtcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaXRlbWl6ZWQtc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtaXplZC1zdG9jay1pc3N1ZS1wcm9kdWN0cy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbWl6ZWQtc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJdGVtaXplZFN0b2NrSXNzdWVQcm9kdWN0c0xpc3RDb21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZmlsdGVycyA9IGlucHV0PGFueT4oe30pO1xuICBpc1Byb2R1Y3RWaWV3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzZWxlY3RlZENvbHVtbnMgPSBpbnB1dDxDb2x1bW5Db25maWdbXT4oW10pO1xuICBleHBvcnRJblByb2dyZXNzID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBsaXN0VXBkYXRlZCA9IG91dHB1dDxhbnk+KCk7XG4gIGNvbHVtbkNvbmZpZ1JlYWR5ID0gb3V0cHV0PENvbHVtbkNvbmZpZ1tdPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFZpZXdIaWRkZW5Db2x1bW5zID0gWydwcm9kdWN0JywgJ3NrdScsICdtZWFzdXJlJ107XG4gIHByaXZhdGUgX2RlZmF1bHRTZWxlY3RlZENvbHVtbnM6IENvbHVtbkNvbmZpZ1tdID0gW107XG5cbiAgY29sdW1uQ29uZmlnOiBDb2x1bW5Db25maWdbXSA9IFtcbiAgICB7IGxhYmVsOiAnIycsIGRlZjogJ25vJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnSUlEJywgZGVmOiAnaWlkJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUHJvZHVjdCcsIGRlZjogJ3Byb2R1Y3QnLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdQcm9kdWN0IENhdGVnb3JpZXMnLCBkZWY6ICdwcm9kdWN0X2NhdGVnb3JpZXMnLCBpc1NlbGVjdGVkOiBmYWxzZSwgaXNFZGl0YWJsZTogdHJ1ZSwgaXNFeHBvcnRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdDYXRlZ29yaWVzJywgZGVmOiAnY2F0ZWdvcmllcycsIGlzU2VsZWN0ZWQ6IGZhbHNlLCBpc0VkaXRhYmxlOiBmYWxzZSwgaXNFeHBvcnRhYmxlOiB0cnVlIH0sXG4gICAgeyBsYWJlbDogJ1NLVScsIGRlZjogJ3NrdScsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ0RhdGUnLCBkZWY6ICdkYXRlJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUXVhbnRpdHknLCBkZWY6ICdxdWFudGl0eScsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ01lYXN1cmUnLCBkZWY6ICdtZWFzdXJlJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogdHJ1ZSB9LFxuICAgIHsgbGFiZWw6ICdMb2NhdGlvbicsIGRlZjogJ2xvY2F0aW9uJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUmVsYXRlZCcsIGRlZjogJ3JlbGF0ZWQnLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdQYXJ0aWN1bGFycycsIGRlZjogJ3BhcnRpY3VsYXJzJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnQ3JlYXRvcicsIGRlZjogJ2NyZWF0b3InLCBpc1NlbGVjdGVkOiBmYWxzZSwgaXNFZGl0YWJsZTogdHJ1ZSB9LFxuICAgIHsgbGFiZWw6ICdBY3Rpb25zJywgZGVmOiAnYWN0aW9ucycsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlLCBpc0V4cG9ydGFibGU6IGZhbHNlIH0sXG4gIF07XG5cbiAgZ2V0IGRpc3BsYXllZENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucygpLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkQ29sdW1ucygpIDogdGhpcy5fZGVmYXVsdFNlbGVjdGVkQ29sdW1ucztcbiAgICBjb25zdCBzZWxlY3RlZERlZnMgPSBuZXcgU2V0KGNvbHMubWFwKGNvbCA9PiBjb2wuZGVmKSk7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uQ29uZmlnLmZpbHRlcihjb2wgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNQcm9kdWN0VmlldygpICYmIHRoaXMucHJvZHVjdFZpZXdIaWRkZW5Db2x1bW5zLmluY2x1ZGVzKGNvbC5kZWYpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmV4cG9ydEluUHJvZ3Jlc3MoKSkge1xuICAgICAgICBpZiAoY29sLmlzRXhwb3J0YWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuaXNFeHBvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdGVkRGVmcy5oYXMoY29sLmRlZik7XG4gICAgfSkubWFwKGNvbCA9PiBjb2wuZGVmKTtcbiAgfVxuXG4gIGdldCB0b3RhbFF1YW50aXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxzLnJlZHVjZSgoc3VtLCBtb2RlbCkgPT4gc3VtICsgTnVtYmVyKG1vZGVsPy5xdWFudGl0eSA/PyAwKSwgMCk7XG4gIH1cblxuICBnZXQgZm9vdGVyQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoY29sID0+IGBmb290ZXItJHtjb2x9YCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2VydmljZTogU3RvY2tJc3N1ZVByb2R1Y3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZmVhdHVyZVNlcnZpY2U6IFRlY2hsaWZ5RmVhdHVyZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZmlsdGVyRm9ybUNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBkYXRlX2Zyb206IHsgZGF0ZTogdHJ1ZSB9LFxuICAgICAgZGF0ZV90bzogeyBkYXRlOiB0cnVlIH0sXG4gICAgICBjYXRlZ29yeV9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIGxvY2F0aW9uX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgbWVhc3VyZV9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICAgIHByb2R1Y3RfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgfTtcblxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgY2F0ZWdvcnlfaWRzOiBbJyddLFxuICAgICAgZGF0ZV9mcm9tOiBbJyddLFxuICAgICAgZGF0ZV90bzogWycnXSxcbiAgICAgIGR1cmF0aW9uOiBbJyddLFxuICAgICAgbG9jYXRpb25faWRzOiBbJyddLFxuICAgICAgbWVhc3VyZV9pZHM6IFsnJ10sXG4gICAgICBwcm9kdWN0X2lkczogWycnXSxcbiAgICAgIHNlYXJjaDogWycnXSxcbiAgICAgIHNvcnRfYnk6IFsnZGF0ZXxkZXNjJ10sXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwZXJQYWdlOiB0aGlzLnBlclBhZ2UsXG4gICAgfSk7XG5cbiAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVycygpO1xuICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKGZpbHRlcnMsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRmVhdHVyZXMoKTtcbiAgICB0aGlzLl9kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5Db25maWcuZmlsdGVyKGNvbCA9PiBjb2wuaXNTZWxlY3RlZCk7XG4gICAgdGhpcy5jb2x1bW5Db25maWdSZWFkeS5lbWl0KHRoaXMuY29sdW1uQ29uZmlnKTtcblxuICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzID0gdGhpcy5maWx0ZXJzKCk7XG4gICAgaWYgKGluaXRpYWxGaWx0ZXJzKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucGF0Y2hWYWx1ZShpbml0aWFsRmlsdGVycywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHRoaXMucGF0Y2hGaWx0ZXJzRnJvbVJvdXRlKCk7XG4gICAgdGhpcy5saXN0ZW5GaWx0ZXJDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRmVhdHVyZXMoKSB7XG4gICAgaWYgKHRoaXMuZmVhdHVyZVNlcnZpY2UuaXNGZWF0dXJlRXhpc3RzKCdwcm9kdWN0LWJhdGNoLW51bWJlcnMnKSkge1xuICAgICAgY29uc3QgcXR5SW5kZXggPSB0aGlzLmNvbHVtbkNvbmZpZy5maW5kSW5kZXgoYyA9PiBjLmRlZiA9PT0gJ3F1YW50aXR5Jyk7XG4gICAgICBpZiAocXR5SW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5zcGxpY2UocXR5SW5kZXggKyAxLCAwLCB7IGxhYmVsOiAnQmF0Y2gnLCBkZWY6ICdiYXRjaCcsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1jYXJkPlxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwiaXNQcm9kdWN0VmlldygpXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlN0b2NrIElzc3VlczwvbWF0LWNhcmQtdGl0bGU+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuXG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0wXCI+XG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJtb2RlbHNcIiBjbGFzcz1cInctMTAwXCIgYXJpYS1kZXNjcmliZWRieT1cIlN0b2NrIElzc3VlIFByb2R1Y3RzXCIgaW5maW5pdGVTY3JvbGxcbiAgICAgIGlkPVwic3RvY2tJc3N1ZVRhYmxlXCIgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiMlwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cIjUwXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsKClcIiBtYXRTb3J0XG4gICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q29sdW1uKCRldmVudClcIj5cblxuICAgICAgPCEtLSAjIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibm9cIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4jPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJSUQgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpaWRcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwiU3RvY2sgSXNzdWUgSURcIj5JSUQ8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgdGV4dC1kYXJrXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2ludmVudG9yeS9zdG9jay1pc3N1ZXMnLCBlbGVtZW50Py5zdG9ja19pc3N1ZV9pZCwgJ3ZpZXcnXVwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8uc3RvY2tfaXNzdWVfaWQgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBQcm9kdWN0IENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicHJvZHVjdFwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5Qcm9kdWN0PC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIHRleHQtZGFya1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvcHJvZHVjdHMnLCBlbGVtZW50Py5wcm9kdWN0Py5pZCwgJ3ZpZXcnXVwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8ucHJvZHVjdD8ubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFByb2R1Y3QgQ2F0ZWdvcmllcyBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInByb2R1Y3RfY2F0ZWdvcmllc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlByb2R1Y3QgQ2F0ZWdvcmllczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGFwcC1wcm9kdWN0LWNhdGVnb3J5LWJhZGdlcyBbcHJvZHVjdF09XCJlbGVtZW50Py5wcm9kdWN0XCI+PC9hcHAtcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXM+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDYXRlZ29yaWVzIENvbHVtbiAoZXhwb3J0IG9ubHkpIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjYXRlZ29yaWVzXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+Q2F0ZWdvcmllczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGVsZW1lbnQ/LnByb2R1Y3Q/LmNhdGVnb3JpZXM7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAge3sgY2F0ZWdvcnk/LnRpdGxlIH19PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBTS1UgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJza3VcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+U0tVPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5wcm9kdWN0Py5za3UgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRGF0ZSBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImRhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+RGF0ZTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8uc3RvY2tfaXNzdWU/LmRhdGUgfCBkYXRlIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFF1YW50aXR5IENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicXVhbnRpdHlcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+UXVhbnRpdHk8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIHt7IGVsZW1lbnQ/LnF1YW50aXR5IH19IHt7IGVsZW1lbnQ/LnByb2R1Y3Q/Lm1lYXN1cmU/LnRpdGxlIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBCYXRjaCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImJhdGNoXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QmF0Y2g8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiICpuZ0lmPVwiZWxlbWVudD8uYmF0Y2g/LmJhdGNoX251bWJlclwiPnt7IGVsZW1lbnQ/LmJhdGNoPy5iYXRjaF9udW1iZXIgfX08L3A+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiAqbmdJZj1cImVsZW1lbnQ/LmJhdGNoPy5leHBpcmVzX29uXCI+XG4gICAgICAgICAgICBFeHBpcmVzIHt7IGVsZW1lbnQ/LmJhdGNoPy5leHBpcmVzX29uIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBNZWFzdXJlIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibWVhc3VyZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5NZWFzdXJlPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5wcm9kdWN0Py5tZWFzdXJlPy50aXRsZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBMb2NhdGlvbiBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxvY2F0aW9uXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPkxvY2F0aW9uPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIHRleHQtZGFya1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvbG9jYXRpb25zJywgZWxlbWVudD8ubG9jYXRpb25faWQsICd2aWV3J11cIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LmxvY2F0aW9uPy50aXRsZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFJlbGF0ZWQgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZWxhdGVkXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+UmVsYXRlZDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJ0ZXh0LWRhcmtcIiAqbmdJZj1cImVsZW1lbnQ/LnN0b2NrX2lzc3VlPy5pc3N1YWJsZVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tYWludGVuYW5jZXMnLCBlbGVtZW50Py5zdG9ja19pc3N1ZT8uaXNzdWFibGVfaWQsICd2aWV3J11cIj5cbiAgICAgICAgICAgIE1haW50ZW5hbmNlIGZvciB7eyBlbGVtZW50Py5zdG9ja19pc3N1ZT8uaXNzdWFibGU/LmZpeGVkX2Fzc2V0Py5uYW1lIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gUGFydGljdWxhcnMgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwYXJ0aWN1bGFyc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlBhcnRpY3VsYXJzPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5wYXJ0aWN1bGFycyB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDcmVhdG9yIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY3JlYXRvclwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkNyZWF0b3I8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IGVsZW1lbnQ/LnN0b2NrX2lzc3VlPy5jcmVhdG9yPy5uYW1lIH19PC9wPlxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+e3sgZWxlbWVudD8uc3RvY2tfaXNzdWU/LmNyZWF0ZWRfYXQgfCBkYXRlIH19PC9zbWFsbD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEFjdGlvbnMgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QWN0aW9uczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMSB0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgPGFwcC10ZWNobGlmeS1pY29uIG5hbWU9XCJ2aWV3XCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5JywgJ3N0b2NrLWlzc3VlcycsIGVsZW1lbnQ/LnN0b2NrX2lzc3VlX2lkLCAndmlldyddXCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cbiAgICAgICAgICAgIDxhcHAtc3RvY2staXNzdWUtcHJvZHVjdC1mb3JtLWJ1dHRvbiBbc3RvY2tJc3N1ZVByb2R1Y3RdPVwiZWxlbWVudFwiIFtzdG9ja0lzc3VlSWRdPVwiZWxlbWVudD8uc3RvY2tfaXNzdWVfaWRcIlxuICAgICAgICAgICAgICAoc2F2ZWQpPVwicmVsb2FkKClcIj5cbiAgICAgICAgICAgIDwvYXBwLXN0b2NrLWlzc3VlLXByb2R1Y3QtZm9ybS1idXR0b24+XG4gICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWRlbGV0ZS1idXR0b24gW3NlcnZpY2VdPVwic2VydmljZVwiIFttb2RlbF09XCJlbGVtZW50XCJcbiAgICAgICAgICAgICAgW2RhdGFdPSd7dGl0bGU6IGVsZW1lbnQ/LnByb2R1Y3Q/Lm5hbWUsIHR5cGU6IFwiU3RvY2sgSXNzdWUgUHJvZHVjdFwifSdcbiAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwicmVsb2FkKClcIj48L2FwcC10ZWNobGlmeS1kZWxldGUtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRm9vdGVyIENlbGxzIGZvciBUb3RhbCBSb3cgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1ub1wiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItaWlkXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1wcm9kdWN0XCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PHN0cm9uZz5Ub3RhbDwvc3Ryb25nPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItcHJvZHVjdF9jYXRlZ29yaWVzXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1za3VcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLWNhdGVnb3JpZXNcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLWRhdGVcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLXF1YW50aXR5XCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PHN0cm9uZz57eyB0b3RhbFF1YW50aXR5IH19PC9zdHJvbmc+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1iYXRjaFwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItbWVhc3VyZVwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItbG9jYXRpb25cIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLXJlbGF0ZWRcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLXBhcnRpY3VsYXJzXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1jcmVhdG9yXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJmb290ZXJDb2x1bW5zXCI+PC90cj5cbiAgICA8L3RhYmxlPlxuXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJpc1dvcmtpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=
|
|
@@ -25,14 +25,17 @@ export class StockIssueBatchFormComponent extends TechlifyFormComponentInterface
|
|
|
25
25
|
fb;
|
|
26
26
|
stockIssueService;
|
|
27
27
|
router;
|
|
28
|
+
route;
|
|
28
29
|
locationService;
|
|
29
30
|
locationCount = signal(0);
|
|
30
|
-
|
|
31
|
+
stockIssue = signal(null);
|
|
32
|
+
constructor(formValidatorService, fb, stockIssueService, router, route, locationService) {
|
|
31
33
|
super(formValidatorService);
|
|
32
34
|
this.formValidatorService = formValidatorService;
|
|
33
35
|
this.fb = fb;
|
|
34
36
|
this.stockIssueService = stockIssueService;
|
|
35
37
|
this.router = router;
|
|
38
|
+
this.route = route;
|
|
36
39
|
this.locationService = locationService;
|
|
37
40
|
this.form = this.fb.group({
|
|
38
41
|
date: [new Date(), Validators.compose([Validators.required])],
|
|
@@ -44,12 +47,48 @@ export class StockIssueBatchFormComponent extends TechlifyFormComponentInterface
|
|
|
44
47
|
this.locationService.count().subscribe((count) => {
|
|
45
48
|
this.locationCount.set(count);
|
|
46
49
|
});
|
|
50
|
+
const id = this.route.snapshot.paramMap.get('id');
|
|
51
|
+
if (id) {
|
|
52
|
+
this.loadStockIssue(+id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
loadStockIssue(id) {
|
|
56
|
+
this.isWorking = true;
|
|
57
|
+
this.stockIssueService.show(id, { with: 'stockIssueProducts.product' }).subscribe({
|
|
58
|
+
next: (response) => {
|
|
59
|
+
this.isWorking = false;
|
|
60
|
+
this.stockIssue.set(response.item);
|
|
61
|
+
},
|
|
62
|
+
error: () => {
|
|
63
|
+
this.isWorking = false;
|
|
64
|
+
},
|
|
65
|
+
complete: () => {
|
|
66
|
+
const issue = this.stockIssue();
|
|
67
|
+
this.form.patchValue({
|
|
68
|
+
date: issue.date ? new Date(issue.date) : new Date(),
|
|
69
|
+
particulars: issue.details,
|
|
70
|
+
});
|
|
71
|
+
this.stockIssueProducts.clear();
|
|
72
|
+
issue.stock_issue_products?.forEach((sip) => {
|
|
73
|
+
const group = this.createStockIssueProduct();
|
|
74
|
+
group.patchValue({
|
|
75
|
+
id: sip.id,
|
|
76
|
+
product_id: sip.product_id,
|
|
77
|
+
location_id: sip.location_id,
|
|
78
|
+
quantity: sip.quantity,
|
|
79
|
+
particulars: sip.particulars,
|
|
80
|
+
});
|
|
81
|
+
this.stockIssueProducts.push(group);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
47
85
|
}
|
|
48
86
|
get stockIssueProducts() {
|
|
49
87
|
return this.form.get('stock_issue_products');
|
|
50
88
|
}
|
|
51
89
|
createStockIssueProduct() {
|
|
52
90
|
return this.fb.group({
|
|
91
|
+
id: [''],
|
|
53
92
|
product_id: ['', Validators.required],
|
|
54
93
|
location_id: ['', this.locationCount() > 0 ? Validators.required : null],
|
|
55
94
|
quantity: [1, [Validators.required, Validators.min(1)]],
|
|
@@ -78,6 +117,7 @@ export class StockIssueBatchFormComponent extends TechlifyFormComponentInterface
|
|
|
78
117
|
}
|
|
79
118
|
const formData = this.form.getRawValue();
|
|
80
119
|
const data = {
|
|
120
|
+
id: this.stockIssue()?.id ?? null,
|
|
81
121
|
date: moment(formData.date).format('YYYY-MM-DD'),
|
|
82
122
|
details: formData.particulars,
|
|
83
123
|
products: formData.stock_issue_products.map((row) => ({
|
|
@@ -89,8 +129,11 @@ export class StockIssueBatchFormComponent extends TechlifyFormComponentInterface
|
|
|
89
129
|
}))
|
|
90
130
|
};
|
|
91
131
|
this.isWorking = true;
|
|
92
|
-
this.
|
|
93
|
-
|
|
132
|
+
const request$ = this.stockIssue()?.id
|
|
133
|
+
? this.stockIssueService.update(data)
|
|
134
|
+
: this.stockIssueService.store(data);
|
|
135
|
+
request$.subscribe({
|
|
136
|
+
next: () => {
|
|
94
137
|
this.isWorking = false;
|
|
95
138
|
this.alertService.addAlert('Stock issues saved successfully!', 'success');
|
|
96
139
|
this.router.navigate(['/inventory/stock-issues']);
|
|
@@ -103,7 +146,7 @@ export class StockIssueBatchFormComponent extends TechlifyFormComponentInterface
|
|
|
103
146
|
cancel() {
|
|
104
147
|
this.router.navigate(['/inventory/stock-issues']);
|
|
105
148
|
}
|
|
106
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueBatchFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.FormBuilder }, { token: i3.StockIssueService }, { token: i4.Router }, { token: i5.LocationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueBatchFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.FormBuilder }, { token: i3.StockIssueService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.LocationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
107
150
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueBatchFormComponent, isStandalone: true, selector: "app-stock-issue-batch-form", usesInheritance: true, ngImport: i0, template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-column gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Start Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n <mat-error *ngIf=\"isFieldValid('particulars')\">{{ getErrorMessage('particulars') }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline'\n formControlName=\"location_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class='fl-sm'>\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"1\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline'>\n <mat-label>Particulars</mat-label>\n <input matInput formControlName=\"particulars\">\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: SearchableSelectorModule }, { kind: "component", type: i1.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: LocationSelectorComponent, selector: "app-location-selector", inputs: ["appearance", "label", "placeholder", "includeNone"] }, { kind: "ngmodule", type: TechlifyIconModule }, { kind: "component", type: i1.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }], preserveWhitespaces: true });
|
|
108
151
|
}
|
|
109
152
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueBatchFormComponent, decorators: [{
|
|
@@ -116,5 +159,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
116
159
|
LocationSelectorComponent,
|
|
117
160
|
TechlifyIconModule
|
|
118
161
|
], template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-column gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Start Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n <mat-error *ngIf=\"isFieldValid('particulars')\">{{ getErrorMessage('particulars') }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline'\n formControlName=\"location_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class='fl-sm'>\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"1\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline'>\n <mat-label>Particulars</mat-label>\n <input matInput formControlName=\"particulars\">\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>\n" }]
|
|
119
|
-
}], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.FormBuilder }, { type: i3.StockIssueService }, { type: i4.Router }, { type: i5.LocationService }] });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtYmF0Y2gtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdG9jay1pc3N1YW5jZXMvc3RvY2staXNzdWUtYmF0Y2gtZm9ybS9zdG9jay1pc3N1ZS1iYXRjaC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3N0b2NrLWlzc3VhbmNlcy9zdG9jay1pc3N1ZS1iYXRjaC1mb3JtL3N0b2NrLWlzc3VlLWJhdGNoLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQXdCLDhCQUE4QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0csT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUd6RyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWlCNUIsTUFBTSxPQUFPLDRCQUE2QixTQUFRLDhCQUE4QjtJQUk3QztJQUNuQjtJQUNBO0lBQ0E7SUFDQTtJQU5aLGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFF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QUFDO0lBQ3RELENBQUM7d0dBM0ZRLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLDZHQzFCekMsNGdMQXVHQSwyQ0R0RlEsWUFBWSwrUEFDWixtQkFBbUIsb3REQUNuQixjQUFjLDBtRUFDZCx3QkFBd0IsbWhCQUN4Qix5QkFBeUIsZ0lBQ3pCLGtCQUFrQjs7NEZBSWIsNEJBQTRCO2tCQWR4QyxTQUFTOytCQUNJLDRCQUE0QixjQUUxQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2Qsd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLGtCQUFrQjtxQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdG9yU2VydmljZSwgVGVjaGxpZnlGb3JtQ29tcG9uZW50SW50ZXJmYWNlLCBUZWNobGlmeUljb25Nb2R1bGUgfSBmcm9tIFwibmd4LXRlY2hsaWZ5LWNvcmVcIjtcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTZWFyY2hhYmxlU2VsZWN0b3JNb2R1bGUgfSBmcm9tICduZ3gtdGVjaGxpZnktY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvblNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbG9jYXRpb24vbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFN0b2NrSXNzdWVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvY2staXNzdWUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYXRpb24vbG9jYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXN0b2NrLWlzc3VlLWJhdGNoLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdG9jay1pc3N1ZS1iYXRjaC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICAgICAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxuICAgICAgICBMb2NhdGlvblNlbGVjdG9yQ29tcG9uZW50LFxuICAgICAgICBUZWNobGlmeUljb25Nb2R1bGVcbiAgICBdXG59KVxuXG5leHBvcnQgY2xhc3MgU3RvY2tJc3N1ZUJhdGNoRm9ybUNvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5Rm9ybUNvbXBvbmVudEludGVyZmFjZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBsb2NhdGlvbkNvdW50ID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3ZlcnJpZGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBzdG9ja0lzc3VlU2VydmljZTogU3RvY2tJc3N1ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybVZhbGlkYXRvclNlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgZGF0ZTogW25ldyBEYXRlKCksIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIHBhcnRpY3VsYXJzOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIHN0b2NrX2lzc3VlX3Byb2R1Y3RzOiB0aGlzLmZiLmFycmF5KFtdKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvblNlcnZpY2UuY291bnQoKS5zdWJzY3JpYmUoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25Db3VudC5zZXQoY291bnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgc3RvY2tJc3N1ZVByb2R1Y3RzKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzdG9ja19pc3N1ZV9wcm9kdWN0cycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBjcmVhdGVTdG9ja0lzc3VlUHJvZHVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgcHJvZHVjdF9pZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBbJycsIHRoaXMubG9jYXRpb25Db3VudCgpID4gMCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsXSxcbiAgICAgICAgICAgIHF1YW50aXR5OiBbMSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDEpXV0sXG4gICAgICAgICAgICBwYXJ0aWN1bGFyczogWycnXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRTdG9ja0lzc3VlUHJvZHVjdCgpIHtcbiAgICAgICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMucHVzaCh0aGlzLmNyZWF0ZVN0b2NrSXNzdWVQcm9kdWN0KCkpO1xuICAgIH1cblxuICAgIHJlbW92ZVN0b2NrSXNzdWVQcm9kdWN0KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIGNsZWFyUHJvZHVjdHMoKSB7XG4gICAgICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnUGxlYXNlIGNoZWNrIHRoZSBmb3JtIGZvciBlcnJvcnMuJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnUGxlYXNlIGFkZCBhdCBsZWFzdCBvbmUgcHJvZHVjdC4nLCAnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgICAgICAgIGRhdGU6IG1vbWVudChmb3JtRGF0YS5kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcbiAgICAgICAgICAgIGRldGFpbHM6IGZvcm1EYXRhLnBhcnRpY3VsYXJzLFxuICAgICAgICAgICAgcHJvZHVjdHM6IGZvcm1EYXRhLnN0b2NrX2lzc3VlX3Byb2R1Y3RzLm1hcCgocm93OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IHJvdy5wcm9kdWN0X2lkLFxuICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHJvdy5wcm9kdWN0X2lkLFxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiByb3cucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6IHJvdy5sb2NhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyczogcm93LnBhcnRpY3VsYXJzLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b2NrSXNzdWVTZXJ2aWNlLnN0b3JlKGRhdGEpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1N0b2NrIGlzc3VlcyBzYXZlZCBzdWNjZXNzZnVsbHkhJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9pbnZlbnRvcnkvc3RvY2staXNzdWVzJ10pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9pbnZlbnRvcnkvc3RvY2staXNzdWVzJ10pO1xuICAgIH1cbn1cbiIsIjxtYXQtY2FyZCBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBjb250YWluZXJcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0xXCI+XG4gICAgICAgICAgICA8aDU+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGFsaWduLW1pZGRsZVwiPnVwbG9hZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICBJc3N1ZSBTdG9ja1xuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZvcm0gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0nb3V0bGluZScgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TdGFydCBEYXRlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgcGxhY2Vob2xkZXI9XCJEYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdkYXRlJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ2RhdGUnKSB9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJyBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlBhcnRpY3VsYXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJQYXJ0aWN1bGFyc1wiIGZvcm1Db250cm9sTmFtZT1cInBhcnRpY3VsYXJzXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3BhcnRpY3VsYXJzJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3BhcnRpY3VsYXJzJykgfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtdC0zXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlByb2R1Y3Q8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwibG9jYXRpb25Db3VudCgpID4gMFwiIHNjb3BlPVwiY29sXCI+TG9jYXRpb248L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UXVhbnRpdHk8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+UGFydGljdWxhcnM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIHdpZHRoPVwiNTBcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5IGZvcm1BcnJheU5hbWU9XCJzdG9ja19pc3N1ZV9wcm9kdWN0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBzdG9ja0lzc3VlUHJvZHVjdHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyBpICsgMSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Qcm9kdWN0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9J2FwaS9wcm9kdWN0cycgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUZpZWxkPSduYW1lJyBbY2FjaGVdPVwidHJ1ZVwiIHJlcXVpcmVkPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsb2NhdGlvbkNvdW50KCkgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2NhdGlvbi1zZWxlY3RvciBhcHBlYXJhbmNlPSdvdXRsaW5lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb2NhdGlvbl9pZFwiPjwvYXBwLWxvY2F0aW9uLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0nb3V0bGluZScgY2xhc3M9J2ZsLXNtJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5RdWFudGl0eTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicXVhbnRpdHlcIiB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5QYXJ0aWN1bGFyczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicGFydGljdWxhcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC10ZWNobGlmeS1pY29uIHJvbGU9J2J1dHRvbicgbmFtZT0nZGVsZXRlJyAoY2xpY2spPVwicmVtb3ZlU3RvY2tJc3N1ZVByb2R1Y3QoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlbW92ZSByb3dcIj48L2FwcC10ZWNobGlmeS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDx0Zm9vdD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCIgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgZ2FwLTIganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGVhclByb2R1Y3RzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN0b2NrSXNzdWVQcm9kdWN0cy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ibG9jazwvbWF0LWljb24+IENMRUFSIEFMTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRTdG9ja0lzc3VlUHJvZHVjdCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQUREXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNXb3JraW5nXCIgbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmcgfHwgc3RvY2tJc3N1ZVByb2R1Y3RzLmxlbmd0aCA9PT0gMFwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Zvcm0+XG5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuIl19
|
|
162
|
+
}], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.FormBuilder }, { type: i3.StockIssueService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.LocationService }] });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtYmF0Y2gtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdG9jay1pc3N1YW5jZXMvc3RvY2staXNzdWUtYmF0Y2gtZm9ybS9zdG9jay1pc3N1ZS1iYXRjaC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3N0b2NrLWlzc3VhbmNlcy9zdG9jay1pc3N1ZS1iYXRjaC1mb3JtL3N0b2NrLWlzc3VlLWJhdGNoLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQXdCLDhCQUE4QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0csT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUd6RyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWlCNUIsTUFBTSxPQUFPLDRCQUE2QixTQUFRLDhCQUE4QjtJQUs3QztJQUNuQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBUlosYUFBYSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsQyxVQUFVLEdBQUcsTUFBTSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBRS9CLFlBQStCLG9CQUEwQyxFQUM3RCxFQUFlLEVBQ2YsaUJBQW9DLEVBQ3BDLE1BQWMsRUFDZCxLQUFxQixFQUNyQixlQUFnQztRQUV4QyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQVBELHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDN0QsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUl4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3RCLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzdELFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxFQUFVO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDOUUsSUFBSSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDakIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3BELFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTztpQkFDN0IsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDN0MsS0FBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDYixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQ1YsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO3dCQUMxQixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7d0JBQzVCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTt3QkFDdEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO3FCQUMvQixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQWMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDakIsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1IsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDckMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4RSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELHVCQUF1QixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4RSxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQVE7WUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJO1lBQ2pDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDaEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVU7Z0JBQ2xCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtnQkFDMUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO2dCQUN0QixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7Z0JBQzVCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVzthQUMvQixDQUFDLENBQUM7U0FDTixDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUU7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzt3R0F6SVEsNEJBQTRCOzRGQUE1Qiw0QkFBNEIsNkdDMUJ6Qyw0Z0xBdUdBLDJDRHRGUSxZQUFZLCtQQUNaLG1CQUFtQixvdERBQ25CLGNBQWMsMG1FQUNkLHdCQUF3QixtaEJBQ3hCLHlCQUF5QixnSUFDekIsa0JBQWtCOzs0RkFJYiw0QkFBNEI7a0JBZHhDLFNBQVM7K0JBQ0ksNEJBQTRCLGNBRTFCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsa0JBQWtCO3FCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLCBUZWNobGlmeUZvcm1Db21wb25lbnRJbnRlcmZhY2UsIFRlY2hsaWZ5SWNvbk1vZHVsZSB9IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi8uLi9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSB9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2NhdGlvbi9sb2NhdGlvbi1zZWxlY3Rvci9sb2NhdGlvbi1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RvY2tJc3N1ZVNlcnZpY2UgfSBmcm9tICcuLi9zdG9jay1pc3N1ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYXRpb24vbG9jYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXN0b2NrLWlzc3VlLWJhdGNoLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdG9jay1pc3N1ZS1iYXRjaC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICAgICAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxuICAgICAgICBMb2NhdGlvblNlbGVjdG9yQ29tcG9uZW50LFxuICAgICAgICBUZWNobGlmeUljb25Nb2R1bGVcbiAgICBdXG59KVxuXG5leHBvcnQgY2xhc3MgU3RvY2tJc3N1ZUJhdGNoRm9ybUNvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5Rm9ybUNvbXBvbmVudEludGVyZmFjZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBsb2NhdGlvbkNvdW50ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gICAgc3RvY2tJc3N1ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIG92ZXJyaWRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgc3RvY2tJc3N1ZVNlcnZpY2U6IFN0b2NrSXNzdWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NhdGlvblNlcnZpY2U6IExvY2F0aW9uU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihmb3JtVmFsaWRhdG9yU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBkYXRlOiBbbmV3IERhdGUoKSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgcGFydGljdWxhcnM6IFsnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgc3RvY2tfaXNzdWVfcHJvZHVjdHM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvY2F0aW9uU2VydmljZS5jb3VudCgpLnN1YnNjcmliZSgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbkNvdW50LnNldChjb3VudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkU3RvY2tJc3N1ZSgraWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkU3RvY2tJc3N1ZShpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9ja0lzc3VlU2VydmljZS5zaG93KGlkLCB7IHdpdGg6ICdzdG9ja0lzc3VlUHJvZHVjdHMucHJvZHVjdCcgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b2NrSXNzdWUuc2V0KHJlc3BvbnNlLml0ZW0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzc3VlID0gdGhpcy5zdG9ja0lzc3VlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICBkYXRlOiBpc3N1ZS5kYXRlID8gbmV3IERhdGUoaXNzdWUuZGF0ZSkgOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyczogaXNzdWUuZGV0YWlscyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgaXNzdWUuc3RvY2tfaXNzdWVfcHJvZHVjdHM/LmZvckVhY2goKHNpcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jcmVhdGVTdG9ja0lzc3VlUHJvZHVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBncm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzaXAuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkOiBzaXAucHJvZHVjdF9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBzaXAubG9jYXRpb25faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogc2lwLnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhcnM6IHNpcC5wYXJ0aWN1bGFycyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RzLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgc3RvY2tJc3N1ZVByb2R1Y3RzKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzdG9ja19pc3N1ZV9wcm9kdWN0cycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBjcmVhdGVTdG9ja0lzc3VlUHJvZHVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgaWQ6IFsnJ10sXG4gICAgICAgICAgICBwcm9kdWN0X2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbG9jYXRpb25faWQ6IFsnJywgdGhpcy5sb2NhdGlvbkNvdW50KCkgPiAwID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGxdLFxuICAgICAgICAgICAgcXVhbnRpdHk6IFsxLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMSldXSxcbiAgICAgICAgICAgIHBhcnRpY3VsYXJzOiBbJyddXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZFN0b2NrSXNzdWVQcm9kdWN0KCkge1xuICAgICAgICB0aGlzLnN0b2NrSXNzdWVQcm9kdWN0cy5wdXNoKHRoaXMuY3JlYXRlU3RvY2tJc3N1ZVByb2R1Y3QoKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RvY2tJc3N1ZVByb2R1Y3QoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnN0b2NrSXNzdWVQcm9kdWN0cy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgY2xlYXJQcm9kdWN0cygpIHtcbiAgICAgICAgdGhpcy5zdG9ja0lzc3VlUHJvZHVjdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBzYXZlKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdQbGVhc2UgY2hlY2sgdGhlIGZvcm0gZm9yIGVycm9ycy4nLCAnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0b2NrSXNzdWVQcm9kdWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdQbGVhc2UgYWRkIGF0IGxlYXN0IG9uZSBwcm9kdWN0LicsICdlcnJvcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuc3RvY2tJc3N1ZSgpPy5pZCA/PyBudWxsLFxuICAgICAgICAgICAgZGF0ZTogbW9tZW50KGZvcm1EYXRhLmRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgICAgICAgZGV0YWlsczogZm9ybURhdGEucGFydGljdWxhcnMsXG4gICAgICAgICAgICBwcm9kdWN0czogZm9ybURhdGEuc3RvY2tfaXNzdWVfcHJvZHVjdHMubWFwKChyb3c6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogcm93LnByb2R1Y3RfaWQsXG4gICAgICAgICAgICAgICAgcHJvZHVjdF9pZDogcm93LnByb2R1Y3RfaWQsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IHJvdy5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogcm93LmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHBhcnRpY3VsYXJzOiByb3cucGFydGljdWxhcnMsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QkID0gdGhpcy5zdG9ja0lzc3VlKCk/LmlkXG4gICAgICAgICAgICA/IHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2UudXBkYXRlKGRhdGEpXG4gICAgICAgICAgICA6IHRoaXMuc3RvY2tJc3N1ZVNlcnZpY2Uuc3RvcmUoZGF0YSk7XG5cbiAgICAgICAgcmVxdWVzdCQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdTdG9jayBpc3N1ZXMgc2F2ZWQgc3VjY2Vzc2Z1bGx5IScsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaW52ZW50b3J5L3N0b2NrLWlzc3VlcyddKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaW52ZW50b3J5L3N0b2NrLWlzc3VlcyddKTtcbiAgICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgY29udGFpbmVyXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMVwiPlxuICAgICAgICAgICAgPGg1PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBhbGlnbi1taWRkbGVcIj51cGxvYWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgSXNzdWUgU3RvY2tcbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKHN1Ym1pdCk9XCJzYXZlKClcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U3RhcnQgRGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIHBsYWNlaG9sZGVyPVwiRGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVcIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnZGF0ZScpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdkYXRlJykgfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0nb3V0bGluZScgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5QYXJ0aWN1bGFyczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiUGFydGljdWxhcnNcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0aWN1bGFyc1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdwYXJ0aWN1bGFycycpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCdwYXJ0aWN1bGFycycpIH19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbXQtM1wiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+IzwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5Qcm9kdWN0PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImxvY2F0aW9uQ291bnQoKSA+IDBcIiBzY29wZT1cImNvbFwiPkxvY2F0aW9uPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlF1YW50aXR5PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlBhcnRpY3VsYXJzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIiB3aWR0aD1cIjUwXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keSBmb3JtQXJyYXlOYW1lPVwic3RvY2tfaXNzdWVfcHJvZHVjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2Ygc3RvY2tJc3N1ZVByb2R1Y3RzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+e3sgaSArIDEgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSdvdXRsaW5lJyBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UHJvZHVjdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3IgYXBpVXJsPSdhcGkvcHJvZHVjdHMnIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RfaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVGaWVsZD0nbmFtZScgW2NhY2hlXT1cInRydWVcIiByZXF1aXJlZD48L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibG9jYXRpb25Db3VudCgpID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbG9jYXRpb24tc2VsZWN0b3IgYXBwZWFyYW5jZT0nb3V0bGluZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25faWRcIj48L2FwcC1sb2NhdGlvbi1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9J291dGxpbmUnIGNsYXNzPSdmbC1zbSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UXVhbnRpdHk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInF1YW50aXR5XCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0nb3V0bGluZSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFydGljdWxhcnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInBhcnRpY3VsYXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktaWNvbiByb2xlPSdidXR0b24nIG5hbWU9J2RlbGV0ZScgKGNsaWNrKT1cInJlbW92ZVN0b2NrSXNzdWVQcm9kdWN0KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmUgcm93XCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNlwiIGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGdhcC0yIGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXJQcm9kdWN0cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdG9ja0lzc3VlUHJvZHVjdHMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YmxvY2s8L21hdC1pY29uPiBDTEVBUiBBTExcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkU3RvY2tJc3N1ZVByb2R1Y3QoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFERFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Zm9vdD5cbiAgICAgICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXQtMlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzV29ya2luZ1wiIG1hdC1mbGF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNXb3JraW5nIHx8IHN0b2NrSXNzdWVQcm9kdWN0cy5sZW5ndGggPT09IDBcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9mb3JtPlxuXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@angular/material/dialog";
|
|
4
|
-
import * as i2 from "
|
|
5
|
-
import * as i3 from "
|
|
4
|
+
import * as i2 from "ngx-techlify-core";
|
|
5
|
+
import * as i3 from "@angular/router";
|
|
6
6
|
import * as i4 from "../stock-issue-form/stock-issue-form.component";
|
|
7
7
|
export class StockIssueFormButtonComponent {
|
|
8
8
|
matDialog;
|
|
@@ -25,11 +25,11 @@ export class StockIssueFormButtonComponent {
|
|
|
25
25
|
this.saved.emit(item);
|
|
26
26
|
}
|
|
27
27
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueFormButtonComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueFormButtonComponent, selector: "app-stock-issue-form-button", inputs: { product: "product", stockIssueProduct: "stockIssueProduct", stockIssue: "stockIssue", icon: "icon", issuableType: "issuableType", issuableId: "issuableId" }, outputs: { saved: "saved" }, ngImport: i0, template: "<app-techlify-icon role='button'
|
|
28
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueFormButtonComponent, selector: "app-stock-issue-form-button", inputs: { product: "product", stockIssueProduct: "stockIssueProduct", stockIssue: "stockIssue", icon: "icon", issuableType: "issuableType", issuableId: "issuableId" }, outputs: { saved: "saved" }, ngImport: i0, template: "<app-techlify-icon role='button' name='edit'\n [routerLink]=\"['/inventory/stock-issues/batch-form', stockIssue?.id]\"></app-techlify-icon>\n\n<ng-template #stockIssuanceFormTemplate>\n <app-stock-issue-form mat-dialog-content [product]=\"product\" [stockIssueProduct]=\"stockIssueProduct\"\n [stockIssue]=\"stockIssue\" [issuableType]=\"issuableType\" [issuableId]=\"issuableId\" (cancelled)=\"matDialogRef.close()\"\n (saved)=\"onStockIssuanceSaved($event)\"></app-stock-issue-form>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.StockIssueFormComponent, selector: "app-stock-issue-form", inputs: ["product", "stockIssueProduct", "stockIssue", "issuableType", "issuableId"], outputs: ["saved", "cancelled"] }], preserveWhitespaces: true });
|
|
29
29
|
}
|
|
30
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueFormButtonComponent, decorators: [{
|
|
31
31
|
type: Component,
|
|
32
|
-
args: [{ selector: 'app-stock-issue-form-button', template: "<app-techlify-icon role='button'
|
|
32
|
+
args: [{ selector: 'app-stock-issue-form-button', template: "<app-techlify-icon role='button' name='edit'\n [routerLink]=\"['/inventory/stock-issues/batch-form', stockIssue?.id]\"></app-techlify-icon>\n\n<ng-template #stockIssuanceFormTemplate>\n <app-stock-issue-form mat-dialog-content [product]=\"product\" [stockIssueProduct]=\"stockIssueProduct\"\n [stockIssue]=\"stockIssue\" [issuableType]=\"issuableType\" [issuableId]=\"issuableId\" (cancelled)=\"matDialogRef.close()\"\n (saved)=\"onStockIssuanceSaved($event)\"></app-stock-issue-form>\n</ng-template>\n" }]
|
|
33
33
|
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { product: [{
|
|
34
34
|
type: Input
|
|
35
35
|
}], stockIssueProduct: [{
|
|
@@ -45,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
45
45
|
}], saved: [{
|
|
46
46
|
type: Output
|
|
47
47
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtZm9ybS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWFuY2VzL3N0b2NrLWlzc3VlLWZvcm0vc3RvY2staXNzdWUtZm9ybS1idXR0b24vc3RvY2staXNzdWUtZm9ybS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWFuY2VzL3N0b2NrLWlzc3VlLWZvcm0vc3RvY2staXNzdWUtZm9ybS1idXR0b24vc3RvY2staXNzdWUtZm9ybS1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUXBGLE1BQU0sT0FBTyw2QkFBNkI7SUFhcEI7SUFaWCxPQUFPLENBQU07SUFDYixpQkFBaUIsQ0FBTTtJQUd2QixVQUFVLENBQU07SUFDaEIsSUFBSSxDQUFpQjtJQUNyQixZQUFZLENBQVU7SUFDdEIsVUFBVSxDQUFVO0lBQ25CLEtBQUssR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUU3RCxZQUFZLENBQXFCO0lBRWpDLFlBQW9CLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7SUFBSSxDQUFDO0lBRTdDLHFCQUFxQixDQUFDLFdBQTZCO1FBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO3dHQXRCVSw2QkFBNkI7NEZBQTdCLDZCQUE2Qix3UUNSMUMsZ2dCQVFBOzs0RkRBYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsNkJBQTZCOzhFQUs5QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXN0b2NrLWlzc3VlLWZvcm0tYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b2NrLWlzc3VlLWZvcm0tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RvY2staXNzdWUtZm9ybS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RvY2tJc3N1ZUZvcm1CdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBwcm9kdWN0OiBhbnk7XG4gIEBJbnB1dCgpIHN0b2NrSXNzdWVQcm9kdWN0OiBhbnk7XG5cblxuICBASW5wdXQoKSBzdG9ja0lzc3VlOiBhbnk7XG4gIEBJbnB1dCgpIGljb24hOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBpc3N1YWJsZVR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzc3VhYmxlSWQhOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBzYXZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBtYXREaWFsb2dSZWYhOiBNYXREaWFsb2dSZWY8YW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nKSB7IH1cblxuICBzaG93U3RvY2tJc3N1YW5jZUZvcm0odGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLm1hdERpYWxvZ1JlZiA9IHRoaXMubWF0RGlhbG9nLm9wZW4odGVtcGxhdGVSZWYsIHsgd2lkdGg6ICc1MDBweCcgfSk7XG4gIH1cblxuICBvblN0b2NrSXNzdWFuY2VTYXZlZChpdGVtOiBhbnkpIHtcbiAgICB0aGlzLm1hdERpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIHRoaXMuc2F2ZWQuZW1pdChpdGVtKTtcbiAgfVxufVxuIiwiPGFwcC10ZWNobGlmeS1pY29uIHJvbGU9J2J1dHRvbicgbmFtZT0nZWRpdCdcbiAgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5L3N0b2NrLWlzc3Vlcy9iYXRjaC1mb3JtJywgc3RvY2tJc3N1ZT8uaWRdXCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cblxuPG5nLXRlbXBsYXRlICNzdG9ja0lzc3VhbmNlRm9ybVRlbXBsYXRlPlxuICA8YXBwLXN0b2NrLWlzc3VlLWZvcm0gbWF0LWRpYWxvZy1jb250ZW50IFtwcm9kdWN0XT1cInByb2R1Y3RcIiBbc3RvY2tJc3N1ZVByb2R1Y3RdPVwic3RvY2tJc3N1ZVByb2R1Y3RcIlxuICAgIFtzdG9ja0lzc3VlXT1cInN0b2NrSXNzdWVcIiBbaXNzdWFibGVUeXBlXT1cImlzc3VhYmxlVHlwZVwiIFtpc3N1YWJsZUlkXT1cImlzc3VhYmxlSWRcIiAoY2FuY2VsbGVkKT1cIm1hdERpYWxvZ1JlZi5jbG9zZSgpXCJcbiAgICAoc2F2ZWQpPVwib25TdG9ja0lzc3VhbmNlU2F2ZWQoJGV2ZW50KVwiPjwvYXBwLXN0b2NrLWlzc3VlLWZvcm0+XG48L25nLXRlbXBsYXRlPlxuIl19
|