techlify-inventory-common 18.50.0 → 22.0.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/fesm2022/techlify-inventory-common-category.module-Dtn1604q.mjs +842 -0
- package/fesm2022/techlify-inventory-common-category.module-Dtn1604q.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-location.service-C99J8Lje.mjs +50 -0
- package/fesm2022/techlify-inventory-common-location.service-C99J8Lje.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-material.module-ClupVm7-.mjs +190 -0
- package/fesm2022/techlify-inventory-common-material.module-ClupVm7-.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-measure.service-DvJUGa0i.mjs +38 -0
- package/fesm2022/techlify-inventory-common-measure.service-DvJUGa0i.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-product-category-badges.component-VnfnNhtV.mjs +133 -0
- package/fesm2022/techlify-inventory-common-product-category-badges.component-VnfnNhtV.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-product.module-MZoVK3bN.mjs +4278 -0
- package/fesm2022/techlify-inventory-common-product.module-MZoVK3bN.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-CjED8n4_.mjs +852 -0
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-CjED8n4_.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-purchase-order.service-ztJ5RRH5.mjs +40 -0
- package/fesm2022/techlify-inventory-common-purchase-order.service-ztJ5RRH5.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-recipient.module-gxR77BIj.mjs +647 -0
- package/fesm2022/techlify-inventory-common-recipient.module-gxR77BIj.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-shared.module-DP-FVqea.mjs +102 -0
- package/fesm2022/techlify-inventory-common-shared.module-DP-FVqea.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-allocation-list.component-Du-VCtbs.mjs +382 -0
- package/fesm2022/techlify-inventory-common-stock-allocation-list.component-Du-VCtbs.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-DfgbqIKn.mjs +486 -0
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-DfgbqIKn.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue-page.module-DX9n3X1T.mjs +2509 -0
- package/fesm2022/techlify-inventory-common-stock-issue-page.module-DX9n3X1T.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue-product-view.component-D8aIc5Oh.mjs +208 -0
- package/fesm2022/techlify-inventory-common-stock-issue-product-view.component-D8aIc5Oh.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue-product.service-BRbfc5KP.mjs +38 -0
- package/fesm2022/techlify-inventory-common-stock-issue-product.service-BRbfc5KP.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue-view.component-Cp_0YkKh.mjs +239 -0
- package/fesm2022/techlify-inventory-common-stock-issue-view.component-Cp_0YkKh.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-issue.service-CLHasWVp.mjs +38 -0
- package/fesm2022/techlify-inventory-common-stock-issue.service-CLHasWVp.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-stock-receipts.module-BPxUGNbD.mjs +4195 -0
- package/fesm2022/techlify-inventory-common-stock-receipts.module-BPxUGNbD.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-techlify-filter.module-BdRNWNHi.mjs +464 -0
- package/fesm2022/techlify-inventory-common-techlify-filter.module-BdRNWNHi.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common-techlify-form-service-D9K3W2jt.mjs +13 -0
- package/fesm2022/techlify-inventory-common-techlify-form-service-D9K3W2jt.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +10803 -2
- package/fesm2022/techlify-inventory-common.mjs.map +1 -1
- package/package.json +9 -11
- package/types/techlify-inventory-common.d.ts +1792 -0
- package/esm2022/lib/inventory-common/category/category-form/category-form.component.mjs +0 -75
- package/esm2022/lib/inventory-common/category/category-form-button/category-form-button.component.mjs +0 -32
- package/esm2022/lib/inventory-common/category/category-list-page/category-list-page.component.mjs +0 -64
- package/esm2022/lib/inventory-common/category/category-routing.module.mjs +0 -29
- package/esm2022/lib/inventory-common/category/category-view/category-view.component.mjs +0 -46
- package/esm2022/lib/inventory-common/category/category.module.mjs +0 -62
- package/esm2022/lib/inventory-common/category/category.service.mjs +0 -18
- package/esm2022/lib/inventory-common/incident/incident-form/incident-form.component.mjs +0 -113
- package/esm2022/lib/inventory-common/incident/incident-form-button/incident-form-button.component.mjs +0 -45
- package/esm2022/lib/inventory-common/incident/incident-list/incident-list.component.mjs +0 -140
- package/esm2022/lib/inventory-common/incident/incident-routing.module.mjs +0 -24
- package/esm2022/lib/inventory-common/incident/incident.module.mjs +0 -22
- package/esm2022/lib/inventory-common/incident/incident.service.mjs +0 -18
- package/esm2022/lib/inventory-common/inventory-common-routing.module.mjs +0 -81
- package/esm2022/lib/inventory-common/inventory-common.module.mjs +0 -43
- package/esm2022/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.mjs +0 -44
- package/esm2022/lib/inventory-common/inventory-value-report.service.mjs +0 -21
- package/esm2022/lib/inventory-common/location/location-form/location-form.component.mjs +0 -63
- package/esm2022/lib/inventory-common/location/location-form-button/location-form-button.component.mjs +0 -47
- package/esm2022/lib/inventory-common/location/location-information/location-information.component.mjs +0 -36
- package/esm2022/lib/inventory-common/location/location-list/location-list.component.mjs +0 -81
- package/esm2022/lib/inventory-common/location/location-product-statistics/location-product-statistics.component.mjs +0 -80
- package/esm2022/lib/inventory-common/location/location-routing.module.mjs +0 -38
- package/esm2022/lib/inventory-common/location/location-status-changer/location-status-changer.component.mjs +0 -64
- package/esm2022/lib/inventory-common/location/location-view/location-view.component.mjs +0 -52
- package/esm2022/lib/inventory-common/location/location.module.mjs +0 -22
- package/esm2022/lib/inventory-common/location/location.service.mjs +0 -33
- package/esm2022/lib/inventory-common/location/shelf/shelf-form/shelf-form.component.mjs +0 -86
- package/esm2022/lib/inventory-common/location/shelf/shelf-form-button/shelf-form-button.component.mjs +0 -39
- package/esm2022/lib/inventory-common/location/shelf/shelf-list/shelf-list.component.mjs +0 -103
- package/esm2022/lib/inventory-common/location/shelf/shelf-routing.module.mjs +0 -24
- package/esm2022/lib/inventory-common/location/shelf/shelf.module.mjs +0 -22
- package/esm2022/lib/inventory-common/location/shelf/shelf.service.mjs +0 -20
- package/esm2022/lib/inventory-common/low-stock-report.service.mjs +0 -23
- package/esm2022/lib/inventory-common/material.module.mjs +0 -172
- package/esm2022/lib/inventory-common/measure/measure-form/measure-form.component.mjs +0 -63
- package/esm2022/lib/inventory-common/measure/measure-list/measure-list.component.mjs +0 -75
- package/esm2022/lib/inventory-common/measure/measure-routing.module.mjs +0 -24
- package/esm2022/lib/inventory-common/measure/measure.module.mjs +0 -43
- package/esm2022/lib/inventory-common/measure/measure.service.mjs +0 -18
- package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.mjs +0 -47
- package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.mjs +0 -22
- package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +0 -58
- package/esm2022/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.mjs +0 -54
- package/esm2022/lib/inventory-common/product/product-delete-button/product-delete-button.component.mjs +0 -54
- package/esm2022/lib/inventory-common/product/product-form/product-form.component.mjs +0 -258
- package/esm2022/lib/inventory-common/product/product-form-button/product-form-button.component.mjs +0 -15
- package/esm2022/lib/inventory-common/product/product-form.service.mjs +0 -17
- package/esm2022/lib/inventory-common/product/product-import-page/product-import-page.component.mjs +0 -66
- package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +0 -177
- package/esm2022/lib/inventory-common/product/product-location/product-location-list/product-location-list.component.mjs +0 -61
- package/esm2022/lib/inventory-common/product/product-measure-form/product-measure-form.component.mjs +0 -101
- package/esm2022/lib/inventory-common/product/product-measures-list/product-measures-list.component.mjs +0 -145
- package/esm2022/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.mjs +0 -12
- package/esm2022/lib/inventory-common/product/product-quick-search/product-quick-search.component.mjs +0 -69
- package/esm2022/lib/inventory-common/product/product-routing.module.mjs +0 -68
- package/esm2022/lib/inventory-common/product/product-search/product-search.component.mjs +0 -151
- package/esm2022/lib/inventory-common/product/product-search/product-search.module.mjs +0 -39
- package/esm2022/lib/inventory-common/product/product-statistics.service.mjs +0 -23
- package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.mjs +0 -57
- package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.mjs +0 -18
- package/esm2022/lib/inventory-common/product/product-summary.service.mjs +0 -20
- package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +0 -98
- package/esm2022/lib/inventory-common/product/product.module.mjs +0 -145
- package/esm2022/lib/inventory-common/product/product.service.mjs +0 -20
- package/esm2022/lib/inventory-common/product/widgets/product-category-badges/product-category-badges.component.mjs +0 -15
- package/esm2022/lib/inventory-common/product-batch.service.mjs +0 -20
- package/esm2022/lib/inventory-common/rating/rating-form/rating-form.component.mjs +0 -112
- package/esm2022/lib/inventory-common/rating/rating-form-button/rating-form-button.component.mjs +0 -45
- package/esm2022/lib/inventory-common/rating/rating-list/rating-list.component.mjs +0 -135
- package/esm2022/lib/inventory-common/rating/rating-routing.module.mjs +0 -23
- package/esm2022/lib/inventory-common/rating/rating.module.mjs +0 -22
- package/esm2022/lib/inventory-common/rating/rating.service.mjs +0 -18
- package/esm2022/lib/inventory-common/recipient/recipient-form/recipient-form.component.mjs +0 -59
- package/esm2022/lib/inventory-common/recipient/recipient-list/recipient-list.component.mjs +0 -49
- package/esm2022/lib/inventory-common/recipient/recipient-routing.module.mjs +0 -24
- package/esm2022/lib/inventory-common/recipient/recipient.module.mjs +0 -18
- package/esm2022/lib/inventory-common/recipient/recipient.service.mjs +0 -18
- package/esm2022/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.mjs +0 -152
- package/esm2022/lib/inventory-common/reports/low-stock-report/low-stock-report.component.mjs +0 -161
- package/esm2022/lib/inventory-common/reports/stock-issue-summary-report/stock-issue-product-data.service.mjs +0 -20
- package/esm2022/lib/inventory-common/reports/stock-issue-summary-report/stock-issue-summary-report.component.mjs +0 -98
- package/esm2022/lib/inventory-common/services/techlify-form-service.mjs +0 -11
- package/esm2022/lib/inventory-common/shared/export-to-excel-button/export-to-excel-button.component.mjs +0 -58
- package/esm2022/lib/inventory-common/shared.module.mjs +0 -67
- package/esm2022/lib/inventory-common/stock-allocation/stock-allocation-list/stock-allocation-list.component.mjs +0 -81
- package/esm2022/lib/inventory-common/stock-allocation/stock-allocation.service.mjs +0 -16
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.mjs +0 -198
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-import-page/stock-issue-import-page.component.mjs +0 -59
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-list/stock-issue-list.component.mjs +0 -149
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-page/stock-issue-page.component.mjs +0 -91
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-page/stock-issue-page.module.mjs +0 -82
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form-button/stock-issue-product-form-button.component.mjs +0 -35
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form.component.mjs +0 -102
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-view/stock-issue-product-view.component.mjs +0 -59
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product.service.mjs +0 -16
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.mjs +0 -163
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-routing.module.mjs +0 -51
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.mjs +0 -201
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-view/stock-issue-view.component.mjs +0 -64
- package/esm2022/lib/inventory-common/stock-issue/stock-issue.module.mjs +0 -47
- package/esm2022/lib/inventory-common/stock-issue/stock-issue.service.mjs +0 -18
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.mjs +0 -226
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-import-page/stock-receipt-import-page.component.mjs +0 -74
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-list/stock-receipt-list.component.mjs +0 -152
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form-button/stock-receipt-product-form-button.component.mjs +0 -37
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.mjs +0 -80
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-list/stock-receipt-product-list.component.mjs +0 -149
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-view/stock-receipt-product-view.component.mjs +0 -59
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product.service.mjs +0 -18
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-single-product-form/stock-receipt-simple-form/stock-receipt-single-product-form.component.mjs +0 -181
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-view/stock-receipt-view.component.mjs +0 -54
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt.service.mjs +0 -18
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-page/stock-receipts-page.component.mjs +0 -70
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-routing.module.mjs +0 -52
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipts.module.mjs +0 -104
- package/esm2022/lib/inventory-common/stock-summary.service.mjs +0 -26
- package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.mjs +0 -98
- package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.mjs +0 -139
- package/esm2022/lib/inventory-common/stock-transfer/stock-transfer.service.mjs +0 -18
- package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.mjs +0 -59
- package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector.module.mjs +0 -21
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-form/purchase-order-form.component.mjs +0 -156
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-listing/purchase-order-listing.component.mjs +0 -67
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-form/purchase-order-product-form.component.mjs +0 -74
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-form-button/purchase-order-product-form-button.component.mjs +0 -38
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-list.component.mjs +0 -61
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product.service.mjs +0 -20
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order-view/purchase-order-view.component.mjs +0 -64
- package/esm2022/lib/inventory-common/supplier/purchase-order/purchase-order.service.mjs +0 -20
- package/esm2022/lib/inventory-common/supplier/supplier-branch-delete-button/supplier-branch-delete-button.component.mjs +0 -63
- package/esm2022/lib/inventory-common/supplier/supplier-branch-form/supplier-branch-form-button/supplier-branch-form-button.component.mjs +0 -47
- package/esm2022/lib/inventory-common/supplier/supplier-branch-form/supplier-branch-form.component.mjs +0 -79
- package/esm2022/lib/inventory-common/supplier/supplier-branch.service.mjs +0 -18
- package/esm2022/lib/inventory-common/supplier/supplier-branches-list/supplier-branches-list.component.mjs +0 -79
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.component.mjs +0 -94
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.service.mjs +0 -17
- package/esm2022/lib/inventory-common/supplier/supplier-information/supplier-information.component.mjs +0 -73
- package/esm2022/lib/inventory-common/supplier/supplier-list/supplier-list.component.mjs +0 -68
- package/esm2022/lib/inventory-common/supplier/supplier-routing.module.mjs +0 -51
- package/esm2022/lib/inventory-common/supplier/supplier-type.service.mjs +0 -25
- package/esm2022/lib/inventory-common/supplier/supplier-view/supplier-view.component.mjs +0 -70
- package/esm2022/lib/inventory-common/supplier/supplier.component.mjs +0 -20
- package/esm2022/lib/inventory-common/supplier/supplier.module.mjs +0 -64
- package/esm2022/lib/inventory-common/supplier/supplier.service.mjs +0 -20
- package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.component.mjs +0 -116
- package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.module.mjs +0 -42
- package/esm2022/public-api.mjs +0 -71
- package/esm2022/techlify-inventory-common.mjs +0 -5
- package/fesm2022/techlify-inventory-common-category.module-CGzFP2S_.mjs +0 -288
- package/fesm2022/techlify-inventory-common-category.module-CGzFP2S_.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-5mLg0IvH.mjs +0 -227
- package/fesm2022/techlify-inventory-common-purchase-order-view.component-5mLg0IvH.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-recipient.module-DLoP6xI3.mjs +0 -147
- package/fesm2022/techlify-inventory-common-recipient.module-DLoP6xI3.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-MYEKRteU.mjs +0 -199
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-MYEKRteU.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-stock-issue-product-view.component-C-c83FEn.mjs +0 -60
- package/fesm2022/techlify-inventory-common-stock-issue-product-view.component-C-c83FEn.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-stock-issue-view.component-Co7hXpDq.mjs +0 -66
- package/fesm2022/techlify-inventory-common-stock-issue-view.component-Co7hXpDq.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs +0 -7214
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/inventory-common/category/category-form/category-form.component.d.ts +0 -18
- package/lib/inventory-common/category/category-form-button/category-form-button.component.d.ts +0 -13
- package/lib/inventory-common/category/category-list-page/category-list-page.component.d.ts +0 -20
- package/lib/inventory-common/category/category-routing.module.d.ts +0 -7
- package/lib/inventory-common/category/category-view/category-view.component.d.ts +0 -16
- package/lib/inventory-common/category/category.module.d.ts +0 -20
- package/lib/inventory-common/category/category.service.d.ts +0 -7
- package/lib/inventory-common/incident/incident-form/incident-form.component.d.ts +0 -19
- package/lib/inventory-common/incident/incident-form-button/incident-form-button.component.d.ts +0 -15
- package/lib/inventory-common/incident/incident-list/incident-list.component.d.ts +0 -22
- package/lib/inventory-common/incident/incident-routing.module.d.ts +0 -7
- package/lib/inventory-common/incident/incident.module.d.ts +0 -8
- package/lib/inventory-common/incident/incident.service.d.ts +0 -7
- package/lib/inventory-common/inventory-common-routing.module.d.ts +0 -7
- package/lib/inventory-common/inventory-common.module.d.ts +0 -14
- package/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.d.ts +0 -14
- package/lib/inventory-common/inventory-value-report.service.d.ts +0 -9
- package/lib/inventory-common/location/location-form/location-form.component.d.ts +0 -18
- package/lib/inventory-common/location/location-form-button/location-form-button.component.d.ts +0 -13
- package/lib/inventory-common/location/location-information/location-information.component.d.ts +0 -12
- package/lib/inventory-common/location/location-list/location-list.component.d.ts +0 -18
- package/lib/inventory-common/location/location-product-statistics/location-product-statistics.component.d.ts +0 -18
- package/lib/inventory-common/location/location-routing.module.d.ts +0 -7
- package/lib/inventory-common/location/location-status-changer/location-status-changer.component.d.ts +0 -17
- package/lib/inventory-common/location/location-view/location-view.component.d.ts +0 -16
- package/lib/inventory-common/location/location.module.d.ts +0 -8
- package/lib/inventory-common/location/location.service.d.ts +0 -15
- package/lib/inventory-common/location/shelf/shelf-form/shelf-form.component.d.ts +0 -18
- package/lib/inventory-common/location/shelf/shelf-form-button/shelf-form-button.component.d.ts +0 -13
- package/lib/inventory-common/location/shelf/shelf-list/shelf-list.component.d.ts +0 -19
- package/lib/inventory-common/location/shelf/shelf-routing.module.d.ts +0 -7
- package/lib/inventory-common/location/shelf/shelf.module.d.ts +0 -8
- package/lib/inventory-common/location/shelf/shelf.service.d.ts +0 -8
- package/lib/inventory-common/low-stock-report.service.d.ts +0 -10
- package/lib/inventory-common/material.module.d.ts +0 -40
- package/lib/inventory-common/measure/measure-form/measure-form.component.d.ts +0 -21
- package/lib/inventory-common/measure/measure-list/measure-list.component.d.ts +0 -19
- package/lib/inventory-common/measure/measure-routing.module.d.ts +0 -7
- package/lib/inventory-common/measure/measure.module.d.ts +0 -14
- package/lib/inventory-common/measure/measure.service.d.ts +0 -7
- package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.d.ts +0 -13
- package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.d.ts +0 -12
- package/lib/inventory-common/product/product-basic-info/product-basic-info.component.d.ts +0 -21
- package/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.d.ts +0 -17
- package/lib/inventory-common/product/product-delete-button/product-delete-button.component.d.ts +0 -26
- package/lib/inventory-common/product/product-form/product-form.component.d.ts +0 -46
- package/lib/inventory-common/product/product-form-button/product-form-button.component.d.ts +0 -7
- package/lib/inventory-common/product/product-form.service.d.ts +0 -7
- package/lib/inventory-common/product/product-import-page/product-import-page.component.d.ts +0 -10
- package/lib/inventory-common/product/product-list/product-list.component.d.ts +0 -34
- package/lib/inventory-common/product/product-location/product-location-list/product-location-list.component.d.ts +0 -18
- package/lib/inventory-common/product/product-measure-form/product-measure-form.component.d.ts +0 -33
- package/lib/inventory-common/product/product-measures-list/product-measures-list.component.d.ts +0 -43
- package/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.d.ts +0 -5
- package/lib/inventory-common/product/product-quick-search/product-quick-search.component.d.ts +0 -15
- package/lib/inventory-common/product/product-routing.module.d.ts +0 -7
- package/lib/inventory-common/product/product-search/product-search.component.d.ts +0 -48
- package/lib/inventory-common/product/product-search/product-search.module.d.ts +0 -13
- package/lib/inventory-common/product/product-statistics.service.d.ts +0 -9
- package/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.d.ts +0 -15
- package/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.d.ts +0 -10
- package/lib/inventory-common/product/product-summary.service.d.ts +0 -8
- package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +0 -44
- package/lib/inventory-common/product/product.module.d.ts +0 -31
- package/lib/inventory-common/product/product.service.d.ts +0 -8
- package/lib/inventory-common/product/widgets/product-category-badges/product-category-badges.component.d.ts +0 -6
- package/lib/inventory-common/product-batch.service.d.ts +0 -8
- package/lib/inventory-common/rating/rating-form/rating-form.component.d.ts +0 -19
- package/lib/inventory-common/rating/rating-form-button/rating-form-button.component.d.ts +0 -15
- package/lib/inventory-common/rating/rating-list/rating-list.component.d.ts +0 -22
- package/lib/inventory-common/rating/rating-routing.module.d.ts +0 -7
- package/lib/inventory-common/rating/rating.module.d.ts +0 -8
- package/lib/inventory-common/rating/rating.service.d.ts +0 -7
- package/lib/inventory-common/recipient/recipient-form/recipient-form.component.d.ts +0 -21
- package/lib/inventory-common/recipient/recipient-list/recipient-list.component.d.ts +0 -16
- package/lib/inventory-common/recipient/recipient-routing.module.d.ts +0 -7
- package/lib/inventory-common/recipient/recipient.module.d.ts +0 -9
- package/lib/inventory-common/recipient/recipient.service.d.ts +0 -7
- package/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.d.ts +0 -27
- package/lib/inventory-common/reports/low-stock-report/low-stock-report.component.d.ts +0 -25
- package/lib/inventory-common/reports/stock-issue-summary-report/stock-issue-product-data.service.d.ts +0 -8
- package/lib/inventory-common/reports/stock-issue-summary-report/stock-issue-summary-report.component.d.ts +0 -25
- package/lib/inventory-common/services/techlify-form-service.d.ts +0 -5
- package/lib/inventory-common/shared/export-to-excel-button/export-to-excel-button.component.d.ts +0 -12
- package/lib/inventory-common/shared.module.d.ts +0 -13
- package/lib/inventory-common/stock-allocation/stock-allocation-list/stock-allocation-list.component.d.ts +0 -19
- package/lib/inventory-common/stock-allocation/stock-allocation.service.d.ts +0 -7
- package/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.d.ts +0 -45
- package/lib/inventory-common/stock-issue/stock-issue-import-page/stock-issue-import-page.component.d.ts +0 -10
- package/lib/inventory-common/stock-issue/stock-issue-list/stock-issue-list.component.d.ts +0 -33
- package/lib/inventory-common/stock-issue/stock-issue-page/stock-issue-page.component.d.ts +0 -30
- package/lib/inventory-common/stock-issue/stock-issue-page/stock-issue-page.module.d.ts +0 -18
- package/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form-button/stock-issue-product-form-button.component.d.ts +0 -12
- package/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form.component.d.ts +0 -21
- package/lib/inventory-common/stock-issue/stock-issue-product-view/stock-issue-product-view.component.d.ts +0 -19
- package/lib/inventory-common/stock-issue/stock-issue-product.service.d.ts +0 -7
- package/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.d.ts +0 -40
- package/lib/inventory-common/stock-issue/stock-issue-routing.module.d.ts +0 -7
- package/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.d.ts +0 -42
- package/lib/inventory-common/stock-issue/stock-issue-view/stock-issue-view.component.d.ts +0 -19
- package/lib/inventory-common/stock-issue/stock-issue.module.d.ts +0 -14
- package/lib/inventory-common/stock-issue/stock-issue.service.d.ts +0 -7
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.d.ts +0 -48
- package/lib/inventory-common/stock-receipts/stock-receipt-import-page/stock-receipt-import-page.component.d.ts +0 -10
- package/lib/inventory-common/stock-receipts/stock-receipt-list/stock-receipt-list.component.d.ts +0 -30
- package/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form-button/stock-receipt-product-form-button.component.d.ts +0 -12
- package/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.d.ts +0 -17
- package/lib/inventory-common/stock-receipts/stock-receipt-product-list/stock-receipt-product-list.component.d.ts +0 -31
- package/lib/inventory-common/stock-receipts/stock-receipt-product-view/stock-receipt-product-view.component.d.ts +0 -19
- package/lib/inventory-common/stock-receipts/stock-receipt-product.service.d.ts +0 -7
- package/lib/inventory-common/stock-receipts/stock-receipt-single-product-form/stock-receipt-simple-form/stock-receipt-single-product-form.component.d.ts +0 -33
- package/lib/inventory-common/stock-receipts/stock-receipt-view/stock-receipt-view.component.d.ts +0 -19
- package/lib/inventory-common/stock-receipts/stock-receipt.service.d.ts +0 -7
- package/lib/inventory-common/stock-receipts/stock-receipts-page/stock-receipts-page.component.d.ts +0 -21
- package/lib/inventory-common/stock-receipts/stock-receipts-routing.module.d.ts +0 -7
- package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +0 -22
- package/lib/inventory-common/stock-summary.service.d.ts +0 -14
- package/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.d.ts +0 -19
- package/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.d.ts +0 -28
- package/lib/inventory-common/stock-transfer/stock-transfer.service.d.ts +0 -7
- package/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.d.ts +0 -20
- package/lib/inventory-common/supplier/payee-selector/payee-selector.module.d.ts +0 -11
- package/lib/inventory-common/supplier/purchase-order/purchase-order-form/purchase-order-form.component.d.ts +0 -30
- package/lib/inventory-common/supplier/purchase-order/purchase-order-listing/purchase-order-listing.component.d.ts +0 -16
- package/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-form/purchase-order-product-form.component.d.ts +0 -16
- package/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-form-button/purchase-order-product-form-button.component.d.ts +0 -12
- package/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product-list.component.d.ts +0 -15
- package/lib/inventory-common/supplier/purchase-order/purchase-order-product-list/purchase-order-product.service.d.ts +0 -8
- package/lib/inventory-common/supplier/purchase-order/purchase-order-view/purchase-order-view.component.d.ts +0 -19
- package/lib/inventory-common/supplier/purchase-order/purchase-order.service.d.ts +0 -8
- package/lib/inventory-common/supplier/supplier-branch-delete-button/supplier-branch-delete-button.component.d.ts +0 -18
- package/lib/inventory-common/supplier/supplier-branch-form/supplier-branch-form-button/supplier-branch-form-button.component.d.ts +0 -13
- package/lib/inventory-common/supplier/supplier-branch-form/supplier-branch-form.component.d.ts +0 -22
- package/lib/inventory-common/supplier/supplier-branch.service.d.ts +0 -7
- package/lib/inventory-common/supplier/supplier-branches-list/supplier-branches-list.component.d.ts +0 -18
- package/lib/inventory-common/supplier/supplier-form/supplier-form.component.d.ts +0 -25
- package/lib/inventory-common/supplier/supplier-form/supplier-form.service.d.ts +0 -7
- package/lib/inventory-common/supplier/supplier-information/supplier-information.component.d.ts +0 -18
- package/lib/inventory-common/supplier/supplier-list/supplier-list.component.d.ts +0 -20
- package/lib/inventory-common/supplier/supplier-routing.module.d.ts +0 -7
- package/lib/inventory-common/supplier/supplier-type.service.d.ts +0 -13
- package/lib/inventory-common/supplier/supplier-view/supplier-view.component.d.ts +0 -20
- package/lib/inventory-common/supplier/supplier.component.d.ts +0 -10
- package/lib/inventory-common/supplier/supplier.module.d.ts +0 -20
- package/lib/inventory-common/supplier/supplier.service.d.ts +0 -8
- package/lib/inventory-common/techlify-filter/techlify-filter.component.d.ts +0 -31
- package/lib/inventory-common/techlify-filter/techlify-filter.module.d.ts +0 -12
- package/public-api.d.ts +0 -67
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { Component, Inject, ViewChild } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
-
import { SearchableSelectorModule, TechlifyFeatureModule, TechlifyFormComponent, } from 'ngx-techlify-core';
|
|
5
|
-
import { MAT_DIALOG_DATA, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';
|
|
6
|
-
import { MaterialModule } from '../../material.module';
|
|
7
|
-
import { debounceTime, distinctUntilChanged } from 'rxjs';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "ngx-techlify-core";
|
|
10
|
-
import * as i2 from "@angular/forms";
|
|
11
|
-
import * as i3 from "../stock-issue-product.service";
|
|
12
|
-
import * as i4 from "@angular/material/dialog";
|
|
13
|
-
import * as i5 from "@angular/common";
|
|
14
|
-
import * as i6 from "@angular/material/button";
|
|
15
|
-
import * as i7 from "@angular/material/form-field";
|
|
16
|
-
import * as i8 from "@angular/material/input";
|
|
17
|
-
export class StockIssueProductFormComponent extends TechlifyFormComponent {
|
|
18
|
-
fb;
|
|
19
|
-
service;
|
|
20
|
-
data;
|
|
21
|
-
batchSelector;
|
|
22
|
-
batchesApiUrl = '';
|
|
23
|
-
isBatchPatched = false;
|
|
24
|
-
constructor(formValidatorService, fb, service, dialogRef, data) {
|
|
25
|
-
super(formValidatorService);
|
|
26
|
-
this.fb = fb;
|
|
27
|
-
this.service = service;
|
|
28
|
-
this.data = data;
|
|
29
|
-
this.dialogRef = dialogRef;
|
|
30
|
-
this.errorMessages = {
|
|
31
|
-
product_id: { required: 'Product is required.' },
|
|
32
|
-
quantity: { required: 'Quantity is required.', min: 'Quantity must be greater than or equal to 0.' },
|
|
33
|
-
};
|
|
34
|
-
this.form = this.fb.group({
|
|
35
|
-
id: [''],
|
|
36
|
-
stock_issue_id: ['', Validators.required],
|
|
37
|
-
product_id: ['', Validators.required],
|
|
38
|
-
quantity: [0, [Validators.required, Validators.min(0)]],
|
|
39
|
-
location_from_id: [''],
|
|
40
|
-
batch_id: [''],
|
|
41
|
-
particulars: [''],
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
ngOnInit() {
|
|
45
|
-
this.form.patchValue({ stock_issue_id: this.data.stockIssueId });
|
|
46
|
-
this.form.get('location_from_id')?.valueChanges.pipe(debounceTime(50), distinctUntilChanged()).subscribe((val) => {
|
|
47
|
-
this.resetBatchSelector(val);
|
|
48
|
-
});
|
|
49
|
-
const product = this.data.model;
|
|
50
|
-
if (product) {
|
|
51
|
-
this.isUpdate = true;
|
|
52
|
-
this.form.patchValue(product, { emitEvent: false });
|
|
53
|
-
this.resetBatchSelector(product.location_from_id, false);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
onBatchItemsChange() {
|
|
57
|
-
if (this.data.model && !this.isBatchPatched && this.batchSelector) {
|
|
58
|
-
this.form.get('batch_id')?.setValue(this.data.model.batch_id);
|
|
59
|
-
this.batchSelector.selectedValue = this.data.model.batch;
|
|
60
|
-
this.isBatchPatched = true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
resetBatchSelector(locationId, reset = true) {
|
|
64
|
-
if (reset) {
|
|
65
|
-
this.form.get('batch_id')?.setValue(null, { emitEvent: false });
|
|
66
|
-
}
|
|
67
|
-
this.batchesApiUrl = locationId ? `api/stock-receipt-batches?location_ids=${locationId}` : '';
|
|
68
|
-
Promise.resolve().then(() => {
|
|
69
|
-
if (this.batchSelector) {
|
|
70
|
-
if (reset) {
|
|
71
|
-
this.batchSelector.selectedValue = null;
|
|
72
|
-
}
|
|
73
|
-
this.batchSelector.apiUrl = this.batchesApiUrl;
|
|
74
|
-
this.batchSelector.reloadData();
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
cancel() {
|
|
79
|
-
this.dialogRef.close();
|
|
80
|
-
}
|
|
81
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.FormBuilder }, { token: i3.StockIssueProductService }, { token: i4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueProductFormComponent, isStandalone: true, selector: "app-stock-issue-product-form", viewQueries: [{ propertyName: "batchSelector", first: true, predicate: ["batchSelector"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<h3 mat-dialog-title class='text-center'>Stock Issue Product Form</h3>\n\n<mat-dialog-content>\n <form [formGroup]=\"form\" (submit)=\"submit(form.getRawValue())\" class=\"d-flex flex-column gap-3 mt-2\">\n\n <mat-form-field class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector formControlName=\"product_id\" apiUrl=\"api/products\" titleField=\"name\"\n [selectedValue]=\"data?.product\" [cache]=\"true\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('product_id')\">{{ getErrorMessage('product_id') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Quantity</mat-label>\n <input matInput type=\"number\" formControlName=\"quantity\" min=\"0\" step=\"any\">\n <mat-error *ngIf=\"isFieldValid('quantity')\">{{ getErrorMessage('quantity') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Location</mat-label>\n <app-searchable-selector formControlName=\"location_from_id\" apiUrl=\"api/inventory-locations?status_ids=1\"\n [selectedValue]=\"data.stockIssueProduct?.location\" titleField=\"title\"></app-searchable-selector>\n </mat-form-field>\n\n <ng-container *ngIf=\"form.value?.location_from_id && batchesApiUrl\">\n <mat-form-field class=\"w-100\" techlifyFeatureEnabled=\"product-batch-numbers\">\n <mat-label>Batch</mat-label>\n <app-searchable-selector #batchSelector formControlName=\"batch_id\"\n [apiUrl]=\"batchesApiUrl\" [enableSearch]=\"false\"\n (itemsChange)=\"onBatchItemsChange()\">\n </app-searchable-selector>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"3\"></textarea>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end gap-2\">\n <button mat-flat-button type=\"button\" [disabled]=\"isWorking\" (click)=\"cancel()\">Cancel</button>\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"isWorking\">Save</button>\n </div>\n\n </form>\n</mat-dialog-content>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.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.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: "ngmodule", type: MaterialModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.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: "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", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange", "isItemsEmpty"] }, { kind: "ngmodule", type: TechlifyFeatureModule }, { kind: "directive", type: i1.TechlifyFeatureEnabledDirective, selector: "[techlifyFeatureEnabled]", inputs: ["techlifyFeatureEnabled"] }], preserveWhitespaces: true });
|
|
83
|
-
}
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductFormComponent, decorators: [{
|
|
85
|
-
type: Component,
|
|
86
|
-
args: [{ selector: 'app-stock-issue-product-form', standalone: true, imports: [
|
|
87
|
-
CommonModule,
|
|
88
|
-
ReactiveFormsModule,
|
|
89
|
-
MaterialModule,
|
|
90
|
-
SearchableSelectorModule,
|
|
91
|
-
TechlifyFeatureModule,
|
|
92
|
-
MatDialogTitle,
|
|
93
|
-
MatDialogContent,
|
|
94
|
-
], template: "<h3 mat-dialog-title class='text-center'>Stock Issue Product Form</h3>\n\n<mat-dialog-content>\n <form [formGroup]=\"form\" (submit)=\"submit(form.getRawValue())\" class=\"d-flex flex-column gap-3 mt-2\">\n\n <mat-form-field class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector formControlName=\"product_id\" apiUrl=\"api/products\" titleField=\"name\"\n [selectedValue]=\"data?.product\" [cache]=\"true\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('product_id')\">{{ getErrorMessage('product_id') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Quantity</mat-label>\n <input matInput type=\"number\" formControlName=\"quantity\" min=\"0\" step=\"any\">\n <mat-error *ngIf=\"isFieldValid('quantity')\">{{ getErrorMessage('quantity') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Location</mat-label>\n <app-searchable-selector formControlName=\"location_from_id\" apiUrl=\"api/inventory-locations?status_ids=1\"\n [selectedValue]=\"data.stockIssueProduct?.location\" titleField=\"title\"></app-searchable-selector>\n </mat-form-field>\n\n <ng-container *ngIf=\"form.value?.location_from_id && batchesApiUrl\">\n <mat-form-field class=\"w-100\" techlifyFeatureEnabled=\"product-batch-numbers\">\n <mat-label>Batch</mat-label>\n <app-searchable-selector #batchSelector formControlName=\"batch_id\"\n [apiUrl]=\"batchesApiUrl\" [enableSearch]=\"false\"\n (itemsChange)=\"onBatchItemsChange()\">\n </app-searchable-selector>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"3\"></textarea>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end gap-2\">\n <button mat-flat-button type=\"button\" [disabled]=\"isWorking\" (click)=\"cancel()\">Cancel</button>\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"isWorking\">Save</button>\n </div>\n\n </form>\n</mat-dialog-content>\n" }]
|
|
95
|
-
}], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.FormBuilder }, { type: i3.StockIssueProductService }, { type: i4.MatDialogRef }, { type: undefined, decorators: [{
|
|
96
|
-
type: Inject,
|
|
97
|
-
args: [MAT_DIALOG_DATA]
|
|
98
|
-
}] }], propDecorators: { batchSelector: [{
|
|
99
|
-
type: ViewChild,
|
|
100
|
-
args: ['batchSelector']
|
|
101
|
-
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtcHJvZHVjdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3N0b2NrLWlzc3VlL3N0b2NrLWlzc3VlLXByb2R1Y3QtZm9ybS9zdG9jay1pc3N1ZS1wcm9kdWN0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWUvc3RvY2staXNzdWUtcHJvZHVjdC1mb3JtL3N0b2NrLWlzc3VlLXByb2R1Y3QtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBZSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBR0wsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQixxQkFBcUIsR0FDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFnQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQWdCMUQsTUFBTSxPQUFPLDhCQUErQixTQUFRLHFCQUFxQjtJQVE3RDtJQUNXO0lBRWE7SUFWTixhQUFhLENBQStCO0lBRXhFLGFBQWEsR0FBRyxFQUFF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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICBTZWFyY2hhYmxlU2VsZWN0b3JDb21wb25lbnQsXG4gIFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSxcbiAgVGVjaGxpZnlGZWF0dXJlTW9kdWxlLFxuICBUZWNobGlmeUZvcm1Db21wb25lbnQsXG59IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uLy4uL21hdGVyaWFsLm1vZHVsZSc7XG5pbXBvcnQgeyBTdG9ja0lzc3VlUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuLi9zdG9jay1pc3N1ZS1wcm9kdWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc3RvY2staXNzdWUtcHJvZHVjdC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b2NrLWlzc3VlLXByb2R1Y3QtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBTZWFyY2hhYmxlU2VsZWN0b3JNb2R1bGUsXG4gICAgVGVjaGxpZnlGZWF0dXJlTW9kdWxlLFxuICAgIE1hdERpYWxvZ1RpdGxlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFN0b2NrSXNzdWVQcm9kdWN0Rm9ybUNvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2JhdGNoU2VsZWN0b3InKSBiYXRjaFNlbGVjdG9yPzogU2VhcmNoYWJsZVNlbGVjdG9yQ29tcG9uZW50O1xuXG4gIGJhdGNoZXNBcGlVcmwgPSAnJztcbiAgaXNCYXRjaFBhdGNoZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtVmFsaWRhdG9yU2VydmljZTogRm9ybVZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNlcnZpY2U6IFN0b2NrSXNzdWVQcm9kdWN0U2VydmljZSxcbiAgICBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTdG9ja0lzc3VlUHJvZHVjdEZvcm1Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICApIHtcbiAgICBzdXBlcihmb3JtVmFsaWRhdG9yU2VydmljZSk7XG4gICAgdGhpcy5kaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG5cbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSB7XG4gICAgICBwcm9kdWN0X2lkOiB7IHJlcXVpcmVkOiAnUHJvZHVjdCBpcyByZXF1aXJlZC4nIH0sXG4gICAgICBxdWFudGl0eTogeyByZXF1aXJlZDogJ1F1YW50aXR5IGlzIHJlcXVpcmVkLicsIG1pbjogJ1F1YW50aXR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuJyB9LFxuICAgIH07XG5cbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBbJyddLFxuICAgICAgc3RvY2tfaXNzdWVfaWQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBwcm9kdWN0X2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcXVhbnRpdHk6IFswLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMCldXSxcbiAgICAgIGxvY2F0aW9uX2Zyb21faWQ6IFsnJ10sXG4gICAgICBiYXRjaF9pZDogWycnXSxcbiAgICAgIHBhcnRpY3VsYXJzOiBbJyddLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBzdG9ja19pc3N1ZV9pZDogdGhpcy5kYXRhLnN0b2NrSXNzdWVJZCB9KTtcblxuICAgIHRoaXMuZm9ybS5nZXQoJ2xvY2F0aW9uX2Zyb21faWQnKT8udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICApLnN1YnNjcmliZSgodmFsOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMucmVzZXRCYXRjaFNlbGVjdG9yKHZhbCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5kYXRhLm1vZGVsO1xuICAgIGlmIChwcm9kdWN0KSB7XG4gICAgICB0aGlzLmlzVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHByb2R1Y3QsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMucmVzZXRCYXRjaFNlbGVjdG9yKHByb2R1Y3QubG9jYXRpb25fZnJvbV9pZCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmF0Y2hJdGVtc0NoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLm1vZGVsICYmICF0aGlzLmlzQmF0Y2hQYXRjaGVkICYmIHRoaXMuYmF0Y2hTZWxlY3Rvcikge1xuICAgICAgdGhpcy5mb3JtLmdldCgnYmF0Y2hfaWQnKT8uc2V0VmFsdWUodGhpcy5kYXRhLm1vZGVsLmJhdGNoX2lkKTtcbiAgICAgIHRoaXMuYmF0Y2hTZWxlY3Rvci5zZWxlY3RlZFZhbHVlID0gdGhpcy5kYXRhLm1vZGVsLmJhdGNoO1xuICAgICAgdGhpcy5pc0JhdGNoUGF0Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEJhdGNoU2VsZWN0b3IobG9jYXRpb25JZDogbnVtYmVyLCByZXNldCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAocmVzZXQpIHtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2JhdGNoX2lkJyk/LnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gICAgdGhpcy5iYXRjaGVzQXBpVXJsID0gbG9jYXRpb25JZCA/IGBhcGkvc3RvY2stcmVjZWlwdC1iYXRjaGVzP2xvY2F0aW9uX2lkcz0ke2xvY2F0aW9uSWR9YCA6ICcnO1xuXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5iYXRjaFNlbGVjdG9yKSB7XG4gICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgIHRoaXMuYmF0Y2hTZWxlY3Rvci5zZWxlY3RlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhdGNoU2VsZWN0b3IuYXBpVXJsID0gdGhpcy5iYXRjaGVzQXBpVXJsO1xuICAgICAgICB0aGlzLmJhdGNoU2VsZWN0b3IucmVsb2FkRGF0YSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxoMyBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPSd0ZXh0LWNlbnRlcic+U3RvY2sgSXNzdWUgUHJvZHVjdCBGb3JtPC9oMz5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInN1Ym1pdChmb3JtLmdldFJhd1ZhbHVlKCkpXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTMgbXQtMlwiPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPlByb2R1Y3Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0X2lkXCIgYXBpVXJsPVwiYXBpL3Byb2R1Y3RzXCIgdGl0bGVGaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cImRhdGE/LnByb2R1Y3RcIiBbY2FjaGVdPVwidHJ1ZVwiPjwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdwcm9kdWN0X2lkJylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3Byb2R1Y3RfaWQnKSB9fTwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPlF1YW50aXR5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInF1YW50aXR5XCIgbWluPVwiMFwiIHN0ZXA9XCJhbnlcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3F1YW50aXR5JylcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ3F1YW50aXR5JykgfX08L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5Mb2NhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yIGZvcm1Db250cm9sTmFtZT1cImxvY2F0aW9uX2Zyb21faWRcIiBhcGlVcmw9XCJhcGkvaW52ZW50b3J5LWxvY2F0aW9ucz9zdGF0dXNfaWRzPTFcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cImRhdGEuc3RvY2tJc3N1ZVByb2R1Y3Q/LmxvY2F0aW9uXCIgdGl0bGVGaWVsZD1cInRpdGxlXCI+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS52YWx1ZT8ubG9jYXRpb25fZnJvbV9pZCAmJiBiYXRjaGVzQXBpVXJsXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIHRlY2hsaWZ5RmVhdHVyZUVuYWJsZWQ9XCJwcm9kdWN0LWJhdGNoLW51bWJlcnNcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkJhdGNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yICNiYXRjaFNlbGVjdG9yIGZvcm1Db250cm9sTmFtZT1cImJhdGNoX2lkXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwaVVybF09XCJiYXRjaGVzQXBpVXJsXCIgW2VuYWJsZVNlYXJjaF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChpdGVtc0NoYW5nZSk9XCJvbkJhdGNoSXRlbXNDaGFuZ2UoKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5QYXJ0aWN1bGFyczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInBhcnRpY3VsYXJzXCIgcm93cz1cIjNcIj48L3RleHRhcmVhPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIj5TYXZlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9mb3JtPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { SharedModule } from '../../shared.module';
|
|
3
|
-
import { NoteModule, TechlifyFeatureModule } from 'ngx-techlify-core';
|
|
4
|
-
import { StockAllocationListComponent } from '../../stock-allocation/stock-allocation-list/stock-allocation-list.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/router";
|
|
7
|
-
import * as i2 from "../stock-issue-product.service";
|
|
8
|
-
import * as i3 from "@angular/common";
|
|
9
|
-
import * as i4 from "@angular/material/card";
|
|
10
|
-
import * as i5 from "@angular/material/progress-bar";
|
|
11
|
-
import * as i6 from "ngx-techlify-core";
|
|
12
|
-
export class StockIssueProductViewComponent {
|
|
13
|
-
activatedRoute;
|
|
14
|
-
service;
|
|
15
|
-
location;
|
|
16
|
-
id;
|
|
17
|
-
isLoading;
|
|
18
|
-
model;
|
|
19
|
-
constructor(activatedRoute, service, location) {
|
|
20
|
-
this.activatedRoute = activatedRoute;
|
|
21
|
-
this.service = service;
|
|
22
|
-
this.location = location;
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
this.activatedRoute.params.subscribe(params => {
|
|
26
|
-
this.id = parseInt(params['id']);
|
|
27
|
-
if (this.id) {
|
|
28
|
-
this.loadData();
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
loadData() {
|
|
33
|
-
this.isLoading = true;
|
|
34
|
-
this.service.show(this.id).subscribe({
|
|
35
|
-
next: (response) => {
|
|
36
|
-
this.model = response?.item;
|
|
37
|
-
this.isLoading = false;
|
|
38
|
-
},
|
|
39
|
-
error: () => {
|
|
40
|
-
this.isLoading = false;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
redirectBack() {
|
|
45
|
-
this.location.back();
|
|
46
|
-
}
|
|
47
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductViewComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.StockIssueProductService }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueProductViewComponent, isStandalone: true, selector: "app-stock-issue-product-view", ngImport: i0, template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"model\" class=\"d-flex flex-column justify-content-start gap-2\">\n <mat-card>\n <mat-card-content>\n <h3 class=\"mb-0\">Stock Issue for {{ model?.product?.name }}</h3>\n </mat-card-content>\n </mat-card>\n <div class=\"d-flex justify-content-start align-items-start gap-2\">\n <div class=\"d-flex flex-column gap-2\" style=\"width: 350px\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n <strong class=\"mb-0 text-dark\">Information</strong>\n </div>\n <div class=\"d-flex justify-content-start align-items-center gap-2 text-secondary\">\n <app-techlify-icon name=\"edit\" role=\"button\"\n [routerLink]=\"['/inventory/stock-issues/form', model?.stock_issue_id]\"></app-techlify-icon>\n <app-techlify-delete-button [model]=\"model\" [service]=\"service\"\n [data]=\"{ title: model?.product?.name, type: 'Stock Issue Product' }\"\n (deleted)=\"redirectBack();\">\n </app-techlify-delete-button>\n </div>\n </mat-card-content>\n <mat-card-content class=\"d-flex flex-column justify-content-start gap-2 mt-3\">\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex flex-column gap-0\">\n <a class=\"text-decoration-none text-black\"\n [routerLink]=\"['/inventory/products', model?.product?.id, 'view']\">\n <p class=\"mb-0\">{{ model?.product?.name }}</p>\n </a>\n <small *ngIf=\"model?.product?.sku\">{{ model?.product?.sku }}</small>\n </div>\n <div class=\"d-flex flex-column justify-content-end gap-0\">\n <small *ngIf=\"model?.stock_issue?.date\">{{ model?.stock_issue?.date | date }}</small>\n <ng-container *ngIf=\"model?.batch?.expires_on\">\n <small techlifyFeatureEnabled=\"product-batch-numbers\">\n Expires on {{ model?.batch?.expires_on | date }}\n </small>\n </ng-container>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-6\" *ngIf=\"model?.quantity\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Quantity</small>\n <div class=\"d-flex gap-1\">\n <h3 class=\"mb-0\">{{ model?.quantity }}</h3>\n <small class=\"text-secondary\">{{ model?.product?.measure?.title }}</small>\n </div>\n </div>\n </div>\n\n <div class=\"col-6\" *ngIf=\"model?.location\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Location</small>\n <p class=\"mb-0\">{{ model?.location?.title }}</p>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"model?.batch\">\n <div class=\"row\" techlifyFeatureEnabled=\"product-batch-numbers\">\n <div class=\"col-6\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Batch</small>\n <p class=\"mb-0\">{{ model?.batch?.batch_number }}</p>\n </div>\n </div>\n <div class=\"col-6\" *ngIf=\"model?.batch?.expires_on\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Expires On</small>\n <p class=\"mb-0\">{{ model?.batch?.expires_on | date }}</p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"row\" *ngIf=\"model?.particulars\">\n <div class=\"col-12\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Particulars</small>\n <p class=\"mb-0\">{{ model?.particulars }}</p>\n </div>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"model?.stock_issue?.creator\">\n <div class=\"col-12\">\n <small class=\"mb-0\">\n <span class=\"text-secondary\">Created By</span> {{ model?.stock_issue?.creator?.name }}\n <span class=\"text-secondary\">On</span> {{ model?.stock_issue?.created_at | date }}\n </small>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"StockIssueProduct\"\n [relatedModelId]=\"model?.stock_issue_id\"></app-note-list>\n </div>\n\n <div style=\"width: calc(100% - 350px - 0.5rem)\">\n <app-stock-allocation-list [stockIssueProductId]=\"model?.id\"></app-stock-allocation-list>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: SharedModule }, { 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.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i6.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.TechlifyDeleteButtonComponent, selector: "app-techlify-delete-button", inputs: ["data", "model", "message", "service"], outputs: ["deleted"] }, { kind: "component", type: i6.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "ngmodule", type: NoteModule }, { kind: "ngmodule", type: TechlifyFeatureModule }, { kind: "directive", type: i6.TechlifyFeatureEnabledDirective, selector: "[techlifyFeatureEnabled]", inputs: ["techlifyFeatureEnabled"] }, { kind: "component", type: StockAllocationListComponent, selector: "app-stock-allocation-list", inputs: ["stockIssueProductId", "stockReceiptProductId", "selectedColumns"], outputs: ["selectedColumnsChange"] }], preserveWhitespaces: true });
|
|
49
|
-
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductViewComponent, decorators: [{
|
|
51
|
-
type: Component,
|
|
52
|
-
args: [{ selector: 'app-stock-issue-product-view', standalone: true, imports: [
|
|
53
|
-
SharedModule,
|
|
54
|
-
NoteModule,
|
|
55
|
-
TechlifyFeatureModule,
|
|
56
|
-
StockAllocationListComponent
|
|
57
|
-
], template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"model\" class=\"d-flex flex-column justify-content-start gap-2\">\n <mat-card>\n <mat-card-content>\n <h3 class=\"mb-0\">Stock Issue for {{ model?.product?.name }}</h3>\n </mat-card-content>\n </mat-card>\n <div class=\"d-flex justify-content-start align-items-start gap-2\">\n <div class=\"d-flex flex-column gap-2\" style=\"width: 350px\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n <strong class=\"mb-0 text-dark\">Information</strong>\n </div>\n <div class=\"d-flex justify-content-start align-items-center gap-2 text-secondary\">\n <app-techlify-icon name=\"edit\" role=\"button\"\n [routerLink]=\"['/inventory/stock-issues/form', model?.stock_issue_id]\"></app-techlify-icon>\n <app-techlify-delete-button [model]=\"model\" [service]=\"service\"\n [data]=\"{ title: model?.product?.name, type: 'Stock Issue Product' }\"\n (deleted)=\"redirectBack();\">\n </app-techlify-delete-button>\n </div>\n </mat-card-content>\n <mat-card-content class=\"d-flex flex-column justify-content-start gap-2 mt-3\">\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex flex-column gap-0\">\n <a class=\"text-decoration-none text-black\"\n [routerLink]=\"['/inventory/products', model?.product?.id, 'view']\">\n <p class=\"mb-0\">{{ model?.product?.name }}</p>\n </a>\n <small *ngIf=\"model?.product?.sku\">{{ model?.product?.sku }}</small>\n </div>\n <div class=\"d-flex flex-column justify-content-end gap-0\">\n <small *ngIf=\"model?.stock_issue?.date\">{{ model?.stock_issue?.date | date }}</small>\n <ng-container *ngIf=\"model?.batch?.expires_on\">\n <small techlifyFeatureEnabled=\"product-batch-numbers\">\n Expires on {{ model?.batch?.expires_on | date }}\n </small>\n </ng-container>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-6\" *ngIf=\"model?.quantity\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Quantity</small>\n <div class=\"d-flex gap-1\">\n <h3 class=\"mb-0\">{{ model?.quantity }}</h3>\n <small class=\"text-secondary\">{{ model?.product?.measure?.title }}</small>\n </div>\n </div>\n </div>\n\n <div class=\"col-6\" *ngIf=\"model?.location\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Location</small>\n <p class=\"mb-0\">{{ model?.location?.title }}</p>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"model?.batch\">\n <div class=\"row\" techlifyFeatureEnabled=\"product-batch-numbers\">\n <div class=\"col-6\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Batch</small>\n <p class=\"mb-0\">{{ model?.batch?.batch_number }}</p>\n </div>\n </div>\n <div class=\"col-6\" *ngIf=\"model?.batch?.expires_on\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Expires On</small>\n <p class=\"mb-0\">{{ model?.batch?.expires_on | date }}</p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"row\" *ngIf=\"model?.particulars\">\n <div class=\"col-12\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Particulars</small>\n <p class=\"mb-0\">{{ model?.particulars }}</p>\n </div>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"model?.stock_issue?.creator\">\n <div class=\"col-12\">\n <small class=\"mb-0\">\n <span class=\"text-secondary\">Created By</span> {{ model?.stock_issue?.creator?.name }}\n <span class=\"text-secondary\">On</span> {{ model?.stock_issue?.created_at | date }}\n </small>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"StockIssueProduct\"\n [relatedModelId]=\"model?.stock_issue_id\"></app-note-list>\n </div>\n\n <div style=\"width: calc(100% - 350px - 0.5rem)\">\n <app-stock-allocation-list [stockIssueProductId]=\"model?.id\"></app-stock-allocation-list>\n </div>\n </div>\n</div>\n" }]
|
|
58
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.StockIssueProductService }, { type: i3.Location }] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtcHJvZHVjdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3N0b2NrLWlzc3VlL3N0b2NrLWlzc3VlLXByb2R1Y3Qtdmlldy9zdG9jay1pc3N1ZS1wcm9kdWN0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWUvc3RvY2staXNzdWUtcHJvZHVjdC12aWV3L3N0b2NrLWlzc3VlLXByb2R1Y3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOEVBQThFLENBQUM7Ozs7Ozs7O0FBYzVILE1BQU0sT0FBTyw4QkFBOEI7SUFPM0I7SUFDRTtJQUNGO0lBUFosRUFBRSxDQUFVO0lBQ1osU0FBUyxDQUFXO0lBQ3BCLEtBQUssQ0FBTztJQUVaLFlBQ1ksY0FBOEIsRUFDNUIsT0FBaUMsRUFDbkMsUUFBa0I7UUFGbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDMUIsQ0FBQztJQUVMLFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqQyxJQUFJLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7d0dBcENRLDhCQUE4Qjs0RkFBOUIsOEJBQThCLHdGQ3BCM0MsOHNNQTZHQSx5REQvRlEsWUFBWSxzdUNBQ1osVUFBVSw4QkFDVixxQkFBcUIsMEtBQ3JCLDRCQUE0Qjs7NEZBR3ZCLDhCQUE4QjtrQkFaMUMsU0FBUzsrQkFDSSw4QkFBOEIsY0FHNUIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixxQkFBcUI7d0JBQ3JCLDRCQUE0QjtxQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBTdG9ja0lzc3VlUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuLi9zdG9jay1pc3N1ZS1wcm9kdWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90ZU1vZHVsZSwgVGVjaGxpZnlGZWF0dXJlTW9kdWxlIH0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgU3RvY2tBbGxvY2F0aW9uTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3N0b2NrLWFsbG9jYXRpb24vc3RvY2stYWxsb2NhdGlvbi1saXN0L3N0b2NrLWFsbG9jYXRpb24tbGlzdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1zdG9jay1pc3N1ZS1wcm9kdWN0LXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdG9jay1pc3N1ZS1wcm9kdWN0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zdG9jay1pc3N1ZS1wcm9kdWN0LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBTaGFyZWRNb2R1bGUsXG4gICAgICAgIE5vdGVNb2R1bGUsXG4gICAgICAgIFRlY2hsaWZ5RmVhdHVyZU1vZHVsZSxcbiAgICAgICAgU3RvY2tBbGxvY2F0aW9uTGlzdENvbXBvbmVudFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFN0b2NrSXNzdWVQcm9kdWN0Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBpZCE6IG51bWJlcjtcbiAgICBpc0xvYWRpbmchOiBib29sZWFuO1xuICAgIG1vZGVsITogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VydmljZTogU3RvY2tJc3N1ZVByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmlkID0gcGFyc2VJbnQocGFyYW1zWydpZCddKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkRGF0YSgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc2hvdyh0aGlzLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gcmVzcG9uc2U/Lml0ZW07XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZGlyZWN0QmFjaygpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgfVxufVxuIiwiPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzTG9hZGluZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cblxuPGRpdiAqbmdJZj1cIm1vZGVsXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LXN0YXJ0IGdhcC0yXCI+XG4gICAgPG1hdC1jYXJkPlxuICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1iLTBcIj5TdG9jayBJc3N1ZSBmb3Ige3sgbW9kZWw/LnByb2R1Y3Q/Lm5hbWUgfX08L2gzPlxuICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yXCIgc3R5bGU9XCJ3aWR0aDogMzUwcHhcIj5cbiAgICAgICAgICAgIDxtYXQtY2FyZD5cbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gdW5ncm91cCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwibWItMCB0ZXh0LWRhcmtcIj5JbmZvcm1hdGlvbjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWljb24gbmFtZT1cImVkaXRcIiByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvc3RvY2staXNzdWVzL2Zvcm0nLCBtb2RlbD8uc3RvY2tfaXNzdWVfaWRdXCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktZGVsZXRlLWJ1dHRvbiBbbW9kZWxdPVwibW9kZWxcIiBbc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ7IHRpdGxlOiBtb2RlbD8ucHJvZHVjdD8ubmFtZSwgdHlwZTogJ1N0b2NrIElzc3VlIFByb2R1Y3QnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVkKT1cInJlZGlyZWN0QmFjaygpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdGVjaGxpZnktZGVsZXRlLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMiBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LWJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5L3Byb2R1Y3RzJywgbW9kZWw/LnByb2R1Y3Q/LmlkLCAndmlldyddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7IG1vZGVsPy5wcm9kdWN0Py5uYW1lIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJtb2RlbD8ucHJvZHVjdD8uc2t1XCI+e3sgbW9kZWw/LnByb2R1Y3Q/LnNrdSB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCAqbmdJZj1cIm1vZGVsPy5zdG9ja19pc3N1ZT8uZGF0ZVwiPnt7IG1vZGVsPy5zdG9ja19pc3N1ZT8uZGF0ZSB8IGRhdGUgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbD8uYmF0Y2g/LmV4cGlyZXNfb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIHRlY2hsaWZ5RmVhdHVyZUVuYWJsZWQ9XCJwcm9kdWN0LWJhdGNoLW51bWJlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGlyZXMgb24ge3sgbW9kZWw/LmJhdGNoPy5leHBpcmVzX29uIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiICpuZ0lmPVwibW9kZWw/LnF1YW50aXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPlF1YW50aXR5PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibWItMFwiPnt7IG1vZGVsPy5xdWFudGl0eSB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPnt7IG1vZGVsPy5wcm9kdWN0Py5tZWFzdXJlPy50aXRsZSB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiICpuZ0lmPVwibW9kZWw/LmxvY2F0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPkxvY2F0aW9uPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgbW9kZWw/LmxvY2F0aW9uPy50aXRsZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWw/LmJhdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgdGVjaGxpZnlGZWF0dXJlRW5hYmxlZD1cInByb2R1Y3QtYmF0Y2gtbnVtYmVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPkJhdGNoPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPnt7IG1vZGVsPy5iYXRjaD8uYmF0Y2hfbnVtYmVyIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIiAqbmdJZj1cIm1vZGVsPy5iYXRjaD8uZXhwaXJlc19vblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPkV4cGlyZXMgT248L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgbW9kZWw/LmJhdGNoPy5leHBpcmVzX29uIHwgZGF0ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwibW9kZWw/LnBhcnRpY3VsYXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPlBhcnRpY3VsYXJzPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgbW9kZWw/LnBhcnRpY3VsYXJzIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIm1vZGVsPy5zdG9ja19pc3N1ZT8uY3JlYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPkNyZWF0ZWQgQnk8L3NwYW4+IHt7IG1vZGVsPy5zdG9ja19pc3N1ZT8uY3JlYXRvcj8ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+T248L3NwYW4+IHt7IG1vZGVsPy5zdG9ja19pc3N1ZT8uY3JlYXRlZF9hdCB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG5cbiAgICAgICAgICAgIDxhcHAtbm90ZS1saXN0IGxhYmVsVGV4dD1cIk5vdGVzXCIgdmlld01vZGU9XCJ0aW1lbGluZVwiIG1vZGVsVHlwZT1cIlN0b2NrSXNzdWVQcm9kdWN0XCJcbiAgICAgICAgICAgICAgICBbcmVsYXRlZE1vZGVsSWRdPVwibW9kZWw/LnN0b2NrX2lzc3VlX2lkXCI+PC9hcHAtbm90ZS1saXN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IGNhbGMoMTAwJSAtIDM1MHB4IC0gMC41cmVtKVwiPlxuICAgICAgICAgICAgPGFwcC1zdG9jay1hbGxvY2F0aW9uLWxpc3QgW3N0b2NrSXNzdWVQcm9kdWN0SWRdPVwibW9kZWw/LmlkXCI+PC9hcHAtc3RvY2stYWxsb2NhdGlvbi1saXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { TechlifyService } from 'ngx-techlify-core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "ngx-techlify-core";
|
|
5
|
-
export class StockIssueProductService extends TechlifyService {
|
|
6
|
-
constructor(httpService) {
|
|
7
|
-
super(httpService, 'stock-issue-products');
|
|
8
|
-
}
|
|
9
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductService, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
10
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductService, providedIn: 'root' });
|
|
11
|
-
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductService, decorators: [{
|
|
13
|
-
type: Injectable,
|
|
14
|
-
args: [{ providedIn: 'root' }]
|
|
15
|
-
}], ctorParameters: () => [{ type: i1.HttpService }] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtcHJvZHVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWUvc3RvY2staXNzdWUtcHJvZHVjdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFHakUsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGVBQWU7SUFDM0QsWUFBWSxXQUF3QjtRQUNsQyxLQUFLLENBQUMsV0FBVyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDN0MsQ0FBQzt3R0FIVSx3QkFBd0I7NEdBQXhCLHdCQUF3QixjQURYLE1BQU07OzRGQUNuQix3QkFBd0I7a0JBRHBDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UsIFRlY2hsaWZ5U2VydmljZSB9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9ja0lzc3VlUHJvZHVjdFNlcnZpY2UgZXh0ZW5kcyBUZWNobGlmeVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihodHRwU2VydmljZTogSHR0cFNlcnZpY2UpIHtcbiAgICBzdXBlcihodHRwU2VydmljZSwgJ3N0b2NrLWlzc3VlLXByb2R1Y3RzJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, effect, input, model, output, signal } from "@angular/core";
|
|
3
|
-
import { StockIssueProductFormComponent } from "../stock-issue-product-form/stock-issue-product-form.component";
|
|
4
|
-
import { StockIssueSingleProductFormComponent } from "../stock-issue-single-product-form/stock-issue-single-product-form.component";
|
|
5
|
-
import { TechlifyListComponent } from 'ngx-techlify-core';
|
|
6
|
-
import { UntilDestroy } from "@ngneat/until-destroy";
|
|
7
|
-
import { DatePipe } from "@angular/common";
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "../stock-issue-product.service";
|
|
10
|
-
import * as i2 from "@angular/forms";
|
|
11
|
-
import * as i3 from "ngx-techlify-core";
|
|
12
|
-
import * as i4 from "@angular/common";
|
|
13
|
-
import * as i5 from "@angular/material/sort";
|
|
14
|
-
import * as i6 from "@angular/material/table";
|
|
15
|
-
import * as i7 from "@angular/material/card";
|
|
16
|
-
import * as i8 from "@angular/material/tooltip";
|
|
17
|
-
import * as i9 from "@angular/material/progress-bar";
|
|
18
|
-
import * as i10 from "ngx-infinite-scroll";
|
|
19
|
-
import * as i11 from "@angular/router";
|
|
20
|
-
import * as i12 from "../../product/widgets/product-category-badges/product-category-badges.component";
|
|
21
|
-
let StockIssueProductListComponent = class StockIssueProductListComponent extends TechlifyListComponent {
|
|
22
|
-
service;
|
|
23
|
-
formBuilder;
|
|
24
|
-
featureService;
|
|
25
|
-
datePipe;
|
|
26
|
-
filtersInput = input({}, { alias: 'filters' });
|
|
27
|
-
isProductView = input(false);
|
|
28
|
-
product = input(null);
|
|
29
|
-
stockIssueSingleProductForm = signal(StockIssueSingleProductFormComponent);
|
|
30
|
-
selectedColumns = model([]);
|
|
31
|
-
exportInProgress = input(false);
|
|
32
|
-
listUpdated = output();
|
|
33
|
-
columnConfigReady = output();
|
|
34
|
-
issuableData = input(null);
|
|
35
|
-
stockIssueProductForm = signal(StockIssueProductFormComponent);
|
|
36
|
-
productViewHiddenColumns = ['product', 'sku', 'measure'];
|
|
37
|
-
_defaultSelectedColumns = [];
|
|
38
|
-
columnConfig = [
|
|
39
|
-
{ label: '#', def: 'no', isSelected: true, isEditable: false },
|
|
40
|
-
{ label: 'Issue #', def: 'issue_number', isSelected: true, isEditable: false },
|
|
41
|
-
{ label: 'Product', def: 'product', isSelected: true, isEditable: false },
|
|
42
|
-
{ label: 'Average Cost', def: 'average_cost', isSelected: false, isEditable: true },
|
|
43
|
-
{ label: 'Product Categories', def: 'product_categories', isSelected: false, isEditable: true, isExportable: false },
|
|
44
|
-
{ label: 'Categories', def: 'categories', isSelected: false, isEditable: false, isExportable: true },
|
|
45
|
-
{ label: 'SKU', def: 'sku', isSelected: true, isEditable: false },
|
|
46
|
-
{ label: 'Date', def: 'date', isSelected: true, isEditable: false },
|
|
47
|
-
{ label: 'Quantity', def: 'quantity', isSelected: true, isEditable: false },
|
|
48
|
-
{ label: 'Total', def: 'total', isSelected: true, isEditable: false },
|
|
49
|
-
{ label: 'Measure', def: 'measure', isSelected: true, isEditable: true },
|
|
50
|
-
{ label: 'Location', def: 'location', isSelected: true, isEditable: false },
|
|
51
|
-
{ label: 'Related', def: 'related', isSelected: true, isEditable: false },
|
|
52
|
-
{ label: 'Particulars', def: 'particulars', isSelected: true, isEditable: false },
|
|
53
|
-
{ label: 'Creator', def: 'creator', isSelected: false, isEditable: true },
|
|
54
|
-
{ label: 'Actions', def: 'actions', isSelected: true, isEditable: false, isExportable: false },
|
|
55
|
-
];
|
|
56
|
-
get displayedColumns() {
|
|
57
|
-
const cols = this.selectedColumns().length > 0 ? this.selectedColumns() : this._defaultSelectedColumns;
|
|
58
|
-
const selectedDefs = new Set(cols.map(col => col.def));
|
|
59
|
-
return this.columnConfig.filter(col => {
|
|
60
|
-
if (this.isProductView() && this.productViewHiddenColumns.includes(col.def)) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
if (this.exportInProgress()) {
|
|
64
|
-
if (col.isExportable === true) {
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
if (col.isExportable === false) {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return selectedDefs.has(col.def);
|
|
72
|
-
}).map(col => col.def);
|
|
73
|
-
}
|
|
74
|
-
get totalQuantity() {
|
|
75
|
-
return this.models.reduce((sum, model) => sum + Number(model?.quantity ?? 0), 0);
|
|
76
|
-
}
|
|
77
|
-
get grandTotal() {
|
|
78
|
-
return this.models.reduce((sum, model) => sum + Number(model?.total ?? 0), 0);
|
|
79
|
-
}
|
|
80
|
-
get footerColumns() {
|
|
81
|
-
return this.displayedColumns.map(col => `footer-${col}`);
|
|
82
|
-
}
|
|
83
|
-
constructor(service, formBuilder, featureService, datePipe) {
|
|
84
|
-
super();
|
|
85
|
-
this.service = service;
|
|
86
|
-
this.formBuilder = formBuilder;
|
|
87
|
-
this.featureService = featureService;
|
|
88
|
-
this.datePipe = datePipe;
|
|
89
|
-
this.filterFormConfiguration = {
|
|
90
|
-
date_from: { date: true },
|
|
91
|
-
date_to: { date: true },
|
|
92
|
-
category_ids: { multiple: true },
|
|
93
|
-
location_ids: { multiple: true },
|
|
94
|
-
measure_ids: { multiple: true },
|
|
95
|
-
product_ids: { multiple: true },
|
|
96
|
-
};
|
|
97
|
-
this.filterForm = this.formBuilder.group({
|
|
98
|
-
category_ids: [''],
|
|
99
|
-
date_from: [''],
|
|
100
|
-
date_to: [''],
|
|
101
|
-
duration: [''],
|
|
102
|
-
location_ids: [''],
|
|
103
|
-
measure_ids: [''],
|
|
104
|
-
product_ids: [''],
|
|
105
|
-
search: [''],
|
|
106
|
-
sort_by: ['date|desc'],
|
|
107
|
-
page: this.page,
|
|
108
|
-
perPage: this.perPage,
|
|
109
|
-
});
|
|
110
|
-
let initialized = false;
|
|
111
|
-
effect(() => {
|
|
112
|
-
const filters = this.filtersInput();
|
|
113
|
-
if (!initialized) {
|
|
114
|
-
initialized = true;
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
this.filterForm.patchValue(filters, { emitEvent: true });
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
ngOnInit() {
|
|
121
|
-
this.loadFeatures();
|
|
122
|
-
this._defaultSelectedColumns = this.columnConfig.filter(col => col.isSelected);
|
|
123
|
-
queueMicrotask(() => this.columnConfigReady.emit(this.columnConfig));
|
|
124
|
-
const initialFilters = this.filtersInput();
|
|
125
|
-
if (initialFilters) {
|
|
126
|
-
this.filterForm.patchValue(initialFilters, { emitEvent: false });
|
|
127
|
-
}
|
|
128
|
-
this.patchFiltersFromRoute();
|
|
129
|
-
this.listenFilterChanges();
|
|
130
|
-
this.loadData();
|
|
131
|
-
}
|
|
132
|
-
loadData() {
|
|
133
|
-
let filters = this.filterForm.value;
|
|
134
|
-
filters.date_from = this.datePipe.transform(filters.date_from, 'yyyy-mm-dd') ?? '';
|
|
135
|
-
filters.date_to = this.datePipe.transform(filters.date_to, 'yyyy-mm-dd') ?? '';
|
|
136
|
-
filters.page = this.page;
|
|
137
|
-
filters.perPage = this.perPage;
|
|
138
|
-
if (this.issuableData()) {
|
|
139
|
-
filters.issuable_ids = this.issuableData()?.issuable_id;
|
|
140
|
-
filters.issuable_type = this.issuableData()?.issuable_type;
|
|
141
|
-
}
|
|
142
|
-
super.loadData(filters);
|
|
143
|
-
}
|
|
144
|
-
loadFeatures() {
|
|
145
|
-
if (this.featureService.isFeatureExists('product-batch-numbers')) {
|
|
146
|
-
const qtyIndex = this.columnConfig.findIndex(c => c.def === 'quantity');
|
|
147
|
-
if (qtyIndex >= 0) {
|
|
148
|
-
this.columnConfig.splice(qtyIndex + 1, 0, { label: 'Batch', def: 'batch', isSelected: true, isEditable: false });
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductListComponent, deps: [{ token: i1.StockIssueProductService }, { token: i2.FormBuilder }, { token: i3.TechlifyFeatureService }, { token: i4.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
153
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: StockIssueProductListComponent, selector: "app-stock-issue-products-list", inputs: { filtersInput: { classPropertyName: "filtersInput", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, isProductView: { classPropertyName: "isProductView", publicName: "isProductView", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", 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 }, issuableData: { classPropertyName: "issuableData", publicName: "issuableData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedColumns: "selectedColumnsChange", listUpdated: "listUpdated", columnConfigReady: "columnConfigReady" }, providers: [DatePipe], 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 <app-techlify-form-button [component]=\"stockIssueSingleProductForm()\" [data]=\"{ product: product() }\" width=\"500px\"\n (saved)=\"modelCreated($event);listUpdated.emit(true)\"></app-techlify-form-button>\n <app-column-selector *ngIf=\"columnConfig.length > 0\" mode=\"icon\" [columnConfigs]=\"columnConfig\"\n [(selectedColumns)]=\"selectedColumns\"></app-column-selector>\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 <ng-container matColumnDef=\"issue_number\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"Stock Issue ID\">Issue #</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 }} <i class=\"fa-solid fa-up-right-from-square\"></i>\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 <!-- Average Price Column -->\n <ng-container matColumnDef=\"average_cost\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Average Cost</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.average_cost | currency: 'USD'}}\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 <!-- Total Column -->\n <ng-container matColumnDef=\"total\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Total</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.total | currency }}\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_from_id, 'view']\">\n {{ element?.location?.title }}\n </a>\n <br>\n <span *ngIf=\"element?.stock_issue?.recipient\">\n <small class=\"text-secondary\"> received by {{ element?.stock_issue?.recipient?.name }} </small>\n </span>\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\n @if (element.stock_issue?.stock_transfer) {\n <span class=\"badge rounded-pill text-bg-secondary\">Stock Transfer</span>\n } @else {\n <div class=\"d-flex gap-1 text-secondary\">\n <app-techlify-icon name=\"view\" size=\"md\"\n [routerLink]=\"['/inventory', 'stock-issues', 'products', element?.id, 'view']\"></app-techlify-icon>\n <app-techlify-form-button [component]=\"stockIssueProductForm()\" [model]=\"element\"\n [data]=\"{ stockIssueId: element?.stock_issue_id, product: element?.product }\" width=\"500px\"\n (saved)=\"modelsUpdatedById($event);listUpdated.emit(true)\">\n </app-techlify-form-button>\n <app-techlify-delete-button [service]=\"service\" [model]=\"element\"\n [data]='{title: element?.product?.name, type: \"Stock Issue Product\"}'\n (deleted)=\"reload();listUpdated.emit(true)\"></app-techlify-delete-button>\n </div>\n }\n\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-issue_number\">\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-average_cost\">\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-total\">\n <td mat-footer-cell *matFooterCellDef><strong>{{ grandTotal | currency }}</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.ColumnSelectorComponent, selector: "app-column-selector", inputs: ["label", "mode", "columnConfigs", "selectedColumns", "isExportWorking"], outputs: ["selectedColumnsChange", "displayedColumnsChange"] }, { kind: "component", type: i3.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: i3.TechlifyFormButtonComponent, selector: "app-techlify-form-button", inputs: ["component", "model", "data", "width"], outputs: ["saved"] }, { kind: "component", type: i3.TechlifyDeleteButtonComponent, selector: "app-techlify-delete-button", inputs: ["data", "model", "message", "service"], outputs: ["deleted"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }], preserveWhitespaces: true });
|
|
154
|
-
};
|
|
155
|
-
StockIssueProductListComponent = __decorate([
|
|
156
|
-
UntilDestroy()
|
|
157
|
-
], StockIssueProductListComponent);
|
|
158
|
-
export { StockIssueProductListComponent };
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueProductListComponent, decorators: [{
|
|
160
|
-
type: Component,
|
|
161
|
-
args: [{ selector: 'app-stock-issue-products-list', providers: [DatePipe], 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 <app-techlify-form-button [component]=\"stockIssueSingleProductForm()\" [data]=\"{ product: product() }\" width=\"500px\"\n (saved)=\"modelCreated($event);listUpdated.emit(true)\"></app-techlify-form-button>\n <app-column-selector *ngIf=\"columnConfig.length > 0\" mode=\"icon\" [columnConfigs]=\"columnConfig\"\n [(selectedColumns)]=\"selectedColumns\"></app-column-selector>\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 <ng-container matColumnDef=\"issue_number\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"Stock Issue ID\">Issue #</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 }} <i class=\"fa-solid fa-up-right-from-square\"></i>\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 <!-- Average Price Column -->\n <ng-container matColumnDef=\"average_cost\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Average Cost</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.average_cost | currency: 'USD'}}\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 <!-- Total Column -->\n <ng-container matColumnDef=\"total\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Total</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.total | currency }}\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_from_id, 'view']\">\n {{ element?.location?.title }}\n </a>\n <br>\n <span *ngIf=\"element?.stock_issue?.recipient\">\n <small class=\"text-secondary\"> received by {{ element?.stock_issue?.recipient?.name }} </small>\n </span>\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\n @if (element.stock_issue?.stock_transfer) {\n <span class=\"badge rounded-pill text-bg-secondary\">Stock Transfer</span>\n } @else {\n <div class=\"d-flex gap-1 text-secondary\">\n <app-techlify-icon name=\"view\" size=\"md\"\n [routerLink]=\"['/inventory', 'stock-issues', 'products', element?.id, 'view']\"></app-techlify-icon>\n <app-techlify-form-button [component]=\"stockIssueProductForm()\" [model]=\"element\"\n [data]=\"{ stockIssueId: element?.stock_issue_id, product: element?.product }\" width=\"500px\"\n (saved)=\"modelsUpdatedById($event);listUpdated.emit(true)\">\n </app-techlify-form-button>\n <app-techlify-delete-button [service]=\"service\" [model]=\"element\"\n [data]='{title: element?.product?.name, type: \"Stock Issue Product\"}'\n (deleted)=\"reload();listUpdated.emit(true)\"></app-techlify-delete-button>\n </div>\n }\n\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-issue_number\">\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-average_cost\">\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-total\">\n <td mat-footer-cell *matFooterCellDef><strong>{{ grandTotal | currency }}</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>" }]
|
|
162
|
-
}], ctorParameters: () => [{ type: i1.StockIssueProductService }, { type: i2.FormBuilder }, { type: i3.TechlifyFeatureService }, { type: i4.DatePipe }] });
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zdG9jay1pc3N1ZS9zdG9jay1pc3N1ZS1wcm9kdWN0cy1saXN0L3N0b2NrLWlzc3VlLXByb2R1Y3RzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3RvY2staXNzdWUvc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC9zdG9jay1pc3N1ZS1wcm9kdWN0cy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDaEgsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDcEksT0FBTyxFQUVMLHFCQUFxQixFQUN0QixNQUFNLG1CQUFtQixDQUFDO0FBRzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBU3BDLElBQU0sOEJBQThCLEdBQXBDLE1BQU0sOEJBQStCLFNBQVEscUJBQXFCO0lBd0VsRDtJQUNYO0lBQ0E7SUFDQTtJQTFFVixZQUFZLEdBQUcsS0FBSyxDQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELGFBQWEsR0FBRyxL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RUFBRSxFQUFFLGFBQWEsQ0FBQztRQUM3RCxDQUFDO1FBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztZQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDeEUsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkgsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQXZKVSw4QkFBOEI7NEZBQTlCLDhCQUE4QixpaENBRjlCLENBQUMsUUFBUSxDQUFDLGlEQ2pCdkIsMnBWQTZQVzs7QUQxT0UsOEJBQThCO0lBUDFDLFlBQVksRUFBRTtHQU9GLDhCQUE4QixDQXdKMUM7OzRGQXhKWSw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBQ0UsK0JBQStCLGFBRzlCLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdG9ja0lzc3VlUHJvZHVjdEZvcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vc3RvY2staXNzdWUtcHJvZHVjdC1mb3JtL3N0b2NrLWlzc3VlLXByb2R1Y3QtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN0b2NrSXNzdWVTaW5nbGVQcm9kdWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi9zdG9jay1pc3N1ZS1zaW5nbGUtcHJvZHVjdC1mb3JtL3N0b2NrLWlzc3VlLXNpbmdsZS1wcm9kdWN0LWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICBDb2x1bW5Db25maWcsIFRlY2hsaWZ5RmVhdHVyZVNlcnZpY2UsXG4gIFRlY2hsaWZ5TGlzdENvbXBvbmVudFxufSBmcm9tICduZ3gtdGVjaGxpZnktY29yZSc7XG5pbXBvcnQgeyBTdG9ja0lzc3VlUHJvZHVjdFNlcnZpY2UgfSBmcm9tIFwiLi4vc3RvY2staXNzdWUtcHJvZHVjdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95IH0gZnJvbSBcIkBuZ25lYXQvdW50aWwtZGVzdHJveVwiO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXN0b2NrLWlzc3VlLXByb2R1Y3RzLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RvY2staXNzdWUtcHJvZHVjdHMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0b2NrLWlzc3VlLXByb2R1Y3RzLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIFN0b2NrSXNzdWVQcm9kdWN0TGlzdENvbXBvbmVudCBleHRlbmRzIFRlY2hsaWZ5TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZpbHRlcnNJbnB1dCA9IGlucHV0PGFueT4oe30sIHsgYWxpYXM6ICdmaWx0ZXJzJyB9KTtcbiAgaXNQcm9kdWN0VmlldyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvZHVjdCA9IGlucHV0PGFueT4obnVsbCk7XG5cbiAgc3RvY2tJc3N1ZVNpbmdsZVByb2R1Y3RGb3JtID0gc2lnbmFsKFN0b2NrSXNzdWVTaW5nbGVQcm9kdWN0Rm9ybUNvbXBvbmVudCk7XG4gIHNlbGVjdGVkQ29sdW1ucyA9IG1vZGVsPENvbHVtbkNvbmZpZ1tdPihbXSk7XG4gIGV4cG9ydEluUHJvZ3Jlc3MgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGxpc3RVcGRhdGVkID0gb3V0cHV0PGFueT4oKTtcbiAgY29sdW1uQ29uZmlnUmVhZHkgPSBvdXRwdXQ8Q29sdW1uQ29uZmlnW10+KCk7XG5cbiAgaXNzdWFibGVEYXRhID0gaW5wdXQ8e1xuICAgIGlzc3VhYmxlX3R5cGU6IHN0cmluZztcbiAgICBpc3N1YWJsZV9pZDogbnVtYmVyO1xuICB9IHwgbnVsbD4obnVsbCk7XG5cbiAgc3RvY2tJc3N1ZVByb2R1Y3RGb3JtID0gc2lnbmFsKFN0b2NrSXNzdWVQcm9kdWN0Rm9ybUNvbXBvbmVudCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0Vmlld0hpZGRlbkNvbHVtbnMgPSBbJ3Byb2R1Y3QnLCAnc2t1JywgJ21lYXN1cmUnXTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFNlbGVjdGVkQ29sdW1uczogQ29sdW1uQ29uZmlnW10gPSBbXTtcblxuICBjb2x1bW5Db25maWc6IENvbHVtbkNvbmZpZ1tdID0gW1xuICAgIHsgbGFiZWw6ICcjJywgZGVmOiAnbm8nLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdJc3N1ZSAjJywgZGVmOiAnaXNzdWVfbnVtYmVyJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUHJvZHVjdCcsIGRlZjogJ3Byb2R1Y3QnLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdBdmVyYWdlIENvc3QnLCBkZWY6ICdhdmVyYWdlX2Nvc3QnLCBpc1NlbGVjdGVkOiBmYWxzZSwgaXNFZGl0YWJsZTogdHJ1ZSB9LFxuICAgIHsgbGFiZWw6ICdQcm9kdWN0IENhdGVnb3JpZXMnLCBkZWY6ICdwcm9kdWN0X2NhdGVnb3JpZXMnLCBpc1NlbGVjdGVkOiBmYWxzZSwgaXNFZGl0YWJsZTogdHJ1ZSwgaXNFeHBvcnRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdDYXRlZ29yaWVzJywgZGVmOiAnY2F0ZWdvcmllcycsIGlzU2VsZWN0ZWQ6IGZhbHNlLCBpc0VkaXRhYmxlOiBmYWxzZSwgaXNFeHBvcnRhYmxlOiB0cnVlIH0sXG4gICAgeyBsYWJlbDogJ1NLVScsIGRlZjogJ3NrdScsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ0RhdGUnLCBkZWY6ICdkYXRlJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUXVhbnRpdHknLCBkZWY6ICdxdWFudGl0eScsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ1RvdGFsJywgZGVmOiAndG90YWwnLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdNZWFzdXJlJywgZGVmOiAnbWVhc3VyZScsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IHRydWUgfSxcbiAgICB7IGxhYmVsOiAnTG9jYXRpb24nLCBkZWY6ICdsb2NhdGlvbicsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ1JlbGF0ZWQnLCBkZWY6ICdyZWxhdGVkJywgaXNTZWxlY3RlZDogdHJ1ZSwgaXNFZGl0YWJsZTogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnUGFydGljdWxhcnMnLCBkZWY6ICdwYXJ0aWN1bGFycycsIGlzU2VsZWN0ZWQ6IHRydWUsIGlzRWRpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ0NyZWF0b3InLCBkZWY6ICdjcmVhdG9yJywgaXNTZWxlY3RlZDogZmFsc2UsIGlzRWRpdGFibGU6IHRydWUgfSxcbiAgICB7IGxhYmVsOiAnQWN0aW9ucycsIGRlZjogJ2FjdGlvbnMnLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSwgaXNFeHBvcnRhYmxlOiBmYWxzZSB9LFxuICBdO1xuXG4gIGdldCBkaXNwbGF5ZWRDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb2xzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMoKS5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZENvbHVtbnMoKSA6IHRoaXMuX2RlZmF1bHRTZWxlY3RlZENvbHVtbnM7XG4gICAgY29uc3Qgc2VsZWN0ZWREZWZzID0gbmV3IFNldChjb2xzLm1hcChjb2wgPT4gY29sLmRlZikpO1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkNvbmZpZy5maWx0ZXIoY29sID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUHJvZHVjdFZpZXcoKSAmJiB0aGlzLnByb2R1Y3RWaWV3SGlkZGVuQ29sdW1ucy5pbmNsdWRlcyhjb2wuZGVmKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5leHBvcnRJblByb2dyZXNzKCkpIHtcbiAgICAgICAgaWYgKGNvbC5pc0V4cG9ydGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmlzRXhwb3J0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RlZERlZnMuaGFzKGNvbC5kZWYpO1xuICAgIH0pLm1hcChjb2wgPT4gY29sLmRlZik7XG4gIH1cblxuICBnZXQgdG90YWxRdWFudGl0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1vZGVscy5yZWR1Y2UoKHN1bSwgbW9kZWwpID0+IHN1bSArIE51bWJlcihtb2RlbD8ucXVhbnRpdHkgPz8gMCksIDApO1xuICB9XG5cbiAgZ2V0IGdyYW5kVG90YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHMucmVkdWNlKChzdW0sIG1vZGVsKSA9PiBzdW0gKyBOdW1iZXIobW9kZWw/LnRvdGFsID8/IDApLCAwKTtcbiAgfVxuXG4gIGdldCBmb290ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcChjb2wgPT4gYGZvb3Rlci0ke2NvbH1gKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzZXJ2aWNlOiBTdG9ja0lzc3VlUHJvZHVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBmZWF0dXJlU2VydmljZTogVGVjaGxpZnlGZWF0dXJlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGRhdGVfZnJvbTogeyBkYXRlOiB0cnVlIH0sXG4gICAgICBkYXRlX3RvOiB7IGRhdGU6IHRydWUgfSxcbiAgICAgIGNhdGVnb3J5X2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgbG9jYXRpb25faWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgICBtZWFzdXJlX2lkczogeyBtdWx0aXBsZTogdHJ1ZSB9LFxuICAgICAgcHJvZHVjdF9pZHM6IHsgbXVsdGlwbGU6IHRydWUgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBjYXRlZ29yeV9pZHM6IFsnJ10sXG4gICAgICBkYXRlX2Zyb206IFsnJ10sXG4gICAgICBkYXRlX3RvOiBbJyddLFxuICAgICAgZHVyYXRpb246IFsnJ10sXG4gICAgICBsb2NhdGlvbl9pZHM6IFsnJ10sXG4gICAgICBtZWFzdXJlX2lkczogWycnXSxcbiAgICAgIHByb2R1Y3RfaWRzOiBbJyddLFxuICAgICAgc2VhcmNoOiBbJyddLFxuICAgICAgc29ydF9ieTogWydkYXRlfGRlc2MnXSxcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMucGVyUGFnZSxcbiAgICB9KTtcblxuICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzSW5wdXQoKTtcbiAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucGF0Y2hWYWx1ZShmaWx0ZXJzLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEZlYXR1cmVzKCk7XG4gICAgdGhpcy5fZGVmYXVsdFNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1uQ29uZmlnLmZpbHRlcihjb2wgPT4gY29sLmlzU2VsZWN0ZWQpO1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuY29sdW1uQ29uZmlnUmVhZHkuZW1pdCh0aGlzLmNvbHVtbkNvbmZpZykpO1xuXG4gICAgY29uc3QgaW5pdGlhbEZpbHRlcnMgPSB0aGlzLmZpbHRlcnNJbnB1dCgpO1xuICAgIGlmIChpbml0aWFsRmlsdGVycykge1xuICAgICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUoaW5pdGlhbEZpbHRlcnMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnBhdGNoRmlsdGVyc0Zyb21Sb3V0ZSgpO1xuICAgIHRoaXMubGlzdGVuRmlsdGVyQ2hhbmdlcygpO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGxvYWREYXRhKCk6IHZvaWQge1xuICAgIGxldCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGZpbHRlcnMuZGF0ZV9mcm9tID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVycy5kYXRlX2Zyb20sICd5eXl5LW1tLWRkJykgPz8gJyc7XG4gICAgZmlsdGVycy5kYXRlX3RvID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVycy5kYXRlX3RvLCAneXl5eS1tbS1kZCcpID8/ICcnO1xuICAgIGZpbHRlcnMucGFnZSA9IHRoaXMucGFnZTtcbiAgICBmaWx0ZXJzLnBlclBhZ2UgPSB0aGlzLnBlclBhZ2U7XG5cblxuICAgIGlmICh0aGlzLmlzc3VhYmxlRGF0YSgpKSB7XG4gICAgICBmaWx0ZXJzLmlzc3VhYmxlX2lkcyA9IHRoaXMuaXNzdWFibGVEYXRhKCk/Lmlzc3VhYmxlX2lkO1xuICAgICAgZmlsdGVycy5pc3N1YWJsZV90eXBlID0gdGhpcy5pc3N1YWJsZURhdGEoKT8uaXNzdWFibGVfdHlwZTtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkRGF0YShmaWx0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEZlYXR1cmVzKCkge1xuICAgIGlmICh0aGlzLmZlYXR1cmVTZXJ2aWNlLmlzRmVhdHVyZUV4aXN0cygncHJvZHVjdC1iYXRjaC1udW1iZXJzJykpIHtcbiAgICAgIGNvbnN0IHF0eUluZGV4ID0gdGhpcy5jb2x1bW5Db25maWcuZmluZEluZGV4KGMgPT4gYy5kZWYgPT09ICdxdWFudGl0eScpO1xuICAgICAgaWYgKHF0eUluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5jb2x1bW5Db25maWcuc3BsaWNlKHF0eUluZGV4ICsgMSwgMCwgeyBsYWJlbDogJ0JhdGNoJywgZGVmOiAnYmF0Y2gnLCBpc1NlbGVjdGVkOiB0cnVlLCBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtY2FyZD5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cImlzUHJvZHVjdFZpZXcoKVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgIDxtYXQtY2FyZC10aXRsZT5TdG9jayBJc3N1ZXM8L21hdC1jYXJkLXRpdGxlPlxuICAgIDxhcHAtdGVjaGxpZnktZm9ybS1idXR0b24gW2NvbXBvbmVudF09XCJzdG9ja0lzc3VlU2luZ2xlUHJvZHVjdEZvcm0oKVwiIFtkYXRhXT1cInsgcHJvZHVjdDogcHJvZHVjdCgpIH1cIiB3aWR0aD1cIjUwMHB4XCJcbiAgICAgIChzYXZlZCk9XCJtb2RlbENyZWF0ZWQoJGV2ZW50KTtsaXN0VXBkYXRlZC5lbWl0KHRydWUpXCI+PC9hcHAtdGVjaGxpZnktZm9ybS1idXR0b24+XG4gICAgPGFwcC1jb2x1bW4tc2VsZWN0b3IgKm5nSWY9XCJjb2x1bW5Db25maWcubGVuZ3RoID4gMFwiIG1vZGU9XCJpY29uXCIgW2NvbHVtbkNvbmZpZ3NdPVwiY29sdW1uQ29uZmlnXCJcbiAgICAgIFsoc2VsZWN0ZWRDb2x1bW5zKV09XCJzZWxlY3RlZENvbHVtbnNcIj48L2FwcC1jb2x1bW4tc2VsZWN0b3I+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuXG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0wXCI+XG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJtb2RlbHNcIiBjbGFzcz1cInctMTAwXCIgYXJpYS1kZXNjcmliZWRieT1cIlN0b2NrIElzc3VlIFByb2R1Y3RzXCIgaW5maW5pdGVTY3JvbGxcbiAgICAgIGlkPVwic3RvY2tJc3N1ZVRhYmxlXCIgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiMlwiIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cIjUwXCIgKHNjcm9sbGVkKT1cIm9uU2Nyb2xsKClcIiBtYXRTb3J0XG4gICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q29sdW1uKCRldmVudClcIj5cblxuICAgICAgPCEtLSAjIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibm9cIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4jPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpc3N1ZV9udW1iZXJcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwiU3RvY2sgSXNzdWUgSURcIj5Jc3N1ZSAjPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIHRleHQtZGFya1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvc3RvY2staXNzdWVzJywgZWxlbWVudD8uc3RvY2tfaXNzdWVfaWQsICd2aWV3J11cIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LnN0b2NrX2lzc3VlX2lkIH19IDxpIGNsYXNzPVwiZmEtc29saWQgZmEtdXAtcmlnaHQtZnJvbS1zcXVhcmVcIj48L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gUHJvZHVjdCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInByb2R1Y3RcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+UHJvZHVjdDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LWRhcmtcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5L3Byb2R1Y3RzJywgZWxlbWVudD8ucHJvZHVjdD8uaWQsICd2aWV3J11cIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LnByb2R1Y3Q/Lm5hbWUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBdmVyYWdlIFByaWNlIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYXZlcmFnZV9jb3N0XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPkF2ZXJhZ2UgQ29zdDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAge3sgZWxlbWVudD8uYXZlcmFnZV9jb3N0IHwgY3VycmVuY3k6ICdVU0QnfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFByb2R1Y3QgQ2F0ZWdvcmllcyBDb2x1bW4gLS0+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+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBUb3RhbCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInRvdGFsXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlRvdGFsPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICB7eyBlbGVtZW50Py50b3RhbCB8IGN1cnJlbmN5IH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBCYXRjaCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImJhdGNoXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QmF0Y2g8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiICpuZ0lmPVwiZWxlbWVudD8uYmF0Y2g/LmJhdGNoX251bWJlclwiPnt7IGVsZW1lbnQ/LmJhdGNoPy5iYXRjaF9udW1iZXIgfX08L3A+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiAqbmdJZj1cImVsZW1lbnQ/LmJhdGNoPy5leHBpcmVzX29uXCI+XG4gICAgICAgICAgICBFeHBpcmVzIHt7IGVsZW1lbnQ/LmJhdGNoPy5leHBpcmVzX29uIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBNZWFzdXJlIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibWVhc3VyZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5NZWFzdXJlPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5wcm9kdWN0Py5tZWFzdXJlPy50aXRsZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBMb2NhdGlvbiBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxvY2F0aW9uXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPkxvY2F0aW9uPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIHRleHQtZGFya1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9pbnZlbnRvcnkvbG9jYXRpb25zJywgZWxlbWVudD8ubG9jYXRpb25fZnJvbV9pZCwgJ3ZpZXcnXVwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8ubG9jYXRpb24/LnRpdGxlIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxicj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImVsZW1lbnQ/LnN0b2NrX2lzc3VlPy5yZWNpcGllbnRcIj5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+IHJlY2VpdmVkIGJ5IHt7IGVsZW1lbnQ/LnN0b2NrX2lzc3VlPy5yZWNpcGllbnQ/Lm5hbWUgfX0gPC9zbWFsbD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBSZWxhdGVkIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicmVsYXRlZFwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlJlbGF0ZWQ8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nSWY9XCJlbGVtZW50Py5zdG9ja19pc3N1ZT8uaXNzdWFibGVcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWFpbnRlbmFuY2VzJywgZWxlbWVudD8uc3RvY2tfaXNzdWU/Lmlzc3VhYmxlX2lkLCAndmlldyddXCI+XG4gICAgICAgICAgICBNYWludGVuYW5jZSBmb3Ige3sgZWxlbWVudD8uc3RvY2tfaXNzdWU/Lmlzc3VhYmxlPy5maXhlZF9hc3NldD8ubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFBhcnRpY3VsYXJzIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicGFydGljdWxhcnNcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5QYXJ0aWN1bGFyczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8ucGFydGljdWxhcnMgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gQ3JlYXRvciBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNyZWF0b3JcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5DcmVhdG9yPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj57eyBlbGVtZW50Py5zdG9ja19pc3N1ZT8uY3JlYXRvcj8ubmFtZSB9fTwvcD5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPnt7IGVsZW1lbnQ/LnN0b2NrX2lzc3VlPy5jcmVhdGVkX2F0IHwgZGF0ZSB9fTwvc21hbGw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkFjdGlvbnM8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuXG4gICAgICAgICAgQGlmIChlbGVtZW50LnN0b2NrX2lzc3VlPy5zdG9ja190cmFuc2Zlcikge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2Ugcm91bmRlZC1waWxsIHRleHQtYmctc2Vjb25kYXJ5XCI+U3RvY2sgVHJhbnNmZXI8L3NwYW4+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMSB0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgPGFwcC10ZWNobGlmeS1pY29uIG5hbWU9XCJ2aWV3XCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5JywgJ3N0b2NrLWlzc3VlcycsICdwcm9kdWN0cycsIGVsZW1lbnQ/LmlkLCAndmlldyddXCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cbiAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktZm9ybS1idXR0b24gW2NvbXBvbmVudF09XCJzdG9ja0lzc3VlUHJvZHVjdEZvcm0oKVwiIFttb2RlbF09XCJlbGVtZW50XCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwieyBzdG9ja0lzc3VlSWQ6IGVsZW1lbnQ/LnN0b2NrX2lzc3VlX2lkLCBwcm9kdWN0OiBlbGVtZW50Py5wcm9kdWN0IH1cIiB3aWR0aD1cIjUwMHB4XCJcbiAgICAgICAgICAgICAgKHNhdmVkKT1cIm1vZGVsc1VwZGF0ZWRCeUlkKCRldmVudCk7bGlzdFVwZGF0ZWQuZW1pdCh0cnVlKVwiPlxuICAgICAgICAgICAgPC9hcHAtdGVjaGxpZnktZm9ybS1idXR0b24+XG4gICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWRlbGV0ZS1idXR0b24gW3NlcnZpY2VdPVwic2VydmljZVwiIFttb2RlbF09XCJlbGVtZW50XCJcbiAgICAgICAgICAgICAgW2RhdGFdPSd7dGl0bGU6IGVsZW1lbnQ/LnByb2R1Y3Q/Lm5hbWUsIHR5cGU6IFwiU3RvY2sgSXNzdWUgUHJvZHVjdFwifSdcbiAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwicmVsb2FkKCk7bGlzdFVwZGF0ZWQuZW1pdCh0cnVlKVwiPjwvYXBwLXRlY2hsaWZ5LWRlbGV0ZS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBGb290ZXIgQ2VsbHMgZm9yIFRvdGFsIFJvdyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLW5vXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1pc3N1ZV9udW1iZXJcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLXByb2R1Y3RcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48c3Ryb25nPlRvdGFsPC9zdHJvbmc+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1hdmVyYWdlX2Nvc3RcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48c3Ryb25nPlRvdGFsPC9zdHJvbmc+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1wcm9kdWN0X2NhdGVnb3JpZXNcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLXNrdVwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItY2F0ZWdvcmllc1wiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItZGF0ZVwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItcXVhbnRpdHlcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48c3Ryb25nPnt7IHRvdGFsUXVhbnRpdHkgfX08L3N0cm9uZz48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLXRvdGFsXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PHN0cm9uZz57eyBncmFuZFRvdGFsIHwgY3VycmVuY3kgfX08L3N0cm9uZz48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLWJhdGNoXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1tZWFzdXJlXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvb3Rlci1sb2NhdGlvblwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItcmVsYXRlZFwiPlxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb290ZXItcGFydGljdWxhcnNcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLWNyZWF0b3JcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZm9vdGVyLWFjdGlvbnNcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImZvb3RlckNvbHVtbnNcIj48L3RyPlxuICAgIDwvdGFibGU+XG5cbiAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImlzV29ya2luZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPiJdfQ==
|