techlify-inventory-common 18.42.0 → 18.44.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/inventory-dashboard-page/inventory-dashboard-page.component.mjs +6 -6
- package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +4 -4
- package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +7 -7
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.mjs +7 -4
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form.component.mjs +5 -5
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.mjs +8 -4
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.mjs +180 -0
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.mjs +7 -4
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.mjs +5 -5
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-single-product-form/stock-receipt-simple-form/stock-receipt-single-product-form.component.mjs +3 -3
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/{techlify-inventory-common-category.module-obJptNEZ.mjs → techlify-inventory-common-category.module-BfHGmavx.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-category.module-obJptNEZ.mjs.map → techlify-inventory-common-category.module-BfHGmavx.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-measure.module-CjC9VOJl.mjs → techlify-inventory-common-measure.module-DjlcLsla.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-measure.module-CjC9VOJl.mjs.map → techlify-inventory-common-measure.module-DjlcLsla.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-e4V2L57U.mjs → techlify-inventory-common-purchase-order-view.component-CGugaBn2.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-e4V2L57U.mjs.map → techlify-inventory-common-purchase-order-view.component-CGugaBn2.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-form.component-DfkyMEiz.mjs → techlify-inventory-common-stock-issue-form.component-BNcyDEr2.mjs} +8 -5
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-BNcyDEr2.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BTQvQ406.mjs → techlify-inventory-common-stock-issue-view.component-DcXL56oB.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BTQvQ406.mjs.map → techlify-inventory-common-stock-issue-view.component-DcXL56oB.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-BQhDomKo.mjs → techlify-inventory-common-techlify-inventory-common-B1Sd5HAp.mjs} +51 -44
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-B1Sd5HAp.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.d.ts +1 -1
- package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +1 -1
- package/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.d.ts +2 -1
- package/lib/inventory-common/stock-issue/stock-issue-single-product-form/{stock-issue-simple-form/stock-issue-single-product-form.component.d.ts → stock-issue-single-product-form.component.d.ts} +3 -3
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-simple-form/stock-issue-single-product-form.component.mjs +0 -180
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-DfkyMEiz.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-BQhDomKo.mjs.map +0 -1
package/esm2022/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.mjs
CHANGED
|
@@ -13,7 +13,7 @@ export class InventoryDashboardPageComponent {
|
|
|
13
13
|
productSummaryService;
|
|
14
14
|
lowStockProductsCount;
|
|
15
15
|
stockReceiptsQtySum;
|
|
16
|
-
|
|
16
|
+
stockIssueQuantitySum;
|
|
17
17
|
constructor(productSummaryService) {
|
|
18
18
|
this.productSummaryService = productSummaryService;
|
|
19
19
|
}
|
|
@@ -22,7 +22,7 @@ export class InventoryDashboardPageComponent {
|
|
|
22
22
|
}
|
|
23
23
|
loadProductSummary() {
|
|
24
24
|
const params = {
|
|
25
|
-
include: 'low_stock_products_count,stock_receipts_quantity_sum,
|
|
25
|
+
include: 'low_stock_products_count,stock_receipts_quantity_sum,stock_issue_quantity_sum',
|
|
26
26
|
date_from: moment().startOf('month').format('YYYY-MM-DD'),
|
|
27
27
|
date_to: moment().endOf('month').format('YYYY-MM-DD'),
|
|
28
28
|
};
|
|
@@ -30,15 +30,15 @@ export class InventoryDashboardPageComponent {
|
|
|
30
30
|
next: (response) => {
|
|
31
31
|
this.lowStockProductsCount = response?.low_stock_products_count;
|
|
32
32
|
this.stockReceiptsQtySum = response?.stock_receipts_quantity_sum;
|
|
33
|
-
this.
|
|
33
|
+
this.stockIssueQuantitySum = response?.stock_issue_quantity_sum;
|
|
34
34
|
},
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InventoryDashboardPageComponent, deps: [{ token: i1.ProductSummaryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InventoryDashboardPageComponent, selector: "app-inventory-dashboard-page", ngImport: i0, template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{
|
|
38
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InventoryDashboardPageComponent, selector: "app-inventory-dashboard-page", ngImport: i0, template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockIssueQuantitySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-quick-search></app-product-quick-search>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-summary-chart title=\"Product By Category\"></app-product-summary-chart>\n </div>\n </div>\n <div style=\"width: 300px\" class=\"d-flex flex-column gap-3 h-100\">\n <mat-card class=\"h-100\">\n <mat-card-content>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-icon>flag</mat-icon>\n <h3 class=\"mb-0 fw-bold\">Reports</h3>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-start gap-3\">\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark\"\n routerLink=\"/inventory/reports/low-stock-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Low Stock Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\"\n routerLink=\"/inventory/reports/inventory-value-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.LowStockProductsWidgetComponent, selector: "app-low-stock-products-widget" }, { kind: "component", type: i6.ProductSummaryChartComponent, selector: "app-product-summary-chart", inputs: ["height", "title"] }, { kind: "component", type: i7.ProductQuickSearchComponent, selector: "app-product-quick-search" }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }], preserveWhitespaces: true });
|
|
39
39
|
}
|
|
40
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InventoryDashboardPageComponent, decorators: [{
|
|
41
41
|
type: Component,
|
|
42
|
-
args: [{ selector: 'app-inventory-dashboard-page', template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{
|
|
42
|
+
args: [{ selector: 'app-inventory-dashboard-page', template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockIssueQuantitySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-quick-search></app-product-quick-search>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-summary-chart title=\"Product By Category\"></app-product-summary-chart>\n </div>\n </div>\n <div style=\"width: 300px\" class=\"d-flex flex-column gap-3 h-100\">\n <mat-card class=\"h-100\">\n <mat-card-content>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-icon>flag</mat-icon>\n <h3 class=\"mb-0 fw-bold\">Reports</h3>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-start gap-3\">\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark\"\n routerLink=\"/inventory/reports/low-stock-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Low Stock Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\"\n routerLink=\"/inventory/reports/inventory-value-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n" }]
|
|
43
43
|
}], ctorParameters: () => [{ type: i1.ProductSummaryService }] });
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52ZW50b3J5LWRhc2hib2FyZC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL2ludmVudG9yeS1kYXNoYm9hcmQtcGFnZS9pbnZlbnRvcnktZGFzaGJvYXJkLXBhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vaW52ZW50b3J5LWRhc2hib2FyZC1wYWdlL2ludmVudG9yeS1kYXNoYm9hcmQtcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVE1QixNQUFNLE9BQU8sK0JBQStCO0lBSXRCO0lBSHBCLHFCQUFxQixDQUFVO0lBQy9CLG1CQUFtQixDQUFVO0lBQzdCLHFCQUFxQixDQUFVO0lBQy9CLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO0lBQUcsQ0FBQztJQUVwRSxRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLE1BQU0sR0FBUTtZQUNsQixPQUFPLEVBQUUsK0VBQStFO1lBQ3hGLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7U0FDdEQsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2pELElBQUksRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsUUFBUSxFQUFFLHdCQUF3QixDQUFDO2dCQUNoRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxFQUFFLDJCQUEyQixDQUFDO2dCQUNqRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsUUFBUSxFQUFFLHdCQUF3QixDQUFDO1lBQ2xFLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXZCVSwrQkFBK0I7NEZBQS9CLCtCQUErQixvRUNUNUMsaTVHQTBFQTs7NEZEakVhLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdFN1bW1hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vcHJvZHVjdC9wcm9kdWN0LXN1bW1hcnkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnZlbnRvcnktZGFzaGJvYXJkLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW52ZW50b3J5LWRhc2hib2FyZC1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW52ZW50b3J5LWRhc2hib2FyZC1wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEludmVudG9yeURhc2hib2FyZFBhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBsb3dTdG9ja1Byb2R1Y3RzQ291bnQhOiBudW1iZXI7XG4gIHN0b2NrUmVjZWlwdHNRdHlTdW0hOiBudW1iZXI7XG4gIHN0b2NrSXNzdWVRdWFudGl0eVN1bSE6IG51bWJlcjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcm9kdWN0U3VtbWFyeVNlcnZpY2U6IFByb2R1Y3RTdW1tYXJ5U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRQcm9kdWN0U3VtbWFyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUHJvZHVjdFN1bW1hcnkoKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBpbmNsdWRlOiAnbG93X3N0b2NrX3Byb2R1Y3RzX2NvdW50LHN0b2NrX3JlY2VpcHRzX3F1YW50aXR5X3N1bSxzdG9ja19pc3N1ZV9xdWFudGl0eV9zdW0nLFxuICAgICAgZGF0ZV9mcm9tOiBtb21lbnQoKS5zdGFydE9mKCdtb250aCcpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuICAgICAgZGF0ZV90bzogbW9tZW50KCkuZW5kT2YoJ21vbnRoJykuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgfTtcbiAgICB0aGlzLnByb2R1Y3RTdW1tYXJ5U2VydmljZS5pbmRleChwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvd1N0b2NrUHJvZHVjdHNDb3VudCA9IHJlc3BvbnNlPy5sb3dfc3RvY2tfcHJvZHVjdHNfY291bnQ7XG4gICAgICAgIHRoaXMuc3RvY2tSZWNlaXB0c1F0eVN1bSA9IHJlc3BvbnNlPy5zdG9ja19yZWNlaXB0c19xdWFudGl0eV9zdW07XG4gICAgICAgIHRoaXMuc3RvY2tJc3N1ZVF1YW50aXR5U3VtID0gcmVzcG9uc2U/LnN0b2NrX2lzc3VlX3F1YW50aXR5X3N1bTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0zIHZoLTEwMFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJ3aWR0aDogY2FsYygxMDAlIC0gMzAwcHgpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy00IG1iLTNcIj5cbiAgICAgIDxtYXQtY2FyZD5cbiAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZnMtMSBmdy1ib2xkXCIgc3R5bGU9XCJjb2xvcjogI2Y1MjIyZCAhaW1wb3J0YW50XCI+IGludmVudG9yeV8yIDwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0wXCI+XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPkxvdyBTdG9jayBQcm9kdWN0czwvc21hbGw+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJtYi0wIGZ3LWJvbGRcIj57eyBsb3dTdG9ja1Byb2R1Y3RzQ291bnQgfCBudW1iZXIgfX08L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNCBtYi0zXCI+XG4gICAgICA8bWF0LWNhcmQ+XG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZzLTEgZnctYm9sZFwiPiBhcnJvd19jaXJjbGVfZG93biA8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMFwiPlxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj5Qcm9kdWN0cyBSZWNlaXZlZCBUaGlzIE1vbnRoPC9zbWFsbD5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTAgZnctYm9sZFwiPnt7IHN0b2NrUmVjZWlwdHNRdHlTdW0gfCBudW1iZXIgfX08L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNCBtYi0zXCI+XG4gICAgICA8bWF0LWNhcmQ+XG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZzLTEgZnctYm9sZFwiPiBhcnJvd19jaXJjbGVfdXAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTBcIj5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+UHJvZHVjdHMgSXNzdWVkIFRoaXMgTW9udGg8L3NtYWxsPlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItMCBmdy1ib2xkXCI+e3sgc3RvY2tJc3N1ZVF1YW50aXR5U3VtIHwgbnVtYmVyIH19PC9oMT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgPC9tYXQtY2FyZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbWItM1wiPlxuICAgICAgPGFwcC1wcm9kdWN0LXF1aWNrLXNlYXJjaD48L2FwcC1wcm9kdWN0LXF1aWNrLXNlYXJjaD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbWItM1wiPlxuICAgICAgPGFwcC1sb3ctc3RvY2stcHJvZHVjdHMtd2lkZ2V0PjwvYXBwLWxvdy1zdG9jay1wcm9kdWN0cy13aWRnZXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IG1iLTNcIj5cbiAgICAgIDxhcHAtcHJvZHVjdC1zdW1tYXJ5LWNoYXJ0IHRpdGxlPVwiUHJvZHVjdCBCeSBDYXRlZ29yeVwiPjwvYXBwLXByb2R1Y3Qtc3VtbWFyeS1jaGFydD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBoLTEwMFwiPlxuICAgIDxtYXQtY2FyZCBjbGFzcz1cImgtMTAwXCI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmZsYWc8L21hdC1pY29uPlxuICAgICAgICAgIDxoMyBjbGFzcz1cIm1iLTAgZnctYm9sZFwiPlJlcG9ydHM8L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwibXQtMyBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LXN0YXJ0IGdhcC0zXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LWRhcmtcIlxuICAgICAgICAgIHJvdXRlckxpbms9XCIvaW52ZW50b3J5L3JlcG9ydHMvbG93LXN0b2NrLXJlcG9ydFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZnMtM1wiPiBkZXNjcmlwdGlvbiA8L3NwYW4+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibWItMFwiPkxvdyBTdG9jayBSZXBvcnQ8L2gzPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjaGV2cm9uX2ZvcndhcmQgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LWRhcmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIHJvdXRlckxpbms9XCIvaW52ZW50b3J5L3JlcG9ydHMvaW52ZW50b3J5LXZhbHVlLXJlcG9ydFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZnMtM1wiPiBkZXNjcmlwdGlvbiA8L3NwYW4+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibWItMFwiPkludmVudG9yeSBWYWx1ZSBSZXBvcnQ8L2gzPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjaGV2cm9uX2ZvcndhcmQgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs
CHANGED
|
@@ -34,7 +34,7 @@ export class ProductBasicInfoComponent {
|
|
|
34
34
|
loadProductStocksSummary() {
|
|
35
35
|
const params = {
|
|
36
36
|
product_ids: this.product?.id,
|
|
37
|
-
include: 'stock_receipts_quantity_sum,
|
|
37
|
+
include: 'stock_receipts_quantity_sum,stock_issue_quantity_sum,stock_quantity_remaining',
|
|
38
38
|
};
|
|
39
39
|
this.stockSummaryService.summary(params).subscribe({
|
|
40
40
|
next: (response) => {
|
|
@@ -43,11 +43,11 @@ export class ProductBasicInfoComponent {
|
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductBasicInfoComponent, deps: [{ token: i1.StockSummaryService }, { token: i2.ProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductBasicInfoComponent, selector: "app-product-basic-info", inputs: { product: "product" }, outputs: { saved: "saved", deleted: "deleted" }, ngImport: i0, template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductBasicInfoComponent, selector: "app-product-basic-info", inputs: { product: "product" }, outputs: { saved: "saved", deleted: "deleted" }, ngImport: i0, template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_issue_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_issue\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_issue?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- On Hand -->\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">On Hand</small>\n <p class=\"mb-0 fw-semibold fs-2 text-success\"\n [ngClass]=\"{ 'text-danger': product?.stock_on_hand < product?.reorder_point }\">\n {{ (product?.stock_on_hand | number) ?? 0 }}</p>\n <small *ngIf=\"product?.reorder_point\" class=\"text-secondary\">\n Reorder At {{ product?.reorder_point }}\n </small>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Description -->\n <mat-card-content *ngIf=\"product?.description\" class=\"pt-2\">\n <small class=\"text-secondary\">Description</small>\n <p class=\"mb-0 mt-1\">{{ product?.description }}</p>\n </mat-card-content>\n\n <div class=\"d-flex flex-row align-items-center w-100 mt-2 gap-3 overflow-hidden\">\n <div class=\"barcode-container flex-grow-1 min-width-0 overflow-hidden\">\n <ngx-barcode6 [bc-value]=\"product?.sku\" [bc-display-value]=\"true\"></ngx-barcode6>\n </div>\n <div class=\"flex-shrink-0\">\n <qrcode [qrdata]=\"product?.sku\" [width]=\"128\"></qrcode>\n </div>\n </div>\n\n</mat-card>", styles: [".product-image-container{width:80px;height:80px}.barcode-container{min-width:0}.barcode-container ::ng-deep ngx-barcode6 svg{width:100%;height:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.QRCodeComponent, selector: "qrcode", inputs: ["allowEmptyString", "colorDark", "colorLight", "cssClass", "elementType", "errorCorrectionLevel", "imageSrc", "imageHeight", "imageWidth", "margin", "qrdata", "scale", "version", "width", "alt", "ariaLabel", "title"], outputs: ["qrCodeURL"] }, { kind: "component", type: i6.NgxBarcode6, selector: "ngx-barcode6", inputs: ["bc-element-type", "bc-class", "bc-format", "bc-line-color", "bc-width", "bc-height", "bc-display-value", "bc-font-options", "bc-font", "bc-text-align", "bc-text-position", "bc-text-margin", "bc-font-size", "bc-background", "bc-margin", "bc-margin-top", "bc-margin-bottom", "bc-margin-left", "bc-margin-right", "bc-value", "bc-valid"] }, { kind: "component", type: i7.TechlifyDeleteButtonComponent, selector: "app-techlify-delete-button", inputs: ["data", "model", "message", "service"], outputs: ["deleted"] }, { kind: "component", type: i8.ProductFormButtonComponent, selector: "app-product-form-button", inputs: ["product"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i3.DatePipe, name: "date" }], preserveWhitespaces: true });
|
|
47
47
|
}
|
|
48
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductBasicInfoComponent, decorators: [{
|
|
49
49
|
type: Component,
|
|
50
|
-
args: [{ selector: 'app-product-basic-info', template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.
|
|
50
|
+
args: [{ selector: 'app-product-basic-info', template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_issue_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_issue\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_issue?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- On Hand -->\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">On Hand</small>\n <p class=\"mb-0 fw-semibold fs-2 text-success\"\n [ngClass]=\"{ 'text-danger': product?.stock_on_hand < product?.reorder_point }\">\n {{ (product?.stock_on_hand | number) ?? 0 }}</p>\n <small *ngIf=\"product?.reorder_point\" class=\"text-secondary\">\n Reorder At {{ product?.reorder_point }}\n </small>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Description -->\n <mat-card-content *ngIf=\"product?.description\" class=\"pt-2\">\n <small class=\"text-secondary\">Description</small>\n <p class=\"mb-0 mt-1\">{{ product?.description }}</p>\n </mat-card-content>\n\n <div class=\"d-flex flex-row align-items-center w-100 mt-2 gap-3 overflow-hidden\">\n <div class=\"barcode-container flex-grow-1 min-width-0 overflow-hidden\">\n <ngx-barcode6 [bc-value]=\"product?.sku\" [bc-display-value]=\"true\"></ngx-barcode6>\n </div>\n <div class=\"flex-shrink-0\">\n <qrcode [qrdata]=\"product?.sku\" [width]=\"128\"></qrcode>\n </div>\n </div>\n\n</mat-card>", styles: [".product-image-container{width:80px;height:80px}.barcode-container{min-width:0}.barcode-container ::ng-deep ngx-barcode6 svg{width:100%;height:auto}\n"] }]
|
|
51
51
|
}], ctorParameters: () => [{ type: i1.StockSummaryService }, { type: i2.ProductService }], propDecorators: { product: [{
|
|
52
52
|
type: Input
|
|
53
53
|
}], saved: [{
|
|
@@ -55,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
55
55
|
}], deleted: [{
|
|
56
56
|
type: Output
|
|
57
57
|
}] } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1iYXNpYy1pbmZvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3Byb2R1Y3QvcHJvZHVjdC1iYXNpYy1pbmZvL3Byb2R1Y3QtYmFzaWMtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QtYmFzaWMtaW5mby9wcm9kdWN0LWJhc2ljLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQVMvRSxNQUFNLE9BQU8seUJBQXlCO0lBTWhCO0lBQ1I7SUFOSCxPQUFPLENBQU07SUFDWixLQUFLLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbkQsT0FBTyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQy9ELFlBQVksQ0FBTztJQUVuQixZQUFvQixtQkFBd0MsRUFDaEQsT0FBdUI7UUFEZix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ2hELFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQ2hDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsT0FBWTtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsd0JBQXdCO1FBQ3RCLE1BQU0sTUFBTSxHQUFRO1lBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0IsT0FBTyxFQUFFLCtFQUErRTtTQUN6RixDQUFDO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakQsSUFBSSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQWxDVSx5QkFBeUI7NEZBQXpCLHlCQUF5QiwrSUNUdEMsazdJQStGVzs7NEZEdEZFLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0I7cUhBS3pCLE9BQU87c0JBQWYsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b2NrU3VtbWFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdG9jay1zdW1tYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZHVjdC1iYXNpYy1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtYmFzaWMtaW5mby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtYmFzaWMtaW5mby5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0QmFzaWNJbmZvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvZHVjdDogYW55O1xuICBAT3V0cHV0KCkgc2F2ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBzdG9ja1N1bW1hcnkhOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9ja1N1bW1hcnlTZXJ2aWNlOiBTdG9ja1N1bW1hcnlTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzZXJ2aWNlOiBQcm9kdWN0U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucHJvZHVjdCkge1xuICAgICAgdGhpcy5sb2FkUHJvZHVjdFN0b2Nrc1N1bW1hcnkoKTtcbiAgICB9XG4gIH1cblxuICBvblByb2R1Y3RTYXZlZChwcm9kdWN0OiBhbnkpIHtcbiAgICB0aGlzLnByb2R1Y3QgPSBwcm9kdWN0O1xuICAgIHRoaXMuc2F2ZWQuZW1pdCh0aGlzLnByb2R1Y3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcHJvZHVjdCBzdG9ja3Mgc3VtbWFyeS5cbiAgICovXG4gIGxvYWRQcm9kdWN0U3RvY2tzU3VtbWFyeSgpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHByb2R1Y3RfaWRzOiB0aGlzLnByb2R1Y3Q/LmlkLFxuICAgICAgaW5jbHVkZTogJ3N0b2NrX3JlY2VpcHRzX3F1YW50aXR5X3N1bSxzdG9ja19pc3N1ZV9xdWFudGl0eV9zdW0sc3RvY2tfcXVhbnRpdHlfcmVtYWluaW5nJyxcbiAgICB9O1xuICAgIHRoaXMuc3RvY2tTdW1tYXJ5U2VydmljZS5zdW1tYXJ5KHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3RvY2tTdW1tYXJ5ID0gcmVzcG9uc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgKm5nSWY9XCJwcm9kdWN0XCIgY2xhc3M9XCJ3LTEwMFwiPlxuXG4gIDwhLS0gSGVhZGVyOiBJbWFnZSArIFByb2R1Y3QgSW5mbyArIEFjdGlvbnMgLS0+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XG4gICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtaW1hZ2UtY29udGFpbmVyIHJvdW5kZWQgb3ZlcmZsb3ctaGlkZGVuIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgIDxpbWcgKm5nSWY9XCJwcm9kdWN0Py5pbWFnZV9maWxlX3VybFwiIFtzcmNdPVwicHJvZHVjdC5pbWFnZV9maWxlX3VybFwiIGFsdD1cInt7IHByb2R1Y3Q/Lm5hbWUgfX1cIlxuICAgICAgICBjbGFzcz1cInctMTAwIGgtMTAwIG9iamVjdC1maXQtY292ZXJcIiAvPlxuICAgICAgPGRpdiAqbmdJZj1cIiFwcm9kdWN0Py5pbWFnZV9maWxlX3VybFwiXG4gICAgICAgIGNsYXNzPVwidy0xMDAgaC0xMDAgYmctc2Vjb25kYXJ5LXN1YnRsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcm91bmRlZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1zZWNvbmRhcnlcIiBzdHlsZT1cImZvbnQtc2l6ZTogNDBweDtcIj5pbnZlbnRvcnlfMjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGg1IGNsYXNzPVwiZnctc2VtaWJvbGQgbWItMVwiPnt7IHByb2R1Y3Q/Lm5hbWUgfX08L2g1PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc2Vjb25kYXJ5IHNtYWxsIGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgcHJvZHVjdD8uc2t1IH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+IOKAoiA8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9kdWN0Py50eXBlPy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPiDigKIgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+dmlld19pbl9hcjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3Q/Lm1lYXN1cmU/LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9kdWN0Py5hdmVyYWdlX2Nvc3QgIT0gbnVsbFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXNlY29uZGFyeSBzbWFsbFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1tb25leS1iaWxsXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4+e3sgcHJvZHVjdD8uYXZlcmFnZV9jb3N0IHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGZsZXgtc2hyaW5rLTAgYWxpZ24tbWlkZGxlIHRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPGFwcC1wcm9kdWN0LWZvcm0tYnV0dG9uIFtwcm9kdWN0XT1cInByb2R1Y3RcIiAoc2F2ZWQpPVwib25Qcm9kdWN0U2F2ZWQoJGV2ZW50KVwiPjwvYXBwLXByb2R1Y3QtZm9ybS1idXR0b24+XG4gICAgICAgICAgPGFwcC10ZWNobGlmeS1kZWxldGUtYnV0dG9uIFttb2RlbF09XCJwcm9kdWN0XCIgW2RhdGFdPVwie3R5cGU6ICdQcm9kdWN0JywgdGl0bGU6IHByb2R1Y3Q/Lm5hbWV9XCJcbiAgICAgICAgICAgIFtzZXJ2aWNlXT1cInNlcnZpY2VcIj48L2FwcC10ZWNobGlmeS1kZWxldGUtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhdGVnb3JpZXMgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdD8uY2F0ZWdvcmllcz8ubGVuZ3RoXCIgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC0xIG10LTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBib3JkZXIgYmctbGlnaHQgdGV4dC1kYXJrIGZ3LW1lZGl1bVwiICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBwcm9kdWN0Py5jYXRlZ29yaWVzXCI+XG4gICAgICAgICAge3sgY2F0ZWdvcnk/LnRpdGxlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgPCEtLSBTdG9jayBTdW1tYXJ5IFJvdyAtLT5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJweS0zXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTBcIj5cbiAgICAgIDwhLS0gU3RvY2sgUmVjZWlwdHMgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwic3RvY2tTdW1tYXJ5XCIgY2xhc3M9XCJjb2wtNCBkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj5TdG9jayBSZWNlaXB0czwvc21hbGw+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMCBmdy1zZW1pYm9sZCBmcy0yXCI+e3sgc3RvY2tTdW1tYXJ5Py5zdG9ja19yZWNlaXB0c19xdWFudGl0eV9zdW0gfCBudW1iZXIgfX08L3A+XG4gICAgICAgIDxzbWFsbCAqbmdJZj1cInByb2R1Y3Q/Lmxhc3Rfc3RvY2tfcmVjZWlwdFwiIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj5cbiAgICAgICAgICBMYXN0IEFkZGVkIE9uIHt7IHByb2R1Y3Q/Lmxhc3Rfc3RvY2tfcmVjZWlwdD8uZGF0ZSB8IGRhdGU6ICdNTU0gZCwgeScgfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFN0b2NrIElzc3VlcyAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdG9ja1N1bW1hcnlcIiBjbGFzcz1cImNvbC00IGQtZmxleCBmbGV4LWNvbHVtblwiPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPlN0b2NrIElzc3Vlczwvc21hbGw+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMCBmdy1zZW1pYm9sZCBmcy0yXCI+e3sgc3RvY2tTdW1tYXJ5Py5zdG9ja19pc3N1ZV9xdWFudGl0eV9zdW0gfCBudW1iZXIgfX08L3A+XG4gICAgICAgIDxzbWFsbCAqbmdJZj1cInByb2R1Y3Q/Lmxhc3Rfc3RvY2tfaXNzdWVcIiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgTGFzdCBBZGRlZCBPbiB7eyBwcm9kdWN0Py5sYXN0X3N0b2NrX2lzc3VlPy5kYXRlIHwgZGF0ZTogJ01NTSBkLCB5JyB9fVxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gT24gSGFuZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj5PbiBIYW5kPC9zbWFsbD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGZ3LXNlbWlib2xkIGZzLTIgdGV4dC1zdWNjZXNzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LWRhbmdlcic6IHByb2R1Y3Q/LnN0b2NrX29uX2hhbmQgPCBwcm9kdWN0Py5yZW9yZGVyX3BvaW50IH1cIj5cbiAgICAgICAgICB7eyAocHJvZHVjdD8uc3RvY2tfb25faGFuZCB8IG51bWJlcikgPz8gMCB9fTwvcD5cbiAgICAgICAgPHNtYWxsICpuZ0lmPVwicHJvZHVjdD8ucmVvcmRlcl9wb2ludFwiIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj5cbiAgICAgICAgICBSZW9yZGVyIEF0IHt7IHByb2R1Y3Q/LnJlb3JkZXJfcG9pbnQgfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgPCEtLSBEZXNjcmlwdGlvbiAtLT5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgKm5nSWY9XCJwcm9kdWN0Py5kZXNjcmlwdGlvblwiIGNsYXNzPVwicHQtMlwiPlxuICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+RGVzY3JpcHRpb248L3NtYWxsPlxuICAgIDxwIGNsYXNzPVwibWItMCBtdC0xXCI+e3sgcHJvZHVjdD8uZGVzY3JpcHRpb24gfX08L3A+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cblxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBtdC0yIGdhcC0zIG92ZXJmbG93LWhpZGRlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJiYXJjb2RlLWNvbnRhaW5lciBmbGV4LWdyb3ctMSBtaW4td2lkdGgtMCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIDxuZ3gtYmFyY29kZTYgW2JjLXZhbHVlXT1cInByb2R1Y3Q/LnNrdVwiIFtiYy1kaXNwbGF5LXZhbHVlXT1cInRydWVcIj48L25neC1iYXJjb2RlNj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgPHFyY29kZSBbcXJkYXRhXT1cInByb2R1Y3Q/LnNrdVwiIFt3aWR0aF09XCIxMjhcIj48L3FyY29kZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvbWF0LWNhcmQ+Il19
|
package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs
CHANGED
|
@@ -21,7 +21,7 @@ export class ProductViewPageComponent {
|
|
|
21
21
|
productBasicInfoComponent;
|
|
22
22
|
productLocationList;
|
|
23
23
|
stockTransferList;
|
|
24
|
-
|
|
24
|
+
stockReceiptProductListPage;
|
|
25
25
|
stockIssueProductListPage;
|
|
26
26
|
constructor(productService, activatedRoute, location) {
|
|
27
27
|
this.productService = productService;
|
|
@@ -56,7 +56,7 @@ export class ProductViewPageComponent {
|
|
|
56
56
|
this.getProduct(this.id);
|
|
57
57
|
this.productBasicInfoComponent.loadProductStocksSummary();
|
|
58
58
|
this.productLocationList.reload();
|
|
59
|
-
this.
|
|
59
|
+
this.stockReceiptProductListPage.reload();
|
|
60
60
|
this.stockIssueProductListPage.reload();
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
@@ -74,11 +74,11 @@ export class ProductViewPageComponent {
|
|
|
74
74
|
this.location.back();
|
|
75
75
|
}
|
|
76
76
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductViewPageComponent, deps: [{ token: i1.ProductService }, { token: i2.ActivatedRoute }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductViewPageComponent, selector: "app-product-view-page", viewQueries: [{ propertyName: "productBasicInfoComponent", first: true, predicate: ["productBasicInfoComponent"], descendants: true }, { propertyName: "productLocationList", first: true, predicate: ["productLocationList"], descendants: true }, { propertyName: "stockTransferList", first: true, predicate: ["stockTransferList"], descendants: true }, { propertyName: "
|
|
77
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductViewPageComponent, selector: "app-product-view-page", viewQueries: [{ propertyName: "productBasicInfoComponent", first: true, predicate: ["productBasicInfoComponent"], descendants: true }, { propertyName: "productLocationList", first: true, predicate: ["productLocationList"], descendants: true }, { propertyName: "stockTransferList", first: true, predicate: ["stockTransferList"], descendants: true }, { propertyName: "stockReceiptProductListPage", first: true, predicate: ["stockReceiptProductListPage"], descendants: true }, { propertyName: "stockIssueProductListPage", first: true, predicate: ["stockIssueProductListPage"], descendants: true }], ngImport: i0, template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); stockReceiptProductListPage.reload()\"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #stockReceiptProductListPage [filters]=\"{ product_ids: product?.id }\"\n [product]=\"product\" [isProductView]=\"true\" (listUpdated)=\"getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-receipt-product-list>\n\n <app-stock-issue-products-list #stockIssueProductListPage [isProductView]=\"true\"\n [product]=\"product\" [filters]=\"{ product_ids: product?.id }\" (listUpdated)=\"\n getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-issue-products-list>\n\n <app-stock-transfer-list #stockTransferList *ngIf=\"product\" [productId]=\"product.id\"\n (changed)=\"stockTransferChanged()\"></app-stock-transfer-list>\n </div>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.StockReceiptProductsListComponent, selector: "app-stock-receipt-product-list", inputs: ["filters", "isProductView", "selectedColumns", "exportInProgress", "product"], outputs: ["listUpdated", "columnConfigReady"] }, { kind: "component", type: i5.StockIssueProductListComponent, selector: "app-stock-issue-products-list", inputs: ["filters", "isProductView", "product", "selectedColumns", "exportInProgress", "issuableData"], outputs: ["selectedColumnsChange", "listUpdated", "columnConfigReady"] }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i7.ProductLocationListComponent, selector: "app-product-location-list", inputs: ["product"], outputs: ["updated"] }, { kind: "component", type: i8.StockTransferListComponent, selector: "app-stock-transfer-list", inputs: ["productId"], outputs: ["changed"] }, { kind: "component", type: i9.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: i10.ProductBasicInfoComponent, selector: "app-product-basic-info", inputs: ["product"], outputs: ["saved", "deleted"] }], preserveWhitespaces: true });
|
|
78
78
|
}
|
|
79
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductViewPageComponent, decorators: [{
|
|
80
80
|
type: Component,
|
|
81
|
-
args: [{ selector: 'app-product-view-page', template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); \"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #
|
|
81
|
+
args: [{ selector: 'app-product-view-page', template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); stockReceiptProductListPage.reload()\"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #stockReceiptProductListPage [filters]=\"{ product_ids: product?.id }\"\n [product]=\"product\" [isProductView]=\"true\" (listUpdated)=\"getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-receipt-product-list>\n\n <app-stock-issue-products-list #stockIssueProductListPage [isProductView]=\"true\"\n [product]=\"product\" [filters]=\"{ product_ids: product?.id }\" (listUpdated)=\"\n getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-issue-products-list>\n\n <app-stock-transfer-list #stockTransferList *ngIf=\"product\" [productId]=\"product.id\"\n (changed)=\"stockTransferChanged()\"></app-stock-transfer-list>\n </div>\n </div>\n</div>" }]
|
|
82
82
|
}], ctorParameters: () => [{ type: i1.ProductService }, { type: i2.ActivatedRoute }, { type: i3.Location }], propDecorators: { productBasicInfoComponent: [{
|
|
83
83
|
type: ViewChild,
|
|
84
84
|
args: ['productBasicInfoComponent']
|
|
@@ -88,11 +88,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
88
88
|
}], stockTransferList: [{
|
|
89
89
|
type: ViewChild,
|
|
90
90
|
args: ['stockTransferList']
|
|
91
|
-
}],
|
|
91
|
+
}], stockReceiptProductListPage: [{
|
|
92
92
|
type: ViewChild,
|
|
93
|
-
args: ['
|
|
93
|
+
args: ['stockReceiptProductListPage']
|
|
94
94
|
}], stockIssueProductListPage: [{
|
|
95
95
|
type: ViewChild,
|
|
96
96
|
args: ['stockIssueProductListPage']
|
|
97
97
|
}] } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12aWV3LXBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vcHJvZHVjdC9wcm9kdWN0LXZpZXctcGFnZS9wcm9kdWN0LXZpZXctcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3Qtdmlldy1wYWdlL3Byb2R1Y3Qtdmlldy1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFJbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBVzFDLE1BQU0sT0FBTyx3QkFBd0I7SUFZekI7SUFDQTtJQUNBO0lBYkgsT0FBTyxDQUFNO0lBQ3BCLEVBQUUsQ0FBUztJQUNYLFNBQVMsQ0FBVztJQUVvQix5QkFBeUIsQ0FBNkI7SUFDNUQsbUJBQW1CLENBQWdDO0lBQ3JELGlCQUFpQixDQUE4QjtJQUNyQywyQkFBMkIsQ0FBcUM7SUFDbEUseUJBQXlCLENBQWtDO0lBRW5HLFlBQ1UsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsUUFBa0I7UUFGbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRTFCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxTQUFjO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFRO1lBQ2xCLElBQUksRUFBRSxxR0FBcUc7U0FDNUcsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDcEQsSUFBSSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDOUIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxPQUFZO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzt3R0FsRVUsd0JBQXdCOzRGQUF4Qix3QkFBd0IsaXBCQ2ZyQyw2MkRBa0NNOzs0RkRuQk8sd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLHVCQUF1Qjt1SUFRTyx5QkFBeUI7c0JBQWhFLFNBQVM7dUJBQUMsMkJBQTJCO2dCQUNKLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ0EsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDWSwyQkFBMkI7c0JBQXBFLFNBQVM7dUJBQUMsNkJBQTZCO2dCQUNBLHlCQUF5QjtzQkFBaEUsU0FBUzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcm9kdWN0TG9jYXRpb25MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vcHJvZHVjdC1sb2NhdGlvbi9wcm9kdWN0LWxvY2F0aW9uLWxpc3QvcHJvZHVjdC1sb2NhdGlvbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdG9ja1RyYW5zZmVyTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3N0b2NrLXRyYW5zZmVyL3N0b2NrLXRyYW5zZmVyLWxpc3Qvc3RvY2stdHJhbnNmZXItbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RvY2tSZWNlaXB0UHJvZHVjdHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc3RvY2stcmVjZWlwdHMvc3RvY2stcmVjZWlwdC1wcm9kdWN0LWxpc3Qvc3RvY2stcmVjZWlwdC1wcm9kdWN0LWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFN0b2NrSXNzdWVQcm9kdWN0TGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3N0b2NrLWlzc3VlL3N0b2NrLWlzc3VlLXByb2R1Y3RzLWxpc3Qvc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdEJhc2ljSW5mb0NvbXBvbmVudCB9IGZyb20gJy4uL3Byb2R1Y3QtYmFzaWMtaW5mby9wcm9kdWN0LWJhc2ljLWluZm8uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3Qtdmlldy1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtdmlldy1wYWdlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdFZpZXdQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHByb2R1Y3Q6IGFueTtcbiAgaWQ6IG51bWJlcjtcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKCdwcm9kdWN0QmFzaWNJbmZvQ29tcG9uZW50JykgcHJvZHVjdEJhc2ljSW5mb0NvbXBvbmVudCE6IFByb2R1Y3RCYXNpY0luZm9Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3Byb2R1Y3RMb2NhdGlvbkxpc3QnKSBwcm9kdWN0TG9jYXRpb25MaXN0ITogUHJvZHVjdExvY2F0aW9uTGlzdENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnc3RvY2tUcmFuc2Zlckxpc3QnKSBzdG9ja1RyYW5zZmVyTGlzdCE6IFN0b2NrVHJhbnNmZXJMaXN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzdG9ja1JlY2VpcHRQcm9kdWN0TGlzdFBhZ2UnKSBzdG9ja1JlY2VpcHRQcm9kdWN0TGlzdFBhZ2UhOiBTdG9ja1JlY2VpcHRQcm9kdWN0c0xpc3RDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3N0b2NrSXNzdWVQcm9kdWN0TGlzdFBhZ2UnKSBzdG9ja0lzc3VlUHJvZHVjdExpc3RQYWdlITogU3RvY2tJc3N1ZVByb2R1Y3RMaXN0Q29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHRoaXMuaWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcz8uWydpZCddO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgIHRoaXMuZ2V0UHJvZHVjdCh0aGlzLmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcm9kdWN0IGRldGFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9kdWN0SWRcbiAgICovXG4gIGdldFByb2R1Y3QocHJvZHVjdElkOiBhbnkpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICB3aXRoOiAndHlwZSxtZWFzdXJlLGluY29tZUFjY291bnQsZXhwZW5zZUFjY291bnQsY2F0ZWdvcmllcyxsYXN0U3RvY2tSZWNlaXB0LGxhc3RTdG9ja0lzc3VlLHRheGVzLnRheC50eXBlJyxcbiAgICB9O1xuICAgIHRoaXMucHJvZHVjdFNlcnZpY2Uuc2hvdyhwcm9kdWN0SWQsIHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2R1Y3QgPSByZXN1bHQ/Lml0ZW07XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+ICh0aGlzLmlzTG9hZGluZyA9IGZhbHNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0b2NrVHJhbnNmZXJDaGFuZ2VkKCkge1xuICAgIHRoaXMuZ2V0UHJvZHVjdCh0aGlzLmlkKTtcbiAgICB0aGlzLnByb2R1Y3RCYXNpY0luZm9Db21wb25lbnQubG9hZFByb2R1Y3RTdG9ja3NTdW1tYXJ5KCk7XG4gICAgdGhpcy5wcm9kdWN0TG9jYXRpb25MaXN0LnJlbG9hZCgpO1xuICAgIHRoaXMuc3RvY2tSZWNlaXB0UHJvZHVjdExpc3RQYWdlLnJlbG9hZCgpO1xuICAgIHRoaXMuc3RvY2tJc3N1ZVByb2R1Y3RMaXN0UGFnZS5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIG9uIHByb2R1Y3QgdXBkYXRlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcHJvZHVjdFxuICAgKi9cbiAgb25Qcm9kdWN0VXBkYXRlZChwcm9kdWN0OiBhbnkpIHtcbiAgICB0aGlzLmdldFByb2R1Y3QodGhpcy5pZCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG9uIHByb2R1Y3QgZGVsZXRlIGV2ZW50LlxuICAgKi9cbiAgb25Qcm9kdWN0RGVsZXRlZCgpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxufVxuIiwiPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzTG9hZGluZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cblxuPGRpdiAqbmdJZj1cInByb2R1Y3RcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTMgdy0xMDBcIj5cbiAgPGRpdiAqbmdJZj1cInByb2R1Y3RcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTMgdy0xMDBcIj5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IGNhbGMoMjUlIC0gMXJlbSlcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxuICAgICAgPGFwcC1wcm9kdWN0LWJhc2ljLWluZm8gW3Byb2R1Y3RdPVwicHJvZHVjdFwiICNwcm9kdWN0QmFzaWNJbmZvQ29tcG9uZW50IChkZWxldGVkKT1cIm9uUHJvZHVjdERlbGV0ZWQoKVwiXG4gICAgICAgIChzYXZlZCk9XCJvblByb2R1Y3RVcGRhdGVkKCRldmVudClcIj48L2FwcC1wcm9kdWN0LWJhc2ljLWluZm8+XG5cbiAgICAgIDxhcHAtcHJvZHVjdC1sb2NhdGlvbi1saXN0IFtwcm9kdWN0XT1cInByb2R1Y3RcIlxuICAgICAgICAodXBkYXRlZCk9XCJzdG9ja1RyYW5zZmVyTGlzdC5yZWxvYWQoKTsgc3RvY2tJc3N1ZVByb2R1Y3RMaXN0UGFnZS5yZWxvYWQoKTsgc3RvY2tSZWNlaXB0UHJvZHVjdExpc3RQYWdlLnJlbG9hZCgpXCJcbiAgICAgICAgI3Byb2R1Y3RMb2NhdGlvbkxpc3Q+PC9hcHAtcHJvZHVjdC1sb2NhdGlvbi1saXN0PlxuXG4gICAgICA8YXBwLW5vdGUtbGlzdCBsYWJlbFRleHQ9XCJOb3Rlc1wiIHZpZXdNb2RlPVwidGltZWxpbmVcIiBtb2RlbFR5cGU9XCJQcm9kdWN0XCJcbiAgICAgICAgW3JlbGF0ZWRNb2RlbElkXT1cInByb2R1Y3QuaWRcIj48L2FwcC1ub3RlLWxpc3Q+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zIHctMTAwXCI+XG4gICAgICA8YXBwLXN0b2NrLXJlY2VpcHQtcHJvZHVjdC1saXN0ICNzdG9ja1JlY2VpcHRQcm9kdWN0TGlzdFBhZ2UgW2ZpbHRlcnNdPVwieyBwcm9kdWN0X2lkczogcHJvZHVjdD8uaWQgfVwiXG4gICAgICAgIFtwcm9kdWN0XT1cInByb2R1Y3RcIiBbaXNQcm9kdWN0Vmlld109XCJ0cnVlXCIgKGxpc3RVcGRhdGVkKT1cImdldFByb2R1Y3QodGhpcy5pZCk7XG4gICAgICAgIHByb2R1Y3RCYXNpY0luZm9Db21wb25lbnQubG9hZFByb2R1Y3RTdG9ja3NTdW1tYXJ5KCk7XG4gICAgICAgIHByb2R1Y3RMb2NhdGlvbkxpc3QucmVsb2FkKCk7XG4gICAgICBcIj48L2FwcC1zdG9jay1yZWNlaXB0LXByb2R1Y3QtbGlzdD5cblxuICAgICAgPGFwcC1zdG9jay1pc3N1ZS1wcm9kdWN0cy1saXN0ICNzdG9ja0lzc3VlUHJvZHVjdExpc3RQYWdlIFtpc1Byb2R1Y3RWaWV3XT1cInRydWVcIlxuICAgICAgICBbcHJvZHVjdF09XCJwcm9kdWN0XCIgW2ZpbHRlcnNdPVwieyBwcm9kdWN0X2lkczogcHJvZHVjdD8uaWQgfVwiIChsaXN0VXBkYXRlZCk9XCJcbiAgICAgICAgZ2V0UHJvZHVjdCh0aGlzLmlkKTtcbiAgICAgICAgcHJvZHVjdEJhc2ljSW5mb0NvbXBvbmVudC5sb2FkUHJvZHVjdFN0b2Nrc1N1bW1hcnkoKTtcbiAgICAgICAgcHJvZHVjdExvY2F0aW9uTGlzdC5yZWxvYWQoKTtcbiAgICAgIFwiPjwvYXBwLXN0b2NrLWlzc3VlLXByb2R1Y3RzLWxpc3Q+XG5cbiAgICAgIDxhcHAtc3RvY2stdHJhbnNmZXItbGlzdCAjc3RvY2tUcmFuc2Zlckxpc3QgKm5nSWY9XCJwcm9kdWN0XCIgW3Byb2R1Y3RJZF09XCJwcm9kdWN0LmlkXCJcbiAgICAgICAgKGNoYW5nZWQpPVwic3RvY2tUcmFuc2ZlckNoYW5nZWQoKVwiPjwvYXBwLXN0b2NrLXRyYW5zZmVyLWxpc3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|