techlify-inventory-common 18.2.0 → 18.3.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.
Files changed (192) hide show
  1. package/esm2022/lib/inventory-common/category/category-form/category-form.component.mjs +12 -12
  2. package/esm2022/lib/inventory-common/category/category-form-button/category-form-button.component.mjs +5 -5
  3. package/esm2022/lib/inventory-common/category/category-list-page/category-list-page.component.mjs +22 -26
  4. package/esm2022/lib/inventory-common/category/category-routing.module.mjs +10 -5
  5. package/esm2022/lib/inventory-common/category/category-view/category-view.component.mjs +46 -0
  6. package/esm2022/lib/inventory-common/category/category.module.mjs +23 -24
  7. package/esm2022/lib/inventory-common/category/category.service.mjs +6 -6
  8. package/esm2022/lib/inventory-common/inventory-common-routing.module.mjs +24 -20
  9. package/esm2022/lib/inventory-common/inventory-common.module.mjs +7 -7
  10. package/esm2022/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.mjs +5 -5
  11. package/esm2022/lib/inventory-common/inventory-value-report.service.mjs +2 -2
  12. package/esm2022/lib/inventory-common/location/location-delete-button/location-delete-button.component.mjs +68 -0
  13. package/esm2022/lib/inventory-common/location/location-form/location-form.component.mjs +86 -0
  14. package/esm2022/lib/inventory-common/location/location-form-button/location-form-button.component.mjs +35 -0
  15. package/esm2022/lib/inventory-common/location/location-information/location-information.component.mjs +34 -0
  16. package/esm2022/lib/inventory-common/location/location-list/location-list.component.mjs +121 -0
  17. package/esm2022/lib/inventory-common/location/location-product-statistics/location-product-statistics.component.mjs +127 -0
  18. package/esm2022/lib/inventory-common/location/location-routing.module.mjs +29 -0
  19. package/esm2022/lib/inventory-common/location/location-view/location-view.component.mjs +53 -0
  20. package/esm2022/lib/inventory-common/location/location.module.mjs +22 -0
  21. package/esm2022/lib/inventory-common/location/location.service.mjs +23 -0
  22. package/esm2022/lib/inventory-common/low-stock-report.service.mjs +2 -2
  23. package/esm2022/lib/inventory-common/material.module.mjs +37 -37
  24. package/esm2022/lib/inventory-common/measure/measure-delete/measure-delete-button/measure-delete-button.component.mjs +4 -4
  25. package/esm2022/lib/inventory-common/measure/measure-delete/measure-delete.module.mjs +4 -4
  26. package/esm2022/lib/inventory-common/measure/measure-form/measure-form/measure-form.component.mjs +14 -14
  27. package/esm2022/lib/inventory-common/measure/measure-form/measure-form-button/measure-form-button.component.mjs +5 -5
  28. package/esm2022/lib/inventory-common/measure/measure-form/measure-form.module.mjs +6 -6
  29. package/esm2022/lib/inventory-common/measure/measure-routing.module.mjs +5 -5
  30. package/esm2022/lib/inventory-common/measure/measure.module.mjs +10 -10
  31. package/esm2022/lib/inventory-common/measure/measure.service.mjs +6 -6
  32. package/esm2022/lib/inventory-common/measure/measures-list/measures-list.component.mjs +12 -18
  33. package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.mjs +7 -7
  34. package/esm2022/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.mjs +10 -24
  35. package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +5 -5
  36. package/esm2022/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.mjs +56 -0
  37. package/esm2022/lib/inventory-common/product/product-delete-button/product-delete-button.component.mjs +6 -6
  38. package/esm2022/lib/inventory-common/product/product-form/product-form.component.mjs +43 -45
  39. package/esm2022/lib/inventory-common/product/product-form-button/product-form-button.component.mjs +5 -5
  40. package/esm2022/lib/inventory-common/product/product-form.service.mjs +4 -4
  41. package/esm2022/lib/inventory-common/product/product-import-page/product-import-page.component.mjs +32 -32
  42. package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +65 -87
  43. package/esm2022/lib/inventory-common/product/product-location/product-location-list/product-location-list.component.mjs +56 -0
  44. package/esm2022/lib/inventory-common/product/product-measure-form/product-measure-form.component.mjs +12 -12
  45. package/esm2022/lib/inventory-common/product/product-measures-list/product-measures-list.component.mjs +22 -28
  46. package/esm2022/lib/inventory-common/product/product-nav-bar/product-nav-bar.component.mjs +3 -3
  47. package/esm2022/lib/inventory-common/product/product-quick-search/product-quick-search.component.mjs +7 -7
  48. package/esm2022/lib/inventory-common/product/product-routing.module.mjs +17 -17
  49. package/esm2022/lib/inventory-common/product/product-statistics.service.mjs +23 -0
  50. package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.mjs +10 -16
  51. package/esm2022/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.mjs +9 -20
  52. package/esm2022/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.mjs +6 -6
  53. package/esm2022/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.mjs +14 -14
  54. package/esm2022/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.mjs +6 -6
  55. package/esm2022/lib/inventory-common/product/product-tax/product-tax.module.mjs +9 -26
  56. package/esm2022/lib/inventory-common/product/product-tax/product-tax.service.mjs +6 -6
  57. package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +9 -7
  58. package/esm2022/lib/inventory-common/product/product.module.mjs +37 -26
  59. package/esm2022/lib/inventory-common/product/product.service.mjs +7 -7
  60. package/esm2022/lib/inventory-common/product/widgets/product-category-badges/product-category-badges.component.mjs +3 -6
  61. package/esm2022/lib/inventory-common/product-batch.service.mjs +20 -0
  62. package/esm2022/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.mjs +10 -12
  63. package/esm2022/lib/inventory-common/reports/low-stock-report/low-stock-report.component.mjs +20 -22
  64. package/esm2022/lib/inventory-common/services/techlify-form-service.mjs +2 -2
  65. package/esm2022/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.mjs +6 -6
  66. package/esm2022/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.module.mjs +5 -5
  67. package/esm2022/lib/inventory-common/stock-issuances/stock-issuance.service.mjs +6 -6
  68. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.mjs +84 -56
  69. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.mjs +28 -12
  70. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-routing.module.mjs +5 -5
  71. package/esm2022/lib/inventory-common/stock-issuances/stock-issuances.module.mjs +14 -14
  72. package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.mjs +14 -14
  73. package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.mjs +5 -5
  74. package/esm2022/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.mjs +13 -13
  75. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.mjs +6 -6
  76. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.mjs +18 -18
  77. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.mjs +5 -5
  78. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.mjs +12 -12
  79. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt.service.mjs +6 -6
  80. package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.mjs +82 -44
  81. package/esm2022/lib/inventory-common/stock-receipts/stock-receipts-routing.module.mjs +5 -5
  82. package/esm2022/lib/inventory-common/stock-receipts/stock-receipts.module.mjs +24 -22
  83. package/esm2022/lib/inventory-common/stock-summary.service.mjs +5 -5
  84. package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.mjs +105 -0
  85. package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-form-button/stock-transfer-form-button.component.mjs +38 -0
  86. package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.mjs +77 -0
  87. package/esm2022/lib/inventory-common/stock-transfer/stock-transfer.service.mjs +18 -0
  88. package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.mjs +9 -9
  89. package/esm2022/lib/inventory-common/supplier/payee-selector/payee-selector.module.mjs +10 -24
  90. package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.component.mjs +24 -24
  91. package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.service.mjs +4 -4
  92. package/esm2022/lib/inventory-common/supplier/supplier-information/supplier-information.component.mjs +16 -15
  93. package/esm2022/lib/inventory-common/supplier/supplier-routing.module.mjs +9 -16
  94. package/esm2022/lib/inventory-common/supplier/supplier-view/supplier-view.component.mjs +13 -14
  95. package/esm2022/lib/inventory-common/supplier/supplier.component.mjs +3 -3
  96. package/esm2022/lib/inventory-common/supplier/supplier.module.mjs +13 -13
  97. package/esm2022/lib/inventory-common/supplier/supplier.service.mjs +5 -5
  98. package/esm2022/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.mjs +3 -3
  99. package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.component.mjs +16 -18
  100. package/esm2022/lib/inventory-common/techlify-filter/techlify-filter.module.mjs +13 -9
  101. package/fesm2022/techlify-inventory-common-category.module-BsvJ6rVx.mjs +290 -0
  102. package/fesm2022/techlify-inventory-common-category.module-BsvJ6rVx.mjs.map +1 -0
  103. package/fesm2022/techlify-inventory-common-location.module-Cwx9mHKE.mjs +529 -0
  104. package/fesm2022/techlify-inventory-common-location.module-Cwx9mHKE.mjs.map +1 -0
  105. package/fesm2022/techlify-inventory-common-measure.module-C2v0-n_m.mjs +307 -0
  106. package/fesm2022/techlify-inventory-common-measure.module-C2v0-n_m.mjs.map +1 -0
  107. package/fesm2022/{techlify-inventory-common-stock-issuances.module-BjPbzqUW.mjs → techlify-inventory-common-stock-issuances.module-CPccetrp.mjs} +3 -3
  108. package/fesm2022/techlify-inventory-common-stock-issuances.module-CPccetrp.mjs.map +1 -0
  109. package/fesm2022/{techlify-inventory-common-supplier.module-CFDwJ-TS.mjs → techlify-inventory-common-supplier.module-CYq-2pV1.mjs} +39 -216
  110. package/fesm2022/techlify-inventory-common-supplier.module-CYq-2pV1.mjs.map +1 -0
  111. package/fesm2022/techlify-inventory-common-techlify-inventory-common-BMNkSTd6.mjs +3620 -0
  112. package/fesm2022/techlify-inventory-common-techlify-inventory-common-BMNkSTd6.mjs.map +1 -0
  113. package/fesm2022/techlify-inventory-common.mjs +1 -1
  114. package/lib/inventory-common/category/category-form/category-form.component.d.ts +4 -4
  115. package/lib/inventory-common/category/category-form-button/category-form-button.component.d.ts +2 -2
  116. package/lib/inventory-common/category/category-list-page/category-list-page.component.d.ts +4 -4
  117. package/lib/inventory-common/category/category-view/category-view.component.d.ts +16 -0
  118. package/lib/inventory-common/category/category.module.d.ts +12 -11
  119. package/lib/inventory-common/category/category.service.d.ts +1 -1
  120. package/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.d.ts +1 -1
  121. package/lib/inventory-common/location/location-delete-button/location-delete-button.component.d.ts +28 -0
  122. package/lib/inventory-common/location/location-form/location-form.component.d.ts +19 -0
  123. package/lib/inventory-common/location/location-form-button/location-form-button.component.d.ts +13 -0
  124. package/lib/inventory-common/location/location-information/location-information.component.d.ts +10 -0
  125. package/lib/inventory-common/location/location-list/location-list.component.d.ts +20 -0
  126. package/lib/inventory-common/location/location-product-statistics/location-product-statistics.component.d.ts +21 -0
  127. package/lib/inventory-common/location/location-routing.module.d.ts +7 -0
  128. package/lib/inventory-common/location/location-view/location-view.component.d.ts +16 -0
  129. package/lib/inventory-common/location/location.module.d.ts +8 -0
  130. package/lib/inventory-common/location/location.service.d.ts +10 -0
  131. package/lib/inventory-common/measure/measure-delete/measure-delete-button/measure-delete-button.component.d.ts +3 -3
  132. package/lib/inventory-common/measure/measure-form/measure-form/measure-form.component.d.ts +4 -4
  133. package/lib/inventory-common/measure/measure-form/measure-form-button/measure-form-button.component.d.ts +2 -2
  134. package/lib/inventory-common/measure/measure.service.d.ts +1 -1
  135. package/lib/inventory-common/measure/measures-list/measures-list.component.d.ts +5 -5
  136. package/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.d.ts +3 -3
  137. package/lib/inventory-common/product/product-basic-info/product-basic-info.component.d.ts +2 -2
  138. package/lib/inventory-common/product/product-batch-update-form/product-batch-update-form.component.d.ts +18 -0
  139. package/lib/inventory-common/product/product-delete-button/product-delete-button.component.d.ts +4 -4
  140. package/lib/inventory-common/product/product-form/product-form.component.d.ts +6 -6
  141. package/lib/inventory-common/product/product-form-button/product-form-button.component.d.ts +3 -3
  142. package/lib/inventory-common/product/product-import-page/product-import-page.component.d.ts +2 -2
  143. package/lib/inventory-common/product/product-list/product-list.component.d.ts +15 -24
  144. package/lib/inventory-common/product/product-location/product-location-list/product-location-list.component.d.ts +15 -0
  145. package/lib/inventory-common/product/product-measure-form/product-measure-form.component.d.ts +6 -6
  146. package/lib/inventory-common/product/product-measures-list/product-measures-list.component.d.ts +7 -7
  147. package/lib/inventory-common/product/product-quick-search/product-quick-search.component.d.ts +1 -1
  148. package/lib/inventory-common/product/product-statistics.service.d.ts +9 -0
  149. package/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.d.ts +1 -1
  150. package/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.d.ts +4 -4
  151. package/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.d.ts +5 -5
  152. package/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.d.ts +2 -2
  153. package/lib/inventory-common/product/product-tax/product-tax.service.d.ts +1 -1
  154. package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +4 -4
  155. package/lib/inventory-common/product/product.module.d.ts +16 -13
  156. package/lib/inventory-common/product/product.service.d.ts +2 -2
  157. package/lib/inventory-common/product-batch.service.d.ts +8 -0
  158. package/lib/inventory-common/reports/low-stock-report/low-stock-report.component.d.ts +3 -3
  159. package/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.d.ts +4 -4
  160. package/lib/inventory-common/stock-issuances/stock-issuance.service.d.ts +1 -1
  161. package/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.d.ts +16 -8
  162. package/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.d.ts +3 -1
  163. package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.d.ts +4 -4
  164. package/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.d.ts +2 -2
  165. package/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.d.ts +4 -4
  166. package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.d.ts +4 -4
  167. package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.d.ts +2 -2
  168. package/lib/inventory-common/stock-receipts/stock-receipt.service.d.ts +1 -1
  169. package/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.d.ts +12 -4
  170. package/lib/inventory-common/stock-receipts/stock-receipts.module.d.ts +2 -1
  171. package/lib/inventory-common/stock-summary.service.d.ts +1 -1
  172. package/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.d.ts +19 -0
  173. package/lib/inventory-common/stock-transfer/stock-transfer-form-button/stock-transfer-form-button.component.d.ts +14 -0
  174. package/lib/inventory-common/stock-transfer/stock-transfer-list/stock-transfer-list.component.d.ts +17 -0
  175. package/lib/inventory-common/stock-transfer/stock-transfer.service.d.ts +7 -0
  176. package/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.d.ts +3 -3
  177. package/lib/inventory-common/supplier/supplier-form/supplier-form.component.d.ts +6 -6
  178. package/lib/inventory-common/supplier/supplier-information/supplier-information.component.d.ts +4 -4
  179. package/lib/inventory-common/supplier/supplier-view/supplier-view.component.d.ts +4 -4
  180. package/lib/inventory-common/supplier/supplier.component.d.ts +2 -2
  181. package/lib/inventory-common/supplier/supplier.service.d.ts +1 -1
  182. package/lib/inventory-common/techlify-filter/techlify-filter.component.d.ts +4 -4
  183. package/lib/inventory-common/techlify-filter/techlify-filter.module.d.ts +2 -1
  184. package/package.json +1 -1
  185. package/fesm2022/techlify-inventory-common-category.module-BKEBFEeZ.mjs +0 -257
  186. package/fesm2022/techlify-inventory-common-category.module-BKEBFEeZ.mjs.map +0 -1
  187. package/fesm2022/techlify-inventory-common-measure.module-CZHhYoQd.mjs +0 -313
  188. package/fesm2022/techlify-inventory-common-measure.module-CZHhYoQd.mjs.map +0 -1
  189. package/fesm2022/techlify-inventory-common-stock-issuances.module-BjPbzqUW.mjs.map +0 -1
  190. package/fesm2022/techlify-inventory-common-supplier.module-CFDwJ-TS.mjs.map +0 -1
  191. package/fesm2022/techlify-inventory-common-techlify-inventory-common-CYiCJfk9.mjs +0 -3143
  192. package/fesm2022/techlify-inventory-common-techlify-inventory-common-CYiCJfk9.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"techlify-inventory-common-techlify-inventory-common-CYiCJfk9.mjs","sources":["../../../projects/inventory-common/src/lib/inventory-common/product/product.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.html","../../../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/services/techlify-form-service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-form.service.ts","../../../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/stock-receipts/stock-receipt.service.ts","../../../projects/inventory-common/src/lib/inventory-common/supplier/supplier.service.ts","../../../projects/inventory-common/src/lib/inventory-common/supplier/supplier-form/supplier-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/supplier/supplier-form/supplier-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.ts","../../../projects/inventory-common/src/lib/inventory-common/supplier/payee-selector/payee-selector/payee-selector.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form/stock-receipt-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form-button/stock-receipt-form-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuance.service.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form/stock-issue-form.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form-button/stock-issue-form-button.component.html","../../../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/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/techlify-filter/techlify-filter.component.ts","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-delete-button/stock-receipt-delete-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipts-list-page/stock-receipts-list-page.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax-form-button/product-tax-form-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax-delete-button/product-tax-delete-button.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax-list/product-tax-list.component.html","../../../projects/inventory-common/src/lib/inventory-common/stock-summary.service.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-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-routing.module.ts","../../../projects/inventory-common/src/lib/inventory-common/supplier/payee-selector/payee-selector.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issue-form/stock-issue-form.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipts-routing.module.ts","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-receipts/stock-receipts.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuance-delete-button/stock-issuance-delete-button.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-tax/product-tax.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-quick-search/product-quick-search.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-quick-search/product-quick-search.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.ts","../../../projects/inventory-common/src/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/widgets/product-category-badges/product-category-badges.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/widgets/product-category-badges/product-category-badges.component.html","../../../projects/inventory-common/src/lib/inventory-common/low-stock-report.service.ts","../../../projects/inventory-common/src/lib/inventory-common/reports/low-stock-report/low-stock-report.component.ts","../../../projects/inventory-common/src/lib/inventory-common/reports/low-stock-report/low-stock-report.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-value-report.service.ts","../../../projects/inventory-common/src/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.ts","../../../projects/inventory-common/src/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-common-routing.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.ts","../../../projects/inventory-common/src/lib/inventory-common/inventory-common.module.ts","../../../projects/inventory-common/src/public-api.ts","../../../projects/inventory-common/src/techlify-inventory-common.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport {\n DataManager,\n HttpService,\n TechlifyServiceBaseClass,\n} from \"ngx-techlify-core\";\nimport { Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ProductService extends TechlifyServiceBaseClass {\n constructor(\n private dataManager: DataManager,\n public httpService: HttpService\n ) {\n super(httpService, \"products\");\n }\n\n getProducts(filters?: any) {\n return this.dataManager.GET(`api/products`, filters);\n }\n\n getProduct(id: any) {\n return this.dataManager.GET(`api/products/${id}`);\n }\n\n createProduct(model: any) {\n return this.dataManager.POST(`api/products`, model);\n }\n\n updateProducts(model: any) {\n return this.dataManager.PUT(`api/products/${model.id}`, model);\n }\n deleteProduct(id: any) {\n return this.dataManager.DELETE(`api/products/${id}`);\n }\n\n getProductMeasures(filters?: any) {\n return this.dataManager.GET(`api/product-measures`, filters);\n }\n\n createProductMeasure(model: any) {\n return this.dataManager.POST(`api/product-measures`, model);\n }\n\n updateProductMeasure(model: any) {\n return this.dataManager.PUT(`api/product-measures/${model.id}`, model);\n }\n\n summary(params?: any): Observable<any> {\n return this.httpService.get(\"api/products-summary\", { params });\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { TechlifyListingControllerInterface } from \"ngx-techlify-core\";\nimport { ProductService } from \"../product.service\";\n\n@Component({\n selector: \"app-low-stock-products-widget\",\n templateUrl: \"./low-stock-products-widget.component.html\",\n})\nexport class LowStockProductsWidgetComponent\n extends TechlifyListingControllerInterface\n implements OnInit\n{\n displayedColumns: string[] = [\"#\", \"Product\", \"Stock\", \"Reorder Point\"];\n\n constructor(private productService: ProductService) {\n super();\n this.lastPage = 0;\n this.perPage = 1000;\n }\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData() {\n const params: any = {\n page: this.page,\n perPage: this.perPage,\n is_low_stock: true,\n num_items: this.perPage + \"|\" + this.page,\n };\n this.isWorking = true;\n this.productService.index(params).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: () => (this.isWorking = false),\n });\n }\n}\n","<mat-card style=\"max-height: 460px; overflow: auto\">\n <mat-card-content>\n <h3>Low Stock Products</h3>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\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 <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.id, 'view']\"\n class=\"text-dark\"\n >\n {{ element?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Stock Column -->\n <ng-container matColumnDef=\"Stock\">\n <th mat-header-cell *matHeaderCellDef>Stock</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.current_stock }}</td>\n </ng-container>\n\n <!-- Reorder Point Column -->\n <ng-container matColumnDef=\"Reorder Point\">\n <th mat-header-cell *matHeaderCellDef>Reorder Point</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.reorder_point }}</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-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatCard, MatCardContent } from \"@angular/material/card\";\nimport { ChartType, GoogleChartsModule } from \"angular-google-charts\";\nimport { MatProgressBar } from \"@angular/material/progress-bar\";\nimport { NgIf } from \"@angular/common\";\nimport { ProductService } from \"../product.service\";\n\n@Component({\n selector: 'app-product-summary-chart',\n standalone: true,\n imports: [\n MatCard,\n MatCardContent,\n GoogleChartsModule,\n MatProgressBar,\n NgIf\n ],\n templateUrl: './product-summary-chart.component.html',\n styleUrl: './product-summary-chart.component.scss'\n})\nexport class ProductSummaryChartComponent implements OnInit {\n @Input() height: number = 400;\n @Input() title = 'Product Summary';\n\n constructor(\n private productService: ProductService\n ) {\n }\n\n chart: any = {\n title: 'Pie Chart',\n type: ChartType.PieChart,\n data: [],\n options: {\n pieSliceText: 'value'\n }\n };\n isLoading: boolean = false;\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData() {\n const params: any = {\n include: 'products_aggregated',\n group_by: 'category_id',\n }\n this.isLoading = true;\n this.productService.summary(params).subscribe({\n next: (response: any) => {\n let data: any[] = [];\n response?.products_aggregated?.forEach((item: any) => {\n data.push([item?.title, item?.product_count]);\n })\n this.chart.data = data;\n this.isLoading = false;\n },\n error: () => (this.isLoading = false)\n });\n }\n}\n","<mat-card>\n <mat-card-content>\n <h3>{{ title }}</h3>\n </mat-card-content>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n <mat-card-content *ngIf=\"chart.data?.length > 0\">\n <google-chart class=\"w-100\" [height]=\"height\" [type]=\"chart.type\" [data]=\"chart.data\" [columns]=\"chart.columns\"\n [options]=\"chart.options\">\n </google-chart>\n </mat-card-content>\n</mat-card>","import { Component, Inject, OnInit } 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 {\n AlertService,\n ErrorHandlerService,\n FormValidatorService,\n} from \"ngx-techlify-core\";\nimport { ProductService } from \"../product.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})\nexport class ProductMeasureFormComponent implements OnInit {\n public productMeasureForm: FormGroup;\n public isWorking: boolean = false;\n public isUpdate: boolean = false;\n constructor(\n private productService: ProductService,\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.productService.updateProductMeasure(productMeasure)\n : await this.productService.createProductMeasure(productMeasure);\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(\n field,\n this.productMeasureForm\n );\n }\n /**\n * Method to find error in form fields\n */\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.productMeasureForm,\n errorMessages\n );\n }\n}\n","<div>\n <form [formGroup]=\"productMeasureForm\" (ngSubmit)=\"save()\">\n <h3 class=\"text-center\">Create/Update Product Measure</h3>\n <div fxLayout=\"column\">\n <div fxLayout=\"column\">\n <mat-form-field>\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n <mat-error *ngIf=\"isFieldValid('title')\"\n >{{ getErrorMessage(\"title\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <input\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n required\n />\n <mat-error *ngIf=\"isFieldValid('description')\"\n >{{ getErrorMessage(\"description\") }}\n </mat-error>\n </mat-form-field>\n <div fxFlex=\"100%\" fxLayout fxLayoutGap=\"1rem\">\n <button\n mat-button\n class=\"mt-2\"\n type=\"button\"\n (click)=\"dialogRef.close()\"\n >\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" class=\"mt-2\" type=\"submit\">\n Save\n </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 } 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\";\n\n@UntilDestroy()\n@Component({\n selector: \"app-product-measure-list\",\n templateUrl: \"./product-measures-list.component.html\",\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 productService: ProductService\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\n .pipe(debounceTime(500), untilDestroyed(this))\n .subscribe((changes) => {\n this.filterService.applyFilterToRoute(\n this.activatedRoute,\n this.filterFormGroup.value\n );\n this.reload();\n });\n }\n\n patchFiltersFromRoute() {\n this.routeFilters = this.filterService.getFiltersFromRoute(\n this.activatedRoute,\n this.filterFormGroup.value\n );\n this.filterFormGroup.setValue(this.routeFilters);\n\n if (this.routeFilters.type_ids) {\n this.filterFormGroup\n .get(\"type_ids\")!\n .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.productService.getProductMeasures(filters);\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\n .get(\"sort_by\")\n ?.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 fxLayout=\"column\">\n <div class=\"text-center\" fxLayoutAlign=\"center center\">\n <h3 fxLayout>\n <span class=\"mt-1\"> Product Measures </span>\n <button\n mat-raised-button\n class=\"ml-2\"\n color=\"primary\"\n (click)=\"modifyProductMeasure()\"\n >\n <mat-icon>add</mat-icon>\n Product Measure\n </button>\n </h3>\n </div>\n\n <div fxLayout>\n <form [formGroup]=\"filterFormGroup\" fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field>\n <input\n matInput\n placeholder=\"Item Name, Description, etc.\"\n formControlName=\"search\"\n />\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"ml-2\" fxFlex=\"0 1 calc(11.11% - 0.5rem)\">\n <mat-label>Columns</mat-label>\n <mat-select [(ngModel)]=\"displayedColumns\" multiple name=\"column\">\n <mat-option\n *ngFor=\"let column of columnDefinitions\"\n [value]=\"column.def\"\n [disabled]=\"!column.isShow\"\n >\n {{ column?.def }}</mat-option\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\" fxLayoutGap=\"1rem\">\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 { BehaviorSubject } from \"rxjs\";\n\nexport default class TechlifyFormService {\n private _isListUpdated = new BehaviorSubject(false);\n\n isListUpdated() {\n return this._isListUpdated.asObservable();\n }\n\n listUpdated(val: boolean) {\n this._isListUpdated.next(val);\n }\n}\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, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport moment from \"moment\";\nimport { AlertService, FormValidatorService } from \"ngx-techlify-core\";\nimport { ProductService } from \"../product.service\";\nimport { Observable } from \"rxjs\";\nimport { DatePipe } from \"@angular/common\";\nimport { ProductFormService } from \"../product-form.service\";\n\nconst initial_quantity: number = 0;\nconst reorder_point: number = 10;\n\nconst 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};\n\n@Component({\n selector: \"app-product-form\",\n templateUrl: \"./product-form.component.html\",\n})\nexport class ProductFormComponent implements OnInit {\n public productForm: FormGroup;\n public isWorking: boolean = false;\n public isUpdate: boolean = false;\n @Output() saved: EventEmitter<any> = new EventEmitter();\n @Output() cancelled: EventEmitter<any> = new EventEmitter();\n @Input() product: any;\n @Input() displayedFormFields: any[] = [\n \"name\",\n \"product type\",\n \"sku\",\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 constructor(\n private productService: ProductService,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private datePipe: DatePipe,\n private productFormService: ProductFormService\n ) {\n this.productForm = this.fb.group({\n id: [\"\"],\n type_id: [1, Validators.compose([Validators.required])],\n sku: [\"\"],\n name: [\"\", Validators.compose([Validators.required])],\n initial_quantity: [initial_quantity],\n initial_quantity_date: [moment().format()],\n reorder_point: [reorder_point, 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 });\n }\n\n ngOnInit() {\n if (this.product?.id) {\n this.isUpdate = true;\n let data = { ...this.product };\n if (this.product?.categories?.length > 0) {\n data.category_ids = (this.product.categories as []).map(\n (category: any) => category?.id\n );\n }\n if (data?.initial_quantity_date) {\n data.initial_quantity_date = moment(\n data.initial_quantity_date\n ).toISOString();\n }\n this.productForm.patchValue(data);\n }\n }\n\n async save() {\n this.productForm.markAllAsTouched();\n if (this.productForm.invalid) {\n this.alertService.addAlert(\"Please Fill All Required Fields\", \"warn\");\n return;\n }\n let product = this.productForm.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(\n product.initial_quantity_date\n ).format(\"YYYY-MM-DD\");\n }\n this.isWorking = true;\n product.with = \"type,measure,incomeAccount,expenseAccount\";\n\n let request: Observable<any> = this.productService.store(product);\n if (this.isUpdate) {\n request = this.productService.update(product);\n }\n request.subscribe({\n next: (response: any) => {\n this.saved.emit(response?.item);\n this.isWorking = false;\n this.productFormService.listUpdated(true);\n this.alertService.addAlert(\"Product saved successfully!\", \"success\");\n },\n error: () => (this.isWorking = false),\n });\n }\n\n /**\n * Method to evaluate form fields\n */\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.productForm);\n }\n /**\n * Method to find error in form fields\n */\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.productForm,\n errorMessages\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 (\n this.displayedFormFields.length > 0 &&\n this.displayedFormFields.includes(fieldName)\n );\n }\n\n /**\n * Checks displayed Form Section array for form section and returns boolean result\n */\n isFormSectionShown(sectionName: string): boolean {\n return (\n this.displayedFormSections.length > 0 &&\n this.displayedFormSections.includes(sectionName)\n );\n }\n}\n","<form [formGroup]=\"productForm\" (submit)=\"save()\">\n <h3 class=\"text-center\">{{ product?.id ? \"Update\" : \"Create\" }} Product</h3>\n <div fxLayout=\"column\">\n <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('basic information')\">\n <h3><strong>Basic Information</strong></h3>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('name')\">\n <input matInput placeholder=\"Name\" formControlName=\"name\" required />\n <mat-error *ngIf=\"isFieldValid('name')\"\n >{{ getErrorMessage(\"name\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('product type')\">\n <mat-label>Product Type</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-types\"\n formControlName=\"type_id\"\n >\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('type_id')\"\n >{{ getErrorMessage(\"type_id\") }}\n </mat-error>\n </mat-form-field>\n </div>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('sku')\">\n <input matInput placeholder=\"SKU\" formControlName=\"sku\" />\n <mat-error *ngIf=\"isFieldValid('sku')\"\n >{{ getErrorMessage(\"sku\") }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"50%\">\n <mat-label>Category</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-categories\"\n formControlName=\"category_ids\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('category_ids')\">\n {{ getErrorMessage(\"category_ids\") }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"100%\" *ngIf=\"isFormFieldShown('description')\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n ></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('inventory information')\">\n <h3><strong>Inventory Information</strong></h3>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field\n fxFlex=\"50%\"\n *ngIf=\"isFormFieldShown('product measure')\"\n >\n <mat-label>Measure</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-measures\"\n formControlName=\"measure_id\"\n >\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('measure_id')\"\n >{{ getErrorMessage(\"measure_id\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('reorder point')\">\n <input\n matInput\n placeholder=\"Reorder Point\"\n formControlName=\"reorder_point\"\n type=\"number\"\n />\n <mat-error *ngIf=\"isFieldValid('reorder_point')\"\n >{{ getErrorMessage(\"reorder_point\") }}\n </mat-error>\n </mat-form-field>\n </div>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field\n fxFlex=\"50%\"\n *ngIf=\"isFormFieldShown('initial quantity')\"\n >\n <input\n matInput\n placeholder=\"Initial Quantity\"\n formControlName=\"initial_quantity\"\n />\n <mat-error *ngIf=\"isFieldValid('initial_quantity')\"\n >{{ getErrorMessage(\"initial_quantity\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field\n fxFlex=\"50%\"\n *ngIf=\"isFormFieldShown('initial quantity date')\"\n >\n <input\n matInput\n [matDatepicker]=\"pickerInitialQuantityDate\"\n placeholder=\"Initial Quantity Date\"\n formControlName=\"initial_quantity_date\"\n />\n <mat-datepicker-toggle\n matSuffix\n [for]=\"pickerInitialQuantityDate\"\n ></mat-datepicker-toggle>\n <mat-datepicker #pickerInitialQuantityDate></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('initial_quantity_date')\"\n >{{ getErrorMessage(\"initial_quantity_date\") }}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('sales information')\">\n <h3><strong>Sale Information</strong></h3>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('sales price')\">\n <input\n matInput\n placeholder=\"Selling Price\"\n formControlName=\"sale_price\"\n required\n type=\"number\"\n step=\"any\"\n />\n <mat-error *ngIf=\"isFieldValid('sale_price')\"\n >{{ getErrorMessage(\"sale_price\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field\n fxFlex=\"50%\"\n *ngIf=\"isFormFieldShown('condition types')\"\n >\n <mat-label>Condition</mat-label>\n <app-searchable-selector\n apiUrl=\"api/condition-types\"\n formControlName=\"condition_type_id\"\n ></app-searchable-selector>\n </mat-form-field>\n </div>\n <div fxLayout fxLayoutGap=\"0.5rem\">\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('minimum price')\">\n <input\n matInput\n placeholder=\"Minimum Price\"\n formControlName=\"minimum_price\"\n required\n type=\"number\"\n step=\"any\"\n />\n <mat-error *ngIf=\"isFieldValid('minimum_price')\"\n >{{ getErrorMessage(\"minimum_price\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('maximum price')\">\n <input\n matInput\n placeholder=\"Maximum Price\"\n formControlName=\"maximum_price\"\n type=\"number\"\n step=\"any\"\n />\n </mat-form-field>\n </div>\n </div>\n <!-- <div fxLayout=\"column\" *ngIf=\"isFormSectionShown('accounts information')\">-->\n <!-- <h3><strong>Accounts Information</strong></h3>-->\n <!-- <div fxLayout fxLayoutGap=\"0.5rem\">-->\n <!-- <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('income account')\">-->\n <!-- <mat-label>Income Account</mat-label>-->\n <!-- <app-searchable-selector apiUrl=\"api/accounts\" formControlName=\"income_account_id\"> </app-searchable-selector>-->\n <!-- </mat-form-field>-->\n <!-- <mat-form-field fxFlex=\"50%\" *ngIf=\"isFormFieldShown('expense account')\">-->\n <!-- <mat-label>Expense Account</mat-label>-->\n <!-- <app-searchable-selector apiUrl=\"api/accounts\" formControlName=\"expense_account_id\">-->\n <!-- </app-searchable-selector>-->\n <!-- </mat-form-field>-->\n <!-- </div>-->\n <!-- </div>-->\n <div fxFlex=\"100%\" fxLayout fxLayoutAlign=\"end\" fxLayoutGap=\"1rem\">\n <button\n [disabled]=\"isWorking\"\n mat-button\n class=\"mt-2\"\n type=\"button\"\n (click)=\"cancelled.emit(true)\"\n >\n Cancel\n </button>\n <button\n [disabled]=\"isWorking\"\n mat-raised-button\n color=\"primary\"\n class=\"mt-2\"\n type=\"submit\"\n >\n Save\n </button>\n </div>\n </div>\n</form>\n","import { Injectable } from \"@angular/core\";\nimport { HttpService, TechlifyServiceBaseClass } from \"ngx-techlify-core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class StockReceiptService extends TechlifyServiceBaseClass {\n constructor(httpService: HttpService) {\n super(httpService, \"stock-receipts\");\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"ngx-techlify-core\";\nimport { HttpParams } from \"@angular/common/http\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class SupplierService {\n constructor(private httpService: HttpService) {}\n\n /**\n * get all suppliers from API\n *\n * @param filters Any attributes to filter suppliers by\n */\n index(filters?: any) {\n let queries = new HttpParams({ fromObject: filters });\n return this.httpService.get(`api/suppliers`, { params: queries });\n }\n\n /**\n * get individual supplier from API (for view page)\n *\n * @param id ID of the supplier being requested\n */\n show(id: any) {\n return this.httpService.get(`api/suppliers/${id}`);\n }\n\n /**\n * store a new supplier in the DB\n *\n * @param model data from the supplier form that will be stored in the DB\n */\n store(model: any) {\n return this.httpService.post(`api/suppliers`, model);\n }\n\n /**\n * update a supplier in the DB\n *\n * @param model.id ID of the supplier being updated\n * @param model data from the supplier form that will be updated in the DB\n */\n update(model: any) {\n return this.httpService.put(`api/suppliers/${model?.id}`, model);\n }\n\n /**\n * delete a supplier from the DB\n *\n * @param id ID of the supplier being deleted\n */\n destroy(id: number) {\n return this.httpService.delete(`api/suppliers/${id}`);\n }\n}\n","import { SupplierService } from \"./../supplier.service\";\nimport { Component, Inject, OnInit } 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 {\n AlertService,\n ErrorHandlerService,\n FormValidatorService,\n TechlifyFormComponentInterface,\n} from \"ngx-techlify-core\";\nimport { lastValueFrom } from \"rxjs\";\n\n@Component({\n selector: \"app-supplier-form\",\n templateUrl: \"./supplier-form.component.html\",\n})\nexport class SupplierFormComponent\n extends TechlifyFormComponentInterface\n implements OnInit\n{\n override errorMessages: any = {\n contact_name: {\n required: \"Contact Name is required\",\n },\n company_name: {\n required: \"Company Name is required\",\n },\n address: {\n required: \"Address is required\",\n },\n phone: {\n required: \"Phone is required\",\n },\n details: {\n required: \"Details is required\",\n },\n email: {\n required: \"Email is required\",\n },\n supplier_type_id: {\n required: \"Supplier Type is required\",\n },\n };\n\n isWorking: boolean = false;\n isUpdateMode: boolean = false;\n supplierForm: FormGroup;\n\n constructor(\n private fb: FormBuilder,\n formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private spinnerService: NgxSpinnerService,\n public dialogRef: MatDialogRef<SupplierFormComponent>,\n private errorService: ErrorHandlerService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private supplierService: SupplierService\n ) {\n super(formValidatorService);\n this.supplierForm = this.fb.group({\n id: [\"\"],\n contact_name: [\"\"],\n company_name: [\"\", Validators.compose([Validators.required])],\n details: [\"\"],\n address: [\"\"],\n phone: [\"\"],\n email: [\"\"],\n supplier_type_id: [\"\",],\n });\n }\n\n ngOnInit() {\n if (this.data.details) {\n this.isUpdateMode = true;\n this.supplierForm.patchValue(this.data.details);\n }\n }\n\n async submit() {\n if (!this.supplierForm.valid) {\n this.alertService.addAlert(\"Please Fill All Required Fields\", \"warn\");\n this.supplierForm.markAllAsTouched();\n return;\n }\n\n var supplier = this.supplierForm.value;\n try {\n this.spinnerService.show();\n this.isWorking = true;\n let result = this.isUpdateMode\n ? await lastValueFrom(this.supplierService.update(supplier))\n : await lastValueFrom(this.supplierService.store(supplier));\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 override isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.supplierForm);\n }\n\n /**Method to find error in form fields*/\n override getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.supplierForm,\n this.errorMessages\n );\n }\n}\n","<form\n (ngSubmit)=\"submit()\"\n [formGroup]=\"supplierForm\"\n class=\"mat-typography\"\n>\n <div class=\"d-flex flex-column justify-content-start gap-2\" mat-dialog-content>\n <h2 class=\"mb-2\">{{ isUpdateMode ? 'Edit' : 'Create' }} Supplier</h2>\n <mat-form-field>\n <mat-label>Company Name</mat-label>\n <input\n autocomplete=\"off\"\n formControlName=\"company_name\"\n matInput\n placeholder=\"Company Name\"\n required\n />\n <mat-error *ngIf=\"isFieldValid('company_name')\">\n {{ getErrorMessage(\"company_name\") }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Contact Name</mat-label>\n <input\n autocomplete=\"off\"\n formControlName=\"contact_name\"\n matInput\n placeholder=\"Contact Name\"\n />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Types</mat-label>\n <app-searchable-selector\n apiUrl=\"api/supplier-types\"\n formControlName=\"supplier_type_id\"\n titleField=\"title\"\n >\n </app-searchable-selector>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Phone</mat-label>\n <input\n autocomplete=\"off\"\n formControlName=\"phone\"\n matInput\n placeholder=\"Phone\"\n />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input\n autocomplete=\"off\"\n formControlName=\"email\"\n matInput\n placeholder=\"Email\"\n type=\"email\"\n />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Address</mat-label>\n <input\n autocomplete=\"off\"\n formControlName=\"address\"\n matInput\n placeholder=\"Address\"\n />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Details</mat-label>\n <input\n autocomplete=\"off\"\n formControlName=\"details\"\n matInput\n placeholder=\"Details\"\n />\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button\n (click)=\"dialogRef.close()\"\n [disabled]=\"isWorking\"\n mat-flat-button\n type=\"button\"\n >\n Cancel\n </button>\n <button\n [disabled]=\"isWorking\"\n color=\"primary\"\n mat-raised-button\n type=\"submit\"\n >\n Save\n </button>\n </div>\n </div>\n</form>\n","import { Component, forwardRef, Input, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { SupplierFormComponent } from \"../../supplier-form/supplier-form.component\";\nimport { MatFormFieldAppearance } from \"@angular/material/form-field\";\n\n@Component({\n selector: \"app-payee-selector\",\n templateUrl: \"./payee-selector.component.html\",\n styleUrls: [\"./payee-selector.component.scss\"],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PayeeSelectorComponent),\n multi: true,\n },\n ],\n})\nexport class PayeeSelectorComponent implements ControlValueAccessor {\n @Input() label = \"Payee\";\n @Input() appearance: MatFormFieldAppearance = \"fill\";\n @Input() required: boolean = false;\n @Input() showAddButton: boolean = false;\n @Input() multiple: boolean = false;\n\n value: any;\n onChange: any = () => {};\n onTouch: any = () => {};\n\n writeValue(value: any): void {\n this.value = value;\n this.onChange(value);\n this.onTouch(value);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n protected readonly SupplierFormComponent = SupplierFormComponent;\n}\n","<mat-form-field [appearance]=\"appearance\" class=\"w-100\">\n <mat-label>{{ label }}</mat-label>\n <app-searchable-selector\n apiUrl=\"api/suppliers\"\n titleField=\"company_name\"\n sortBy=\"company_name|asc\"\n [required]=\"required\"\n [(ngModel)]=\"value\"\n #payeeSelector=\"ngModel\"\n name=\"payeeSelector\"\n [add]=\"showAddButton\"\n [itemComponent]=\"SupplierFormComponent\"\n (ngModelChange)=\"onChange($event)\"\n [addConfig]=\"{ width: '600px' }\"\n [ngModelOptions]=\"{ standalone: true }\"\n [multiple]=\"multiple\"\n >\n </app-searchable-selector>\n <mat-error *ngIf=\"payeeSelector.invalid && payeeSelector.touched\">\n The payee field is required.\n </mat-error>\n</mat-form-field>\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport {\n AlertService,\n DateUtils,\n FormValidatorService,\n TechlifyFormComponentInterface,\n} from \"ngx-techlify-core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { StockReceiptService } from \"../../stock-receipt.service\";\nimport { debounceTime, Observable } from \"rxjs\";\n\n@Component({\n selector: \"app-stock-receipt-form\",\n templateUrl: \"./stock-receipt-form.component.html\",\n styleUrls: [\"./stock-receipt-form.component.scss\"],\n})\nexport class StockReceiptFormComponent\n extends TechlifyFormComponentInterface\n implements OnInit\n{\n @Input() product: any;\n @Input() stockReceipt: any;\n @Output() saved: EventEmitter<any> = new EventEmitter<any>();\n @Output() cancelled: EventEmitter<any> = new EventEmitter<any>();\n\n isWorking!: boolean;\n\n constructor(\n formValidatorService: FormValidatorService,\n private formBuilder: FormBuilder,\n private stockReceiptService: StockReceiptService,\n private alertService: AlertService,\n private dateUtils: DateUtils\n ) {\n super(formValidatorService);\n this.errorMessages = {\n date: {\n required: \"The date field is required.\",\n },\n quantity: {\n required: \"The quantity field is required.\",\n },\n purchase_price: {\n required: \"The purchase price field is required.\",\n },\n };\n\n this.form = this.formBuilder.group({\n id: [\"\"],\n supplier_id: [\"\"],\n date: [new Date(), Validators.required],\n quantity: [1, Validators.required],\n purchase_price: [0, Validators.required],\n amount: [0],\n particulars: [\"\"],\n });\n }\n\n ngOnInit() {\n this.form\n .get(\"quantity\")\n ?.valueChanges.pipe(debounceTime(500))\n .subscribe(() => this.updateTotalAmount());\n this.form\n .get(\"purchase_price\")\n ?.valueChanges.pipe(debounceTime(500))\n .subscribe(() => this.updateTotalAmount());\n\n if (this.stockReceipt) {\n let data: any = { ...this.stockReceipt };\n if (data.date) {\n data.date = new Date(data.date);\n }\n this.form.patchValue(data);\n } else {\n // on create for set default quantity and purchase price from last record\n if (this.product?.last_stock_receipt) {\n const { quantity, purchase_price } = this.product.last_stock_receipt;\n this.form.patchValue({\n quantity,\n purchase_price,\n });\n }\n }\n }\n\n save() {\n if (this.form.invalid) {\n this.alertService.addAlert(\"Please check the form for errors\", \"error\");\n return;\n }\n const data: any = {\n product_id: this.product?.id,\n ...this.form.value,\n };\n if (data.date) {\n data.date = this.dateUtils.getYYYYMMDDString(data.date);\n }\n this.isWorking = true;\n let request: Observable<any> = this.stockReceiptService.store(data);\n if (this.stockReceipt?.id) {\n request = this.stockReceiptService.update(data);\n }\n request.subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.saved.emit(response?.item);\n this.alertService.addAlert(\n \"Stock Receipt Saved Successfully!\",\n \"success\"\n );\n },\n error: () => (this.isWorking = false),\n });\n }\n\n private updateTotalAmount() {\n const { purchase_price, quantity } = this.form.value;\n const amount: any = parseFloat(purchase_price) * parseFloat(quantity) || 0;\n this.form.get(\"amount\")?.setValue(amount);\n }\n}\n","<h3 class=\"text-center\">\n {{ stockReceipt?.id ? \"Edit\" : \"Receive\" }} Stock for {{ product?.name }}\n</h3>\n<form\n [formGroup]=\"form\"\n class=\"d-flex flex-column gap-1 justify-content-start\"\n (submit)=\"save()\"\n>\n <app-payee-selector\n label=\"Supplier\"\n formControlName=\"supplier_id\"\n appearance=\"fill\"\n [showAddButton]=\"true\"\n ></app-payee-selector>\n\n <mat-form-field>\n <mat-label>Date</mat-label>\n <input\n matInput\n [matDatepicker]=\"datePicker\"\n formControlName=\"date\"\n (focus)=\"datePicker.open()\"\n />\n <mat-datepicker #datePicker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">\n {{ getErrorMessage(\"date\") }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\" />\n <mat-error *ngIf=\"isFieldValid('quantity')\">\n {{ getErrorMessage(\"quantity\") }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Purchase Price</mat-label>\n <input matInput formControlName=\"purchase_price\" type=\"number\" min=\"0\" />\n <mat-error *ngIf=\"isFieldValid('purchase_price')\">\n {{ getErrorMessage(\"purchase_price\") }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Total Value</mat-label>\n <input matInput formControlName=\"amount\" readonly type=\"number\" min=\"0\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"3\"></textarea>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <button\n [disabled]=\"isWorking\"\n mat-raised-button\n color=\"primary\"\n type=\"submit\"\n >\n Save\n </button>\n <button\n [disabled]=\"isWorking\"\n (click)=\"cancelled.emit()\"\n mat-flat-button\n type=\"button\"\n >\n Cancel\n </button>\n </div>\n</form>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\n\n@Component({\n selector: \"app-stock-receipt-form-button\",\n templateUrl: \"./stock-receipt-form-button.component.html\",\n styleUrls: [\"./stock-receipt-form-button.component.scss\"],\n})\nexport class StockReceiptFormButtonComponent {\n @Input() product: any;\n @Input() stockReceipt: any;\n @Input() icon!: string | null;\n @Output() saved: EventEmitter<any> = new EventEmitter<any>();\n\n matDialogRef!: MatDialogRef<any>;\n\n constructor(private matDialog: MatDialog) {}\n\n showStockReceiptForm(templateRef: TemplateRef<any>) {\n this.matDialogRef = this.matDialog.open(templateRef, { width: \"500px\" });\n }\n\n onStockReceiptSaved(item: any) {\n this.matDialogRef.close();\n this.saved.emit(item);\n }\n}\n","<span\n class=\"material-symbols-outlined cursor-pointer\"\n [class.text-primary]=\"icon\"\n matTooltip=\"Stock Receipt\"\n (click)=\"showStockReceiptForm(stockReceiptFormTemplate)\"\n>\n {{ stockReceipt ? \"edit\" : icon ?? \"download\" }}\n</span>\n\n<ng-template #stockReceiptFormTemplate>\n <app-stock-receipt-form\n mat-dialog-content\n [product]=\"product\"\n [stockReceipt]=\"stockReceipt\"\n (cancelled)=\"matDialogRef.close()\"\n (saved)=\"onStockReceiptSaved($event)\"\n ></app-stock-receipt-form>\n</ng-template>\n","import { Injectable } from \"@angular/core\";\nimport { HttpService, TechlifyServiceBaseClass } from \"ngx-techlify-core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class StockIssuanceService extends TechlifyServiceBaseClass {\n constructor(httpService: HttpService) {\n super(httpService, \"stock-issuances\");\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport {\n AlertService,\n DateUtils,\n FormValidatorService,\n TechlifyFormComponentInterface,\n} from \"ngx-techlify-core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { Observable } from \"rxjs\";\nimport { StockIssuanceService } from \"../../stock-issuance.service\";\n\n@Component({\n selector: \"app-stock-issue-form\",\n templateUrl: \"./stock-issue-form.component.html\",\n styleUrls: [\"./stock-issue-form.component.scss\"],\n})\nexport class StockIssueFormComponent\n extends TechlifyFormComponentInterface\n implements OnInit\n{\n @Input() product: any;\n @Input() stockIssuance: any;\n @Input() issuableType!: string;\n @Input() issuableId!: number;\n @Output() saved: EventEmitter<any> = new EventEmitter<any>();\n @Output() cancelled: EventEmitter<any> = new EventEmitter<any>();\n\n isWorking!: boolean;\n\n constructor(\n formValidatorService: FormValidatorService,\n private formBuilder: FormBuilder,\n private stockIssuanceService: StockIssuanceService,\n private alertService: AlertService,\n private dateUtils: DateUtils\n ) {\n super(formValidatorService);\n this.errorMessages = {\n date: {\n required: \"The date field is required.\",\n },\n quantity: {\n required: \"The quantity field is required.\",\n },\n };\n\n this.form = this.formBuilder.group({\n id: [\"\"],\n product_id: [\"\"],\n date: [new Date(), Validators.required],\n quantity: [1, Validators.required],\n particulars: [\"\"],\n });\n }\n\n ngOnInit() {\n if (this.product) {\n this.form.get(\"product_id\")?.setValue(this.product?.id);\n }\n if (this.stockIssuance) {\n let data: any = { ...this.stockIssuance };\n if (data.date) {\n data.date = new Date(data.date);\n }\n this.form.patchValue(data);\n } else {\n // on create for set default quantity from last record\n if (this.product?.last_stock_issuance) {\n const { quantity } = this.product.last_stock_issuance;\n this.form.patchValue({\n quantity,\n });\n }\n }\n }\n\n save() {\n if (this.form.invalid) {\n this.alertService.addAlert(\"Please check the form for errors\", \"error\");\n return;\n }\n const data: any = {\n product_id: this.product?.id,\n ...this.form.value,\n };\n if (data.date) {\n data.date = this.dateUtils.getYYYYMMDDString(data.date);\n }\n if (this.issuableId && this.issuableType) {\n data.issuable_type = this.issuableType;\n data.issuable_id = this.issuableId;\n }\n\n this.isWorking = true;\n let request: Observable<any> = this.stockIssuanceService.store(data);\n if (this.stockIssuance?.id) {\n request = this.stockIssuanceService.update(data);\n }\n request.subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.saved.emit(response?.item);\n this.alertService.addAlert(\n \"Stock Issuance Saved Successfully!\",\n \"success\"\n );\n },\n error: () => (this.isWorking = false),\n });\n }\n\n onProductChange(product: any) {\n this.product = product;\n }\n}\n","<h3 class=\"text-center\">\n {{ stockIssuance?.id ? \"Edit\" : \"Issue\" }} Stock for {{ product?.name }}\n</h3>\n<form\n [formGroup]=\"form\"\n class=\"d-flex flex-column gap-1 justify-content-start\"\n (submit)=\"save()\"\n>\n <mat-form-field *ngIf=\"!product\">\n <mat-label>Product</mat-label>\n <app-searchable-selector\n formControlName=\"product_id\"\n apiUrl=\"api/products\"\n titleField=\"name\"\n (selectedValueChange)=\"onProductChange($event)\"\n ></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Date</mat-label>\n <input\n matInput\n [matDatepicker]=\"datePicker\"\n formControlName=\"date\"\n (focus)=\"datePicker.open()\"\n />\n <mat-datepicker #datePicker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">\n {{ getErrorMessage(\"date\") }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\" />\n <mat-error *ngIf=\"isFieldValid('quantity')\">\n {{ getErrorMessage(\"quantity\") }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"3\"></textarea>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <button\n [disabled]=\"isWorking\"\n mat-raised-button\n color=\"primary\"\n type=\"submit\"\n >\n Save\n </button>\n <button\n [disabled]=\"isWorking\"\n (click)=\"cancelled.emit()\"\n mat-flat-button\n type=\"button\"\n >\n Cancel\n </button>\n </div>\n</form>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\n\n@Component({\n selector: \"app-stock-issue-form-button\",\n templateUrl: \"./stock-issue-form-button.component.html\",\n styleUrls: [\"./stock-issue-form-button.component.scss\"],\n})\nexport class StockIssueFormButtonComponent {\n @Input() product: any;\n @Input() stockIssuance: any;\n @Input() icon!: string | null;\n @Input() issuableType!: string;\n @Input() issuableId!: number;\n @Output() saved: EventEmitter<any> = new EventEmitter<any>();\n\n matDialogRef!: MatDialogRef<any>;\n\n constructor(private matDialog: MatDialog) {}\n\n showStockIssuanceForm(templateRef: TemplateRef<any>) {\n this.matDialogRef = this.matDialog.open(templateRef, { width: \"500px\" });\n }\n\n onStockIssuanceSaved(item: any) {\n this.matDialogRef.close();\n this.saved.emit(item);\n }\n}\n","<span\n class=\"material-symbols-outlined cursor-pointer\"\n [class.text-primary]=\"icon\"\n matTooltip=\"Stock Issuance\"\n (click)=\"showStockIssuanceForm(stockIssuanceFormTemplate)\"\n>\n {{ stockIssuance ? \"edit\" : icon ?? \"upload\" }}\n</span>\n\n<ng-template #stockIssuanceFormTemplate>\n <app-stock-issue-form\n mat-dialog-content\n [product]=\"product\"\n [stockIssuance]=\"stockIssuance\"\n [issuableType]=\"issuableType\"\n [issuableId]=\"issuableId\"\n (cancelled)=\"matDialogRef.close()\"\n (saved)=\"onStockIssuanceSaved($event)\"\n ></app-stock-issue-form>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { ProductFormService } from \"../product-form.service\";\n\n@Component({\n selector: \"app-product-form-button\",\n templateUrl: \"./product-form-button.component.html\",\n styleUrls: [\"./product-form-button.component.scss\"],\n})\nexport class ProductFormButtonComponent {\n @Input() product: any;\n @Output() saved = new EventEmitter();\n\n constructor(\n public matDialog: MatDialog,\n private productFormService: ProductFormService\n ) {}\n\n showForm(templateRef: TemplateRef<any>) {\n this.matDialog.open(templateRef, { width: \"600px\" });\n }\n\n /**\n * Handle on product saved event.\n *\n * @param product\n */\n onProductSaved(product: any) {\n this.saved.emit(product);\n this.matDialog?.closeAll();\n this.productFormService.listUpdated(true);\n }\n}\n","<mat-icon\n color=\"primary\"\n class=\"cursor-pointer\"\n [class.text-secondary]=\"product\"\n (click)=\"showForm(addProductForm)\"\n>\n {{ product ? \"edit\" : \"add\" }}\n</mat-icon>\n\n<ng-template #addProductForm>\n <app-product-form\n [product]=\"product\"\n mat-dialog-content\n (saved)=\"onProductSaved($event)\"\n (cancelled)=\"matDialog.closeAll()\"\n ></app-product-form>\n</ng-template>\n","import { Component, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormControl, FormGroup } from \"@angular/forms\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatTableDataSource } from \"@angular/material/table\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport {ColumnConfig, RequestHelperService} from \"ngx-techlify-core\";\nimport { ProductService } from \"../product.service\";\nimport { UntilDestroy } from \"@ngneat/until-destroy\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { ProductFormComponent } from \"../product-form/product-form.component\";\nimport { ProductFormService } from \"../product-form.service\";\n@UntilDestroy()\n@Component({\n selector: \"app-product-list\",\n templateUrl: \"./product-list.component.html\",\n})\nexport class ProductListComponent implements OnInit {\n public filterForm: FormGroup;\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 products: any[] = [];\n public dataSource = new MatTableDataSource();\n isLoading: boolean = false;\n\n columnConfig: ColumnConfig[] = [\n { label: '#', def: '#', isSelected: true, isEditable: true },\n { label: 'Name', def: 'name', isSelected: true, isEditable: true },\n { label: 'SKU', def: 'sku', isSelected: true, isEditable: true },\n { label: 'Categories', def: 'categories', isSelected: true, isEditable: true },\n { label: 'Initial Quantity', def: 'initial_quantity', isSelected: true, isEditable: true },\n { label: 'Reorder Point', def: 'reorder_point', isSelected: true, isEditable: true },\n { label: 'Stock Receipts', def: 'stock_receipts', isSelected: true, isEditable: true },\n { label: 'Stock Issuances', def: 'stock_issuances', isSelected: true, isEditable: true },\n { label: 'On Hand', def: 'on_hand', isSelected: true, isEditable: true },\n { label: 'Sale Price', def: 'sale_price', isSelected: true, 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: true },\n ];\n\n selectedColumns: ColumnConfig[] = this.columnConfig.filter(col => col.isSelected);\n\n get displayedColumns(): string[] {\n return this.selectedColumns.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 requestHelperService: RequestHelperService,\n private productFormService: ProductFormService\n ) {\n this.filterForm = this.fb.group({\n search: [\"\"],\n category_ids: [\"\"],\n type_ids: [\"\"],\n income_account_ids: [\"\"],\n expense_account_ids: [\"\"],\n sort_by: [\"\"],\n });\n }\n\n ngOnInit(): void {\n if (this.activatedRoute.snapshot.params?.[\"import_id\"]) {\n this.importId = parseInt(\n this.activatedRoute.snapshot.params?.[\"import_id\"]\n );\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\n .pipe(debounceTime(800))\n .subscribe(() => this.reload());\n // listen form product add or update event and reload.\n this.productFormService.isListUpdated().subscribe((val: boolean) => {\n if (val && !this.isLoading) {\n this.reload();\n }\n });\n }\n\n 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.num_items = this.num_items + \"|\" + this.currentPage;\n params.with = \"categories,lastStockReceipt,lastStockIssuance,creator\";\n if (this.importId) {\n params.import_id = this.importId;\n }\n this.isLoading = true;\n\n this.productService.index(params).subscribe({\n next: (res: any) => {\n this.isLoading = false;\n this.dataSource = new MatTableDataSource(\n this.dataSource.data.concat(res?.data)\n );\n this.totalItems = res.total;\n // stop reloading data once data loaded.\n this.productFormService.listUpdated(false);\n },\n error: () => (this.isLoading = false),\n });\n }\n\n reload() {\n if (this.isLoading) return;\n this.dataSource = new MatTableDataSource();\n this.currentPage = 1;\n this.loadData();\n }\n\n modifyProduct(model?: any) {\n const dialogRef = this.dialog.open(ProductFormComponent, {\n width: \"600px\",\n data: {\n details: model,\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.reload();\n }\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 sortColumn(event: any) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n onScroll() {\n if (this.totalItems > this.dataSource.data.length) {\n this.currentPage += 1;\n this.loadData();\n }\n }\n}\n","<mat-card class=\"mb-3\">\n <mat-card-content>\n <form\n [formGroup]=\"filterForm\"\n class=\"d-flex justify-content-between align-items-center gap-2\"\n >\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 class=\"mt-2\"></app-product-form-button>\n <span matTooltip=\"Import\" routerLink=\"import\" class=\"cursor-pointer mt-1 material-symbols-outlined\">\n file_save\n </span>\n <app-column-selector\n mode=\"icon\"\n class=\"mt-2 d-print-none\"\n [columnConfigs]=\"columnConfig\"\n [(selectedColumns)]=\"selectedColumns\"\n ></app-column-selector>\n </div>\n\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-form-field style=\"width: 120px\">\n <input matInput placeholder=\"Product\" formControlName=\"search\" />\n </mat-form-field>\n\n <mat-form-field style=\"width: 120px\">\n <mat-label>Category</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-categories\"\n formControlName=\"category_ids\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field style=\"width: 120px\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-types\"\n formControlName=\"type_ids\"\n titleField=\"title\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n <!-- <mat-form-field style=\"width: 150px\">-->\n <!-- <mat-label>Income Account</mat-label>-->\n <!-- <app-searchable-selector-->\n <!-- apiUrl=\"api/accounts\"-->\n <!-- formControlName=\"income_account_ids\"-->\n <!-- titleField=\"title\"-->\n <!-- [multiple]=\"true\"-->\n <!-- >-->\n <!-- </app-searchable-selector>-->\n <!-- </mat-form-field>-->\n <!-- <mat-form-field style=\"width: 150px\">-->\n <!-- <mat-label>Expense Account</mat-label>-->\n <!-- <app-searchable-selector-->\n <!-- apiUrl=\"api/accounts\"-->\n <!-- formControlName=\"expense_account_ids\"-->\n <!-- titleField=\"title\"-->\n <!-- [multiple]=\"true\"-->\n <!-- >-->\n <!-- </app-searchable-selector>-->\n <!-- </mat-form-field>-->\n </div>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n matSort\n (matSortChange)=\"sortColumn($event)\"\n matSortDisableClear=\"true\"\n aria-describedby=\"Products List\"\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 <!-- 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]=\"[element?.id, 'view']\">{{ element.name }}</a>\n <small class=\"text-secondary\" *ngIf=\"element.type\">{{ element.type?.title }}</small>\n </div>\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 <div\n *ngIf=\"element?.categories?.length > 0\"\n class=\"d-flex justify-content-start align-items-center gap-1 flex-wrap\"\n >\n <span\n class=\"badge bg-secondary\"\n *ngFor=\"let category of element?.categories\"\n >\n {{ category?.title }}\n </span>\n </div>\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 <!-- Initial Quantity Column -->\n <ng-container matColumnDef=\"initial_quantity\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n Initial Quantity\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element.initial_quantity }}</p>\n <small class=\"text-secondary\" *ngIf=\"element?.initial_quantity_date\">\n on {{ element?.initial_quantity_date | date }}\n </small>\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>\n Stock Receipts\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.stock_receipts_sum_quantity }}</p>\n <small class=\"text-secondary\" *ngIf=\"element?.last_stock_receipt\">\n last added on {{ element?.last_stock_receipt?.date | date }}\n </small>\n </td>\n </ng-container>\n\n <!-- Stock Issuances Column -->\n <ng-container matColumnDef=\"stock_issuances\">\n <th mat-header-cell mat-sort-header=\"stock_issuances_sum_quantity\" *matHeaderCellDef>\n Stock Issuances\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">{{ element?.stock_issuances_sum_quantity }}</p>\n <small class=\"text-secondary\" *ngIf=\"element?.last_stock_issuance\">\n last issued on {{ element?.last_stock_issuance?.date | date }}\n </small>\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_balance\" *matHeaderCellDef>On Hand</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.stock_balance }}\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\">{{ 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-product-form-button\n [product]=\"element\"\n ></app-product-form-button>\n <mat-icon\n class=\"cursor-pointer\"\n matTooltip=\"View\"\n [routerLink]=\"[element.id, 'view']\"\n routerLinkActive=\"route-link-active\"\n >\n remove_red_eye\n </mat-icon>\n\n <app-stock-receipt-form-button\n [product]=\"element\"\n (saved)=\"reload()\"\n ></app-stock-receipt-form-button>\n\n <app-stock-issue-form-button\n [product]=\"element\"\n (saved)=\"reload()\"\n ></app-stock-issue-form-button>\n </div>\n </td>\n </ng-container>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\n ></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"app-product-nav-bar\",\n templateUrl: \"./product-nav-bar.component.html\",\n})\nexport class ProductNavBarComponent {}\n","<div>\n <router-outlet></router-outlet>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { RequestHelperService, TimelineValue } from \"ngx-techlify-core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { debounceTime, distinctUntilChanged } from \"rxjs\";\nimport moment from \"moment\";\n\n@Component({\n selector: \"app-techlify-filter\",\n templateUrl: \"./techlify-filter.component.html\",\n styleUrls: [\"./techlify-filter.component.scss\"],\n})\nexport class TechlifyFilterComponent implements OnInit {\n @Input() filterForm!: FormGroup;\n @Input() filterConfig: any;\n @Output() filterUpdated: EventEmitter<any> = new EventEmitter();\n\n constructor(\n private requestHelperService: RequestHelperService,\n private activatedRoute: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n // listen for filter changes\n this.filterForm.valueChanges.subscribe({\n next: (value: any) => {\n const params: any = this.requestHelperService.convertToFormData(value);\n this.requestHelperService.updateQueryParams(params);\n },\n });\n\n // update form with query params\n this.requestHelperService.updateFormWithQueryParams(this.filterForm, {\n duration: { number: true },\n expiry_duration: { number: true },\n payment_method_ids: { multiple: true },\n payment_account_ids: { multiple: true },\n project_ids: { multiple: true },\n invoice_status_ids: { multiple: true },\n customer_ids: { multiple: true },\n cost_category_ids: { multiple: true },\n team_member_ids: { multiple: true },\n task_status_ids: { multiple: true },\n asset_account_ids: { multiple: true },\n depreciation_method_ids: { multiple: true },\n depreciation_expense_account_ids: { multiple: true },\n fixed_asset_type_ids: { multiple: true },\n fixed_asset_document_type_ids: { multiple: true },\n service_center_ids: { multiple: true },\n fixed_asset_maintenance_status_ids: { multiple: true },\n milestone_ids: { multiple: true },\n product_ids: { multiple: true },\n supplier_ids: { multiple: true },\n measure_ids: { multiple: true },\n type_ids: { multiple: true },\n fixed_asset_ids: { multiple: true },\n });\n\n // listen for route change\n this.activatedRoute.queryParams\n .pipe(debounceTime(800), distinctUntilChanged())\n .subscribe((val: any) => {\n this.filterUpdated.emit(this.filterForm.value);\n });\n }\n\n resetField(field: string) {\n this.filterForm.get(field)?.setValue(\"\");\n }\n\n onDurationChange(timelineValue: TimelineValue) {\n let { date_to, date_from } = timelineValue;\n this.filterForm.patchValue(\n {\n date_from: date_from ? moment(date_from).format(\"YYYY-MM-DD\") : \"\",\n date_to: date_to ? moment(date_to).format(\"YYYY-MM-DD\") : \"\",\n },\n { emitEvent: false }\n );\n }\n\n /**\n * Update expiry date from and date to on value change.\n *\n * @param timelineValue\n */\n onExpiryDurationChange(timelineValue: TimelineValue) {\n let { date_to, date_from } = timelineValue;\n this.filterForm.patchValue({\n expiry_date_from: date_from ? moment(date_from).format(\"YYYY-MM-DD\") : \"\",\n expiry_date_to: date_to ? moment(date_to).format(\"YYYY-MM-DD\") : \"\",\n });\n }\n\n /**\n * Get the attribute value for the field.\n *\n * @param attribute\n * @param field\n */\n getFilterConfig(attribute: string, field: string) {\n if (!this.filterConfig) return \"\";\n // Check if the field and attribute exist in the filter config, return the value or an empty string\n return this.filterConfig[field] &&\n this.filterConfig[field][attribute] !== undefined\n ? this.filterConfig[field][attribute]\n : \"\";\n }\n}\n","<form\n [formGroup]=\"filterForm\"\n fxLayout\n fxLayoutAlign=\"start center\"\n fxLayoutGap=\"10px\"\n>\n <mat-form-field\n *ngIf=\"filterForm.get('search')\"\n [appearance]=\"getFilterConfig('appearance', 'search')\"\n >\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n matInput\n [placeholder]=\"getFilterConfig('placeholder', 'search')\"\n />\n <button\n *ngIf=\"filterForm.value?.search\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('search')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter\n *ngIf=\"filterForm?.get('duration')\"\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'duration')\"\n [appearance]=\"getFilterConfig('appearance', 'duration')\"\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n ></app-timeline-filter>\n\n <mat-form-field *ngIf=\"filterForm.get('payment_method_ids')\">\n <mat-label>Payment Method</mat-label>\n <app-searchable-selector\n formControlName=\"payment_method_ids\"\n apiUrl=\"api/payment-methods\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_method_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_method_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('payment_account_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['accountingcommon_account.read']\">\n <mat-label>{{\n getFilterConfig(\"label\", \"payment_account_ids\") || \"Payment Account\"\n }}</mat-label>\n <app-searchable-selector\n formControlName=\"payment_account_ids\"\n [apiUrl]=\"\n getFilterConfig('apiUrl', 'payment_account_ids') || 'api/accounts'\n \"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('invoice_status_ids')\">\n <mat-label>Invoice Status</mat-label>\n <app-searchable-selector\n formControlName=\"invoice_status_ids\"\n apiUrl=\"api/invoice-statuses\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.invoice_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('invoice_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('customer_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['customer_read']\">\n <mat-label>Customer</mat-label>\n <app-searchable-selector\n formControlName=\"customer_ids\"\n titleField=\"name\"\n apiUrl=\"api/customers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.customer_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('customer_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n filterForm.get('project_ids') &&\n getFilterConfig('disabled', 'project_ids') === false\n \"\n >\n <mat-form-field *ngxPermissionsOnly=\"['project.read']\">\n <mat-label>Project</mat-label>\n <app-searchable-selector\n formControlName=\"project_ids\"\n apiUrl=\"api/projects\"\n titleField=\"project_name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.project_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('project_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('product_ids')\">\n <mat-label>Product</mat-label>\n <app-searchable-selector\n formControlName=\"product_ids\"\n apiUrl=\"api/products\"\n titleField=\"name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.product_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('product_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('measure_ids')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector\n formControlName=\"measure_ids\"\n apiUrl=\"api/product-measures\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.measure_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('measure_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-form-field\n *ngIf=\"filterForm.get('supplier_ids')\"\n [appearance]=\"getFilterConfig('appearance', 'supplier_ids')\"\n >\n <mat-label>Supplier</mat-label>\n <app-searchable-selector\n formControlName=\"supplier_ids\"\n titleField=\"company_name\"\n apiUrl=\"api/suppliers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.supplier_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('supplier_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <app-timeline-filter\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'expiry_duration')\"\n *ngIf=\"filterForm?.get('expiry_duration')\"\n formControlName=\"expiry_duration\"\n (selectionChange)=\"onExpiryDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.expiry_date_from\"\n [dateTo]=\"filterForm.value?.expiry_date_to\"\n ></app-timeline-filter>\n\n <mat-form-field\n *ngIf=\"filterForm.get('cost_category_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Cost Category</mat-label>\n <app-searchable-selector\n formControlName=\"cost_category_ids\"\n apiUrl=\"api/cost-code-categories\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.cost_category_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('cost_category_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('milestone_ids')\" style=\"width: 150px\">\n <mat-label>Milestone</mat-label>\n <app-searchable-selector\n formControlName=\"milestone_ids\"\n apiUrl=\"api/milestones\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.milestone_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('milestone_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('team_member_ids')\">\n <mat-label>Assignee</mat-label>\n <app-searchable-selector\n apiUrl=\"api/persons\"\n formControlName=\"team_member_ids\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.team_member_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('team_member_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-types\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_document_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_document_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-document-types\"\n [multiple]=\"true\"\n [enableSearch]=\"\n getFilterConfig('enableSearch', 'fixed_asset_document_type_ids')\n \"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_document_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_document_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div *ngIf=\"filterForm.get('fixed_asset_document_status')\">\n <small\n class=\"mr-2 text-secondary\"\n *ngIf=\"getFilterConfig('showLabel', 'fixed_asset_document_status')\"\n >\n Status\n </small>\n <mat-button-toggle-group\n formControlName=\"fixed_asset_document_status\"\n [multiple]=\"false\"\n >\n <mat-button-toggle value=\"all\">All</mat-button-toggle>\n <mat-button-toggle value=\"active\">Active</mat-button-toggle>\n <mat-button-toggle value=\"expired\">Expired</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field *ngIf=\"filterForm.get('asset_account_ids')\">\n <mat-label>Asset Account</mat-label>\n <app-searchable-selector\n formControlName=\"asset_account_ids\"\n apiUrl=\"api/accounts\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.asset_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('asset_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_expense_account_ids')\">\n <mat-label>Depreciation Expense Account</mat-label>\n <app-searchable-selector\n [multiple]=\"true\"\n apiUrl=\"api/accounts\"\n formControlName=\"depreciation_expense_account_ids\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.depreciation_expense_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('depreciation_expense_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_method_ids')\">\n <mat-label>Depreciation Method</mat-label>\n <app-searchable-selector\n formControlName=\"depreciation_method_ids\"\n apiUrl=\"api/accounting-plus/depreciation-methods\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n (click)=\"resetField('depreciation_method_ids')\"\n *ngIf=\"filterForm.value?.depreciation_method_ids\"\n mat-icon-button\n matSuffix\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"filterForm.get('task_status_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/task-statuses\"\n formControlName=\"task_status_ids\"\n titleField=\"title\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.task_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('task_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('service_center_ids')\">\n <mat-label>Service Center</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/service-centers\"\n formControlName=\"service_center_ids\"\n titleField=\"name\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.service_center_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('service_center_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_maintenance_status_ids')\">\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-asset-maintenance-statuses\"\n formControlName=\"fixed_asset_maintenance_status_ids\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_maintenance_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_maintenance_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('group_by')\">\n <mat-label>Group By</mat-label>\n <mat-select formControlName=\"group_by\">\n <mat-option value=\"week\">Week</mat-option>\n <mat-option value=\"month\">Month</mat-option>\n <mat-option value=\"year\">Year</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { AlertService } from \"ngx-techlify-core\";\nimport { StockReceiptService } from \"../stock-receipt.service\";\n\n@Component({\n selector: \"app-stock-receipt-delete-button\",\n templateUrl: \"./stock-receipt-delete-button.component.html\",\n styleUrls: [\"./stock-receipt-delete-button.component.scss\"],\n})\nexport class StockReceiptDeleteButtonComponent {\n @Input() stockReceipt: any;\n @Output() deleted: EventEmitter<any> = new EventEmitter<any>();\n isDeleting: boolean = false;\n\n constructor(\n private matDialog: MatDialog,\n private stockReceiptService: StockReceiptService,\n private alertService: AlertService\n ) {}\n\n showDeleteConfirmModel(templateRef: TemplateRef<any>) {\n this.matDialog.open(templateRef, { width: \"400px\" });\n }\n\n delete() {\n this.isDeleting = true;\n this.stockReceiptService.delete(this.stockReceipt).subscribe({\n next: () => {\n this.matDialog.closeAll();\n this.isDeleting = false;\n this.deleted.emit();\n this.alertService.addAlert(\n \"Stock Receipt deleted successfully!\",\n \"success\"\n );\n },\n error: () => {\n this.isDeleting = false;\n },\n });\n }\n}\n","<span\n class=\"material-symbols-outlined cursor-pointer\"\n (click)=\"showDeleteConfirmModel(deleteModelTemplate)\"\n>\n delete\n</span>\n\n<ng-template #deleteModelTemplate>\n <h3 mat-dialog-title>Delete Stock Receipt</h3>\n <div mat-dialog-content>\n <p>Are you sure you want to delete the stock receipt record?</p>\n </div>\n <div mat-dialog-actions class=\"d-flex justify-content-end gap-2\">\n <button\n [disabled]=\"isDeleting\"\n mat-raised-button\n type=\"button\"\n color=\"warn\"\n (click)=\"delete()\"\n >\n Delete\n </button>\n <button\n [disabled]=\"isDeleting\"\n mat-flat-button\n mat-dialog-close\n type=\"button\"\n >\n Cancel\n </button>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport {\n RequestHelperService,\n TechlifyListingControllerInterface,\n Timeline,\n} from \"ngx-techlify-core\";\nimport { StockReceiptService } from \"../stock-receipt.service\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport { UntilDestroy } from \"@ngneat/until-destroy\";\nimport { Sort } from \"@angular/material/sort\";\nimport { debounceTime } from \"rxjs\";\n\n@UntilDestroy()\n@Component({\n selector: \"app-stock-receipts-list-page\",\n templateUrl: \"./stock-receipts-list-page.component.html\",\n styleUrls: [\"./stock-receipts-list-page.component.scss\"],\n})\nexport class StockReceiptsListPageComponent\n extends TechlifyListingControllerInterface\n implements OnInit\n{\n @Input() product: any;\n @Output() listUpdated: EventEmitter<any> = new EventEmitter<any>();\n\n displayedColumns: string[] = [\n \"no\",\n \"product\",\n \"date\",\n \"quantity\",\n \"purchase_price\",\n \"amount\",\n \"particulars\",\n \"supplier\",\n \"creator\",\n \"actions\",\n ];\n filterConfig: any = {\n duration: {\n label: \"Date\",\n },\n };\n\n constructor(\n private stockReceiptService: StockReceiptService,\n private formBuilder: FormBuilder,\n private requestHelperService: RequestHelperService\n ) {\n super();\n this.lastPage = 0;\n this.filterForm = this.formBuilder.group({\n product_ids: [\"\"],\n duration: [Timeline.THIS_MONTH],\n date_from: [\"\"],\n date_to: [\"\"],\n supplier_ids: [\"\"],\n measure_ids: [\"\"],\n sort_by: [\"date|desc\"],\n });\n }\n\n ngOnInit(): void {\n (this.filterForm as FormGroup).valueChanges\n .pipe(debounceTime(500))\n .subscribe({\n next: () => this.reload(),\n });\n if (this.product) {\n this.filterForm.get(\"product_ids\")?.setValue(this.product?.id);\n const index = this.displayedColumns.indexOf(\"product\");\n if (index !== -1) {\n this.displayedColumns.splice(index, 1);\n }\n }\n }\n\n loadData(): void {\n const params: any = {\n page: this.page,\n perPage: this.perPage,\n with: \"creator,supplier,product.measure\",\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n };\n this.isWorking = true;\n this.stockReceiptService.index(params).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: () => {\n this.isWorking = false;\n },\n });\n }\n\n onSortChange(sort: Sort) {\n console.log(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","<mat-card *ngIf=\"!product\" class=\"mb-2\">\n <mat-card-content\n class=\"d-flex justify-content-between align-items-center gap-3\"\n >\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">Stock Receipts</h3>\n </div>\n\n <app-techlify-filter\n [filterForm]=\"filterForm\"\n (filterUpdated)=\"reload()\"\n [filterConfig]=\"filterConfig\"\n ></app-techlify-filter>\n </mat-card-content>\n</mat-card>\n\n<mat-card>\n <mat-card-content *ngIf=\"product\" class=\"mb-0\">\n <div class=\"d-flex justify-content-start align-items-center gap-2 mb-2\">\n <span class=\"material-symbols-outlined\"> output_circle </span>\n <h3 class=\"mb-0\">Stock Receipts</h3>\n <app-stock-receipt-form-button\n [product]=\"product\"\n (saved)=\"reload(); listUpdated.emit()\"\n icon=\"add\"\n ></app-stock-receipt-form-button>\n </div>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n aria-describedby=\"Stock Receipts\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"no\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.product?.id, 'view']\"\n >\n {{ element?.product?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Date</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.date | date }}</td>\n </ng-container>\n\n <!-- Quantity Column -->\n <ng-container matColumnDef=\"quantity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Quantity</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.quantity }} {{ element?.product?.measure?.title }}\n </td>\n </ng-container>\n\n <!-- Purchase Price Column -->\n <ng-container matColumnDef=\"purchase_price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n Purchase Price\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.purchase_price | currency }}\n </td>\n </ng-container>\n\n <!-- Total Value Column -->\n <ng-container matColumnDef=\"amount\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Total Value</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.amount | currency }}\n </td>\n </ng-container>\n\n <!-- Particulars Column -->\n <ng-container matColumnDef=\"particulars\">\n <th mat-header-cell *matHeaderCellDef>Particulars</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.particulars }}</td>\n </ng-container>\n\n <!-- Supplier Column -->\n <ng-container matColumnDef=\"supplier\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Supplier</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.supplier?.company_name }}\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-1\">{{ element?.creator?.name }}</p>\n <small class=\"text-secondary\">{{ 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=\"d-flex gap-1\">\n <app-stock-receipt-form-button\n [product]=\"element.product\"\n [stockReceipt]=\"element\"\n (saved)=\"reload(); listUpdated.emit()\"\n ></app-stock-receipt-form-button>\n <app-stock-receipt-delete-button\n [stockReceipt]=\"element\"\n (deleted)=\"reload(); listUpdated.emit()\"\n ></app-stock-receipt-delete-button>\n </div>\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-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { StockIssuanceService } from \"../stock-issuance.service\";\nimport { AlertService } from \"ngx-techlify-core\";\n\n@Component({\n selector: \"app-stock-issuance-delete-button\",\n templateUrl: \"./stock-issuance-delete-button.component.html\",\n styleUrls: [\"./stock-issuance-delete-button.component.scss\"],\n})\nexport class StockIssuanceDeleteButtonComponent {\n @Input() stockIssuance: any;\n @Output() deleted: EventEmitter<any> = new EventEmitter<any>();\n isDeleting: boolean = false;\n\n constructor(\n private matDialog: MatDialog,\n private stockIssuanceService: StockIssuanceService,\n private alertService: AlertService\n ) {}\n\n showDeleteConfirmModel(templateRef: TemplateRef<any>) {\n this.matDialog.open(templateRef, { width: \"400px\" });\n }\n\n delete() {\n this.isDeleting = true;\n this.stockIssuanceService.delete(this.stockIssuance).subscribe({\n next: () => {\n this.matDialog.closeAll();\n this.isDeleting = false;\n this.deleted.emit();\n this.alertService.addAlert(\n \"Stock Issuance deleted successfully!\",\n \"success\"\n );\n },\n error: () => {\n this.isDeleting = false;\n },\n });\n }\n}\n","<span\n class=\"material-symbols-outlined cursor-pointer\"\n (click)=\"showDeleteConfirmModel(deleteModelTemplate)\"\n>\n delete\n</span>\n\n<ng-template #deleteModelTemplate>\n <h3 mat-dialog-title>Delete Stock Issuance</h3>\n <div mat-dialog-content>\n <p>Are you sure you want to delete the stock issuance record?</p>\n </div>\n <div mat-dialog-actions class=\"d-flex justify-content-end gap-2\">\n <button\n [disabled]=\"isDeleting\"\n mat-raised-button\n type=\"button\"\n color=\"warn\"\n (click)=\"delete()\"\n >\n Delete\n </button>\n <button\n [disabled]=\"isDeleting\"\n mat-flat-button\n mat-dialog-close\n type=\"button\"\n >\n Cancel\n </button>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport {\n RequestHelperService,\n TechlifyListingControllerInterface,\n Timeline,\n} from \"ngx-techlify-core\";\nimport { FormBuilder, FormGroup } from \"@angular/forms\";\nimport { debounceTime } from \"rxjs\";\nimport { Sort } from \"@angular/material/sort\";\nimport { StockIssuanceService } from \"../stock-issuance.service\";\n\n@Component({\n selector: \"app-stock-issuances-list\",\n templateUrl: \"./stock-issuances-list.component.html\",\n styleUrls: [\"./stock-issuances-list.component.scss\"],\n})\nexport class StockIssuancesListComponent\n extends TechlifyListingControllerInterface\n implements OnInit\n{\n @Input() product: any;\n @Input() issuableType!: string;\n @Input() issuableId!: number;\n @Input() label = \"Stock Issuances\";\n @Output() listUpdated: EventEmitter<any> = new EventEmitter<any>();\n\n filterConfig: any = {\n duration: {\n label: \"Date\",\n },\n search: {\n placeholder: \"Search Product Name, SKU, Description, etc\",\n },\n };\n displayedColumns: string[] = [\n \"no\",\n \"product\",\n \"date\",\n \"quantity\",\n \"related\",\n \"particulars\",\n \"creator\",\n \"actions\",\n ];\n constructor(\n private formBuilder: FormBuilder,\n private requestHelperService: RequestHelperService,\n private stockIssuanceService: StockIssuanceService\n ) {\n super();\n this.lastPage = 0;\n this.filterForm = this.formBuilder.group({\n duration: [Timeline.THIS_MONTH],\n date_from: [\"\"],\n date_to: [\"\"],\n measure_ids: [\"\"],\n product_ids: [\"\"],\n search: [\"\"],\n sort_by: [\"date|desc\"],\n });\n }\n\n ngOnInit(): void {\n (this.filterForm as FormGroup).valueChanges\n .pipe(debounceTime(500))\n .subscribe({\n next: () => this.reload(),\n });\n if (this.product) {\n this.filterForm.get(\"product_ids\")?.setValue(this.product?.id);\n const index = this.displayedColumns.indexOf(\"product\");\n if (index !== -1) {\n this.displayedColumns.splice(index, 1);\n }\n }\n }\n\n loadData(): void {\n const params: any = {\n page: this.page,\n perPage: this.perPage,\n with: \"creator,product.measure,issuable.fixedAsset\",\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n };\n if (this.issuableId && this.issuableType) {\n params.issuable_ids = this.issuableId;\n params.issuable_types = this.issuableType;\n }\n this.isWorking = true;\n this.stockIssuanceService.index(params).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: () => {\n this.isWorking = false;\n },\n });\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","<mat-card *ngIf=\"!product\" class=\"mb-2\">\n <mat-card-content\n class=\"d-flex justify-content-between align-items-center gap-3\"\n >\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">{{ label }}</h3>\n\n <app-stock-issue-form-button\n icon=\"add\"\n [issuableType]=\"issuableType\"\n [issuableId]=\"issuableId\"\n (saved)=\"reload()\"\n ></app-stock-issue-form-button>\n </div>\n\n <app-techlify-filter\n [filterForm]=\"filterForm\"\n [filterConfig]=\"filterConfig\"\n (filterUpdated)=\"reload()\"\n ></app-techlify-filter>\n </mat-card-content>\n</mat-card>\n\n<mat-card>\n <mat-card-content *ngIf=\"product\" class=\"mb-0\">\n <div class=\"d-flex justify-content-start align-items-center gap-2 mb-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n <h3 class=\"mb-0\">Stock Issuances</h3>\n\n <app-stock-issue-form-button\n [product]=\"product\"\n icon=\"add\"\n (saved)=\"reload(); listUpdated.emit()\"\n ></app-stock-issue-form-button>\n </div>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n aria-describedby=\"Stock Issuances\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"no\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"[\n '/inventory/products/',\n element?.product?.id,\n 'view'\n ]\"\n >\n {{ element?.product?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Date</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.date | date }}</td>\n </ng-container>\n\n <!-- Related Column -->\n <ng-container matColumnDef=\"related\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Related</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n class=\"text-dark\"\n *ngIf=\"element?.issuable\"\n [routerLink]=\"['/maintenances', element?.issuable_id, 'view']\"\n >\n Maintenance for {{ element?.issuable?.fixed_asset?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Quantity Column -->\n <ng-container matColumnDef=\"quantity\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Quantity</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.quantity }} {{ element?.product?.measure?.title }}\n </td>\n </ng-container>\n\n <!-- Purchase Price Column -->\n <ng-container matColumnDef=\"purchase_price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n Purchase Price\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.purchase_price | currency }}\n </td>\n </ng-container>\n\n <!-- Total Value Column -->\n <ng-container matColumnDef=\"amount\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Total Value</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.amount | currency }}\n </td>\n </ng-container>\n\n <!-- Particulars Column -->\n <ng-container matColumnDef=\"particulars\">\n <th mat-header-cell *matHeaderCellDef>Particulars</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.particulars }}</td>\n </ng-container>\n\n <!-- Supplier Column -->\n <ng-container matColumnDef=\"supplier\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Supplier</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.supplier?.company_name }}\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-1\">{{ element?.creator?.name }}</p>\n <small class=\"text-secondary\">{{ 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=\"d-flex gap-1\">\n <app-stock-issue-form-button\n [product]=\"element.product\"\n [stockIssuance]=\"element\"\n (saved)=\"reload(); listUpdated.emit()\"\n ></app-stock-issue-form-button>\n <app-stock-issuance-delete-button\n [stockIssuance]=\"element\"\n (deleted)=\"reload(); listUpdated.emit()\"\n ></app-stock-issuance-delete-button>\n </div>\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-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n","import { Injectable } from \"@angular/core\";\nimport { HttpService, TechlifyServiceBaseClass } from \"ngx-techlify-core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ProductTaxService extends TechlifyServiceBaseClass {\n constructor(httpService: HttpService) {\n super(httpService, \"product-taxes\");\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport {\n AlertService,\n FormValidatorService,\n TechlifyFormComponentInterface,\n} from \"ngx-techlify-core\";\nimport { FormBuilder, Validators } from \"@angular/forms\";\nimport { ProductTaxService } from \"../product-tax.service\";\n\n@Component({\n selector: \"app-product-tax-form-button\",\n templateUrl: \"./product-tax-form-button.component.html\",\n})\nexport class ProductTaxFormButtonComponent\n extends TechlifyFormComponentInterface\n implements OnInit\n{\n @Input() product: any;\n @Output() saved: EventEmitter<any> = new EventEmitter();\n\n isSaving!: boolean;\n\n constructor(\n public matDialog: MatDialog,\n private productTaxService: ProductTaxService,\n formValidatorService: FormValidatorService,\n private formBuilder: FormBuilder,\n private alertService: AlertService\n ) {\n super(formValidatorService);\n this.errorMessages = {\n tax_id: {\n required: \"The tax field is required.\",\n },\n };\n\n this.form = this.formBuilder.group({\n product_id: [\"\"],\n tax_id: [\"\", Validators.required],\n });\n }\n\n ngOnInit() {\n if (this.product) {\n this.form.get(\"product_id\")?.setValue(this.product?.id);\n }\n }\n\n showForm(templateRef: TemplateRef<any>) {\n this.matDialog.open(templateRef, { width: \"400px\" });\n }\n\n save() {\n this.form.markAllAsTouched();\n if (this.form.invalid) {\n this.alertService.addAlert(\"Please check the form for errors.\", \"error\");\n return;\n }\n\n const data: any = { ...this.form.value };\n const params: any = {\n with: \"tax.type\",\n };\n this.isSaving = true;\n\n this.productTaxService.store(data, params).subscribe({\n next: (response: any) => {\n this.isSaving = false;\n this.matDialog.closeAll();\n this.alertService.addAlert(\n \"Product tax saved successfully!\",\n \"success\"\n );\n this.saved.emit(response?.item);\n },\n error: () => (this.isSaving = false),\n });\n }\n}\n","<mat-icon\n color=\"primary\"\n class=\"cursor-pointer\"\n (click)=\"showForm(formTemplate)\"\n>\n add\n</mat-icon>\n\n<ng-template #formTemplate>\n <form\n [formGroup]=\"form\"\n (submit)=\"save()\"\n mat-dialog-content\n class=\"d-flex flex-column gap-2\"\n >\n <h3 class=\"text-dark\">Add tax for {{ product?.name }}</h3>\n <mat-form-field>\n <mat-label>Tax</mat-label>\n <app-searchable-selector\n formControlName=\"tax_id\"\n required\n apiUrl=\"api/taxes\"\n [enableSearch]=\"false\"\n ></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('tax_id')\">\n {{ getErrorMessage(\"tax_id\") }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button\n [disabled]=\"isSaving\"\n type=\"submit\"\n mat-raised-button\n color=\"primary\"\n >\n Save\n </button>\n <button\n [disabled]=\"isSaving\"\n type=\"button\"\n mat-flat-button\n mat-dialog-close\n >\n Cancel\n </button>\n </div>\n </form>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { AlertService } from \"ngx-techlify-core\";\nimport { ProductTaxService } from \"../product-tax.service\";\n\n@Component({\n selector: \"app-product-tax-delete-button\",\n templateUrl: \"./product-tax-delete-button.component.html\",\n})\nexport class ProductTaxDeleteButtonComponent {\n @Input() productTax: any;\n @Output() deleted = new EventEmitter();\n\n isDeleting!: boolean;\n\n constructor(\n private matDialog: MatDialog,\n private productTaxService: ProductTaxService,\n private alertService: AlertService\n ) {}\n\n /**\n * Delete the product.\n */\n delete() {\n this.isDeleting = true;\n this.productTaxService.delete(this.productTax).subscribe({\n next: () => {\n this.matDialog?.closeAll();\n this.deleted.emit();\n this.isDeleting = false;\n this.alertService.addAlert(\n \"Product tax deleted successfully!\",\n \"success\"\n );\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\n class=\"cursor-pointer text-secondary\"\n (click)=\"showDeleteDialog(deleteConfirmDialog)\"\n>\n delete\n</mat-icon>\n\n<ng-template #deleteConfirmDialog>\n <h3 mat-dialog-title>Delete Product Tax</h3>\n <div mat-dialog-content>\n Are you sure? You want to delete the product tax?\n </div>\n <div mat-dialog-actions class=\"d-flex justify-content-end gap-1 mb-2\">\n <button\n [disabled]=\"isDeleting\"\n type=\"button\"\n mat-raised-button\n color=\"warn\"\n (click)=\"delete()\"\n >\n Delete\n </button>\n <button\n [disabled]=\"isDeleting\"\n type=\"button\"\n mat-flat-button\n mat-dialog-close\n >\n Cancel\n </button>\n </div>\n</ng-template>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { TechlifyListingControllerInterface } from \"ngx-techlify-core\";\n\n@Component({\n selector: \"app-product-tax-list\",\n templateUrl: \"./product-tax-list.component.html\",\n})\nexport class ProductTaxListComponent\n extends TechlifyListingControllerInterface\n implements OnInit\n{\n @Input() product!: any;\n\n displayedColumns: string[] = [\"#\", \"Tax\", \"Actions\"];\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData(): void {\n this.models = this.product?.taxes ?? [];\n }\n\n onCreated(productTax: any) {\n this.models.unshift(productTax);\n this.models = [...this.models];\n }\n\n onDeleted(index: number) {\n this.models.splice(index, 1);\n this.models = [...this.models];\n }\n}\n","<mat-card>\n <mat-card-content\n class=\"pb-3 d-flex justify-content-between align-items-center gap-3\"\n >\n <div class=\"d-flex justify-content-start gap-2\">\n <span class=\"material-symbols-outlined\"> percent </span>\n <strong class=\"mb-0 text-dark\">Product Taxes</strong>\n </div>\n <app-product-tax-form-button\n [product]=\"product\"\n (saved)=\"onCreated($event)\"\n ></app-product-tax-form-button>\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 <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=\"Tax\">\n <th mat-header-cell *matHeaderCellDef>Tax</th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\">\n {{ element?.tax?.title }} ({{ element?.tax?.code }})\n </p>\n <small class=\"text-secondary\"\n >{{ element?.tax?.value }} - {{ element?.tax?.type?.title }}</small\n >\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 <app-product-tax-delete-button\n [productTax]=\"element\"\n (deleted)=\"onDeleted(i)\"\n ></app-product-tax-delete-button>\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 </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 {\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} 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})\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\n class=\"cursor-pointer text-secondary\"\n (click)=\"showDeleteDialog(deleteProductDialog)\"\n>\n delete\n</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\n [disabled]=\"isDeleting\"\n type=\"button\"\n mat-raised-button\n color=\"warn\"\n (click)=\"deleteProduct()\"\n >\n Delete\n </button>\n <button\n [disabled]=\"isDeleting\"\n type=\"button\"\n mat-flat-button\n mat-dialog-close\n >\n Cancel\n </button>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { StockSummaryService } from \"../../stock-summary.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})\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\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:\n \"stock_receipts_quantity_sum,stock_issuances_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","<mat-card *ngIf=\"product\" class=\"w-100\">\n <mat-card-content\n class=\"d-flex justify-content-between align-items-center mb-1 mb-2\"\n >\n <div class=\"d-flex justify-content-start gap-2\">\n <span class=\"material-symbols-outlined\"> campaign </span>\n <strong class=\"mb-0 text-dark\">Product Information</strong>\n </div>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <app-product-form-button\n [product]=\"product\"\n (saved)=\"onProductSaved($event)\"\n ></app-product-form-button>\n <app-product-delete-button\n [product]=\"product\"\n (deleted)=\"deleted.emit()\"\n ></app-product-delete-button>\n </div>\n </mat-card-content>\n <mat-divider></mat-divider>\n <mat-card-content class=\"mt-3\">\n <h3 class=\"mb-1 font-weight-bold\">{{ product?.name }}</h3>\n <div class=\"d-flex flex-wrap gap-1\">\n <span\n class=\"badge badge-primary\"\n *ngFor=\"let category of product?.categories\"\n >\n {{ category?.title }}\n </span>\n </div>\n </mat-card-content>\n\n <mat-card-content\n class=\"mt-3 d-flex justify-content-between align-items-start\"\n >\n <div\n class=\"d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">SKU</small>\n <p class=\"mb-0\">{{ product?.sku }}</p>\n </div>\n <div\n class=\"d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">Measure</small>\n <p class=\"mb-0\">{{ product?.measure?.title }}</p>\n </div>\n <div\n class=\"d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">Reorder Point</small>\n <p class=\"mb-0\">{{ product?.reorder_point }}</p>\n </div>\n </mat-card-content>\n\n <mat-card-content\n class=\"mt-3 d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">Description</small>\n <p class=\"mb-0\">{{ product?.description }}</p>\n </mat-card-content>\n\n <mat-card-content\n class=\"mt-5 d-flex justify-content-between align-items-start\"\n >\n <div\n *ngIf=\"stockSummary\"\n class=\"d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">Stock Receipts</small>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\"> arrow_downward </span>\n <p class=\"mb-0\" style=\"font-size: 24px\">\n {{ stockSummary?.stock_receipts_quantity_sum }}\n </p>\n </div>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date }}\n </small>\n </div>\n <div\n *ngIf=\"stockSummary\"\n class=\"d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">Stock Issuances</small>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n <p class=\"mb-0\" style=\"font-size: 24px\">\n {{ stockSummary?.stock_issuances_quantity_sum }}\n </p>\n </div>\n <small *ngIf=\"product?.last_stock_issuance\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_issuance?.date | date }}\n </small>\n </div>\n </mat-card-content>\n\n <mat-card-content\n *ngIf=\"stockSummary\"\n class=\"mt-3 d-flex justify-content-center align-items-center\"\n >\n <div\n class=\"d-flex flex-column justify-content-start align-items-start gap-1\"\n >\n <small class=\"text-secondary\">On Hand</small>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\"> inventory_2 </span>\n <p class=\"mb-0\" style=\"font-size: 24px\">\n {{ stockSummary?.stock_quantity_remaining }}\n </p>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n","import { Component, OnInit } from \"@angular/core\";\nimport { ProductService } from \"../product.service\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { Location } from \"@angular/common\";\n\n@Component({\n selector: \"app-product-view-page\",\n templateUrl: \"./product-view-page.component.html\",\n})\nexport class ProductViewPageComponent implements OnInit {\n public product: any;\n id: number;\n isLoading!: boolean;\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,lastStockIssuance,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 /**\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","<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div\n *ngIf=\"product\"\n class=\"d-flex justify-content-start align-items-start gap-3\"\n>\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info\n [product]=\"product\"\n #productBasicInfoComponent\n (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"\n ></app-product-basic-info>\n\n <app-product-tax-list [product]=\"product\"></app-product-tax-list>\n </div>\n <div style=\"width: calc(75%)\" class=\"d-flex flex-column gap-3\">\n <app-stock-receipts-list-page\n [product]=\"product\"\n (listUpdated)=\"\n getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary()\n \"\n ></app-stock-receipts-list-page>\n\n <app-stock-issuances-list\n [product]=\"product\"\n (listUpdated)=\"\n getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary()\n \"\n ></app-stock-issuances-list>\n </div>\n</div>\n","import { Component, OnInit } 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})\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 { 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\";\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: \"**\",\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 { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { PayeeSelectorComponent } from \"./payee-selector/payee-selector.component\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { SearchableSelectorModule } from \"ngx-techlify-core\";\n\n@NgModule({\n declarations: [PayeeSelectorComponent],\n exports: [PayeeSelectorComponent],\n imports: [\n CommonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n FormsModule,\n ],\n})\nexport class PayeeSelectorModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { StockReceiptFormComponent } from \"./stock-receipt-form/stock-receipt-form.component\";\nimport { StockReceiptFormButtonComponent } from \"./stock-receipt-form-button/stock-receipt-form-button.component\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { PayeeSelectorModule } from '../../supplier/payee-selector/payee-selector.module';\n\n@NgModule({\n declarations: [StockReceiptFormComponent, StockReceiptFormButtonComponent],\n exports: [StockReceiptFormButtonComponent],\n imports: [\n CommonModule,\n MatTooltipModule,\n MatDialogModule,\n PayeeSelectorModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n MatButtonModule,\n ],\n})\nexport class StockReceiptFormModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { StockIssueFormComponent } from \"./stock-issue-form/stock-issue-form.component\";\nimport { StockIssueFormButtonComponent } from \"./stock-issue-form-button/stock-issue-form-button.component\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SearchableSelectorModule } from \"ngx-techlify-core\";\n\n@NgModule({\n declarations: [StockIssueFormComponent, StockIssueFormButtonComponent],\n exports: [StockIssueFormButtonComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n SearchableSelectorModule,\n ],\n})\nexport class StockIssueFormModule {}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { StockReceiptsListPageComponent } from \"./stock-receipts-list-page/stock-receipts-list-page.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: StockReceiptsListPageComponent,\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class StockReceiptsRoutingModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TechlifyFilterComponent } from \"./techlify-filter.component\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { FlexLayoutModule } from \"@angular/flex-layout\";\nimport {\n MaterialModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n} from \"ngx-techlify-core\";\n\n@NgModule({\n declarations: [TechlifyFilterComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n MaterialModule,\n ],\n exports: [TechlifyFilterComponent],\n})\nexport class TechlifyFilterModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { StockReceiptsRoutingModule } from \"./stock-receipts-routing.module\";\nimport { StockReceiptsListPageComponent } from \"./stock-receipts-list-page/stock-receipts-list-page.component\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport {\n MaterialModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n} from \"ngx-techlify-core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { StockReceiptFormModule } from \"./stock-receipt-form/stock-receipt-form.module\";\nimport { StockReceiptDeleteButtonComponent } from \"./stock-receipt-delete-button/stock-receipt-delete-button.component\";\nimport { PayeeSelectorModule } from '../supplier/payee-selector/payee-selector.module';\nimport { TechlifyFilterModule } from '../techlify-filter/techlify-filter.module';\n\n@NgModule({\n declarations: [\n StockReceiptsListPageComponent,\n StockReceiptDeleteButtonComponent,\n ],\n exports: [StockReceiptDeleteButtonComponent, StockReceiptsListPageComponent],\n imports: [\n CommonModule,\n StockReceiptsRoutingModule,\n MatCardModule,\n TechlifyFilterModule,\n MatTableModule,\n MatFormFieldModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n ReactiveFormsModule,\n PayeeSelectorModule,\n MatProgressBarModule,\n InfiniteScrollModule,\n MaterialModule,\n StockReceiptFormModule,\n ],\n})\nexport class StockReceiptsModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { StockIssuanceDeleteButtonComponent } from \"./stock-issuance-delete-button.component\";\nimport { MaterialModule } from \"ngx-techlify-core\";\n\n@NgModule({\n declarations: [StockIssuanceDeleteButtonComponent],\n imports: [CommonModule, MaterialModule],\n exports: [StockIssuanceDeleteButtonComponent],\n})\nexport class StockIssuanceDeleteButtonModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { StockIssuancesListComponent } from \"./stock-issuances-list.component\";\nimport { StockIssueFormModule } from \"../stock-issue-form/stock-issue-form.module\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { StockIssuanceDeleteButtonModule } from \"../stock-issuance-delete-button/stock-issuance-delete-button.module\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { RouterModule } from \"@angular/router\";\nimport { TechlifyFilterModule } from '../../techlify-filter/techlify-filter.module';\n\n@NgModule({\n declarations: [StockIssuancesListComponent],\n imports: [\n CommonModule,\n MaterialModule,\n TechlifyFilterModule,\n StockIssueFormModule,\n InfiniteScrollModule,\n StockIssuanceDeleteButtonModule,\n MatProgressBarModule,\n RouterModule,\n ],\n exports: [StockIssuancesListComponent],\n})\nexport class StockIssuancesListModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule, SearchableSelectorModule } from \"ngx-techlify-core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { ProductTaxListComponent } from './product-tax-list/product-tax-list.component';\nimport { ProductTaxFormButtonComponent } from './product-tax-form-button/product-tax-form-button.component';\nimport { ProductTaxDeleteButtonComponent } from './product-tax-delete-button/product-tax-delete-button.component';\n\n@NgModule({\n declarations: [\n ProductTaxListComponent,\n ProductTaxFormButtonComponent,\n ProductTaxDeleteButtonComponent,\n ],\n imports: [\n CommonModule,\n MaterialModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n ],\n exports: [ProductTaxListComponent],\n})\nexport class ProductTaxModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\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 ImportCsvModule,\n MaterialModule,\n SearchableSelectorModule,\n TimelineFilterModule,\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 { StockReceiptFormModule } from \"../stock-receipts/stock-receipt-form/stock-receipt-form.module\";\nimport { StockIssueFormModule } from \"../stock-issuances/stock-issue-form/stock-issue-form.module\";\nimport { ProductImportPageComponent } from \"./product-import-page/product-import-page.component\";\nimport { StockReceiptsModule } from \"../stock-receipts/stock-receipts.module\";\nimport { StockIssuancesListModule } from \"../stock-issuances/stock-issuances-list/stock-issuances-list.module\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { FlexModule } from \"@angular/flex-layout\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { ProductTaxModule } from './product-tax/product-tax.module';\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 ],\n imports: [\n CommonModule,\n ProductRoutingModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n StockReceiptFormModule,\n StockIssueFormModule,\n ImportCsvModule,\n StockReceiptsModule,\n StockIssuancesListModule,\n ProductTaxModule,\n MaterialModule,\n MatProgressBarModule,\n InfiniteScrollModule,\n FlexModule,\n ReactiveFormsModule,\n FormsModule,\n ColumnSelectorModule,\n ],\n exports: [\n ProductFormComponent,\n ProductBasicInfoComponent,\n ProductFormButtonComponent,\n ],\n})\nexport class ProductModule {}\n","import { Component, OnInit } from '@angular/core';\nimport { InfiniteScrollDirective } from 'ngx-infinite-scroll';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n} from '@angular/material/table';\nimport { TechlifyListingControllerInterface } from 'ngx-techlify-core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { NgForOf, NgIf } from '@angular/common';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { MatSortHeader } from '@angular/material/sort';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport {ProductModule} from \"../product.module\";\nimport {StockReceiptFormModule} from \"../../stock-receipts/stock-receipt-form/stock-receipt-form.module\";\nimport {StockIssueFormModule} from \"../../stock-issuances/stock-issue-form/stock-issue-form.module\";\nimport {ProductService} from \"../product.service\";\n\n@Component({\n selector: 'app-product-quick-search',\n standalone: true,\n imports: [\n InfiniteScrollDirective,\n MatCard,\n MatCardContent,\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderRow,\n MatTable,\n MatHeaderCellDef,\n RouterLink,\n MatHeaderRowDef,\n MatRowDef,\n MatRow,\n MatProgressBar,\n NgIf,\n MatFormField,\n MatLabel,\n MatInput,\n ReactiveFormsModule,\n NgForOf,\n MatSortHeader,\n MatIcon,\n MatTooltip,\n ProductModule,\n RouterLinkActive,\n StockReceiptFormModule,\n StockIssueFormModule,\n ],\n templateUrl: './product-quick-search.component.html',\n styleUrl: './product-quick-search.component.scss',\n})\nexport class ProductQuickSearchComponent extends TechlifyListingControllerInterface implements OnInit {\n displayedColumns: string[] = ['#', 'Product', 'SKU', 'Type', 'Categories', 'On Hand', 'Actions'];\n searchControl: FormControl<any> = new FormControl('');\n\n constructor(private productService: ProductService) {\n super();\n this.lastPage = 0;\n this.perPage = 1000;\n }\n\n ngOnInit() {\n this.loadData();\n\n this.searchControl.valueChanges.pipe(debounceTime(500)).subscribe(() => this.reload());\n }\n\n loadData() {\n const params: any = {\n page: this.page,\n perPage: this.perPage,\n search: this.searchControl.value,\n sort_by: 'created_at|desc',\n with: 'type,categories',\n };\n this.isWorking = true;\n this.productService.index(params).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: () => (this.isWorking = false),\n });\n }\n}\n","<mat-card style=\"max-height: 460px; overflow: auto\">\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <h3>Products Quick Search</h3>\n\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input type=\"text\" matInput placeholder=\"Search products\" [formControl]=\"searchControl\">\n </mat-form-field>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\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 <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.id, 'view']\"\n class=\"text-dark\"\n >\n {{ element?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- SKU Column -->\n <ng-container matColumnDef=\"SKU\">\n <th mat-header-cell *matHeaderCellDef>SKU</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.sku }}</td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"Type\">\n <th mat-header-cell *matHeaderCellDef>Type</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.type?.title }}</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 <div\n *ngIf=\"element?.categories?.length > 0\"\n class=\"d-flex justify-content-start align-items-center gap-1 flex-wrap\"\n >\n <span\n class=\"badge bg-secondary\"\n *ngFor=\"let category of element?.categories\"\n >\n {{ category?.title }}\n </span>\n </div>\n </td>\n </ng-container>\n\n <!-- On Hand Column -->\n <ng-container matColumnDef=\"On Hand\">\n <th mat-header-cell *matHeaderCellDef>On Hand</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.stock_balance }}\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 <mat-icon\n class=\"cursor-pointer\"\n matTooltip=\"View\"\n [routerLink]=\"['/inventory/products', element.id, 'view']\"\n routerLinkActive=\"route-link-active\"\n >\n remove_red_eye\n </mat-icon>\n\n <app-stock-receipt-form-button\n [product]=\"element\"\n (saved)=\"reload()\"\n ></app-stock-receipt-form-button>\n\n <app-stock-issue-form-button\n [product]=\"element\"\n (saved)=\"reload()\"\n ></app-stock-issue-form-button>\n </div>\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-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n","import { Component, OnInit } from '@angular/core';\nimport { ProductService } from \"../product/product.service\";\nimport moment from \"moment\";\n\n@Component({\n selector: 'app-inventory-dashboard-page',\n templateUrl: './inventory-dashboard-page.component.html',\n styleUrls: ['./inventory-dashboard-page.component.scss']\n})\nexport class InventoryDashboardPageComponent implements OnInit {\n lowStockProductsCount!: number;\n stockReceiptsQtySum!: number;\n stockIssuanceQtySum!: number;\n constructor(\n private productService: ProductService,\n ) { }\n\n ngOnInit(): void {\n this.loadProductSummary();\n }\n\n private loadProductSummary() {\n const params: any = {\n include: 'low_stock_products_count,stock_receipts_quantity_sum,stock_issuances_quantity_sum',\n date_from: moment().startOf('month').format('YYYY-MM-DD'),\n date_to: moment().endOf('month').format('YYYY-MM-DD'),\n }\n this.productService.summary(params).subscribe({\n next: (response: any) => {\n this.lowStockProductsCount = response?.low_stock_products_count;\n this.stockReceiptsQtySum = response?.stock_receipts_quantity_sum;\n this.stockIssuanceQtySum = response?.stock_issuances_quantity_sum;\n }\n });\n }\n}\n","<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #F5222D !important;\">\n inventory_2\n </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\">\n arrow_circle_down\n </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\">\n arrow_circle_up\n </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockIssuanceQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-quick-search></app-product-quick-search>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-summary-chart title=\"Product By Category\"></app-product-summary-chart>\n </div>\n </div>\n <div style=\"width: 300px\" class=\"d-flex flex-column gap-3 h-100\">\n <mat-card class=\"h-100\">\n <mat-card-content>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-icon>flag</mat-icon>\n <h3 class=\"mb-0 fw-bold\">Reports</h3>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-start gap-3\">\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark\"\n routerLink=\"/inventory/reports/low-stock-report\"\n >\n <span class=\"material-symbols-outlined fs-3\">\n description\n </span>\n <h3 class=\"mb-0\">Low Stock Report</h3>\n <span class=\"material-symbols-outlined\">\n chevron_forward\n </span>\n </a>\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\"\n routerLink=\"/inventory/reports/inventory-value-report\"\n >\n <span class=\"material-symbols-outlined fs-3\">\n description\n </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\">\n chevron_forward\n </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n","import {Component, Input} from '@angular/core';\nimport {NgForOf, NgIf} from '@angular/common';\n\n@Component({\n selector: 'app-product-category-badges',\n standalone: true,\n imports: [\n NgIf,\n NgForOf\n ],\n templateUrl: './product-category-badges.component.html',\n styleUrl: './product-category-badges.component.scss'\n})\nexport class ProductCategoryBadgesComponent {\n @Input() product: any;\n}\n","<ng-container\n *ngIf=\"product?.categories?.length > 0\"\n class=\"d-flex justify-content-start align-items-center gap-1\"\n>\n <span class=\"badge bg-primary-lighter\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n</ng-container>\n","import { Injectable } from '@angular/core';\nimport {HttpService, TechlifyServiceBaseClass} from 'ngx-techlify-core';\nimport {Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LowStockReportService extends TechlifyServiceBaseClass {\n\n constructor(\n protected httpService: HttpService,\n ) {\n super(httpService, 'reports/low-stock-report');\n }\n\n export(params?: any): Observable<any> {\n return this.http.get('api/reports/low-stock-report/export', { params });\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {CurrencyPipe, DatePipe, NgIf} from \"@angular/common\";\nimport {FormBuilder, FormGroup, FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {InfiniteScrollDirective} from \"ngx-infinite-scroll\";\nimport {MatCard, MatCardContent} from \"@angular/material/card\";\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFooterCell, MatFooterCellDef,\n MatFooterRow,\n MatFooterRowDef,\n MatHeaderCell, MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport {MatFormField, MatLabel} from \"@angular/material/form-field\";\nimport {MatInput} from \"@angular/material/input\";\nimport {MatProgressBar} from \"@angular/material/progress-bar\";\nimport {MatSort, MatSortHeader, Sort} from \"@angular/material/sort\";\nimport {\n ProductCategoryBadgesComponent\n} from \"../../product/widgets/product-category-badges/product-category-badges.component\";\nimport {RequestHelperService, SearchableSelectorModule, TechlifyListingControllerInterface} from \"ngx-techlify-core\";\nimport {InventoryValueReportService} from '../../inventory-value-report.service';\nimport {ActivatedRoute, RouterLink} from '@angular/router';\nimport {debounceTime, distinctUntilChanged} from 'rxjs';\nimport {LowStockReportService} from '../../low-stock-report.service';\n\n@Component({\n selector: 'app-low-stock-report',\n standalone: true,\n imports: [\n CurrencyPipe,\n FormsModule,\n InfiniteScrollDirective,\n MatCard,\n MatCardContent,\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFooterCell,\n MatFooterRow,\n MatFooterRowDef,\n MatFormField,\n MatHeaderCell,\n MatHeaderRow,\n MatHeaderRowDef,\n MatInput,\n MatLabel,\n MatProgressBar,\n MatRow,\n MatRowDef,\n MatSort,\n MatSortHeader,\n MatTable,\n NgIf,\n ProductCategoryBadgesComponent,\n ReactiveFormsModule,\n SearchableSelectorModule,\n RouterLink,\n MatFooterCellDef,\n MatHeaderCellDef,\n MatFooterCellDef,\n MatHeaderCellDef,\n MatHeaderCellDef,\n DatePipe\n ],\n templateUrl: './low-stock-report.component.html',\n styleUrl: './low-stock-report.component.scss'\n})\nexport class LowStockReportComponent extends TechlifyListingControllerInterface implements OnInit {\n displayedColumns: string[] = [\n '#',\n 'Product',\n 'Type',\n 'Categories',\n 'Reorder Point',\n 'Stock',\n 'Last Purchase',\n '30d Issues',\n '30d Receipts',\n '60d Issues',\n '60d Receipts',\n '90d Issues',\n '90d Receipts',\n '1y Issues',\n '1y Receipts',\n ];\n totalInventoryValue = 0;\n isExporting = false;\n\n constructor(\n private service: LowStockReportService,\n private activatedRoute: ActivatedRoute,\n private requestHelperService: RequestHelperService,\n private formBuilder: FormBuilder\n ) {\n super();\n\n this.filterForm = this.formBuilder.group({\n category_ids: [''],\n search: [''],\n sort_by: ['id|desc']\n });\n }\n\n ngOnInit() {\n this.updateFormWithQueryParams();\n this.subscribeToFormChanges();\n this.subscribeToRouteChanges();\n }\n\n loadData(): void {\n const params: any = {\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n page: this.page,\n perPage: this.perPage,\n with: 'categories,lastStockReceipt,type,measure',\n }\n this.isWorking = true;\n this.service.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models?.concat(response?.data);\n this.isWorking = false;\n\n this.models.forEach((model: any) => {\n this.totalInventoryValue += model?.inventory_value;\n })\n },\n error: () => (this.isWorking = false),\n });\n }\n\n onSortChange(sort: Sort) {\n let {active, direction} = sort;\n if (!active) active = 'id';\n if (!direction) direction = 'desc';\n this.filterForm.get('sort_by')?.setValue(active + '|' + direction);\n }\n\n export() {\n const params: any = {\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n page: this.page,\n perPage: 50000,\n with: 'categories,lastStockReceipt',\n }\n this.isExporting = true;\n this.service.export(params).subscribe({\n next: (response: any) => {\n this.isExporting = false;\n window.open(response?.item?.file_link, '_blank');\n },\n error: () => (this.isExporting = false)\n });\n }\n\n private updateFormWithQueryParams(): void {\n this.requestHelperService.updateFormWithQueryParams(\n this.filterForm,\n {\n category_ids: {multiple: true}\n }\n );\n }\n\n private subscribeToFormChanges(): void {\n (this.filterForm as FormGroup).valueChanges.pipe(\n debounceTime(800)\n ).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),\n distinctUntilChanged())\n .subscribe(() => {\n this.reload();\n });\n }\n}\n","<div>\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">Low Stock Report</h3>\n <i class=\"fa-solid fa-file-excel cursor-pointer d-print-none\" (click)=\"export()\"></i>\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 matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-categories\"\n formControlName=\"category_ids\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-3\">\n <mat-card-content class=\"p-0\">\n <table\n mat-table [dataSource]=\"models\" class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\"\n matSort (matSortChange)=\"onSortChange($event)\"\n >\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 <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"name\"> Product </th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.id, 'view']\"\n class=\"text-dark\"\n >\n {{ element?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Type Column -->\n <ng-container matColumnDef=\"Type\">\n <th mat-header-cell *matHeaderCellDef> Type </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.type?.title }}\n </td>\n </ng-container>\n\n <!-- Reorder Point Column -->\n <ng-container matColumnDef=\"Reorder Point\">\n <th mat-header-cell *matHeaderCellDef> Reorder Point </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.reorder_point }}\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\">\n <app-product-category-badges [product]=\"element\"></app-product-category-badges>\n </td>\n </ng-container>\n\n <!-- Stock Column -->\n <ng-container matColumnDef=\"Stock\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"stock\"> Stock </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.stock }}\n </td>\n </ng-container>\n\n <!-- Last Purchase Column -->\n <ng-container matColumnDef=\"Last Purchase\">\n <th mat-header-cell *matHeaderCellDef>\n Last Purchase\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <p class=\"mb-0\" *ngIf=\"element?.last_stock_receipt\">\n {{ element?.last_stock_receipt?.date | date }} -\n {{ element?.last_stock_receipt?.quantity }} {{ element?.measure?.title }}\n </p>\n <small class=\"text-secondary\" *ngIf=\"element?.last_stock_receipt\">\n {{ element?.last_stock_receipt?.purchase_price ?? 0 | currency }} per {{ element?.measure?.title }}\n </small>\n </td>\n </ng-container>\n\n <!-- 30d Issues -->\n <ng-container matColumnDef=\"30d Issues\">\n <th mat-header-cell *matHeaderCellDef> 30d Issues </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.issues_30d }}</td>\n </ng-container>\n\n <!-- 30d Receipts -->\n <ng-container matColumnDef=\"30d Receipts\">\n <th mat-header-cell *matHeaderCellDef> 30d Receipts </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.receipts_30d }}</td>\n </ng-container>\n\n <!-- 60d Issues -->\n <ng-container matColumnDef=\"60d Issues\">\n <th mat-header-cell *matHeaderCellDef> 60d Issues </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.issues_60d }}</td>\n </ng-container>\n\n <!-- 60d Receipts -->\n <ng-container matColumnDef=\"60d Receipts\">\n <th mat-header-cell *matHeaderCellDef> 60d Receipts </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.receipts_60d }}</td>\n </ng-container>\n\n <!-- 90d Issues -->\n <ng-container matColumnDef=\"90d Issues\">\n <th mat-header-cell *matHeaderCellDef> 90d Issues </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.issues_90d }}</td>\n </ng-container>\n\n <!-- 90d Receipts -->\n <ng-container matColumnDef=\"90d Receipts\">\n <th mat-header-cell *matHeaderCellDef> 90d Receipts </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.receipts_90d }}</td>\n </ng-container>\n\n <!-- 1y Issues -->\n <ng-container matColumnDef=\"1y Issues\">\n <th mat-header-cell *matHeaderCellDef> 1y Issues </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.issues_1y }}</td>\n </ng-container>\n\n <!-- 60d Receipts -->\n <ng-container matColumnDef=\"1y Receipts\">\n <th mat-header-cell *matHeaderCellDef> 1y Receipts </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.receipts_1y }}</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-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n","import {Injectable} from '@angular/core';\nimport {HttpService, TechlifyServiceBaseClass} from 'ngx-techlify-core';\nimport {Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InventoryValueReportService extends TechlifyServiceBaseClass {\n\n constructor(\n httpService: HttpService,\n ) {\n super(httpService, 'reports/inventory-value-report');\n }\n\n export(params?: any): Observable<any> {\n return this.http.get('api/reports/inventory-value-report/export', { params });\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {MatCard, MatCardContent} from '@angular/material/card';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\n MatHeaderCell, MatHeaderCellDef, MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable\n} from '@angular/material/table';\nimport {RequestHelperService, SearchableSelectorModule, TechlifyListingControllerInterface} from 'ngx-techlify-core';\nimport {InventoryValueReportService} from '../../inventory-value-report.service';\nimport {ActivatedRoute, RouterLink} from '@angular/router';\nimport {\n ProductCategoryBadgesComponent\n} from '../../product/widgets/product-category-badges/product-category-badges.component';\nimport {CurrencyPipe, NgIf} from '@angular/common';\nimport {MatProgressBar} from '@angular/material/progress-bar';\nimport {debounceTime, distinctUntilChanged} from 'rxjs';\nimport {FormBuilder, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {MatInput} from '@angular/material/input';\nimport {InfiniteScrollDirective} from 'ngx-infinite-scroll';\nimport {MatSort, MatSortHeader, Sort} from '@angular/material/sort';\n\n@Component({\n selector: 'app-inventory-value-report',\n standalone: true,\n imports: [\n MatCard,\n MatCardContent,\n MatTable,\n MatColumnDef,\n MatColumnDef,\n MatCellDef,\n MatRow,\n MatCellDef,\n MatHeaderCell,\n MatCell,\n MatRowDef,\n MatCellDef,\n MatHeaderCell,\n MatColumnDef,\n MatCell,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderRowDef,\n MatHeaderCell,\n MatCell,\n MatHeaderRow,\n MatCell,\n MatCellDef,\n MatHeaderCellDef,\n MatHeaderCellDef,\n MatHeaderCellDef,\n MatHeaderCellDef,\n RouterLink,\n ProductCategoryBadgesComponent,\n CurrencyPipe,\n MatProgressBar,\n NgIf,\n MatFooterRowDef,\n MatFooterRow,\n MatFooterCellDef,\n MatFooterCell,\n MatFormField,\n MatLabel,\n ReactiveFormsModule,\n SearchableSelectorModule,\n MatInput,\n InfiniteScrollDirective,\n MatSort,\n MatSortHeader\n ],\n templateUrl: './inventory-value-report.component.html',\n styleUrl: './inventory-value-report.component.scss'\n})\nexport class InventoryValueReportComponent extends TechlifyListingControllerInterface implements OnInit {\n displayedColumns: string[] = [\n '#',\n 'Product',\n 'Description',\n 'Categories',\n 'Available Stock',\n 'Average Price',\n 'Inventory Value',\n 'Last Purchase Price',\n 'Inventory Value Based On Last Purchase Price',\n ];\n totalInventoryValue = 0;\n isExporting = false;\n\n constructor(\n private service: InventoryValueReportService,\n private activatedRoute: ActivatedRoute,\n private requestHelperService: RequestHelperService,\n private formBuilder: FormBuilder\n ) {\n super();\n\n this.filterForm = this.formBuilder.group({\n category_ids: [''],\n search: [''],\n sort_by: ['id|desc']\n });\n }\n\n ngOnInit() {\n this.updateFormWithQueryParams();\n this.subscribeToFormChanges();\n this.subscribeToRouteChanges();\n }\n\n loadData(): void {\n const params: any = {\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n page: this.page,\n perPage: this.perPage,\n with: 'categories,lastStockReceipt',\n }\n this.isWorking = true;\n this.service.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models?.concat(response?.data);\n this.isWorking = false;\n\n this.models.forEach((model: any) => {\n this.totalInventoryValue += model?.inventory_value;\n })\n },\n error: () => (this.isWorking = false),\n });\n }\n\n private updateFormWithQueryParams(): void {\n this.requestHelperService.updateFormWithQueryParams(\n this.filterForm,\n {\n category_ids: { multiple: true }\n }\n );\n }\n\n private subscribeToFormChanges(): void {\n (this.filterForm as FormGroup).valueChanges.pipe(\n debounceTime(800)\n ).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),\n distinctUntilChanged())\n .subscribe(() => {\n this.reload();\n });\n }\n\n onSortChange(sort: Sort) {\n let {active, direction} = sort;\n if (!active) active = 'id';\n if (!direction) direction = 'desc';\n this.filterForm.get('sort_by')?.setValue(active + '|' + direction);\n }\n\n export(type: string = 'excel') {\n const params: any = {\n ...this.requestHelperService.convertToFormData(this.filterForm.value),\n page: this.page,\n perPage: 50000,\n with: 'categories,lastStockReceipt',\n export_type: type,\n }\n this.isExporting = true;\n this.service.export(params).subscribe({\n next: (response: any) => {\n this.isExporting = false;\n window.open(response?.item?.file_link, '_blank');\n },\n error: () => (this.isExporting = false)\n });\n }\n}\n","<div class=\"container\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <i class=\"fa-solid fa-file-excel cursor-pointer d-print-none\" (click)=\"export('excel')\"></i>\n <i class=\"fa-solid fa-file-pdf cursor-pointer d-print-none\" (click)=\"export('pdf')\"></i>\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 matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector\n apiUrl=\"api/product-categories\"\n formControlName=\"category_ids\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-3\">\n <mat-card-content class=\"p-0\">\n <table\n mat-table [dataSource]=\"models\" class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\"\n matSort (matSortChange)=\"onSortChange($event)\"\n >\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 <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"name\"> Product </th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.id, 'view']\"\n class=\"text-dark\"\n >\n {{ element?.name }}\n </a>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"Description\">\n <th mat-header-cell *matHeaderCellDef> Description </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.description }}\n </td>\n <td mat-footer-cell *matFooterCellDef></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\">\n <app-product-category-badges [product]=\"element\"></app-product-category-badges>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <strong>Total</strong>\n </td>\n </ng-container>\n\n <!-- Available Stock Column -->\n <ng-container matColumnDef=\"Available Stock\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"current_stock\"> Available Stock </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.current_stock }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Average Price Column -->\n <ng-container matColumnDef=\"Average Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"average_purchase_price\"> Average Price </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.average_purchase_price | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Inventory Value Column -->\n <ng-container matColumnDef=\"Inventory Value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"inventory_value\"> Inventory Value </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.inventory_value | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <strong>{{ totalInventoryValue | currency }}</strong>\n </td>\n </ng-container>\n\n <!-- Last Purchase Price Column -->\n <ng-container matColumnDef=\"Last Purchase Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"last_stock_receipt.purchase_price\">\n Last Purchase Price\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.last_stock_receipt?.purchase_price ?? 0 | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Inventory Value Based On Last Purchase Price Column -->\n <ng-container matColumnDef=\"Inventory Value Based On Last Purchase Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"last_stock_receipt.amount\">\n <div>\n <p class=\"mb-0\">Inventory Value</p>\n <small class=\"text-secondary\">Based on last purchase price</small>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.last_stock_receipt?.amount ?? 0 | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { InventoryDashboardPageComponent } from \"./inventory-dashboard-page/inventory-dashboard-page.component\";\nimport { LowStockReportComponent } from \"./reports/low-stock-report/low-stock-report.component\";\nimport { InventoryValueReportComponent } from \"./reports/inventory-value-report/inventory-value-report.component\";\n\nconst routes: Routes = [\n {\n path: 'reports/low-stock-report',\n component: LowStockReportComponent,\n },\n {\n path: 'reports/inventory-value-report',\n component: InventoryValueReportComponent,\n },\n {\n path: \"suppliers\",\n loadChildren: () =>\n import(\"./supplier/supplier.module\").then((m) => m.SupplierModule),\n },\n {\n path: \"measures\",\n loadChildren: () =>\n import(\"./measure/measure.module\").then((mod) => mod.MeasureModule),\n },\n {\n path: \"stock-issuances\",\n loadChildren: () =>\n import(\"./stock-issuances/stock-issuances.module\").then(\n (mod) => mod.StockIssuancesModule\n ),\n },\n {\n path: \"stock-receipts\",\n loadChildren: () =>\n import(\"./stock-receipts/stock-receipts.module\").then(\n (mod) => mod.StockReceiptsModule\n ),\n },\n {\n path: \"categories\",\n loadChildren: () =>\n import(\"./category/category.module\").then((mod) => mod.CategoryModule),\n },\n {\n path: \"products\",\n loadChildren: () =>\n import(\"./product/product.module\").then((mod) => mod.ProductModule),\n },\n {\n path: \"dashboard\",\n component: InventoryDashboardPageComponent,\n },\n {\n path: \"**\",\n redirectTo: \"dashboard\",\n pathMatch: \"full\",\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class InventoryCommonRoutingModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { RouterModule } from \"@angular/router\";\nimport { LowStockProductsWidgetComponent } from './low-stock-products-widget.component';\n\n@NgModule({\n declarations: [LowStockProductsWidgetComponent],\n imports: [\n CommonModule,\n MaterialModule,\n InfiniteScrollModule,\n MatProgressBarModule,\n RouterModule,\n ],\n exports: [LowStockProductsWidgetComponent],\n})\nexport class LowStockProductsWidgetModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { GoogleChartsModule } from \"angular-google-charts\";\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialModule,\n MatProgressBarModule,\n GoogleChartsModule,\n ],\n})\nexport class ProductSummaryChartModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { InventoryCommonRoutingModule } from \"./inventory-common-routing.module\";\nimport { InventoryDashboardPageComponent } from \"./inventory-dashboard-page/inventory-dashboard-page.component\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { LowStockProductsWidgetModule } from './product/low-stock-products-widget/low-stock-products-widget.module';\nimport { ProductSummaryChartModule } from './product/product-summary-chart/product-summary-chart.module';\nimport { ProductSummaryChartComponent } from './product/product-summary-chart/product-summary-chart.component';\nimport {ProductQuickSearchComponent} from \"./product/product-quick-search/product-quick-search.component\";\n\n@NgModule({\n declarations: [InventoryDashboardPageComponent],\n imports: [\n CommonModule,\n InventoryCommonRoutingModule,\n MaterialModule,\n LowStockProductsWidgetModule,\n ProductSummaryChartModule,\n ProductSummaryChartComponent,\n ProductQuickSearchComponent,\n ],\n})\nexport class InventoryCommonModule {}\n","/*\n * Public API Surface of inventory-common\n */\n\nexport * from './lib/inventory-common/inventory-common-routing.module';\nexport * from './lib/inventory-common/inventory-common.module';\nexport * from './lib/inventory-common/stock-summary.service';\n\nexport * from './lib/inventory-common/techlify-filter/techlify-filter.module';\nexport * from './lib/inventory-common/techlify-filter/techlify-filter.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ProductService","i2","i3","i4","i5","i6","i7","errorMessages","i8","i10","i1","i5.ProductService","i9","i15","i16","i5.ProductFormService","i5.SupplierService","debounceTime","i3.StockReceiptService","i5.PayeeSelectorComponent","i3.StockReceiptFormComponent","i3.StockIssuanceService","i3.StockIssueFormComponent","i2.ProductFormService","i4.ProductFormComponent","i4.ProductService","i6.ProductFormService","i8.StockReceiptFormButtonComponent","i9.StockIssueFormButtonComponent","i11","i12","i17","i18","i19.ProductFormButtonComponent","i2.StockReceiptService","i1.StockReceiptService","i7.TechlifyFilterComponent","i12.StockReceiptFormButtonComponent","i13.StockReceiptDeleteButtonComponent","i2.StockIssuanceService","i9.TechlifyFilterComponent","i10.StockIssueFormButtonComponent","i12.StockIssuanceDeleteButtonComponent","i13","i2.ProductTaxService","i4.ProductTaxFormButtonComponent","i5.ProductTaxDeleteButtonComponent","i2.ProductService","i1.StockSummaryService","i5.ProductFormButtonComponent","i6.ProductDeleteButtonComponent","i4.StockReceiptsListPageComponent","i5.StockIssuancesListComponent","i6.ProductTaxListComponent","i8.ProductBasicInfoComponent","routes","i3.StockReceiptFormButtonComponent","i4.StockIssueFormButtonComponent","i5.LowStockProductsWidgetComponent","i6.ProductSummaryChartComponent","i7.ProductQuickSearchComponent","i1.LowStockReportService","i1.InventoryValueReportService"],"mappings":"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"}