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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"techlify-inventory-common-product.module-MZoVK3bN.mjs","names":["i1.MeasureService","i4","i5","i6","i7","i8","debounceTime","i1","i2","i3","i4","i5.MeasureService","i6","i7","i8","i9","i11","i12","i14","i1","i2","i3.ProductBatchService","i4","i5","i6","debounceTime","i1","i2","i3","i4.ProductService","i5.ProductFormService","i6","i9","i10","i12","i13","i15","i16.ExportToExcelButtonComponent","i17.ProductFormButtonComponent","i18.ProductBatchUpdateFormComponent","i1","moment","i3.StockTransferService","i4","i1.ProductStatisticsService","i2","MaterialModule","i3","i5","i1.StockTransferService","i3","i4","MaterialModule","i5","i6","i7","i8","i9","i10","i11","i1.StockSummaryService","i2.ProductService","i3","i4","i5","i7.BarcodeComponent","i8.ProductFormButtonComponent","i1.ProductService","i2","i3","i4","i5","i6.StockReceiptProductsListComponent","i7.StockIssueProductListComponent","i8.ProductLocationListComponent","i9.StockTransferListComponent","i10.ProductBasicInfoComponent","i3.ProductService","i4","i5","i6","i10","i11","i1","i1","i2.ProductService","i3","i4","i5"],"sources":["../../../projects/inventory-common/src/lib/inventory-common/product/product.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-measure-form/product-measure-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-measure-form/product-measure-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-measures-list/product-measures-list.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-measures-list/product-measures-list.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-form.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-form-button/product-form-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-form-button/product-form-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/product-batch.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-list/product-list.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-list/product-list.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-transfer/stock-transfer.service.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-statistics.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-location/product-location-list/product-location-list.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-location/product-location-list/product-location-list.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-summary.service.ts","../../../projects/inventory-common/src/lib/inventory-common/shared/barcode/barcode.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-basic-info/product-basic-info.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-basic-info/product-basic-info.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-view-page/product-view-page.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-view-page/product-view-page.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-import-page/product-import-page.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-import-page/product-import-page.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-form/product-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-form/product-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-routing.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-delete-button/product-delete-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-delete-button/product-delete-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpService, TechlifyService } from 'ngx-techlify-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProductService extends TechlifyService {\n constructor(public httpService: HttpService) {\n super(httpService, 'products');\n }\n}\n","import { Component, Inject, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { AlertService, ErrorHandlerService, FormValidatorService } from 'ngx-techlify-core';\nimport { MeasureService } from '../../measure/measure.service';\n\nconst errorMessages: any = {\n title: {\n required: 'Please Enter Title',\n },\n description: {\n required: 'Please Enter Description',\n },\n};\n\n@Component({\n selector: 'app-product-measure-form',\n templateUrl: './product-measure-form.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductMeasureFormComponent implements OnInit {\n public productMeasureForm: FormGroup;\n public isWorking: boolean = false;\n public isUpdate: boolean = false;\n constructor(\n private measureService: MeasureService,\n private fb: FormBuilder,\n public dialogRef: MatDialogRef<ProductMeasureFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private spinnerService: NgxSpinnerService,\n private formValidatorService: FormValidatorService,\n private errorService: ErrorHandlerService,\n private alertService: AlertService\n ) {\n this.productMeasureForm = this.fb.group({\n id: [''],\n title: ['', Validators.compose([Validators.required])],\n description: ['', Validators.compose([Validators.required])],\n });\n }\n\n ngOnInit(): void {\n if (this.data.details) {\n this.isUpdate = true;\n this.productMeasureForm.patchValue(this.data.details);\n }\n }\n\n async save() {\n if (!this.productMeasureForm.valid) {\n this.alertService.addAlert('Please Fill All Required Fields', 'warn');\n this.productMeasureForm.markAllAsTouched();\n return;\n }\n let productMeasure = this.productMeasureForm.value;\n try {\n this.spinnerService.show();\n this.isWorking = true;\n let result = this.isUpdate\n ? await this.measureService.update(productMeasure).toPromise()\n : await this.measureService.store(productMeasure).toPromise();\n this.dialogRef.close(result);\n } catch (error) {\n this.errorService.handleError(error);\n } finally {\n this.isWorking = false;\n this.spinnerService.hide();\n }\n }\n /**\n * Method to evaluate form fields\n */\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.productMeasureForm);\n }\n /**\n * Method to find error in form fields\n */\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.productMeasureForm, errorMessages);\n }\n}\n","<div>\n <form [formGroup]=\"productMeasureForm\" (ngSubmit)=\"save()\">\n <h3 class=\"text-center\">Create/Update Product Measure</h3>\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-column\">\n <mat-form-field>\n <input matInput placeholder=\"Title\" formControlName=\"title\" required />\n @if (isFieldValid('title')) {\n <mat-error>{{ getErrorMessage('title') }} </mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <input matInput placeholder=\"Description\" formControlName=\"description\" required />\n @if (isFieldValid('description')) {\n <mat-error>{{ getErrorMessage('description') }} </mat-error>\n }\n </mat-form-field>\n <div class=\"d-flex gap-3\">\n <button mat-button class=\"mt-2\" type=\"button\" (click)=\"dialogRef.close()\">Cancel</button>\n <button mat-raised-button color=\"primary\" class=\"mt-2\" type=\"submit\">Save</button>\n </div>\n </div>\n </div>\n </form>\n</div>\n","import { ProductMeasureFormComponent } from '../product-measure-form/product-measure-form.component';\nimport { ProductService } from '../product.service';\nimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ActivatedRoute } from '@angular/router';\nimport { FilterService } from 'ngx-techlify-core';\nimport { debounceTime } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { MeasureService } from '../../measure/measure.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-product-measure-list',\n templateUrl: './product-measures-list.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductMeasuresListComponent implements OnInit {\n public filterFormGroup: FormGroup;\n\n public lastPage!: number;\n public page: number = 1;\n public perPage: number = 25;\n public totalItems = 0;\n public currentPage = 1;\n public num_items = 25;\n public routeFilters: any;\n public productMeasures: any[] = [];\n\n columnDefinitions = [\n { def: '#', isShow: true },\n { def: 'Title', isShow: true },\n { def: 'Description', isShow: true },\n { def: 'Actions', isShow: true },\n ];\n\n displayedColumns: string[] = ['#', 'Title', 'Description', 'Actions'];\n\n public dataSource = new MatTableDataSource();\n\n constructor(\n private fb: FormBuilder,\n private dialog: MatDialog,\n private filterService: FilterService,\n private activatedRoute: ActivatedRoute,\n private measureService: MeasureService\n ) {\n this.filterFormGroup = this.fb.group({\n num_items: [this.num_items + '|' + this.currentPage],\n search: [''],\n type_ids: [''],\n sort_by: [''],\n });\n }\n\n ngOnInit(): void {\n this.patchFiltersFromRoute();\n this.listenForChanges();\n this.loadData();\n }\n\n listenForChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this)).subscribe((changes) => {\n this.filterService.applyFilterToRoute(this.activatedRoute, this.filterFormGroup.value);\n this.reload();\n });\n }\n\n patchFiltersFromRoute() {\n this.routeFilters = this.filterService.getFiltersFromRoute(this.activatedRoute, this.filterFormGroup.value);\n this.filterFormGroup.setValue(this.routeFilters);\n\n if (this.routeFilters.type_ids) {\n this.filterFormGroup.get('type_ids')!.setValue(this.routeFilters.type_ids.split(',').map(Number));\n }\n }\n\n async loadData() {\n let filters = this.filterFormGroup.value;\n filters.page = this.page;\n filters.per_page = this.perPage;\n filters.type_ids = filters.type_ids.toString();\n filters.num_items = this.num_items + '|' + this.currentPage;\n\n let res = await this.measureService.index(filters).toPromise();\n\n if (this.productMeasures.length < 1) {\n this.productMeasures = res.data;\n } else {\n res.data.forEach((item: any) => this.productMeasures.push(item));\n }\n this.dataSource = new MatTableDataSource(this.productMeasures);\n this.totalItems = res.total;\n this.lastPage = res.last_page || this.page;\n }\n\n reload() {\n this.productMeasures = [];\n this.currentPage = 1;\n this.loadData();\n }\n\n modifyProductMeasure(model?: any) {\n const dialogRef = this.dialog.open(ProductMeasureFormComponent, {\n width: '600px',\n data: {\n details: model,\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n onScroll() {\n if (this.totalItems > this.productMeasures.length) {\n this.currentPage += 1;\n this.loadData();\n }\n }\n\n assignFilter(column: any, direction: string) {\n if (column) {\n return this.filterFormGroup.get('sort_by')?.setValue(column + '|' + direction);\n }\n }\n\n sortColumn(event: any) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n // eslint-disable-next-line @angular-eslint/use-lifecycle-interface\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n ngOnDestroy(): void {\n //Called once, before the instance is destroyed.\n //Add 'implements OnDestroy' to the class.\n }\n}\n","<div class=\"d-flex flex-column\">\n <div class=\"text-center d-flex justify-content-center align-items-center\">\n <h3 class=\"d-flex\">\n <span class=\"mt-1\"> Product Measures </span>\n <button mat-raised-button class=\"ml-2\" color=\"primary\" (click)=\"modifyProductMeasure()\">\n <mat-icon>add</mat-icon>\n Product Measure\n </button>\n </h3>\n </div>\n\n <div class=\"d-flex\">\n <form [formGroup]=\"filterFormGroup\" class=\"d-flex gap-2\">\n <mat-form-field>\n <input matInput placeholder=\"Item Name, Description, etc.\" formControlName=\"search\" />\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"ml-2\" style=\"flex: 0 1 calc(11.11% - 0.5rem)\">\n <mat-label>Columns</mat-label>\n <mat-select [(ngModel)]=\"displayedColumns\" multiple name=\"column\">\n @for (column of columnDefinitions; track column) {\n <mat-option [value]=\"column.def\" [disabled]=\"!column.isShow\">\n {{ column?.def }}</mat-option\n >\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <table\n mat-table\n #table\n [dataSource]=\"dataSource\"\n class=\"mat-elevation-z8 w-100 mt-4 table-hover\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n infiniteScrollContainer=\"mat-sidenav-content\"\n matSort\n (matSortChange)=\"sortColumn($event)\"\n matSortDisableClear=\"true\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\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 <!-- Title Column -->\n <ng-container matColumnDef=\"Title\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Title</th>\n <td mat-cell *matCellDef=\"let element\">{{ element.title }}</td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"Description\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Description</th>\n <td mat-cell *matCellDef=\"let element\">{{ element.description }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"text-secondary d-flex gap-3\">\n <button mat-icon-button (click)=\"modifyProductMeasure(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n</div>\n","import { Injectable } from '@angular/core';\nimport TechlifyFormService from '../services/techlify-form-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProductFormService extends TechlifyFormService {\n constructor() {\n super();\n }\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'app-product-form-button',\n templateUrl: './product-form-button.component.html',\n styleUrls: ['./product-form-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductFormButtonComponent {\n product = input<any | undefined>(undefined);\n\n constructor() { }\n}\n","@if (product()) {\n<app-techlify-icon role='button' name='edit' [routerLink]=\"['/inventory/products/form', product().id]\"></app-techlify-icon>\n} @else {\n<app-techlify-icon role='button' name='add' routerLink=\"form\"></app-techlify-icon>\n}","import { Injectable } from '@angular/core';\nimport { HttpService, TechlifyService } from 'ngx-techlify-core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProductBatchService extends TechlifyService {\n\n constructor(\n protected httpService: HttpService\n ) {\n super(httpService, 'products-batch');\n }\n}\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { AlertService, FormValidatorService, TechlifyFormComponent } from 'ngx-techlify-core';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ProductBatchService } from '../../product-batch.service';\n\n@Component({\n selector: 'app-product-batch-update-form',\n templateUrl: './product-batch-update-form.component.html',\n styleUrl: './product-batch-update-form.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ProductBatchUpdateFormComponent extends TechlifyFormComponent {\n @Input() selection!: SelectionModel<any>;\n @Output() updated: EventEmitter<any> = new EventEmitter<any>();\n isSaving!: boolean;\n\n constructor(\n formValidatorService: FormValidatorService,\n private formBuilder: FormBuilder,\n private batchService: ProductBatchService\n ) {\n super(formValidatorService);\n\n this.form = this.formBuilder.group({\n type_id: [''],\n category_ids: [''],\n measure_id: [''],\n reorder_point: ['']\n });\n }\n\n save() {\n const data: any = { ...this.form.value };\n data.ids = this.selection.selected.map((product: any) => product?.id);\n this.isSaving = true;\n this.batchService.store(data).subscribe({\n next: () => {\n this.isSaving = false;\n this.alertService.addAlert('The products updated successfully!', 'success');\n this.selection.clear();\n this.updated.emit();\n },\n error: () => {\n this.isSaving = false;\n }\n });\n }\n}\n","<p class=\"text-primary fw-bold\">{{ selection.selected.length }} Product(s) Selected</p>\n<form [formGroup]=\"form\" class=\"d-flex flex-column justify-content-start\" (submit)=\"save()\">\n <mat-form-field>\n <mat-label>Type</mat-label>\n <app-searchable-selector apiUrl=\"api/product-types\" formControlName=\"type_id\"></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_id\">\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Reorder Point</mat-label>\n <input matInput placeholder=\"Reorder Point\" formControlName=\"reorder_point\" type=\"number\" />\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-3\">\n <button [disabled]=\"isSaving\" type=\"submit\" mat-raised-button color=\"primary\">Update</button>\n <button [disabled]=\"isSaving\" mat-flat-button type=\"button\" (click)=\"selection.clear()\">Cancel</button>\n </div>\n</form>\n","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ActivatedRoute } from '@angular/router';\nimport { ColumnConfig, TechlifyListComponent } from 'ngx-techlify-core';\nimport { ProductService } from '../product.service';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { debounceTime } from 'rxjs/operators';\nimport { ProductFormService } from '../product-form.service';\nimport { SelectionModel } from '@angular/cdk/collections';\n@UntilDestroy()\n@Component({\n selector: 'app-product-list',\n templateUrl: './product-list.component.html',\n styleUrls: ['./product-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductListComponent extends TechlifyListComponent implements OnInit {\n\n selection = new SelectionModel<any>(true, []);\n\n exportInProgress = false;\n\n columnConfig: ColumnConfig[] = [\n { label: '#', def: '#', isSelected: true, isEditable: false },\n { label: 'Name', def: 'name', isSelected: true, isEditable: false },\n { label: 'SKU', def: 'sku', isSelected: true, isEditable: false },\n { label: 'Average Cost', def: 'average_cost', isSelected: false, isEditable: true },\n { label: 'Categories', def: 'categories', isSelected: true, isEditable: false },\n { label: 'Description', def: 'description', isSelected: true, isEditable: false, isExportable: false },\n { label: 'Reorder Point', def: 'reorder_point', isSelected: true, isEditable: false },\n { label: 'Stock Receipts', def: 'stock_receipts', isSelected: true, isEditable: false },\n { label: 'Stock Issues', def: 'stock_issues', isSelected: true, isEditable: false },\n { label: 'On Hand', def: 'on_hand', isSelected: true, isEditable: false },\n { label: 'Measure', def: 'measure', isSelected: true, isEditable: false },\n { label: 'Sale Price', def: 'sale_price', isSelected: true, isEditable: false },\n { label: 'Type', def: 'type', isSelected: false, isEditable: false, isExportable: true },\n { label: 'Initial Quantity', def: 'initial_quantity', isSelected: false, isEditable: true },\n { label: 'Income Account', def: 'income_account', isSelected: false, isEditable: true },\n { label: 'Expense Account', def: 'expense_account', isSelected: false, isEditable: true },\n { label: 'Creator', def: 'creator', isSelected: false, isEditable: true },\n { label: 'Actions', def: 'Actions', isSelected: true, isEditable: false, isExportable: false },\n { label: 'Select', def: 'Select', isSelected: true, isEditable: false, isExportable: false },\n ];\n\n selectedColumns: ColumnConfig[] = this.columnConfig.filter((col) => col.isSelected);\n\n get displayedColumns(): string[] {\n const selectedDefs = new Set(this.selectedColumns.map(col => col.def));\n return this.columnConfig.filter(col => {\n if (this.exportInProgress) {\n if (col.isExportable === true) return true;\n if (col.isExportable === false) return false;\n }\n return selectedDefs.has(col.def);\n }).map(col => col.def);\n }\n\n importId!: number;\n\n constructor(\n private fb: FormBuilder,\n private dialog: MatDialog,\n private activatedRoute: ActivatedRoute,\n private productService: ProductService,\n private productFormService: ProductFormService\n ) {\n super();\n this.filterForm = this.fb.group({\n category_ids: [''],\n expense_account_ids: [''],\n income_account_ids: [''],\n measure_ids: [''],\n search: [''],\n sort_by: [''],\n type_ids: [''],\n });\n }\n\n ngOnInit(): void {\n if (this.activatedRoute.snapshot.queryParams?.['import_id']) {\n this.importId = parseInt(this.activatedRoute.snapshot.queryParams?.['import_id']);\n }\n // update form with URL query params\n this.requestHelperService.updateFormWithQueryParams(this.filterForm, {\n type_ids: { multiple: true },\n category_ids: { multiple: true },\n income_account_ids: { multiple: true },\n expense_account_ids: { multiple: true },\n });\n // Update URL query params on filter change\n this.filterForm.valueChanges.pipe(debounceTime(800)).subscribe(() => {\n this.requestHelperService.updateQueryParams(\n this.requestHelperService.convertToFormData({\n ...this.filterForm.value,\n })\n );\n });\n // fetch task on params change\n this.activatedRoute.queryParams.pipe(debounceTime(800)).subscribe(() => this.reload());\n // listen form product add or update event and reload.\n this.productFormService.isListUpdated().subscribe((val: boolean) => {\n if (val && !this.isWorking) {\n this.reload();\n }\n });\n }\n\n override loadData() {\n let params: any = {\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n };\n params.page = this.page;\n params.perPage = this.perPage;\n params.with = 'categories,lastStockReceipt,lastStockIssue,measure,creator';\n if (this.importId) {\n params.import_id = this.importId;\n }\n this.isWorking = true;\n\n this.productService.index(params).subscribe({\n next: (res: any) => {\n this.isWorking = false;\n this.models = this.models.concat(res?.data);\n this.lastPage = res?.last_page;\n // stop reloading data once data loaded.\n this.productFormService.listUpdated(false);\n },\n error: () => (this.isWorking = false),\n });\n }\n\n assignFilter(column: any, direction: string) {\n if (column) {\n return this.filterForm.get('sort_by')?.setValue(column + '|' + direction);\n }\n }\n\n override sortColumn(event: any) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n isAllRowsSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.models.length;\n return numSelected === numRows;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n toggleAllRows() {\n if (this.isAllRowsSelected()) {\n this.selection.clear();\n return;\n }\n\n this.selection.select(...this.models);\n }\n\n checkboxLabel(row?: any): string {\n if (!row) {\n return `${this.isAllRowsSelected() ? 'deselect' : 'select'} all`;\n }\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`;\n }\n\n handleExport(hideColumns: boolean) {\n this.exportInProgress = hideColumns;\n }\n}\n","<mat-card class=\"mb-3\">\n <mat-card-content>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-center align-items-center gap-2\">\n <h3 class=\"mb-0\">Products</h3>\n <app-product-form-button></app-product-form-button>\n <span matTooltip=\"Import\" routerLink=\"import\" class=\"cursor-pointer material-symbols-outlined\">\n file_upload\n </span>\n <app-export-to-excel-button tableId=\"productTable\" fileName=\"products\" (onExportStart)=\"handleExport(true)\"\n (onExportEnd)=\"handleExport(false)\">\n </app-export-to-excel-button>\n <app-column-selector mode=\"icon\" class=\"d-print-none\" [columnConfigs]=\"columnConfig\"\n [(selectedColumns)]=\"selectedColumns\"></app-column-selector>\n </div>\n\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-form-field class='fl-md'>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Type</mat-label>\n <app-searchable-selector apiUrl=\"api/product-types\" formControlName=\"type_ids\" titleField=\"title\"\n [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </div>\n </form>\n </mat-card-content>\n</mat-card>\n\n<div class=\"d-flex justify-content-start gap-3\">\n <mat-card [class.flex-fill]=\"!selection.isEmpty()\" [class.w-100]=\"selection.isEmpty()\">\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" [fromRoot]=\"true\" matSort\n (matSortChange)=\"sortColumn($event)\" matSortDisableClear=\"true\" aria-describedby=\"Products List\"\n id=\"productTable\">\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\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 <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Name</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex flex-column gap-1\">\n <a class=\"text-decoration-none text-dark\" [routerLink]=\"[$safeNavigationMigration(element?.id), 'view']\">{{ element.name }}</a>\n @if (element.type && !exportInProgress) {\n <small class=\"text-secondary\">\n {{ element.type?.title }}\n </small>\n }\n </div>\n </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"type\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Type</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.type?.title }}\n </td>\n </ng-container>\n\n <!-- Categories Column -->\n <ng-container matColumnDef=\"categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\" style=\"max-width: 200px\">\n @if (element?.categories?.length > 0) {\n <div\n class=\"d-flex justify-content-start align-items-center gap-1 flex-wrap\">\n @for (category of element?.categories; track category) {\n <span class=\"badge bg-secondary\">\n {{ category?.title }}\n </span>\n }\n </div>\n }\n </td>\n </ng-container>\n\n <!-- SKU Column -->\n <ng-container matColumnDef=\"sku\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element.sku }}</td>\n </ng-container>\n\n <!-- Average Cost Column -->\n <ng-container matColumnDef=\"average_cost\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Average Cost</th>\n <td mat-cell *matCellDef=\"let element\">{{ element.average_cost | currency }}</td>\n </ng-container>\n\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Description</th>\n <td mat-cell *matCellDef=\"let element\">{{ element.description }}</td>\n </ng-container>\n\n <!-- Initial Quantity Column -->\n <ng-container matColumnDef=\"initial_quantity\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Initial Quantity</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element.initial_quantity }}</p>\n @if (element?.initial_quantity_date) {\n <small class=\"text-secondary\">\n on\n {{ $safeNavigationMigration(element?.initial_quantity_date) | date }}\n </small>\n }\n </td>\n </ng-container>\n\n <!-- Stock Receipts Column -->\n <ng-container matColumnDef=\"stock_receipts\">\n <th mat-header-cell mat-sort-header=\"stock_receipts_sum_quantity\" *matHeaderCellDef>Stock Receipts</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.stock_receipts_sum_quantity }}</p>\n @if (element?.last_stock_receipt && !exportInProgress) {\n <small class=\"text-secondary\">\n Latest on\n {{ $safeNavigationMigration(element?.last_stock_receipt?.date) | date }}\n </small>\n }\n </td>\n </ng-container>\n\n <!-- Stock Issues Column -->\n <ng-container matColumnDef=\"stock_issues\">\n <th mat-header-cell mat-sort-header=\"stock_issues_sum_quantity\" *matHeaderCellDef>Stock Issues</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.stock_issues_sum_quantity }}</p>\n @if (element?.last_stock_issue && !exportInProgress) {\n <small class=\"text-secondary\">\n Latest on\n {{ $safeNavigationMigration(element?.last_stock_issue?.date) | date }}\n </small>\n }\n </td>\n </ng-container>\n\n <!-- On Hand Column -->\n <ng-container matColumnDef=\"on_hand\">\n <th mat-header-cell mat-sort-header='stock_on_hand' *matHeaderCellDef>On Hand</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.stock_on_hand }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"measure\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Measure</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.measure?.title }}\n </td>\n </ng-container>\n\n <!-- Reorder Point Column -->\n <ng-container matColumnDef=\"reorder_point\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Reorder Point</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element.reorder_point }}\n </td>\n </ng-container>\n\n <!-- Selling Price Column -->\n <ng-container matColumnDef=\"sale_price\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>Selling Price</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element.sale_price | currency }}\n </td>\n </ng-container>\n\n <!-- Income Account Column -->\n <ng-container matColumnDef=\"income_account\">\n <th mat-header-cell *matHeaderCellDef>Income Account</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.income_account?.title }}\n </td>\n </ng-container>\n\n <!-- Expense Account Column -->\n <ng-container matColumnDef=\"expense_account\">\n <th mat-header-cell *matHeaderCellDef>Expense Account</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expense_account?.title }}\n </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-0\">{{ element?.creator?.name }}</p>\n <small class=\"text-secondary\">{{ $safeNavigationMigration(element?.created_at) | date }}</small>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"text-secondary d-flex gap-1\">\n <app-techlify-icon name='view' [routerLink]=\"[element.id, 'view']\"\n routerLinkActive=\"route-link-active\"></app-techlify-icon>\n\n <app-product-form-button [product]=\"element\"></app-product-form-button>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllRowsSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected()\" [aria-label]=\"checkboxLabel()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\" [aria-label]=\"checkboxLabel(row)\">\n </mat-checkbox>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n @if (isWorking) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </mat-card-content>\n </mat-card>\n @if (!selection.isEmpty()) {\n <mat-card class=\"batch-update-card\">\n <mat-card-content>\n <app-product-batch-update-form [selection]=\"selection\" (updated)=\"reload()\"></app-product-batch-update-form>\n </mat-card-content>\n </mat-card>\n }\n</div>","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'app-product-nav-bar',\n templateUrl: './product-nav-bar.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductNavBarComponent {}\n","<div>\n <router-outlet></router-outlet>\n</div>\n","import { Injectable } from '@angular/core';\nimport { HttpService, TechlifyService } from 'ngx-techlify-core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StockTransferService extends TechlifyService {\n\n constructor(\n httpService: HttpService\n ) {\n super(httpService, 'stock-transfers');\n }\n}\n","import { Component, Inject, Input, OnInit, Optional, ChangeDetectionStrategy } from '@angular/core';\nimport {\n FormValidatorService,\n SearchableSelectorModule,\n TechlifyFormComponent\n} from 'ngx-techlify-core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatError, MatFormField, MatHint, MatLabel, MatSuffix } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker';\nimport { MatButton } from '@angular/material/button';\nimport { StockTransferService } from '../stock-transfer.service';\nimport moment from 'moment/moment';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatCardContent, MatCardTitle } from '@angular/material/card';\n\n@Component({\n selector: 'app-stock-transfer-form',\n imports: [\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatInput,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepicker,\n MatSuffix,\n SearchableSelectorModule,\n MatError,\n MatHint,\n MatButton,\n MatCardTitle,\n MatCardContent,\n ],\n templateUrl: './stock-transfer-form.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './stock-transfer-form.component.scss'\n})\nexport class StockTransferFormComponent extends TechlifyFormComponent implements OnInit {\n @Input() productId!: number;\n @Input() locationFrom!: any;\n\n constructor(\n protected override formValidatorService: FormValidatorService,\n private formBuilder: FormBuilder,\n protected override service: StockTransferService,\n @Optional() dialogRef: MatDialogRef<StockTransferFormComponent>,\n @Inject(MAT_DIALOG_DATA) @Optional() public data: any,\n ) {\n super(formValidatorService, service);\n this.dialogRef = dialogRef;\n\n this.errorMessages = {\n date: { required: 'The date field is required.' },\n product_id: { required: 'The product field is required.' },\n location_from_id: { required: 'The location from field is required.' },\n location_to_id: { required: 'The location to field is required.' },\n quantity: { required: 'The quantity field is required.' }\n };\n\n this.form = this.formBuilder.group({\n product_id: ['', Validators.required],\n date: [new Date(), [Validators.required]],\n location_from_id: ['', Validators.required],\n location_to_id: ['', Validators.required],\n quantity: [1, Validators.required],\n particulars: ['']\n });\n }\n\n ngOnInit(): void {\n const productId = this.data?.product_id ?? this.productId;\n if (productId) {\n this.form.get('product_id')?.setValue(productId);\n }\n\n const locationFrom = this.data?.location_from ?? this.locationFrom;\n if (locationFrom) {\n this.form.get('location_from_id')?.setValue(locationFrom.id);\n }\n }\n\n getFormData(): any {\n const data = { ...this.form.value };\n if (data.date) {\n data.date = moment(data.date).format('YYYY-MM-DD');\n }\n return data;\n }\n}\n","<div class=\"p-2\">\n <h5 class=\"d-flex flex-row justify-content-center align-items-center\">\n Stock Transfer\n </h5>\n\n <mat-card-content>\n <form class=\"d-flex flex-column gap-3\" [formGroup]=\"form\" (ngSubmit)=\"submit(getFormData())\">\n\n <mat-form-field>\n <mat-label>Date</mat-label>\n <input formControlName=\"date\" matInput [matDatepicker]=\"picker\" placeholder=\"Date\" (focus)=\"picker.open()\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (isFieldValid('date')) {\n <mat-error>{{ getErrorMessage('date') }}</mat-error>\n }\n </mat-form-field>\n\n @if (!(data?.product_id ?? productId)) {\n <mat-form-field>\n <mat-label>Product</mat-label>\n <app-searchable-selector formControlName=\"product_id\" titleField=\"name\"\n apiUrl=\"api/products\"></app-searchable-selector>\n @if (isFieldValid('product_id')) {\n <mat-error>{{ getErrorMessage('product_id') }}</mat-error>\n }\n </mat-form-field>\n }\n\n <mat-form-field>\n <mat-label>Location From</mat-label>\n <app-searchable-selector formControlName=\"location_from_id\" apiUrl=\"api/inventory-locations?status_ids=1\"\n [selectedValue]=\"data?.location_from ?? locationFrom\"></app-searchable-selector>\n <mat-hint>Where are we taking stock from?</mat-hint>\n @if (isFieldValid('location_from_id')) {\n <mat-error>{{ getErrorMessage('location_from_id') }}</mat-error>\n }\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Location To</mat-label>\n <app-searchable-selector formControlName=\"location_to_id\"\n apiUrl=\"api/inventory-locations?status_ids=1\"></app-searchable-selector>\n <mat-hint>Where are we taking stock to?</mat-hint>\n @if (isFieldValid('location_to_id')) {\n <mat-error>{{ getErrorMessage('location_to_id') }}</mat-error>\n }\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Quantity</mat-label>\n <input matInput placeholder=\"Quantity\" formControlName=\"quantity\" type=\"number\">\n @if (isFieldValid('quantity')) {\n <mat-error>{{ getErrorMessage('quantity') }}</mat-error>\n }\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end gap-2\">\n <button type=\"button\" mat-flat-button [disabled]=\"isWorking\" (click)=\"dialogRef.close()\">Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"primary\" [disabled]=\"isWorking\">Save</button>\n </div>\n </form>\n </mat-card-content>\n\n</div>","import { Injectable } from '@angular/core';\nimport { HttpService, TechlifyService } from 'ngx-techlify-core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProductStatisticsService extends TechlifyService {\n\n constructor(\n protected override http: HttpService\n ) {\n super(http, 'product-statistics');\n }\n\n stockByLocation(params?: any) {\n return this.http.get('api/product-statistics/stock-by-location', { params });\n }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { ErrorHandlerService, TechlifyFormButtonComponent, TechlifyListComponent } from 'ngx-techlify-core';\nimport { StockTransferFormComponent } from '../../../stock-transfer/stock-transfer-form/stock-transfer-form.component';\nimport { ProductStatisticsService } from '../../product-statistics.service';\nimport { MaterialModule } from '../../../material.module';\n\n@Component({\n selector: 'app-product-location-list',\n templateUrl: './product-location-list.component.html',\n styleUrls: ['./product-location-list.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n MaterialModule,\n StockTransferFormComponent,\n TechlifyFormButtonComponent\n ]\n})\nexport class ProductLocationListComponent extends TechlifyListComponent implements OnInit {\n @Input() product!: any;\n @Output() updated: EventEmitter<any> = new EventEmitter<any>();\n stockTransferForm = signal(StockTransferFormComponent);\n\n constructor(private statisticsService: ProductStatisticsService, private errorHandler: ErrorHandlerService) {\n super();\n }\n\n displayedColumns: string[] = [\n '#',\n 'Location',\n 'Stock',\n 'Actions'\n ]\n\n ngOnInit() {\n this.loadData();\n }\n\n override loadData(): void {\n this.statisticsService.stockByLocation({\n product_id: this.product.id\n }).subscribe({\n next: (response: any) => {\n this.models = response?.data;\n this.lastPage = response?.last_page;\n }, error: (error) => {\n this.errorHandler.handleError(error);\n }\n });\n }\n\n}\n\n\n","<mat-card>\n <mat-card-content class=\"pb-3 d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start gap-2\">\n <span class=\"material-symbols-outlined\"> location_on </span>\n <strong class=\"mb-0 text-dark\">Product Locations</strong>\n </div>\n\n </mat-card-content>\n <mat-divider></mat-divider>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <ng-container matColumnDef=\"#\">\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=\"Location\">\n <th mat-header-cell *matHeaderCellDef> Location </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.title }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"Stock\">\n <th mat-header-cell *matHeaderCellDef> Stock </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.current_stock }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let element; let i = index\">\n @if (element?.id) {\n <app-techlify-form-button\n [component]=\"stockTransferForm()\"\n [data]=\"{\n product_id: $safeNavigationMigration(product?.id),\n location_from: element\n }\"\n [width]=\"'500px'\"\n (saved)=\"reload(); updated.emit($event)\"></app-techlify-form-button>\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n </mat-card-content>\n</mat-card>","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, output, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { MaterialModule } from '../../material.module';\nimport { StockTransferService } from '../stock-transfer.service';\nimport {\n ErrorHandlerService,\n RequestHelperService,\n SearchableSelectorModule,\n TechlifyListComponent\n} from 'ngx-techlify-core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { StockTransferFormComponent } from '../stock-transfer-form/stock-transfer-form.component';\nimport { TechlifyFormButtonComponent } from 'ngx-techlify-core';\nimport { debounceTime, distinctUntilChanged } from \"rxjs\";\nimport { ActivatedRoute, RouterLink } from \"@angular/router\";\nimport { Sort } from \"@angular/material/sort\";\n\n@Component({\n selector: 'app-stock-transfer-list',\n templateUrl: './stock-transfer-list.component.html',\n styleUrls: ['./stock-transfer-list.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n MaterialModule,\n InfiniteScrollDirective,\n StockTransferFormComponent,\n TechlifyFormButtonComponent,\n ReactiveFormsModule,\n RouterLink,\n SearchableSelectorModule\n ],\n})\nexport class StockTransferListComponent extends TechlifyListComponent implements OnInit {\n\n @Input() productId: any;\n\n changed = output();\n stockTransferForm = signal(StockTransferFormComponent);\n\n displayedColumns: string[] = [\n '#',\n 'product',\n 'date',\n 'quantity',\n 'location_from',\n 'location_to',\n 'status',\n 'creator'\n ];\n\n constructor(\n protected override service: StockTransferService,\n private fb: FormBuilder,\n private errorHandler: ErrorHandlerService,\n private activatedRoute: ActivatedRoute\n ) {\n super();\n\n this.filterForm = this.fb.group({\n product_id: [''],\n search: [''],\n status_ids: [''],\n sort_by: ['date|desc'],\n });\n }\n\n ngOnInit() {\n if (this.productId) {\n this.displayedColumns = this.displayedColumns.filter(c => c !== 'product');\n this.filterForm.patchValue({\n product_id: this.productId\n });\n this.loadData();\n } else {\n this.updateFormWithQueryParams();\n this.subscribeToFormChanges();\n this.subscribeToRouteChanges();\n }\n }\n\n override loadData(): void {\n this.isWorking = true;\n let filters = this.filterForm.value;\n filters.page = this.page;\n filters.per_page = this.productId\n ? 9999\n : this.perPage;\n\n this.service.index(filters).subscribe({\n next: (response: any) => {\n this.models = this.models.concat(response?.data);\n this.lastPage = response?.last_page;\n this.isWorking = false;\n },\n error: (error: any) => {\n this.errorHandler.handleError(error);\n this.isWorking = false;\n },\n });\n }\n\n private updateFormWithQueryParams(): void {\n this.requestHelperService.updateFormWithQueryParams(this.filterForm, {\n status_ids: { multiple: true },\n });\n }\n\n private subscribeToFormChanges(): void {\n (this.filterForm as FormGroup).valueChanges.pipe(debounceTime(800)).subscribe({\n next: () => {\n this.requestHelperService.updateQueryParams(\n this.requestHelperService.convertToFormData(this.filterForm.value)\n );\n }\n });\n }\n\n private subscribeToRouteChanges(): void {\n this.activatedRoute.queryParams\n .pipe(debounceTime(500), distinctUntilChanged())\n .subscribe(() => {\n this.reload();\n });\n }\n\n transferSaved(): void {\n this.reload();\n this.changed.emit();\n }\n\n onSortChange(sort: Sort) {\n let { active, direction } = sort;\n if (!active) {\n active = 'date';\n }\n if (!direction) {\n direction = 'desc';\n active = 'date';\n }\n this.filterForm.get('sort_by').setValue(active + '|' + direction);\n }\n}\n","@if (!productId) {\n<mat-card class=\"mb-2\">\n <mat-card-content class=\"mb-0 d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2 mb-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n\n <div class=\"d-flex flex-row gap-2 align-items-center\">\n <h3 class=\"mb-0\">Stock Transfers</h3>\n <app-techlify-form-button [component]=\"stockTransferForm()\" [data]=\"{ product_id: productId }\" [width]=\"'500px'\" (saved)=\"transferSaved()\"></app-techlify-form-button>\n </div>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input type=\"text\" placeholder=\"Search Stock Transfers\" matInput formControlName=\"search\">\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Status</mat-label>\n <app-searchable-selector apiUrl=\"api/stock-transfer-statuses\" formControlName=\"status_ids\"\n [enableSearch]=\"false\" [multiple]=\"true\"></app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n}\n\n<mat-card>\n @if (productId) {\n <mat-card-content class=\"mb-0 d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2 mb-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n\n <div class=\"d-flex flex-row gap-2 align-items-center\">\n <h3 class=\"mb-0\">Stock Transfers</h3>\n <app-techlify-form-button [component]=\"stockTransferForm()\" [data]=\"{ product_id: productId }\" [width]=\"'500px'\" (saved)=\"transferSaved()\"></app-techlify-form-button>\n </div>\n </div>\n </mat-card-content>\n }\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\" aria-describedby=\"Stock Transfers\" infiniteScroll\n [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\" matSort\n (matSortChange)=\"onSortChange($event)\">\n\n <ng-container matColumnDef=\"#\">\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=\"date\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"date\">Date</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex flex-column\">\n <span>{{ $safeNavigationMigration(element?.date) | date }}</span>\n <span>{{ element?.particulars }}</span>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"['/inventory/products', $safeNavigationMigration(element?.product?.id), 'view']\"\n class=\"text-decoration-none text-dark\">\n {{ element?.product?.name }}\n </a>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"quantity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"quantity\">Quantity</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.quantity }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"location_from\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"location_from_id\">From</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.location_from?.title }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"location_to\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"location_to_id\">To</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.location_to?.title }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"status\">Status</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.status?.title }}\n </td>\n </ng-container>\n\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?.creator?.name }}</p>\n <small class=\"text-secondary\">{{ $safeNavigationMigration(element?.created_at) | date }}</small>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n @if (isWorking) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </mat-card-content>\n</mat-card>\n","import { Injectable } from '@angular/core';\nimport { HttpService } from 'ngx-techlify-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StockSummaryService {\n constructor(private httpService: HttpService) {}\n\n /**\n * Get the stocks summary.\n *\n * @param params\n */\n summary(params?: any) {\n return this.httpService.get('api/stocks-summary', { params });\n }\n}\n","import { Component, effect, ElementRef, input, viewChild } from '@angular/core';\nimport JsBarcode from 'jsbarcode';\n\n@Component({\n selector: 'app-barcode',\n template: '<svg #barcode></svg>'\n})\nexport class BarcodeComponent {\n value = input<string | null | undefined>('');\n format = input('CODE128');\n displayValue = input(false);\n\n private svg = viewChild.required<ElementRef<SVGSVGElement>>('barcode');\n\n constructor() {\n effect(() => {\n const element = this.svg().nativeElement;\n const value = this.value();\n\n element.replaceChildren();\n if (!value) {\n return;\n }\n\n try {\n JsBarcode(element, value, { format: this.format(), displayValue: this.displayValue() });\n } catch {\n element.replaceChildren();\n }\n });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { StockSummaryService } from '../../stock-summary.service';\nimport { ProductService } from '../product.service';\n\n@Component({\n selector: 'app-product-basic-info',\n templateUrl: './product-basic-info.component.html',\n styleUrls: ['./product-basic-info.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductBasicInfoComponent implements OnInit {\n @Input() product: any;\n @Output() saved: EventEmitter<any> = new EventEmitter<any>();\n @Output() deleted: EventEmitter<any> = new EventEmitter<any>();\n stockSummary!: any;\n\n constructor(private stockSummaryService: StockSummaryService,\n protected service: ProductService\n ) {}\n\n ngOnInit() {\n if (this.product) {\n this.loadProductStocksSummary();\n }\n }\n\n onProductSaved(product: any) {\n this.product = product;\n this.saved.emit(this.product);\n }\n\n /**\n * Load product stocks summary.\n */\n loadProductStocksSummary() {\n const params: any = {\n product_ids: this.product?.id,\n include: 'stock_receipts_quantity_sum,stock_issue_quantity_sum,stock_quantity_remaining',\n };\n this.stockSummaryService.summary(params).subscribe({\n next: (response: any) => {\n this.stockSummary = response;\n },\n });\n }\n}\n","@if (product) {\n<mat-card class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n @if (product?.image_file_url) {\n <img [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n } @if (!product?.image_file_url) {\n <div\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\"\n style=\"font-size: 40px\"\n >inventory_2</span>\n </div>\n }\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> • </span>\n <span>{{ product?.type?.title }}</span>\n <span> • </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px\"\n >view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n @if (product?.average_cost != null) {\n <div class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ $safeNavigationMigration(product?.average_cost) | currency }}</span>\n </div>\n }\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{ type: 'Product', title: $safeNavigationMigration(product?.name) }\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n @if (product?.categories?.length) {\n <div class=\"d-flex flex-wrap gap-1 mt-2\">\n @for (category of product?.categories; track category) {\n <span class=\"badge border bg-light text-dark fw-medium\">\n {{ category?.title }}\n </span>\n }\n </div>\n }\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n @if (stockSummary) {\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ $safeNavigationMigration(stockSummary?.stock_receipts_quantity_sum) | number }}</p>\n @if (product?.last_stock_receipt) {\n <small class=\"text-secondary\">\n Last Added On\n {{ $safeNavigationMigration(product?.last_stock_receipt?.date) | date : 'MMM d, y' }}\n </small>\n }\n </div>\n }\n <!-- Stock Issues -->\n @if (stockSummary) {\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ $safeNavigationMigration(stockSummary?.stock_issue_quantity_sum) | number }}</p>\n @if (product?.last_stock_issue) {\n <small class=\"text-secondary\">\n Last Added On\n {{ $safeNavigationMigration(product?.last_stock_issue?.date) | date : 'MMM d, y' }}\n </small>\n }\n </div>\n }\n <!-- On Hand -->\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">On Hand</small>\n <p class=\"mb-0 fw-semibold fs-2 text-success\"\n [ngClass]=\"{ 'text-danger': $safeNavigationMigration(product?.stock_on_hand) < $safeNavigationMigration(product?.reorder_point) }\">\n {{ ($safeNavigationMigration(product?.stock_on_hand) | number) ?? 0 }}</p>\n @if (product?.reorder_point) {\n <small class=\"text-secondary\">\n Reorder At {{ product?.reorder_point }}\n </small>\n }\n </div>\n </div>\n </mat-card-content>\n\n <!-- Description -->\n @if (product?.description) {\n <mat-card-content class=\"pt-2\">\n <small class=\"text-secondary\">Description</small>\n <p class=\"mb-0 mt-1\">{{ product?.description }}</p>\n </mat-card-content>\n }\n <div class=\"d-flex flex-row align-items-center w-100 mt-2 gap-3 overflow-hidden\">\n <div class=\"barcode-container flex-grow-1 min-width-0 overflow-hidden\">\n <app-barcode [value]=\"product?.sku\" [displayValue]=\"true\"></app-barcode>\n </div>\n <div class=\"flex-shrink-0\">\n <qrcode [qrdata]=\"$safeNavigationMigration(product?.sku)\" [width]=\"128\"></qrcode>\n </div>\n </div>\n\n</mat-card>\n}","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ProductService } from '../product.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\nimport { ViewChild } from '@angular/core';\nimport { ProductLocationListComponent } from '../product-location/product-location-list/product-location-list.component';\nimport { StockTransferListComponent } from '../../stock-transfer/stock-transfer-list/stock-transfer-list.component';\nimport { StockReceiptProductsListComponent } from '../../stock-receipts/stock-receipt-product-list/stock-receipt-product-list.component';\nimport { StockIssueProductListComponent } from '../../stock-issue/stock-issue-products-list/stock-issue-products-list.component';\nimport { ProductBasicInfoComponent } from '../product-basic-info/product-basic-info.component';\n\n@Component({\n selector: 'app-product-view-page',\n templateUrl: './product-view-page.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductViewPageComponent implements OnInit {\n public product: any;\n id: number;\n isLoading!: boolean;\n\n @ViewChild('productBasicInfoComponent') productBasicInfoComponent!: ProductBasicInfoComponent;\n @ViewChild('productLocationList') productLocationList!: ProductLocationListComponent;\n @ViewChild('stockTransferList') stockTransferList!: StockTransferListComponent;\n @ViewChild('stockReceiptProductListPage') stockReceiptProductListPage!: StockReceiptProductsListComponent;\n @ViewChild('stockIssueProductListPage') stockIssueProductListPage!: StockIssueProductListComponent;\n\n constructor(\n private productService: ProductService,\n private activatedRoute: ActivatedRoute,\n private location: Location\n ) {\n this.id = this.activatedRoute.snapshot.params?.['id'];\n }\n\n ngOnInit(): void {\n if (this.id) {\n this.getProduct(this.id);\n }\n }\n\n /**\n * Get the product details.\n *\n * @param productId\n */\n getProduct(productId: any) {\n this.isLoading = true;\n const params: any = {\n with: 'type,measure,incomeAccount,expenseAccount,categories,lastStockReceipt,lastStockIssue,taxes.tax.type',\n };\n this.productService.show(productId, params).subscribe({\n next: (result: any) => {\n this.isLoading = false;\n this.product = result?.item;\n },\n error: () => (this.isLoading = false),\n });\n }\n\n stockTransferChanged() {\n this.getProduct(this.id);\n this.productBasicInfoComponent.loadProductStocksSummary();\n this.productLocationList.reload();\n this.stockReceiptProductListPage.reload();\n this.stockIssueProductListPage.reload();\n }\n\n /**\n * Handle the on product update event.\n *\n * @param product\n */\n onProductUpdated(product: any) {\n this.getProduct(this.id);\n }\n\n /**\n * Handle on product delete event.\n */\n onProductDeleted() {\n this.location.back();\n }\n}\n","@if (isLoading) {\n<mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n} @if (product) {\n<div class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n @if (product) {\n <div class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); stockReceiptProductListPage.reload()\"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #stockReceiptProductListPage [filters]=\"{ product_ids: $safeNavigationMigration(product?.id) }\"\n [product]=\"product\" [isProductView]=\"true\"\n (listUpdated)=\" getProduct(this.id); productBasicInfoComponent.loadProductStocksSummary(); productLocationList.reload() \"\n ></app-stock-receipt-product-list>\n\n <app-stock-issue-products-list #stockIssueProductListPage [isProductView]=\"true\"\n [product]=\"product\" [filters]=\"{ product_ids: $safeNavigationMigration(product?.id) }\"\n (listUpdated)=\" getProduct(this.id); productBasicInfoComponent.loadProductStocksSummary(); productLocationList.reload() \"\n ></app-stock-issue-products-list>\n @if (product) {\n <app-stock-transfer-list #stockTransferList [productId]=\"product.id\"\n (changed)=\"stockTransferChanged()\"></app-stock-transfer-list>\n }\n </div>\n </div>\n }\n</div>\n}","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ImportCsvConfig } from 'ngx-techlify-core';\n\n@Component({\n selector: 'app-product-import-page',\n templateUrl: './product-import-page.component.html',\n styleUrls: ['./product-import-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductImportPageComponent implements OnInit {\n importConfig: ImportCsvConfig = {\n apiUrl: 'api/products-import',\n title: 'Products',\n importType: 'product',\n properties: [\n {\n label: 'Name',\n value: 'name',\n type: 'text',\n },\n {\n label: 'SKU',\n value: 'sku',\n type: 'text',\n },\n {\n label: 'Initial Quantity',\n value: 'initial_quantity',\n type: 'number',\n },\n {\n label: 'Initial Quantity Date',\n value: 'initial_quantity_date',\n type: 'date',\n },\n {\n label: 'Reorder Point',\n value: 'reorder_point',\n type: 'number',\n },\n {\n label: 'Measure',\n value: 'measure',\n type: 'text',\n },\n {\n label: 'Categories',\n value: 'categories',\n type: 'text',\n },\n ],\n sampleFile: {\n name: 'Products Import',\n path: 'assets/product/product-import-sample.csv',\n },\n importHistory: {\n isEnabled: true,\n type: 'product',\n apiUrl: 'api/import-histories',\n },\n viewRouterLink: '/inventory/products/',\n };\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<app-import-csv [config]=\"importConfig\"></app-import-csv>\n","import { Component, Input, OnInit, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport moment from 'moment';\nimport {\n ErrorHandlerService,\n FormValidatorService,\n FormConfigurationFormService,\n FormConfigurationUtilityService,\n FileDropperConfig,\n ViewerConfig,\n HttpService,\n EntityFileService,\n TechlifyFormComponent\n} from 'ngx-techlify-core';\nimport { ProductService } from '../product.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Location } from '@angular/common';\n\n@Component({\n selector: 'app-product-form',\n templateUrl: './product-form.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductFormComponent extends TechlifyFormComponent implements OnInit {\n @Input() displayedFormFields: any[] = [\n 'name',\n 'product type',\n 'sku',\n 'color',\n 'description',\n 'product measure',\n 'reorder point',\n 'initial quantity',\n 'initial quantity date',\n 'sales price',\n 'minimum price',\n 'maximum price',\n 'income account',\n 'expense account',\n ];\n\n @Input() displayedFormSections: any[] = [\n 'basic information',\n 'inventory information',\n 'sales information',\n 'accounts information',\n ];\n\n product = signal<any>(null);\n isFormSetup = signal<boolean>(false);\n\n override errorMessages: any = {\n type_id: {\n required: 'Please Enter Type',\n },\n name: {\n required: 'Please Enter Name',\n },\n sale_price: {\n required: 'Please Enter Sales Price',\n },\n minimum_price: {\n required: 'Please Enter Minimum Price',\n },\n reorder_point: {\n required: 'Please Enter Reorder Point',\n },\n color_id: {\n required: 'Please Select Color',\n },\n };\n\n isCreateAnother = new FormControl(false);\n savedCount = 0;\n public formConfigurationUtilityService: FormConfigurationUtilityService;\n\n fileConfig!: FileDropperConfig;\n viewerConfig!: ViewerConfig;\n fileList: any[] = [];\n\n constructor(\n private fileService: EntityFileService,\n private fb: FormBuilder,\n protected override formValidatorService: FormValidatorService,\n protected override service: ProductService,\n private activatedRoute: ActivatedRoute,\n private errorHandler: ErrorHandlerService,\n public location: Location,\n private router: Router,\n private formConfigService: FormConfigurationFormService\n ) {\n super(formValidatorService);\n\n this.formConfigurationUtilityService = new FormConfigurationUtilityService();\n }\n\n ngOnInit() {\n this.fileConfig = {\n fileId: 'productImageFile',\n containerId: 'productImageFileContainer',\n styles: {\n height: '200px'\n },\n multiple: false,\n acceptFile: 'image/*',\n maxSize: 10,\n acceptFileText: 'PNG, JPEG, and JPG only'\n };\n\n this.viewerConfig = {\n viewerStyle: {\n height: '50px',\n }\n };\n\n this.formConfigurationUtilityService\n .initialize(this.formConfigService, 'product',)\n .subscribe({\n next: (response: any) => {\n this.form = this.fb.group({\n id: [''],\n type_id: [1, Validators.compose([Validators.required])],\n color_id: ['', this.formConfigurationUtilityService.getFieldRequired('color_id') ? Validators.required : null],\n sku: [''],\n name: ['', Validators.compose([Validators.required])],\n initial_quantity: [0],\n initial_quantity_date: [moment().format()],\n reorder_point: [10, Validators.compose([Validators.required])],\n description: [''],\n sale_price: [0, Validators.compose([Validators.required])],\n income_account_id: [''],\n expense_account_id: [''],\n measure_id: [1],\n minimum_price: ['', Validators.compose([Validators.required])],\n maximum_price: [''],\n condition_type_id: [1],\n current_quantity: [],\n category_ids: [''],\n image_file: [null],\n image_file_url: [null],\n });\n }, error: (error: any) => {\n this.errorHandler.handleError(error);\n }, complete: () => {\n this.isFormSetup.set(true);\n this.loadProduct();\n }\n })\n\n\n }\n\n loadProduct() {\n let id = this.activatedRoute.snapshot.params['id'];\n if (!id) {\n return;\n }\n this.isWorking = true;\n\n this.service?.show(id, {\n with: 'measure,categories',\n }).subscribe({\n next: (response: any) => {\n this.product.set(response?.item);\n this.isWorking = false;\n },\n error: (error: any) => {\n this.isWorking = false;\n this.errorHandler.handleError(error);\n },\n complete: () => {\n this.patchProduct();\n this.isWorking = false;\n }\n })\n }\n\n patchProduct() {\n this.isUpdate = true;\n let data = { ...this.product() };\n\n if (this.product()?.categories?.length > 0) {\n (data).category_ids = (this.product().categories as []).map((category: any) => category?.id);\n }\n if (data?.initial_quantity_date) {\n data.initial_quantity_date = moment(data.initial_quantity_date).toISOString();\n }\n this.form.patchValue(data);\n }\n\n async save() {\n this.form.markAllAsTouched();\n if (this.form.invalid) {\n this.alertService.addAlert('Please Fill All Required Fields', 'warn');\n return;\n }\n let product = this.form.value;\n if (product.maximum_price <= 0 || !product.maximum_price) {\n product.maximum_price = product.minimum_price;\n }\n\n if (product?.initial_quantity_date) {\n product.initial_quantity_date = moment(product.initial_quantity_date).format('YYYY-MM-DD');\n }\n this.isWorking = true;\n\n let promise = product.id\n ? this.service.update(product)\n : this.service.store(product);\n\n promise.subscribe({\n next: () => {\n this.isWorking = false;\n this.alertService.addAlert('Product saved successfully!', 'success');\n },\n error: () => (this.isWorking = false),\n complete: () => {\n if (this.isCreateAnother.value && !this.isUpdate) {\n this.savedCount++;\n } else {\n this.router.navigate(['/inventory/products']);\n }\n }\n });\n }\n\n /**\n * Checks displayed Form Fields array for form field and returns boolean result\n */\n isFormFieldShown(fieldName: string): boolean {\n return this.displayedFormFields.length > 0 && this.displayedFormFields.includes(fieldName);\n }\n\n /**\n * Checks displayed Form Section array for form section and returns boolean result\n */\n isFormSectionShown(sectionName: string): boolean {\n return this.displayedFormSections.length > 0 && this.displayedFormSections.includes(sectionName);\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n const result: any = await this.fileService.uploadEntityFile(this.fileList[0], {\n entity_id: this.product()?.id,\n entity_type: 'product',\n sub_path: `${this.product()?.id}`\n });\n this.form.get('image_file')?.setValue(result.item.file);\n this.form.get('image_file_url')?.setValue(result.item.url);\n this.fileList = [];\n }\n }\n\n async removeFile() {\n if (this.form.value.image_file) {\n try {\n this.form.patchValue({\n image_file: '',\n image_file_url: ''\n });\n } catch (error) {\n this.alertService.addAlert('Unable to remove file, try later', 'warn');\n }\n }\n }\n}\n","@if (isFormSetup()) {\n<div class=\"d-flex flex-column gap-2\">\n <mat-card class='container'>\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center\">\n <span></span>\n <h3 class=\"text-center m-0\">Product Form</h3>\n <app-form-configuration-for-form formCode='product'></app-form-configuration-for-form>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card class='container'>\n <mat-card-content>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <div class=\"d-flex flex-column\">\n\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\n @if (form.get('image_file')?.value) {\n <div\n style=\"width: 200px\"\n class=\"justify-content-center align-items-center\"\n >\n <app-document-viewer\n (remove)=\"removeFile()\"\n [config]=\"viewerConfig\"\n [fileUrl]=\"\n $safeNavigationMigration(form.get('image_file_url')?.value)\n \"\n [file]=\"$safeNavigationMigration(form.get('image_file')?.value)\"\n >\n </app-document-viewer>\n </div>\n } @else {\n <div class=\"w-100\">\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </div>\n }\n </div>\n\n @if (isFormSectionShown('basic information')) {\n <div class=\"d-flex flex-column mt-2\">\n <h6>Basic Information</h6>\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('name')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Name</mat-label>\n <input matInput placeholder=\"Name\" formControlName=\"name\" required />\n @if (isFieldValid('name')) {\n <mat-error>{{ getErrorMessage('name') }} </mat-error>\n }\n </mat-form-field>\n } @if (isFormFieldShown('product type')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Product Type</mat-label>\n <app-searchable-selector apiUrl=\"api/product-types\" formControlName=\"type_id\">\n </app-searchable-selector>\n @if (isFieldValid('type_id')) {\n <mat-error>{{ getErrorMessage('type_id') }} </mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('sku')) {\n <mat-form-field class=\"w-50\">\n <mat-label>SKU</mat-label>\n <input matInput placeholder=\"SKU\" formControlName=\"sku\" />\n @if (isFieldValid('sku')) {\n <mat-error>{{ getErrorMessage('sku') }} </mat-error>\n }\n </mat-form-field>\n }\n <mat-form-field class=\"w-50\">\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\"\n [multiple]=\"true\">\n </app-searchable-selector>\n @if (isFieldValid('category_ids')) {\n <mat-error>\n {{ getErrorMessage('category_ids') }}\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('color') &&\n formConfigurationUtilityService.getFieldEnabled('color_id')) {\n <mat-form-field class=\"w-50 align-self-start\">\n <mat-label>\n Color @if\n (formConfigurationUtilityService.getFieldRequired('color_id'))\n {\n <sup>*</sup>\n }\n </mat-label>\n <app-searchable-selector apiUrl=\"api/attributes?type_code=color\"\n formControlName=\"color_id\"></app-searchable-selector>\n @if (isFieldValid('color_id')) {\n <mat-error>{{getErrorMessage('color_id')}}</mat-error>\n }\n </mat-form-field>\n } @if (isFormFieldShown('description')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Description</mat-label>\n <textarea matInput placeholder=\"Description\" formControlName=\"description\"></textarea>\n </mat-form-field>\n }\n </div>\n </div>\n } @if (isFormSectionShown('inventory information')) {\n <div class=\"d-flex flex-column\">\n <h6>Inventory Information</h6>\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('product measure')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector apiUrl=\"api/product-measures\" formControlName=\"measure_id\">\n </app-searchable-selector>\n @if (isFieldValid('measure_id')) {\n <mat-error>{{ getErrorMessage('measure_id') }} </mat-error>\n }\n </mat-form-field>\n } @if (isFormFieldShown('reorder point')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Reorder Point</mat-label>\n <input matInput placeholder=\"Reorder Point\" formControlName=\"reorder_point\" type=\"number\" />\n @if (isFieldValid('reorder_point')) {\n <mat-error>{{ getErrorMessage('reorder_point') }} </mat-error>\n }\n </mat-form-field>\n }\n </div>\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('initial quantity')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Initial Quantity</mat-label>\n <input matInput placeholder=\"Initial Quantity\" formControlName=\"initial_quantity\" />\n @if (isFieldValid('initial_quantity')) {\n <mat-error>{{ getErrorMessage('initial_quantity') }}\n </mat-error>\n }\n </mat-form-field>\n } @if (isFormFieldShown('initial quantity date')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Initial Quantity Date</mat-label>\n <input matInput [matDatepicker]=\"pickerInitialQuantityDate\" placeholder=\"Initial Quantity Date\"\n formControlName=\"initial_quantity_date\" />\n <mat-datepicker-toggle matSuffix [for]=\"pickerInitialQuantityDate\"></mat-datepicker-toggle>\n <mat-datepicker #pickerInitialQuantityDate></mat-datepicker>\n @if (isFieldValid('initial_quantity_date')) {\n <mat-error>{{ getErrorMessage('initial_quantity_date') }}\n </mat-error>\n }\n </mat-form-field>\n }\n </div>\n </div>\n } @if (isFormSectionShown('sales information')) {\n <div class=\"d-flex flex-column\">\n <h6>Sale Information</h6>\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('sales price')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Selling Price</mat-label>\n <input matInput placeholder=\"Selling Price\" formControlName=\"sale_price\" required type=\"number\"\n step=\"any\" />\n @if (isFieldValid('sale_price')) {\n <mat-error>{{ getErrorMessage('sale_price') }} </mat-error>\n }\n </mat-form-field>\n } @if (isFormFieldShown('condition types')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Condition</mat-label>\n <app-searchable-selector apiUrl=\"api/condition-types\"\n formControlName=\"condition_type_id\"></app-searchable-selector>\n </mat-form-field>\n }\n </div>\n <div class=\"d-flex gap-2\">\n @if (isFormFieldShown('minimum price')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Minimum Price</mat-label>\n <input matInput placeholder=\"Minimum Price\" formControlName=\"minimum_price\" required type=\"number\"\n step=\"any\" />\n @if (isFieldValid('minimum_price')) {\n <mat-error>{{ getErrorMessage('minimum_price') }} </mat-error>\n }\n </mat-form-field>\n } @if (isFormFieldShown('maximum price')) {\n <mat-form-field class=\"w-50\">\n <mat-label>Maximum Price</mat-label>\n <input matInput placeholder=\"Maximum Price\" formControlName=\"maximum_price\" type=\"number\" step=\"any\" />\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n <div class=\"w-100 d-flex justify-content-between\">\n @if (!isUpdate) {\n <mat-checkbox [formControl]=\"isCreateAnother\">Create Another @if (savedCount > 0) {\n <span>({{ savedCount }} items saved)</span>\n }\n </mat-checkbox>\n } @else {\n <span class='d-flex flex-grow'></span>\n }\n\n <div class=\"d-flex flex-row gap-3 align-items-center justify-content-end\">\n <button [disabled]=\"isWorking\" mat-button class=\"mt-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" class=\"mt-2\" type=\"submit\">Save</button>\n </div>\n </div>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n</div>\n} @else {\n<mat-card-content class=\"d-flex vh-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n</mat-card-content>\n}","import { ProductMeasuresListComponent } from './product-measures-list/product-measures-list.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AuthenticationGuard } from 'ngx-techlify-core';\nimport { ProductListComponent } from './product-list/product-list.component';\nimport { ProductNavBarComponent } from './product-nav-bar/product-nav-bar.component';\nimport { ProductViewPageComponent } from './product-view-page/product-view-page.component';\nimport { ProductImportPageComponent } from './product-import-page/product-import-page.component';\nimport { ProductFormComponent } from './product-form/product-form.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: ProductNavBarComponent,\n children: [\n {\n path: '',\n component: ProductListComponent,\n canLoad: [AuthenticationGuard],\n },\n {\n path: 'import',\n component: ProductImportPageComponent,\n canLoad: [AuthenticationGuard],\n },\n {\n path: 'measure',\n component: ProductMeasuresListComponent,\n canLoad: [AuthenticationGuard],\n },\n {\n path: ':id/view',\n component: ProductViewPageComponent,\n canLoad: [AuthenticationGuard],\n },\n {\n path: 'form/:id',\n component: ProductFormComponent,\n canLoad: [AuthenticationGuard],\n },\n {\n path: 'form',\n component: ProductFormComponent,\n canLoad: [AuthenticationGuard],\n },\n {\n path: '**',\n redirectTo: '',\n pathMatch: 'full',\n canLoad: [AuthenticationGuard],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ProductRoutingModule { }\n","import { Component, EventEmitter, Input, Output, TemplateRef, ChangeDetectionStrategy } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ProductService } from '../product.service';\nimport { AlertService } from 'ngx-techlify-core';\n\n@Component({\n selector: 'app-product-delete-button',\n templateUrl: './product-delete-button.component.html',\n styleUrls: ['./product-delete-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ProductDeleteButtonComponent {\n @Input() product: any;\n @Output() deleted = new EventEmitter();\n\n isDeleting!: boolean;\n\n constructor(\n private matDialog: MatDialog,\n private productService: ProductService,\n private alertService: AlertService\n ) {}\n\n /**\n * Delete the product.\n */\n deleteProduct() {\n this.isDeleting = true;\n this.productService.delete(this.product).subscribe({\n next: () => {\n this.deleted.emit();\n this.isDeleting = false;\n this.matDialog.closeAll();\n this.alertService.addAlert('Product deleted successfully!', 'success');\n },\n error: () => (this.isDeleting = false),\n });\n }\n\n /**\n * Show delete product dialog.\n *\n * @param templateRef\n */\n showDeleteDialog(templateRef: TemplateRef<any>) {\n this.matDialog.open(templateRef, { width: '500px' });\n }\n}\n","<mat-icon class=\"cursor-pointer text-secondary\" (click)=\"showDeleteDialog(deleteProductDialog)\"> delete </mat-icon>\n\n<ng-template #deleteProductDialog>\n <h3 mat-dialog-title>Delete Product</h3>\n <div mat-dialog-content>\n Are you sure? You want to delete the\n <strong>{{ product?.name }}</strong> ?\n </div>\n <div mat-dialog-actions class=\"d-flex justify-content-end gap-1 mb-2\">\n <button [disabled]=\"isDeleting\" type=\"button\" mat-raised-button color=\"warn\" (click)=\"deleteProduct()\">\n Delete\n </button>\n <button [disabled]=\"isDeleting\" type=\"button\" mat-flat-button mat-dialog-close>Cancel</button>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ProductRoutingModule } from './product-routing.module';\nimport { ProductListComponent } from './product-list/product-list.component';\nimport { ProductFormComponent } from './product-form/product-form.component';\nimport {\n ColumnSelectorModule,\n DocumentViewerModule,\n FileDropperModule,\n ImportCsvModule,\n} from 'ngx-techlify-core';\nimport { ProductNavBarComponent } from './product-nav-bar/product-nav-bar.component';\nimport { ProductMeasuresListComponent } from './product-measures-list/product-measures-list.component';\nimport { ProductMeasureFormComponent } from './product-measure-form/product-measure-form.component';\nimport { ProductViewPageComponent } from './product-view-page/product-view-page.component';\nimport { ProductFormButtonComponent } from './product-form-button/product-form-button.component';\nimport { ProductDeleteButtonComponent } from './product-delete-button/product-delete-button.component';\nimport { ProductBasicInfoComponent } from './product-basic-info/product-basic-info.component';\nimport { ProductImportPageComponent } from './product-import-page/product-import-page.component';\nimport { StockReceiptsModule } from '../stock-receipts/stock-receipts.module';\nimport { StockIssuePageModule } from '../stock-issue/stock-issue-page/stock-issue-page.module';\nimport { FormsModule } from '@angular/forms';\nimport { ProductBatchUpdateFormComponent } from './product-batch-update-form/product-batch-update-form.component';\nimport { ProductLocationListComponent } from './product-location/product-location-list/product-location-list.component';\nimport { StockTransferListComponent } from '../stock-transfer/stock-transfer-list/stock-transfer-list.component';\nimport { ExportToExcelButtonComponent } from '../shared/export-to-excel-button/export-to-excel-button.component';\nimport { SharedModule } from '../shared.module';\nimport { QRCodeComponent } from 'angularx-qrcode';\nimport { BarcodeComponent } from '../shared/barcode/barcode.component';\n\n@NgModule({\n declarations: [\n ProductListComponent,\n ProductFormComponent,\n ProductNavBarComponent,\n ProductMeasuresListComponent,\n ProductMeasureFormComponent,\n ProductViewPageComponent,\n ProductFormButtonComponent,\n ProductDeleteButtonComponent,\n ProductBasicInfoComponent,\n ProductImportPageComponent,\n ProductBatchUpdateFormComponent,\n ],\n imports: [\n SharedModule,\n ProductRoutingModule,\n ImportCsvModule,\n StockReceiptsModule,\n StockIssuePageModule,\n FormsModule,\n ColumnSelectorModule,\n ProductLocationListComponent,\n StockTransferListComponent,\n ExportToExcelButtonComponent,\n QRCodeComponent,\n BarcodeComponent,\n FileDropperModule,\n DocumentViewerModule\n ],\n exports: [\n ProductFormComponent,\n ProductBasicInfoComponent,\n ProductFormButtonComponent,\n ProductBatchUpdateFormComponent\n ],\n})\nexport class ProductModule { }\n"],"mappings":"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A,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,cAAA;GAnCtB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EAA+B;EAAA,SAAA;GAG/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EAAoB;EAAA,SAAA;GAGpB;GACA;GACA;GACA;EAA+B;CAAA,CAAA;CAGtB,OAAA,OAAA,GAAA,oBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,SAAA;GAtBtB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GAEA;GACA;EAAoB;CAAA,CAAA;;AASX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EArCzB,MAAA;EAAS,MAAA,CAAA;GACR,cAAc;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GACD,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GACD,SAAS;IACP;IACA;IACA;IACA;GACD;EACF,CAAA"}
|