@argusoft/medplat-core 1.0.31 → 1.0.33

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 (218) hide show
  1. package/dist/AccessRights-BC43Jhml.js +1093 -0
  2. package/dist/AccessRights-BC43Jhml.js.map +1 -0
  3. package/dist/{AddFeatures-D1sU8RjY.js → AddFeatures-COj4ZTIM.js} +2 -2
  4. package/dist/{AddFeatures-D1sU8RjY.js.map → AddFeatures-COj4ZTIM.js.map} +1 -1
  5. package/dist/AddMenuConfiguration-Creeib5X.js +11223 -0
  6. package/dist/AddMenuConfiguration-Creeib5X.js.map +1 -0
  7. package/dist/AddMenuConfiguration.css +1 -1
  8. package/dist/{BrandsPage-DMw2vT0u-BVhvhc6J.js → BrandsPage-CdcAvaml-CYT80CMH.js} +45 -45
  9. package/dist/{BrandsPage-DMw2vT0u-BVhvhc6J.js.map → BrandsPage-CdcAvaml-CYT80CMH.js.map} +1 -1
  10. package/dist/{CategoriesPage-D3ihx9Gi-CT58g0ry.js → CategoriesPage-BprQEYJw-BRAukJB1.js} +43 -43
  11. package/dist/{CategoriesPage-D3ihx9Gi-CT58g0ry.js.map → CategoriesPage-BprQEYJw-BRAukJB1.js.map} +1 -1
  12. package/dist/ChangePasswordModalCore-rypTxA2O.js +238 -0
  13. package/dist/ChangePasswordModalCore-rypTxA2O.js.map +1 -0
  14. package/dist/{ConditionConfig-BQBmBHaM.js → ConditionConfig-Bpm6OoV5.js} +3 -3
  15. package/dist/{ConditionConfig-BQBmBHaM.js.map → ConditionConfig-Bpm6OoV5.js.map} +1 -1
  16. package/dist/{DashboardPage-asr2XDRu-uOOlX9Vq.js → DashboardPage-CTiGSx71-DX-TzGOH.js} +29 -29
  17. package/dist/{DashboardPage-asr2XDRu-uOOlX9Vq.js.map → DashboardPage-CTiGSx71-DX-TzGOH.js.map} +1 -1
  18. package/dist/EntityManagement-BGwJGl9k.js +62 -0
  19. package/dist/EntityManagement-BGwJGl9k.js.map +1 -0
  20. package/dist/{EventConfigurations-CUPEN5BV.js → EventConfigurations-B-z7xHh_.js} +3 -3
  21. package/dist/{EventConfigurations-CUPEN5BV.js.map → EventConfigurations-B-z7xHh_.js.map} +1 -1
  22. package/dist/{EventsExceptionModal-BX-ArkBE.js → EventsExceptionModal-DafomIv6.js} +2 -2
  23. package/dist/{EventsExceptionModal-BX-ArkBE.js.map → EventsExceptionModal-DafomIv6.js.map} +1 -1
  24. package/dist/{EventsUi-D6O9S7BK.js → EventsUi-Dl_yckSA.js} +37 -32
  25. package/dist/EventsUi-Dl_yckSA.js.map +1 -0
  26. package/dist/FacilityPicker-BXa2VF7i-D0JUIqLv.js +112 -0
  27. package/dist/FacilityPicker-BXa2VF7i-D0JUIqLv.js.map +1 -0
  28. package/dist/FaqList-CeDEuhU_.js +237 -0
  29. package/dist/FaqList-CeDEuhU_.js.map +1 -0
  30. package/dist/FaqSkeletons-hLCEcRr-.js +19 -0
  31. package/dist/FaqSkeletons-hLCEcRr-.js.map +1 -0
  32. package/dist/FaqView-sDzBVyXV.js +617 -0
  33. package/dist/FaqView-sDzBVyXV.js.map +1 -0
  34. package/dist/{FeatureMenu-CHsBbw3W.js → FeatureMenu-CaI-ZhSZ.js} +2 -2
  35. package/dist/{FeatureMenu-CHsBbw3W.js.map → FeatureMenu-CaI-ZhSZ.js.map} +1 -1
  36. package/dist/{FhirServerList-iXBPkRVF.js → FhirServerList-CrIHMAxz.js} +19 -19
  37. package/dist/{FhirServerList-iXBPkRVF.js.map → FhirServerList-CrIHMAxz.js.map} +1 -1
  38. package/dist/{FhirServerProfile-CUOwC6Wb.js → FhirServerProfile-D3aYcpwY.js} +8 -8
  39. package/dist/{FhirServerProfile-CUOwC6Wb.js.map → FhirServerProfile-D3aYcpwY.js.map} +1 -1
  40. package/dist/{FhirServerWizard-DZI8Olku.js → FhirServerWizard-Db6Hm4bQ.js} +15 -15
  41. package/dist/{FhirServerWizard-DZI8Olku.js.map → FhirServerWizard-Db6Hm4bQ.js.map} +1 -1
  42. package/dist/{ImmunizationConfigurationBase-aUtx0JEe.js → ImmunizationConfigurationBase-Clkk0-n6.js} +2638 -2577
  43. package/dist/ImmunizationConfigurationBase-Clkk0-n6.js.map +1 -0
  44. package/dist/InventoryPage-JadYMCzU-CWcCauMI.js +1017 -0
  45. package/dist/InventoryPage-JadYMCzU-CWcCauMI.js.map +1 -0
  46. package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js +1344 -0
  47. package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js.map +1 -0
  48. package/dist/{ManageDynamicFeature-BU0I45dd.js → ManageDynamicFeature-CuyYfx_P.js} +104 -97
  49. package/dist/ManageDynamicFeature-CuyYfx_P.js.map +1 -0
  50. package/dist/{ManageEventConfiguration-DqW3krT6.js → ManageEventConfiguration-DqPbn3Oi.js} +5 -5
  51. package/dist/{ManageEventConfiguration-DqW3krT6.js.map → ManageEventConfiguration-DqPbn3Oi.js.map} +1 -1
  52. package/dist/ManageFaq-4cT6bntx.js +1583 -0
  53. package/dist/ManageFaq-4cT6bntx.js.map +1 -0
  54. package/dist/ManageFaq.css +1 -0
  55. package/dist/ManageRole-CyfpySt9.js +981 -0
  56. package/dist/ManageRole-CyfpySt9.js.map +1 -0
  57. package/dist/{ManageUser-DZltBina.js → ManageUser-DchUMAyC.js} +172 -172
  58. package/dist/{ManageUser-DZltBina.js.map → ManageUser-DchUMAyC.js.map} +1 -1
  59. package/dist/{MemberProfileCard-D5CgkTdJ-D2NgDJl3.js → MemberProfileCard-01d_jz3w-CQi_zu6x.js} +37 -37
  60. package/dist/{MemberProfileCard-D5CgkTdJ-D2NgDJl3.js.map → MemberProfileCard-01d_jz3w-CQi_zu6x.js.map} +1 -1
  61. package/dist/MobileAnalytics-C9oc2yAo.js +18399 -0
  62. package/dist/MobileAnalytics-C9oc2yAo.js.map +1 -0
  63. package/dist/MobileMenuManagement-BmzTPXy7.js +231 -0
  64. package/dist/MobileMenuManagement-BmzTPXy7.js.map +1 -0
  65. package/dist/{MobileTypeEventConfigModal-CMcj7Ozp.js → MobileTypeEventConfigModal-DodU3beR.js} +3 -3
  66. package/dist/{MobileTypeEventConfigModal-CMcj7Ozp.js.map → MobileTypeEventConfigModal-DodU3beR.js.map} +1 -1
  67. package/dist/{NewServerManagement-Cxe0dV0O.js → NewServerManagement-BdayO78D.js} +368 -352
  68. package/dist/NewServerManagement-BdayO78D.js.map +1 -0
  69. package/dist/OtherTypeEventConfigModal-D_9S50aI.js +1414 -0
  70. package/dist/OtherTypeEventConfigModal-D_9S50aI.js.map +1 -0
  71. package/dist/{PaymentCreatePage-DfvSZ-kB-CckogYoe.js → PaymentCreatePage-D6NZBUC3-_98S21Sa.js} +56 -56
  72. package/dist/{PaymentCreatePage-DfvSZ-kB-CckogYoe.js.map → PaymentCreatePage-D6NZBUC3-_98S21Sa.js.map} +1 -1
  73. package/dist/{PaymentsPage-DMNjYWAJ-ChO9IXmk.js → PaymentsPage-CHieGNrn-ChCXEyck.js} +38 -38
  74. package/dist/{PaymentsPage-DMNjYWAJ-ChO9IXmk.js.map → PaymentsPage-CHieGNrn-ChCXEyck.js.map} +1 -1
  75. package/dist/{PermissionsModal-CCYkcKlC.js → PermissionsModal-Dxbkkrqe.js} +18 -18
  76. package/dist/PermissionsModal-Dxbkkrqe.js.map +1 -0
  77. package/dist/{PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js} +2 -2
  78. package/dist/{PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js.map → PickupBatchLinesEditor-QPaqFtUO-BEtI5mIU.js.map} +1 -1
  79. package/dist/PickupCreatePage-C7_67u_u-DbDIZ1WC.js +801 -0
  80. package/dist/PickupCreatePage-C7_67u_u-DbDIZ1WC.js.map +1 -0
  81. package/dist/{PickupsPage-D7zyioJB-bHKnARYw.js → PickupsPage-BWblMlic-KehDMebm.js} +122 -122
  82. package/dist/PickupsPage-BWblMlic-KehDMebm.js.map +1 -0
  83. package/dist/PmGuard-BvUUbU80-DJipZoSg.js +641 -0
  84. package/dist/PmGuard-BvUUbU80-DJipZoSg.js.map +1 -0
  85. package/dist/ProductEditPage-Dbq4vUAA-DusAdAvm.js +1523 -0
  86. package/dist/ProductEditPage-Dbq4vUAA-DusAdAvm.js.map +1 -0
  87. package/dist/{ProductsPage-DvNHIeZt-BoOOJJtk.js → ProductsPage-BI22nPb4-D3GnWz34.js} +29 -29
  88. package/dist/{ProductsPage-DvNHIeZt-BoOOJJtk.js.map → ProductsPage-BI22nPb4-D3GnWz34.js.map} +1 -1
  89. package/dist/PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js +724 -0
  90. package/dist/PurchaseCreatePage-C0EK9z4w-D4PlZsOH.js.map +1 -0
  91. package/dist/{PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js → PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js} +446 -436
  92. package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CAmlL4fP.js.map +1 -0
  93. package/dist/{PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js} +55 -55
  94. package/dist/{PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js.map → PurchaseRequestsPage-Bj9HUMxb-BCAhEEkL.js.map} +1 -1
  95. package/dist/{PurchasesPage-DgL5T6BY-DePUuE9l.js → PurchasesPage-Djl1AqD_-DxBRFRDy.js} +61 -61
  96. package/dist/{PurchasesPage-DgL5T6BY-DePUuE9l.js.map → PurchasesPage-Djl1AqD_-DxBRFRDy.js.map} +1 -1
  97. package/dist/{RoleManagement-s8iNx2Mu.js → RoleManagement-DVYufwy-.js} +3 -3
  98. package/dist/{RoleManagement-s8iNx2Mu.js.map → RoleManagement-DVYufwy-.js.map} +1 -1
  99. package/dist/Roles-BoNGJhtR.js +19 -0
  100. package/dist/Roles-BoNGJhtR.js.map +1 -0
  101. package/dist/{SaleCreatePage-CZnIOydv-DKBw-qp7.js → SaleCreatePage-DHBLmlBr-aEGmvJQq.js} +33 -33
  102. package/dist/{SaleCreatePage-CZnIOydv-DKBw-qp7.js.map → SaleCreatePage-DHBLmlBr-aEGmvJQq.js.map} +1 -1
  103. package/dist/{SalesPage-DPIRrC_O-M8rqnK7z.js → SalesPage-eF9Yr42z-CvOr82vo.js} +34 -34
  104. package/dist/SalesPage-eF9Yr42z-CvOr82vo.js.map +1 -0
  105. package/dist/SettingsPage-Cre-UE3r-CGTVp5Zw.js +741 -0
  106. package/dist/SettingsPage-Cre-UE3r-CGTVp5Zw.js.map +1 -0
  107. package/dist/{StorageUnitsPage-BDRkdCjW-UF64rf7q.js → StorageUnitsPage-CTEVuemZ-C7zkwKMz.js} +213 -190
  108. package/dist/StorageUnitsPage-CTEVuemZ-C7zkwKMz.js.map +1 -0
  109. package/dist/{SubMenu-BdMTYtC1.js → SubMenu-DZIhur09.js} +2 -2
  110. package/dist/{SubMenu-BdMTYtC1.js.map → SubMenu-DZIhur09.js.map} +1 -1
  111. package/dist/{TableDetails-BtafRxXb.js → TableDetails-Cc40dEUs.js} +272 -267
  112. package/dist/TableDetails-Cc40dEUs.js.map +1 -0
  113. package/dist/{TableList-Dpo6dO7S.js → TableList-B5tX4wII.js} +316 -312
  114. package/dist/TableList-B5tX4wII.js.map +1 -0
  115. package/dist/{TransactionsPage-CqWTMNU8-Df6eGFDW.js → TransactionsPage-Zuu7sjID-BDmUK7s1.js} +185 -170
  116. package/dist/TransactionsPage-Zuu7sjID-BDmUK7s1.js.map +1 -0
  117. package/dist/TransferCreatePage-DlT0nCDj-evHPJc99.js +635 -0
  118. package/dist/TransferCreatePage-DlT0nCDj-evHPJc99.js.map +1 -0
  119. package/dist/TransfersPage-DqaSvHda-DAUn5SSr.js +600 -0
  120. package/dist/TransfersPage-DqaSvHda-DAUn5SSr.js.map +1 -0
  121. package/dist/{TypeConfiguration-JbRCN6GR.js → TypeConfiguration-EaFiOzRE.js} +3 -3
  122. package/dist/{TypeConfiguration-JbRCN6GR.js.map → TypeConfiguration-EaFiOzRE.js.map} +1 -1
  123. package/dist/UserList-Cf5B-o_1.js +1904 -0
  124. package/dist/UserList-Cf5B-o_1.js.map +1 -0
  125. package/dist/Users-MC7txo1V.js +43 -0
  126. package/dist/{Users-CsJ08Kjm.js.map → Users-MC7txo1V.js.map} +1 -1
  127. package/dist/VaccineEducation-DWkNNasF.js +231 -0
  128. package/dist/VaccineEducation-DWkNNasF.js.map +1 -0
  129. package/dist/VaccineEducation.css +1 -0
  130. package/dist/VaccineEducationConfigurator-BFCvu5Mw.js +1450 -0
  131. package/dist/VaccineEducationConfigurator-BFCvu5Mw.js.map +1 -0
  132. package/dist/VaccineEducationConfigurator.css +1 -0
  133. package/dist/VaccineEducationList-BxZHahCh.js +334 -0
  134. package/dist/VaccineEducationList-BxZHahCh.js.map +1 -0
  135. package/dist/VialsPage-LoDaUqVv-Dw00Zc06.js +457 -0
  136. package/dist/VialsPage-LoDaUqVv-Dw00Zc06.js.map +1 -0
  137. package/dist/ckeditor5-_x14lrzc.js +49590 -0
  138. package/dist/ckeditor5-_x14lrzc.js.map +1 -0
  139. package/dist/ckeditor5.css +4 -0
  140. package/dist/{constants-DpXnLsAB-D6lN5cjK.js → constants-BTpJFQe_-CYPZIqQF.js} +160 -61
  141. package/dist/constants-BTpJFQe_-CYPZIqQF.js.map +1 -0
  142. package/dist/dashboardLayoutUtils--xUnoKPa.js +615 -0
  143. package/dist/dashboardLayoutUtils--xUnoKPa.js.map +1 -0
  144. package/dist/faqMedia-FDpje7v0.js +234 -0
  145. package/dist/faqMedia-FDpje7v0.js.map +1 -0
  146. package/dist/index-mfoqII2U.js +524 -0
  147. package/dist/index-mfoqII2U.js.map +1 -0
  148. package/dist/{index-D9YNFPn9.js → index-o8Pyt1Bt.js} +445 -439
  149. package/dist/index-o8Pyt1Bt.js.map +1 -0
  150. package/dist/index.css +1 -1
  151. package/dist/index.js +1 -1
  152. package/dist/{index.lib-ETRQOzvE.js → index.lib-QDEODnRT.js} +409 -327
  153. package/dist/index.lib-QDEODnRT.js.map +1 -0
  154. package/dist/listValueStore-5d4vNGQM-DB08drLf.js +43 -0
  155. package/dist/listValueStore-5d4vNGQM-DB08drLf.js.map +1 -0
  156. package/dist/proxy-C4gcRXzG.js +5265 -0
  157. package/dist/proxy-C4gcRXzG.js.map +1 -0
  158. package/package.json +7 -2
  159. package/dist/AccessRights-DUgY6ewy.js +0 -1031
  160. package/dist/AccessRights-DUgY6ewy.js.map +0 -1
  161. package/dist/AddMenuConfiguration-c6ZKiN0i.js +0 -8898
  162. package/dist/AddMenuConfiguration-c6ZKiN0i.js.map +0 -1
  163. package/dist/ChangePasswordModalCore-lQ9GamH1.js +0 -5494
  164. package/dist/ChangePasswordModalCore-lQ9GamH1.js.map +0 -1
  165. package/dist/EntityManagement-CPQL6qBj.js +0 -50
  166. package/dist/EntityManagement-CPQL6qBj.js.map +0 -1
  167. package/dist/EventsUi-D6O9S7BK.js.map +0 -1
  168. package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js +0 -79
  169. package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js.map +0 -1
  170. package/dist/ImmunizationConfigurationBase-aUtx0JEe.js.map +0 -1
  171. package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js +0 -665
  172. package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js.map +0 -1
  173. package/dist/ManageDynamicFeature-BU0I45dd.js.map +0 -1
  174. package/dist/ManageRole-CNZBRKGU.js +0 -776
  175. package/dist/ManageRole-CNZBRKGU.js.map +0 -1
  176. package/dist/MobileAnalytics-BLOionG_.js +0 -17301
  177. package/dist/MobileAnalytics-BLOionG_.js.map +0 -1
  178. package/dist/MobileMenuManagement-68Wijb0X.js +0 -220
  179. package/dist/MobileMenuManagement-68Wijb0X.js.map +0 -1
  180. package/dist/NewServerManagement-Cxe0dV0O.js.map +0 -1
  181. package/dist/OtherTypeEventConfigModal-stNmuSv_.js +0 -1812
  182. package/dist/OtherTypeEventConfigModal-stNmuSv_.js.map +0 -1
  183. package/dist/PermissionsModal-CCYkcKlC.js.map +0 -1
  184. package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js +0 -783
  185. package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js.map +0 -1
  186. package/dist/PickupsPage-D7zyioJB-bHKnARYw.js.map +0 -1
  187. package/dist/PmGuard-BZE-y4In-D_pUm5MP.js +0 -599
  188. package/dist/PmGuard-BZE-y4In-D_pUm5MP.js.map +0 -1
  189. package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js +0 -1305
  190. package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js.map +0 -1
  191. package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js +0 -675
  192. package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js.map +0 -1
  193. package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js.map +0 -1
  194. package/dist/Roles-BIyiic67.js +0 -14
  195. package/dist/Roles-BIyiic67.js.map +0 -1
  196. package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js.map +0 -1
  197. package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js +0 -676
  198. package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js.map +0 -1
  199. package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js.map +0 -1
  200. package/dist/TableDetails-BtafRxXb.js.map +0 -1
  201. package/dist/TableList-Dpo6dO7S.js.map +0 -1
  202. package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js.map +0 -1
  203. package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js +0 -315
  204. package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js.map +0 -1
  205. package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js +0 -476
  206. package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js.map +0 -1
  207. package/dist/UserList-L41Xw0Q6.js +0 -1129
  208. package/dist/UserList-L41Xw0Q6.js.map +0 -1
  209. package/dist/Users-CsJ08Kjm.js +0 -40
  210. package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js +0 -321
  211. package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js.map +0 -1
  212. package/dist/constants-DpXnLsAB-D6lN5cjK.js.map +0 -1
  213. package/dist/dashboardLayoutUtils-CJivzaU1.js +0 -408
  214. package/dist/dashboardLayoutUtils-CJivzaU1.js.map +0 -1
  215. package/dist/index-D9YNFPn9.js.map +0 -1
  216. package/dist/index.lib-ETRQOzvE.js.map +0 -1
  217. package/dist/listValueStore-BFQtDYIR-Bj0yX145.js +0 -36
  218. package/dist/listValueStore-BFQtDYIR-Bj0yX145.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationWiseExpectedTargetPage-CjKk1aTF.js","sources":["../src/services/LocationWiseExpectedTarget.js","../src/views/LocationWiseExpectedTarget/financialYearOptions.js","../src/views/LocationWiseExpectedTarget/permissions.jsx","../src/views/LocationWiseExpectedTarget/IndicatorConfigPanel.jsx","../src/views/LocationWiseExpectedTarget/exportTargets.js","../src/views/LocationWiseExpectedTarget/LocationWiseExpectedTargetPage.jsx"],"sourcesContent":["import { api } from \"@/common/interceptors/AxiosInterceptor\";\nimport { execute } from \"@/common/services/QueryBuilder\";\n\nexport const ENTITY_TYPE_LOCATION = \"LOCATION\";\nexport const ENTITY_TYPE_FACILITY = \"FACILITY\";\n\nexport const DIRECTION_TOP_DOWN = \"TOP_DOWN\";\nexport const DIRECTION_BOTTOM_UP = \"BOTTOM_UP\";\n\nconst firstRow = (response) => response?.data?.result?.[0];\n\nexport const extractDbMessage = (error, fallback) => {\n const raw =\n error?.response?.data?.message ||\n error?.response?.data?.errorMessage ||\n error?.message ||\n \"\";\n const match = /ERROR:\\s*([^\\n\\r]+)/.exec(raw);\n return match ? match[1].trim() : fallback;\n};\n\nconst parseJsonColumn = (value, fallback) => {\n if (value == null || value === \"\") return fallback;\n if (typeof value === \"object\") {\n return value.value !== undefined ? parseJsonColumn(value.value, fallback) : value;\n }\n try {\n const parsed = JSON.parse(value);\n return parsed ?? fallback;\n } catch {\n return fallback;\n }\n};\n\nexport const getIndicators = async () => {\n const response = await execute({ code: \"medplat_lwet_retrieve_indicators\" });\n const indicators = parseJsonColumn(firstRow(response)?.indicators, []);\n return [...indicators].sort(\n (a, b) => (a.displayOrder ?? 0) - (b.displayOrder ?? 0)\n );\n};\n\nexport const saveIndicators = async (indicators) => {\n await execute({\n code: \"medplat_lwet_save_indicators\",\n parameters: { indicators: JSON.stringify(indicators) },\n });\n return indicators;\n};\n\nexport const DEFAULT_SETTINGS = {\n pastYears: 2,\n futureYears: 1,\n direction: DIRECTION_TOP_DOWN,\n depth: ENTITY_TYPE_LOCATION,\n};\n\nexport const getSettings = async () => {\n const response = await execute({ code: \"medplat_lwet_retrieve_settings\" });\n const stored = parseJsonColumn(firstRow(response)?.settings, null);\n return {\n pastYears: stored?.pastYears ?? DEFAULT_SETTINGS.pastYears,\n futureYears: stored?.futureYears ?? DEFAULT_SETTINGS.futureYears,\n direction: stored?.direction ?? DEFAULT_SETTINGS.direction,\n depth: stored?.depth ?? DEFAULT_SETTINGS.depth,\n };\n};\n\nexport const saveSettings = async (settings) => {\n await execute({\n code: \"medplat_lwet_save_settings\",\n parameters: { settings: JSON.stringify(settings) },\n });\n return settings;\n};\n\n/** Whether any target data already exists at all, used to warn before a direction/depth switch. */\nexport const hasExistingTargets = async () => {\n const response = await execute({ code: \"medplat_lwet_check_existing_targets\" });\n const value = firstRow(response)?.hasData;\n return value === true || value === \"true\";\n};\n\nconst toTargetRow = (row) =>\n row && {\n entityId: row.entityId,\n financialYear: row.financialYear,\n values: parseJsonColumn(row.values, {}),\n state: row.state,\n noOfTimesUnlocked: row.noOfTimesUnlocked ?? 0,\n isDerived: row.isDerived === true || row.isDerived === \"true\",\n };\n\nexport const getTarget = async (entityId, financialYear, entityType = ENTITY_TYPE_LOCATION) => {\n const response = await execute({\n code: \"medplat_lwet_retrieve_target\",\n parameters: { entityId, financialYear, entityType },\n });\n return toTargetRow(firstRow(response)) || null;\n};\n\nexport const getChildrenTargets = async (\n entityId,\n financialYear,\n entityType = ENTITY_TYPE_LOCATION\n) => {\n const response = await execute({\n code: \"medplat_lwet_retrieve_child_targets\",\n parameters: { entityId, financialYear, entityType },\n });\n return (response?.data?.result || []).map(toTargetRow);\n};\n\n/**\n * Rows are `{ entityId, values, state }`; the financial year and entity type are shared by the\n * whole batch. The query merges `values` into what is stored, so a single-column save never\n * clears the other columns.\n */\nexport const saveTargets = async (rows, financialYear, entityType = ENTITY_TYPE_LOCATION) => {\n await execute({\n code: \"medplat_lwet_save_targets\",\n parameters: {\n rows: JSON.stringify(\n rows.map((row) => ({\n entityId: row.entityId,\n values: row.values || {},\n state: row.state,\n }))\n ),\n financialYear,\n entityType,\n },\n });\n};\n\nexport const unlockTargets = async (\n entityIds,\n financialYear,\n entityType = ENTITY_TYPE_LOCATION\n) => {\n await execute({\n code: \"medplat_lwet_unlock_targets\",\n parameters: { entityIds: JSON.stringify(entityIds), financialYear, entityType },\n });\n};\n\nexport const getChildLocations = (locationId) =>\n api.get(\"location/childlocations\", { params: { locationId } });\n\nexport const getLocationFacilities = async (locationId) => {\n const response = await execute({\n code: \"medplat_lwet_retrieve_location_facilities\",\n parameters: { locationId },\n });\n return response?.data?.result || [];\n};\n\nexport const getChildFacilityTargets = async (locationId, financialYear) => {\n const response = await execute({\n code: \"medplat_lwet_retrieve_child_facility_targets\",\n parameters: { locationId, financialYear },\n });\n return (response?.data?.result || []).map(toTargetRow);\n};\n\n/** Direct children of a location with an `isLeaf` flag, for bottom-up mode's per-row editability. */\nexport const getChildLocationsWithLeaf = async (locationId) => {\n const response = await execute({\n code: \"medplat_lwet_retrieve_child_locations_with_leaf\",\n parameters: { locationId },\n });\n return (response?.data?.result || []).map((row) => ({\n id: row.id,\n name: row.name,\n isLeaf: row.isLeaf === true || row.isLeaf === \"true\",\n }));\n};\n\n/**\n * Bottom-up leaf save: upserts the given leaf rows and, in the same statement, recomputes every\n * ancestor's total from all of its leaf descendants (touched and untouched). Only ever called\n * with entityType LOCATION - use saveTargetsBottomUpFacility for FACILITY depth.\n */\nexport const saveTargetsBottomUp = async (rows, financialYear) => {\n await execute({\n code: \"medplat_lwet_save_targets_bottom_up\",\n parameters: {\n rows: JSON.stringify(\n rows.map((row) => ({\n entityId: row.entityId,\n values: row.values || {},\n state: row.state,\n }))\n ),\n financialYear,\n },\n });\n};\n\n/**\n * Bottom-up leaf save for FACILITY depth: upserts the given facility rows and, in the same\n * statement, recomputes their owning leaf location's sum plus every ancestor's total above it.\n */\nexport const saveTargetsBottomUpFacility = async (rows, financialYear) => {\n await execute({\n code: \"medplat_lwet_save_targets_bottom_up_facility\",\n parameters: {\n rows: JSON.stringify(\n rows.map((row) => ({\n entityId: row.entityId,\n values: row.values || {},\n state: row.state,\n }))\n ),\n financialYear,\n },\n });\n};\n","// April-March financial year cycle.\nexport function getCurrentFinancialYearStart(today = new Date()) {\n return today.getMonth() < 3 ? today.getFullYear() - 1 : today.getFullYear();\n}\n\n/**\n * Newest first, e.g. with { pastYears: 2, futureYears: 1 } in FY 2025-2026 you get\n * 2026-2027, 2025-2026, 2024-2025, 2023-2024.\n */\nexport function getFinancialYearOptions({ pastYears = 2, futureYears = 1 } = {}) {\n const current = getCurrentFinancialYearStart();\n const options = [];\n for (let start = current + futureYears; start >= current - pastYears; start--) {\n options.push(`${start}-${start + 1}`);\n }\n return options;\n}\n","import { useMemo } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Alert, Box, Button, LinearProgress, Stack, Typography } from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faLock } from \"@fortawesome/free-solid-svg-icons\";\nimport { useNavigate } from \"react-router\";\nimport PropTypes from \"prop-types\";\n\n// menu_config.navigation_state for this feature.\nexport const LWET_MENU_KEY = \"techo.manage.locationWiseExpectedTarget\";\n\nexport const LWET_PERMS = {\n VIEW: \"view.core.locationWiseExpectedTarget\",\n UPDATE: \"update.core.locationWiseExpectedTarget\",\n UNLOCK: \"unlock.core.locationWiseExpectedTarget\",\n CONFIGURE_INDICATORS: \"configure.core.locationWiseExpectedTargetIndicators\",\n};\n\n/**\n * Permission set for the current user for this feature. Default-deny when missing.\n */\nexport function useLwetPermissions() {\n const linearMenuItems = useSelector((state) => state.Authenticate?.linearMenuItems);\n return useMemo(() => {\n const node = linearMenuItems?.[LWET_MENU_KEY];\n let grants = node?.featureJson;\n if (typeof grants === \"string\") {\n try {\n grants = JSON.parse(grants);\n } catch {\n grants = {};\n }\n }\n const grantSet = grants && typeof grants === \"object\" ? grants : {};\n const has = (permId) => !!permId && grantSet[permId] === true;\n return {\n has,\n canView: has(LWET_PERMS.VIEW),\n canUpdate: has(LWET_PERMS.UPDATE),\n canUnlock: has(LWET_PERMS.UNLOCK),\n canConfigureIndicators: has(LWET_PERMS.CONFIGURE_INDICATORS),\n };\n }, [linearMenuItems]);\n}\n\n/**\n * Page-level guard. Renders children only when the current user has {@code perm}.\n */\nexport function LwetGuard({ perm = LWET_PERMS.VIEW, children }) {\n const perms = useLwetPermissions();\n const navigate = useNavigate();\n const linearMenuItems = useSelector((state) => state.Authenticate?.linearMenuItems);\n const menuReady = linearMenuItems !== null && linearMenuItems !== undefined;\n\n if (!menuReady) {\n return (\n <Box sx={{ p: 3 }}>\n <LinearProgress />\n </Box>\n );\n }\n if (perms.has(perm)) return children;\n\n return (\n <Box sx={{ p: 3 }}>\n <Alert severity=\"warning\" icon={<FontAwesomeIcon icon={faLock} />} sx={{ borderRadius: 1.5, alignItems: \"flex-start\" }}>\n <Stack spacing={1.25}>\n <Typography sx={{ fontWeight: 800 }}>You don’t have access to this page</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Your account doesn’t have the required permission for Location Wise Expected Target.\n Ask an admin to grant it via the role / user permission assignment.\n </Typography>\n <Box>\n <Button size=\"small\" variant=\"contained\" onClick={() => navigate(\"/ui/\")}>\n Back to Home\n </Button>\n </Box>\n </Stack>\n </Alert>\n </Box>\n );\n}\n\nLwetGuard.propTypes = {\n perm: PropTypes.string,\n children: PropTypes.node,\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Alert,\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Switch,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faGripVertical, faPlus, faTrashCan } from \"@fortawesome/free-solid-svg-icons\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { restrictToParentElement, restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { getFinancialYearOptions } from \"./financialYearOptions\";\nimport {\n DIRECTION_BOTTOM_UP,\n DIRECTION_TOP_DOWN,\n ENTITY_TYPE_FACILITY,\n ENTITY_TYPE_LOCATION,\n extractDbMessage,\n getIndicators,\n getSettings,\n hasExistingTargets,\n saveIndicators,\n saveSettings,\n} from \"../../services/LocationWiseExpectedTarget\";\n\nlet nextLocalKey = 0;\n\nfunction SortableIndicatorRow({ row, position, error, onChange, onRemove }) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: row.key,\n });\n\n return (\n <Paper\n ref={setNodeRef}\n variant=\"outlined\"\n sx={{\n px: 1.5,\n py: 1,\n mb: 0.75,\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n borderRadius: 1.5,\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n boxShadow: isDragging ? 6 : 0,\n bgcolor: row.isActive === false ? \"action.hover\" : \"background.paper\",\n }}\n >\n <Tooltip title=\"Drag to reorder\">\n <Box\n {...attributes}\n {...listeners}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"grab\",\n color: \"text.disabled\",\n \"&:active\": { cursor: \"grabbing\" },\n }}\n >\n <FontAwesomeIcon icon={faGripVertical} size=\"sm\" />\n </Box>\n </Tooltip>\n\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ width: 18, textAlign: \"center\" }}>\n {position}\n </Typography>\n\n <TextField\n size=\"small\"\n value={row.code}\n onChange={(e) => onChange(row.key, \"code\", e.target.value.toUpperCase().replace(/\\s+/g, \"_\"))}\n placeholder=\"UPPER_CASE_CODE\"\n error={Boolean(error)}\n helperText={error || \" \"}\n sx={{\n width: 220,\n \"& .MuiInputBase-input\": { fontSize: 13, fontFamily: \"monospace\" },\n \"& .MuiFormHelperText-root\": { fontSize: 10, mt: 0.25, mx: 0 },\n }}\n />\n\n <TextField\n size=\"small\"\n value={row.label}\n onChange={(e) => onChange(row.key, \"label\", e.target.value)}\n placeholder=\"Heading shown in the table\"\n helperText=\" \"\n fullWidth\n sx={{\n \"& .MuiInputBase-input\": { fontSize: 13 },\n \"& .MuiFormHelperText-root\": { fontSize: 10, mt: 0.25, mx: 0 },\n }}\n />\n\n <Tooltip title={row.isActive === false ? \"Inactive - hidden from the table\" : \"Active\"}>\n <Switch\n size=\"small\"\n checked={row.isActive !== false}\n onChange={(e) => onChange(row.key, \"isActive\", e.target.checked)}\n />\n </Tooltip>\n\n <Tooltip title=\"Remove\">\n <IconButton size=\"small\" color=\"error\" onClick={() => onRemove(row.key)}>\n <FontAwesomeIcon icon={faTrashCan} size=\"sm\" />\n </IconButton>\n </Tooltip>\n </Paper>\n );\n}\n\nSortableIndicatorRow.propTypes = {\n row: PropTypes.object.isRequired,\n position: PropTypes.number.isRequired,\n error: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n};\n\nexport default function IndicatorConfigPanel({ onSaved }) {\n const [rows, setRows] = useState([]);\n const [loading, setLoading] = useState(false);\n const [fetching, setFetching] = useState(true);\n const [pastYears, setPastYears] = useState(2);\n const [futureYears, setFutureYears] = useState(1);\n const [restSettings, setRestSettings] = useState({\n direction: DIRECTION_TOP_DOWN,\n depth: ENTITY_TYPE_LOCATION,\n });\n const [originalMode, setOriginalMode] = useState({\n direction: DIRECTION_TOP_DOWN,\n depth: ENTITY_TYPE_LOCATION,\n });\n const [confirmModeSwitch, setConfirmModeSwitch] = useState(false);\n\n const rowErrors = useMemo(() => {\n const counts = {};\n rows.forEach((row) => {\n const code = (row.code || \"\").trim();\n if (code) counts[code] = (counts[code] || 0) + 1;\n });\n const errors = {};\n rows.forEach((row) => {\n const code = (row.code || \"\").trim();\n if (!code) errors[row.key] = \"Code is required\";\n else if (counts[code] > 1) errors[row.key] = \"Already used\";\n });\n return errors;\n }, [rows]);\n\n const hasRowErrors = Object.keys(rowErrors).length > 0;\n const missingLabel = rows.some((row) => !(row.label || \"\").trim());\n\n const yearCountError = (value) => {\n const parsed = Number(value);\n if (value === \"\" || value === null || Number.isNaN(parsed)) return \"Required\";\n if (!Number.isInteger(parsed)) return \"Whole number\";\n if (parsed < 0) return \"Cannot be negative\";\n if (parsed > 20) return \"Maximum 20\";\n return \"\";\n };\n const pastYearsError = yearCountError(pastYears);\n const futureYearsError = yearCountError(futureYears);\n const hasYearError = Boolean(pastYearsError || futureYearsError);\n\n const yearPreview = getFinancialYearOptions({\n pastYears: Math.min(Math.max(Number(pastYears) || 0, 0), 20),\n futureYears: Math.min(Math.max(Number(futureYears) || 0, 0), 20),\n });\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })\n );\n\n useEffect(() => {\n (async () => {\n try {\n const [loadedIndicators, loadedSettings] = await Promise.all([\n getIndicators(),\n getSettings(),\n ]);\n setRows(loadedIndicators.map((indicator) => ({ ...indicator, key: nextLocalKey++ })));\n setPastYears(loadedSettings.pastYears);\n setFutureYears(loadedSettings.futureYears);\n setRestSettings({ direction: loadedSettings.direction, depth: loadedSettings.depth });\n setOriginalMode({ direction: loadedSettings.direction, depth: loadedSettings.depth });\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error loading configuration\"), type: \"error\" });\n } finally {\n setFetching(false);\n }\n })();\n }, []);\n\n const updateRow = (key, field, value) => {\n setRows((current) => current.map((row) => (row.key === key ? { ...row, [field]: value } : row)));\n };\n\n const addRow = () => {\n setRows((current) => [\n ...current,\n { key: nextLocalKey++, code: \"\", label: \"\", isActive: true },\n ]);\n };\n\n const removeRow = (key) => {\n setRows((current) => current.filter((row) => row.key !== key));\n };\n\n const handleDragEnd = ({ active, over }) => {\n if (!over || active.id === over.id) return;\n setRows((current) => {\n const oldIndex = current.findIndex((row) => row.key === active.id);\n const newIndex = current.findIndex((row) => row.key === over.id);\n return arrayMove(current, oldIndex, newIndex);\n });\n };\n\n const modeChanged =\n restSettings.direction !== originalMode.direction || restSettings.depth !== originalMode.depth;\n\n const performSave = async () => {\n setLoading(true);\n try {\n const payload = rows.map((row, index) => ({\n code: row.code.trim(),\n label: row.label.trim(),\n displayOrder: index + 1,\n isActive: row.isActive !== false,\n }));\n const [savedIndicators, savedSettings] = await Promise.all([\n saveIndicators(payload),\n saveSettings({\n ...restSettings,\n pastYears: Number(pastYears),\n futureYears: Number(futureYears),\n }),\n ]);\n setOriginalMode({ direction: savedSettings.direction, depth: savedSettings.depth });\n showToast({ message: \"Configuration saved successfully\", type: \"success\" });\n onSaved?.({ indicators: savedIndicators, settings: savedSettings });\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error saving configuration\"), type: \"error\" });\n } finally {\n setLoading(false);\n }\n };\n\n const handleSave = async () => {\n if (hasRowErrors) {\n showToast({ message: \"Fix the highlighted indicator codes first\", type: \"error\" });\n return;\n }\n if (missingLabel) {\n showToast({ message: \"Every indicator needs a label\", type: \"error\" });\n return;\n }\n if (hasYearError) {\n showToast({ message: \"Financial year range must be between 0 and 20\", type: \"error\" });\n return;\n }\n if (modeChanged) {\n setLoading(true);\n let existingData = false;\n try {\n existingData = await hasExistingTargets();\n } catch (error) {\n setLoading(false);\n showToast({ message: extractDbMessage(error, \"Error checking existing data\"), type: \"error\" });\n return;\n }\n setLoading(false);\n if (existingData) {\n setConfirmModeSwitch(true);\n return;\n }\n }\n await performSave();\n };\n\n const confirmModeSwitchAndSave = async () => {\n setConfirmModeSwitch(false);\n await performSave();\n };\n\n if (fetching) {\n return (\n <Box display=\"flex\" justifyContent=\"center\" py={4}>\n <CircularProgress />\n </Box>\n );\n }\n\n return (\n <Box>\n <Alert severity=\"info\" sx={{ mb: 2, borderRadius: 2, py: 0.5 }}>\n <Typography variant=\"body2\">\n These become the columns of the target table. Drag to reorder. The <strong>code</strong> is\n the stored key — changing it later orphans data already saved under the old code.\n </Typography>\n </Alert>\n\n {rows.length === 0 ? (\n <Paper\n variant=\"outlined\"\n sx={{ p: 4, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\", mb: 2 }}\n >\n <Typography color=\"text.secondary\" gutterBottom>\n No indicators configured yet.\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Add one for each number this implementation plans targets against.\n </Typography>\n </Paper>\n ) : (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n px: 1.5,\n pb: 0.5,\n color: \"text.secondary\",\n }}\n >\n <Box sx={{ width: 20 }} />\n <Box sx={{ width: 18 }} />\n <Typography variant=\"caption\" fontWeight={700} sx={{ width: 220 }}>\n CODE\n </Typography>\n <Typography variant=\"caption\" fontWeight={700} sx={{ flex: 1 }}>\n COLUMN HEADING\n </Typography>\n <Typography variant=\"caption\" fontWeight={700} sx={{ width: 58, textAlign: \"center\" }}>\n ACTIVE\n </Typography>\n <Box sx={{ width: 30 }} />\n </Box>\n\n <SortableContext items={rows.map((row) => row.key)} strategy={verticalListSortingStrategy}>\n <Box sx={{ maxHeight: 420, overflowY: \"auto\", pr: 0.5 }}>\n {rows.map((row, index) => (\n <SortableIndicatorRow\n key={row.key}\n row={row}\n position={index + 1}\n error={rowErrors[row.key]}\n onChange={updateRow}\n onRemove={removeRow}\n />\n ))}\n </Box>\n </SortableContext>\n </DndContext>\n )}\n\n <Button startIcon={<FontAwesomeIcon icon={faPlus} />} onClick={addRow} variant=\"outlined\" sx={{ mt: 1.5 }}>\n Add Indicator\n </Button>\n\n <Divider sx={{ my: 2.5 }} />\n\n <Typography variant=\"subtitle2\" fontWeight={700} gutterBottom>\n Financial years offered in the filter\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1.5 }}>\n Counted either side of the current financial year. Keep at least one future year so next\n year&apos;s targets can be entered before it starts.\n </Typography>\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <TextField\n size=\"small\"\n type=\"number\"\n label=\"Past years\"\n value={pastYears}\n onChange={(e) => setPastYears(e.target.value)}\n error={Boolean(pastYearsError)}\n helperText={pastYearsError || \" \"}\n sx={{ width: 140 }}\n />\n <TextField\n size=\"small\"\n type=\"number\"\n label=\"Future years\"\n value={futureYears}\n onChange={(e) => setFutureYears(e.target.value)}\n error={Boolean(futureYearsError)}\n helperText={futureYearsError || \" \"}\n sx={{ width: 140 }}\n />\n <Typography variant=\"caption\" color=\"text.secondary\">\n {yearPreview.join(\", \")}\n </Typography>\n </Stack>\n\n <Divider sx={{ my: 2.5 }} />\n\n <Typography variant=\"subtitle2\" fontWeight={700} gutterBottom>\n How targets flow through the hierarchy\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1.5 }}>\n Direction decides who enters the number first; depth decides how far down it goes.\n </Typography>\n <Stack direction=\"row\" spacing={2} alignItems=\"flex-start\" flexWrap=\"wrap\" useFlexGap>\n <FormControl size=\"small\" sx={{ width: 240 }}>\n <InputLabel id=\"lwet-direction-label\">Direction</InputLabel>\n <Select\n labelId=\"lwet-direction-label\"\n label=\"Direction\"\n value={restSettings.direction}\n onChange={(e) => setRestSettings((current) => ({ ...current, direction: e.target.value }))}\n >\n <MenuItem value={DIRECTION_TOP_DOWN}>Top to bottom (root enters, distributes down)</MenuItem>\n <MenuItem value={DIRECTION_BOTTOM_UP}>Bottom to top (leaves enter, sum up)</MenuItem>\n </Select>\n </FormControl>\n <FormControl size=\"small\" sx={{ width: 240 }}>\n <InputLabel id=\"lwet-depth-label\">Depth</InputLabel>\n <Select\n labelId=\"lwet-depth-label\"\n label=\"Depth\"\n value={restSettings.depth}\n onChange={(e) => setRestSettings((current) => ({ ...current, depth: e.target.value }))}\n >\n <MenuItem value={ENTITY_TYPE_LOCATION}>Up to location</MenuItem>\n <MenuItem value={ENTITY_TYPE_FACILITY}>Up to facility</MenuItem>\n </Select>\n </FormControl>\n </Stack>\n {modeChanged && (\n <Alert severity=\"warning\" sx={{ mt: 1.5, borderRadius: 2, py: 0.5 }}>\n <Typography variant=\"body2\">\n Changing this affects how every financial year&apos;s data is interpreted. Existing\n targets are not converted automatically.\n </Typography>\n </Alert>\n )}\n\n <Stack direction=\"row\" justifyContent=\"flex-end\" sx={{ mt: 2.5 }}>\n <Button\n variant=\"contained\"\n disabled={loading || hasRowErrors || missingLabel || hasYearError}\n onClick={handleSave}\n >\n {loading ? \"Saving...\" : \"Save Configuration\"}\n </Button>\n </Stack>\n\n <Dialog open={confirmModeSwitch} onClose={() => setConfirmModeSwitch(false)} maxWidth=\"xs\" fullWidth>\n <DialogTitle>Confirm mode switch</DialogTitle>\n <DialogContent>\n <Typography variant=\"body2\">\n Target data already exists. Switching direction or depth changes how it is entered\n and aggregated going forward, but existing rows are not converted or cleared - they\n may no longer add up correctly until re-entered under the new mode. Continue anyway?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button color=\"inherit\" onClick={() => setConfirmModeSwitch(false)}>\n Cancel\n </Button>\n <Button variant=\"contained\" color=\"warning\" disableElevation onClick={confirmModeSwitchAndSave}>\n Switch Anyway\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n}\n\nIndicatorConfigPanel.propTypes = {\n onSaved: PropTypes.func,\n};\n","import * as XLSX from \"xlsx-js-style\";\n\nconst HEADER_STYLE = {\n font: { bold: true, color: { rgb: \"FFFFFF\" } },\n fill: { fgColor: { rgb: \"243A50\" } },\n alignment: { horizontal: \"center\", vertical: \"center\", wrapText: true },\n};\n\nconst INFO_KEY_STYLE = { font: { bold: true } };\nconst TOTAL_STYLE = { font: { bold: true } };\n\n\nfunction buildGrid({\n indicators,\n locationHierarchy,\n parentValues,\n childRows,\n totals,\n differences,\n childEntityType,\n isBottomUp,\n}) {\n const nameColumn = childEntityType === \"FACILITY\" ? \"Facility Name\" : \"Location Name\";\n const columns = [\"#\", nameColumn, ...indicators.map((indicator) => indicator.label)];\n\n const rows = [\n [\n \"\",\n locationHierarchy || \"Selected location\",\n ...indicators.map((indicator) => parentValues?.[indicator.code] ?? 0),\n ],\n ...childRows.map((row, index) => [\n index + 1,\n row.name,\n ...indicators.map((indicator) => row.values?.[indicator.code] ?? 0),\n ]),\n [\"\", \"Total\", ...indicators.map((indicator) => totals[indicator.code] ?? 0)],\n ];\n\n // A running total is the point of BOTTOM_UP, not a target to match, so the difference row -\n // meaningful only for TOP_DOWN's distribute-and-match workflow - is left out here too.\n if (!isBottomUp) {\n rows.push([\"\", \"Difference\", ...indicators.map((indicator) => differences[indicator.code] ?? 0)]);\n }\n\n return { columns, rows };\n}\n\nexport function downloadTargetsExcel({\n indicators,\n locationHierarchy,\n financialYear,\n parentValues,\n childRows,\n totals,\n differences,\n childEntityType,\n isBottomUp,\n}) {\n const { columns, rows } = buildGrid({\n indicators,\n locationHierarchy,\n parentValues,\n childRows,\n totals,\n differences,\n childEntityType,\n isBottomUp,\n });\n\n const aoa = [];\n aoa.push([\"Location:\", locationHierarchy || \"-\"]);\n aoa.push([\"Financial Year:\", financialYear || \"-\"]);\n aoa.push([]);\n\n const headerRowIndex = aoa.length;\n aoa.push(columns);\n rows.forEach((row) => aoa.push(row));\n\n const ws = XLSX.utils.aoa_to_sheet(aoa);\n const range = XLSX.utils.decode_range(ws[\"!ref\"]);\n // buildGrid appends a Total row always, and a Difference row only outside BOTTOM_UP.\n const footerRowCount = isBottomUp ? 1 : 2;\n const totalRowIndex = range.e.r - (footerRowCount - 1);\n\n for (let R = range.s.r; R <= range.e.r; R++) {\n for (let C = range.s.c; C <= range.e.c; C++) {\n const cell = ws[XLSX.utils.encode_cell({ r: R, c: C })];\n if (!cell) continue;\n if (R === headerRowIndex) cell.s = HEADER_STYLE;\n else if (R >= totalRowIndex) cell.s = TOTAL_STYLE;\n else if (R < headerRowIndex - 1 && C === 0) cell.s = INFO_KEY_STYLE;\n }\n }\n\n ws[\"!cols\"] = columns.map((_, index) => ({ wch: index === 1 ? 28 : 18 }));\n\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, \"Sheet1\");\n const stamp = new Date().toISOString().slice(0, 10);\n XLSX.writeFile(wb, `Location Wise Expected Target(${stamp}).xlsx`);\n}\n\nconst escapeHtml = (value) =>\n String(value ?? \"\").replace(\n /[&<>\"']/g,\n (char) =>\n ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" })[char]\n );\n\nexport function printTargets({\n indicators,\n locationHierarchy,\n financialYear,\n parentValues,\n childRows,\n totals,\n differences,\n generatedBy,\n childEntityType,\n isBottomUp,\n}) {\n const { columns, rows } = buildGrid({\n indicators,\n locationHierarchy,\n parentValues,\n childRows,\n totals,\n differences,\n childEntityType,\n isBottomUp,\n });\n\n const footerRowCount = isBottomUp ? 1 : 2;\n const headHtml = columns.map((column) => `<th>${escapeHtml(column)}</th>`).join(\"\");\n const bodyHtml = rows\n .map((row, index) => {\n const isFooter = index >= rows.length - footerRowCount;\n const cells = row.map((cell) => `<td>${escapeHtml(cell)}</td>`).join(\"\");\n return `<tr class=\"${isFooter ? \"footer-row\" : \"\"}\">${cells}</tr>`;\n })\n .join(\"\");\n\n const footer = `Generated by ${escapeHtml(generatedBy || \"-\")} at ${escapeHtml(\n new Date().toLocaleString()\n )}`;\n\n const printWindow = window.open(\"\", \"_blank\");\n if (!printWindow) return;\n\n printWindow.document.write(`\n <html>\n <head>\n <title>Location Wise Expected Target</title>\n <style>\n @page { size: landscape; margin: 10mm; }\n body { font-family: Arial, Helvetica, sans-serif; color: #1c2733; margin: 0; }\n h2 { text-align: center; margin: 0 0 6px; font-size: 16px; }\n .meta { text-align: center; font-size: 12px; margin-bottom: 12px; }\n table { width: 100%; border-collapse: collapse; font-size: 11px; }\n th, td { border: 1px solid #9aa5b1; padding: 4px 6px; text-align: left; }\n th { background: #e6eef5; font-weight: bold; }\n .footer-row td { font-weight: bold; background: #f2f5f8; }\n .print-footer { margin-top: 10px; font-size: 10px; color: #5a6877; }\n </style>\n </head>\n <body onload=\"setTimeout(function () { window.print(); window.close(); }, 300);\">\n <h2>Location Wise Expected Target</h2>\n <div class=\"meta\">\n <strong>Location:</strong> ${escapeHtml(locationHierarchy || \"-\")}\n &nbsp;&nbsp;<strong>Financial Year:</strong> ${escapeHtml(financialYear || \"-\")}\n </div>\n <table><thead><tr>${headHtml}</tr></thead><tbody>${bodyHtml}</tbody></table>\n <div class=\"print-footer\">${footer}</div>\n </body>\n </html>\n `);\n printWindow.document.close();\n}\n","import { lazy, Suspense, useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Button,\n Card,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n Drawer,\n FormControl,\n FormHelperText,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faFileExcel,\n faFilter,\n faFloppyDisk,\n faLock,\n faLockOpen,\n faPrint,\n faSliders,\n faXmark,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { useSelector } from \"react-redux\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n DIRECTION_BOTTOM_UP,\n ENTITY_TYPE_FACILITY,\n ENTITY_TYPE_LOCATION,\n extractDbMessage,\n getChildFacilityTargets,\n getChildLocations,\n getChildLocationsWithLeaf,\n getChildrenTargets,\n getIndicators,\n getLocationFacilities,\n getSettings,\n getTarget,\n saveTargets,\n saveTargetsBottomUp,\n saveTargetsBottomUpFacility,\n unlockTargets,\n} from \"../../services/LocationWiseExpectedTarget\";\nimport { getFinancialYearOptions } from \"./financialYearOptions\";\nimport { LwetGuard, LWET_PERMS, useLwetPermissions } from \"./permissions\";\nimport IndicatorConfigPanel from \"./IndicatorConfigPanel\";\nimport { downloadTargetsExcel, printTargets } from \"./exportTargets\";\n\nconst LocationSelectionComponent = lazy(\n () => import(\"@/views/feature-components/LocationDirective/LocationDirectiveV2\")\n);\n\nconst DRAFT = \"DRAFT\";\nconst LOCKED = \"LOCKED\";\nconst UNLOCKED = \"UNLOCKED\";\n\nconst headerSurface = (theme) =>\n theme.palette.mode === \"dark\" ? theme.palette.grey[900] : theme.palette.grey[100];\n\nconst emptyValues = (indicators) =>\n indicators.reduce((acc, indicator) => ({ ...acc, [indicator.code]: 0 }), {});\n\nconst denseTableSx = {\n \"& .MuiTableCell-root\": {\n border: \"1px solid\",\n borderColor: \"divider\",\n px: 1,\n py: 0.5,\n fontSize: 13,\n lineHeight: 1.35,\n },\n \"& .MuiTableCell-head\": {\n fontWeight: 700,\n backgroundColor: headerSurface,\n whiteSpace: \"normal\",\n },\n};\n\nconst denseInputSx = {\n width: \"100%\",\n \"& .MuiInputBase-input\": { py: 0.5, px: 1, fontSize: 13 },\n};\n\nfunction LocationWiseExpectedTargetContent() {\n const perms = useLwetPermissions();\n const loggedInUser = useSelector((state) => state.Authenticate?.user);\n\n const [selectedLocation, setSelectedLocation] = useState({});\n const [locations, setLocations] = useState([]);\n const [financialYear, setFinancialYear] = useState(\"\");\n const [indicators, setIndicators] = useState([]);\n const [loading, setLoading] = useState(false);\n const [hasSearched, setHasSearched] = useState(false);\n const [locationHierarchy, setLocationHierarchy] = useState(\"\");\n\n const [currentTarget, setCurrentTarget] = useState(null);\n const [childRows, setChildRows] = useState([]);\n const [childEntityType, setChildEntityType] = useState(ENTITY_TYPE_LOCATION);\n const [configOpen, setConfigOpen] = useState(false);\n const [filterOpen, setFilterOpen] = useState(true);\n const [selectedLocationLevel, setSelectedLocationLevel] = useState(null);\n // Only meaningful in BOTTOM_UP mode: whether the selected location itself has no\n // location-children, i.e. it is the entry point rather than a computed total.\n const [selectedLocationIsLeaf, setSelectedLocationIsLeaf] = useState(false);\n const [confirmUnlock, setConfirmUnlock] = useState(null);\n const [yearTouched, setYearTouched] = useState(false);\n const [settings, setSettings] = useState({ pastYears: 2, futureYears: 1, direction: \"TOP_DOWN\", depth: \"LOCATION\" });\n\n const financialYearOptions = useMemo(() => getFinancialYearOptions(settings), [settings]);\n const isBottomUp = settings.direction === DIRECTION_BOTTOM_UP;\n const isFacilityDepth = settings.depth === ENTITY_TYPE_FACILITY;\n // Where the selected location enters its own value directly, rather than being a computed\n // total. In BOTTOM_UP + FACILITY the entry point is always a facility, never a location - so a\n // location's own value is never directly editable in that mode.\n const isEntryPoint = isBottomUp\n ? !isFacilityDepth && selectedLocationIsLeaf\n : selectedLocationLevel === 0;\n\n const activeIndicators = useMemo(\n () => indicators.filter((indicator) => indicator.isActive !== false),\n [indicators]\n );\n\n const loadConfig = async () => {\n try {\n const [loadedIndicators, loadedSettings] = await Promise.all([\n getIndicators(),\n getSettings(),\n ]);\n setIndicators(loadedIndicators);\n setSettings(loadedSettings);\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error loading configuration\"), type: \"error\" });\n }\n };\n\n useEffect(() => {\n loadConfig();\n }, []);\n\n const totals = useMemo(() => {\n const result = {};\n activeIndicators.forEach((indicator) => {\n result[indicator.code] = childRows.reduce(\n (sum, row) => sum + (Number(row.values?.[indicator.code]) || 0),\n 0\n );\n });\n return result;\n }, [childRows, activeIndicators]);\n\n const differences = useMemo(() => {\n const result = {};\n activeIndicators.forEach((indicator) => {\n const parentValue = Number(currentTarget?.values?.[indicator.code]) || 0;\n result[indicator.code] = parentValue - (totals[indicator.code] || 0);\n });\n return result;\n }, [totals, currentTarget, activeIndicators]);\n\n const parentState = currentTarget?.state || DRAFT;\n\n // In BOTTOM_UP, only genuine entry-point rows carry a state of their own - leaf locations under\n // LOCATION depth, or facilities under FACILITY depth. A leaf location shown while still drilling\n // through the hierarchy under FACILITY depth is not an entry point (only its facilities are), so\n // none of these rows count as relevant there - every state-derived check below is scoped to\n // whichever set actually is the entry point.\n const relevantChildRows = useMemo(() => {\n if (!isBottomUp) return childRows;\n if (isFacilityDepth && childEntityType !== ENTITY_TYPE_FACILITY) return [];\n return childRows.filter((row) => row.isLeaf);\n }, [isBottomUp, childRows, isFacilityDepth, childEntityType]);\n\n const childState = useMemo(() => {\n if (relevantChildRows.some((row) => row.state === LOCKED)) return LOCKED;\n if (relevantChildRows.some((row) => row.state === UNLOCKED)) return UNLOCKED;\n return DRAFT;\n }, [relevantChildRows]);\n\n // TOP_DOWN: only the root enters its own value, and children unlock once the parent is locked\n // (the handoff that drives the whole cascade). BOTTOM_UP has no handoff - a location is\n // editable exactly when it is itself a leaf, regardless of what level it sits at.\n const parentEditable =\n perms.canUpdate && isEntryPoint && (parentState === DRAFT || parentState === UNLOCKED);\n const childrenEditable =\n perms.canUpdate &&\n (childState === DRAFT || childState === UNLOCKED) &&\n (isBottomUp || parentState === LOCKED);\n\n const columnFilled = (code) =>\n relevantChildRows.length > 0 &&\n relevantChildRows.every((row) => row.values?.[code] !== null && row.values?.[code] !== undefined);\n const columnMatches = (code) => isBottomUp || differences[code] === 0;\n const allColumnsFilled = activeIndicators.every((indicator) => columnFilled(indicator.code));\n const allDifferencesZero = isBottomUp\n ? true\n : activeIndicators.every((indicator) => differences[indicator.code] === 0);\n const parentFilled = activeIndicators.every((indicator) => {\n const value = currentTarget?.values?.[indicator.code];\n return value !== null && value !== undefined && value !== \"\";\n });\n\n const exportPayload = () => ({\n indicators: activeIndicators,\n locationHierarchy,\n financialYear,\n parentValues: currentTarget?.values,\n childRows,\n totals,\n differences,\n childEntityType,\n isBottomUp,\n });\n\n const handlePrint = () => {\n const name =\n loggedInUser?.fullName ||\n `${loggedInUser?.firstName || \"\"} ${loggedInUser?.lastName || \"\"}`.trim() ||\n loggedInUser?.userName ||\n \"-\";\n printTargets({ ...exportPayload(), generatedBy: name });\n };\n\n const handleSearch = async () => {\n setYearTouched(true);\n const locationId = selectedLocation?.finalSelected?.optionSelected?.id;\n if (!locationId) {\n showToast({ message: \"Please select a location\", type: \"error\" });\n return;\n }\n if (!financialYear) {\n showToast({ message: \"Please select financial year\", type: \"error\" });\n return;\n }\n setLoading(true);\n const pickedLevels = Object.keys(selectedLocation || {}).filter(\n (key) => /^level\\d+$/.test(key) && selectedLocation[key]\n );\n setSelectedLocationLevel(Math.max(pickedLevels.length - 1, 0));\n try {\n let childEntities;\n let childTargets;\n let useFacilities = false;\n let isLeafLocation;\n\n if (isBottomUp) {\n const childLocEntities = await getChildLocationsWithLeaf(locationId);\n isLeafLocation = childLocEntities.length === 0;\n // A leaf location has no location-children of its own; in FACILITY depth its facilities\n // become the entry points shown here instead, with the location's own row computed from\n // their sum. A non-leaf location always shows its child locations, same as LOCATION depth.\n if (isFacilityDepth && isLeafLocation) {\n useFacilities = true;\n childEntities = await getLocationFacilities(locationId);\n childTargets = await getChildFacilityTargets(locationId, financialYear);\n } else {\n childEntities = childLocEntities;\n childTargets = await getChildrenTargets(locationId, financialYear);\n }\n } else {\n const childLocationsRes = await getChildLocations(locationId);\n const childLocationList = childLocationsRes.data || [];\n // A location with no location-children is the bottom of the hierarchy. In FACILITY depth\n // that is where facilities take over as the distributable children; in LOCATION depth it\n // stays a terminal level with nothing further to distribute to.\n isLeafLocation = childLocationList.length === 0;\n useFacilities = isLeafLocation && isFacilityDepth;\n childEntities = useFacilities ? await getLocationFacilities(locationId) : childLocationList;\n childTargets = useFacilities\n ? await getChildFacilityTargets(locationId, financialYear)\n : await getChildrenTargets(locationId, financialYear);\n }\n\n setSelectedLocationIsLeaf(isLeafLocation);\n setChildEntityType(useFacilities ? ENTITY_TYPE_FACILITY : ENTITY_TYPE_LOCATION);\n\n const target = await getTarget(locationId, financialYear);\n setCurrentTarget(\n target || {\n entityId: locationId,\n financialYear,\n values: emptyValues(activeIndicators),\n state: DRAFT,\n noOfTimesUnlocked: 0,\n }\n );\n\n const childTargetsByEntityId = {};\n childTargets.forEach((row) => {\n childTargetsByEntityId[row.entityId] = row;\n });\n\n setChildRows(\n childEntities.map((entity) => {\n const row = childTargetsByEntityId[entity.id];\n return {\n id: entity.id,\n name: entity.name,\n isLeaf: entity.isLeaf !== false,\n values: row?.values || emptyValues(activeIndicators),\n state: row?.state || DRAFT,\n noOfTimesUnlocked: row?.noOfTimesUnlocked || 0,\n };\n })\n );\n\n let hierarchy = \"\";\n for (let level = 1; level <= (selectedLocation?.finalSelected?.level || 0); level++) {\n const node = selectedLocation?.[`level${level}`];\n if (!node) break;\n hierarchy += hierarchy ? ` > ${node.name}` : node.name;\n }\n setLocationHierarchy(hierarchy);\n setHasSearched(true);\n setFilterOpen(false);\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error loading targets\"), type: \"error\" });\n } finally {\n setLoading(false);\n }\n };\n\n const toTargetValue = (raw) => {\n const digitsOnly = String(raw).replace(/[^\\d]/g, \"\");\n if (digitsOnly === \"\") return null;\n return Math.min(Number(digitsOnly), 1000000000);\n };\n\n const updateChildValue = (locationId, code, value) => {\n setChildRows((rows) =>\n rows.map((row) =>\n row.id === locationId\n ? { ...row, values: { ...row.values, [code]: toTargetValue(value) } }\n : row\n )\n );\n };\n\n const updateCurrentTargetValue = (code, value) => {\n setCurrentTarget((target) => ({\n ...target,\n values: { ...target.values, [code]: toTargetValue(value) },\n }));\n };\n\n const saveCurrentTarget = async (state) => {\n if (!parentFilled) {\n showToast({ message: \"Please fill up all the values first\", type: \"error\" });\n return;\n }\n if (!financialYear) {\n showToast({ message: \"Please select financial year\", type: \"error\" });\n return;\n }\n setLoading(true);\n try {\n // A leaf location reached directly (not via its parent's children table) enters its value\n // through this panel, so it must go through the same aggregating save as a leaf child row.\n if (isBottomUp) {\n await saveTargetsBottomUp(\n [{ entityId: currentTarget.entityId, values: currentTarget.values, state }],\n financialYear\n );\n } else {\n await saveTargets([{ ...currentTarget, state }], financialYear);\n }\n showToast({ message: \"Saved successfully\", type: \"success\" });\n await handleSearch();\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error saving\"), type: \"error\" });\n } finally {\n setLoading(false);\n }\n };\n\n const unlockCurrentTarget = async () => {\n setLoading(true);\n try {\n await unlockTargets([currentTarget.entityId], financialYear);\n showToast({ message: \"Data unlocked successfully\", type: \"success\" });\n await handleSearch();\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error unlocking\"), type: \"error\" });\n } finally {\n setLoading(false);\n }\n };\n\n const persistChildRows = async (state, codes) => {\n if (!financialYear || relevantChildRows.length === 0) {\n showToast({ message: \"Nothing to save\", type: \"error\" });\n return;\n }\n setLoading(true);\n try {\n const rows = relevantChildRows.map((row) => ({\n entityId: row.id,\n values: codes.reduce((acc, code) => ({ ...acc, [code]: row.values?.[code] }), {}),\n state,\n }));\n // BOTTOM_UP writes through a dedicated code that also recomputes every ancestor's sum (and,\n // for facilities, their owning leaf location's sum) in the same statement; non-leaf rows\n // are never sent, since they hold no value of their own.\n if (isBottomUp && childEntityType === ENTITY_TYPE_FACILITY) {\n await saveTargetsBottomUpFacility(rows, financialYear);\n } else if (isBottomUp) {\n await saveTargetsBottomUp(rows, financialYear);\n } else {\n await saveTargets(rows, financialYear, childEntityType);\n }\n showToast({ message: \"Records saved successfully\", type: \"success\" });\n await handleSearch();\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error saving\"), type: \"error\" });\n } finally {\n setLoading(false);\n }\n };\n\n const saveColumn = async (code) => {\n if (!columnFilled(code)) {\n showToast({ message: \"Please fill up all the values first\", type: \"error\" });\n return;\n }\n if (!columnMatches(code)) {\n showToast({ message: \"Total should match with the given targets\", type: \"error\" });\n return;\n }\n await persistChildRows(DRAFT, [code]);\n };\n\n const saveAndLockChildRows = async () => {\n if (!allColumnsFilled) {\n showToast({ message: \"Please fill up all the values first\", type: \"error\" });\n return;\n }\n if (!allDifferencesZero) {\n showToast({ message: \"Total should match with the given targets\", type: \"error\" });\n return;\n }\n await persistChildRows(LOCKED, activeIndicators.map((indicator) => indicator.code));\n };\n\n const unlockChildRows = async () => {\n setLoading(true);\n try {\n await unlockTargets(relevantChildRows.map((row) => row.id), financialYear, childEntityType);\n showToast({ message: \"Data unlocked successfully\", type: \"success\" });\n await handleSearch();\n } catch (error) {\n showToast({ message: extractDbMessage(error, \"Error unlocking\"), type: \"error\" });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Card variant=\"elevation\" className=\"mt-6 p-3 flex flex-col shadow-xl\" sx={{ p: 3 }}>\n <Stack\n direction={{ xs: \"column\", sm: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: \"flex-start\", sm: \"center\" }}\n spacing={1.5}\n sx={{ mb: 2 }}\n >\n <Box>\n {hasSearched ? (\n <Stack direction=\"row\" spacing={1} flexWrap=\"wrap\" useFlexGap>\n <Chip size=\"small\" color=\"primary\" variant=\"outlined\" label={locationHierarchy || \"Location\"} />\n <Chip size=\"small\" color=\"primary\" variant=\"outlined\" label={`FY ${financialYear}`} />\n </Stack>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Select a location and financial year to begin\n </Typography>\n )}\n </Box>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {hasSearched && activeIndicators.length > 0 && (\n <>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"inherit\"\n startIcon={<FontAwesomeIcon icon={faPrint} />}\n onClick={handlePrint}\n >\n Print\n </Button>\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<FontAwesomeIcon icon={faFileExcel} />}\n onClick={() => downloadTargetsExcel(exportPayload())}\n sx={{\n color: \"success.main\",\n borderColor: \"success.main\",\n \"&:hover\": {\n borderColor: \"success.dark\",\n bgcolor: (theme) => alpha(theme.palette.success.main, 0.08),\n },\n }}\n >\n Excel\n </Button>\n </>\n )}\n {perms.canConfigureIndicators && (\n <Button variant=\"outlined\" startIcon={<FontAwesomeIcon icon={faSliders} />} onClick={() => setConfigOpen(true)}>\n Configure\n </Button>\n )}\n </Stack>\n </Stack>\n\n {!filterOpen && (\n <Box\n onClick={() => setFilterOpen(true)}\n sx={{\n position: \"fixed\",\n right: 0,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n zIndex: (theme) => theme.zIndex.drawer - 1,\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.75,\n px: 1,\n py: 2,\n cursor: \"pointer\",\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n borderTopLeftRadius: 8,\n borderBottomLeftRadius: 8,\n boxShadow: 3,\n writingMode: \"vertical-rl\",\n \"&:hover\": { bgcolor: \"primary.dark\" },\n }}\n >\n <FontAwesomeIcon icon={faFilter} size=\"sm\" style={{ writingMode: \"horizontal-tb\" }} />\n <Typography variant=\"body2\" fontWeight={700} sx={{ letterSpacing: 0.5 }}>\n Select Location\n </Typography>\n </Box>\n )}\n\n <Drawer\n anchor=\"right\"\n open={filterOpen}\n onClose={() => setFilterOpen(false)}\n PaperProps={{\n sx: {\n width: { xs: \"100%\", sm: 420 },\n p: 2.5,\n display: \"flex\",\n flexDirection: \"column\",\n },\n }}\n >\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" sx={{ mb: 1 }}>\n <Typography variant=\"h6\">Select Location</Typography>\n <IconButton size=\"small\" onClick={() => setFilterOpen(false)}>\n <FontAwesomeIcon icon={faXmark} size=\"sm\" />\n </IconButton>\n </Stack>\n <Divider sx={{ mb: 2 }} />\n\n <Box sx={{ flex: 1, overflowY: \"auto\" }}>\n <Suspense fallback={null}>\n <LocationSelectionComponent\n selectedLocation={selectedLocation}\n setSelectedLocation={setSelectedLocation}\n locations={locations}\n setLocations={setLocations}\n fetchAccordingToUserAoi={true}\n fetchUptoLevel={5}\n requiredUptoLevel={1}\n />\n </Suspense>\n\n <FormControl fullWidth required error={yearTouched && !financialYear} sx={{ mt: 2 }}>\n <InputLabel id=\"lwet-financial-year-label\">Select Financial Year</InputLabel>\n <Select\n labelId=\"lwet-financial-year-label\"\n label=\"Select Financial Year\"\n value={financialYear}\n onChange={(e) => setFinancialYear(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>--Select--</em>\n </MenuItem>\n {financialYearOptions.map((year) => (\n <MenuItem key={year} value={year}>\n {year}\n </MenuItem>\n ))}\n </Select>\n {yearTouched && !financialYear && (\n <FormHelperText>Please select financial year</FormHelperText>\n )}\n </FormControl>\n </Box>\n\n <Divider sx={{ my: 2 }} />\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Button variant=\"outlined\" color=\"inherit\" onClick={() => setFilterOpen(false)}>\n Close\n </Button>\n <Button variant=\"contained\" disabled={loading} onClick={handleSearch}>\n {loading ? \"Searching...\" : \"Search\"}\n </Button>\n </Stack>\n </Drawer>\n\n {!hasSearched && (\n <Paper\n variant=\"outlined\"\n sx={{ p: 5, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\" }}\n >\n <Typography color=\"text.secondary\">\n Pick a location and financial year to load targets.\n </Typography>\n </Paper>\n )}\n\n {hasSearched && indicators.length === 0 && (\n <Paper\n variant=\"outlined\"\n sx={{ p: 4, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\" }}\n >\n <Typography color=\"text.secondary\">\n No indicators are configured for this implementation yet.\n {perms.canConfigureIndicators\n ? \" Use “Configure” above to add some.\"\n : \" Ask an admin to configure them.\"}\n </Typography>\n </Paper>\n )}\n\n {hasSearched && currentTarget && activeIndicators.length > 0 && (\n <Paper variant=\"outlined\" sx={{ borderRadius: 2, mb: 3, overflow: \"hidden\" }}>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n sx={{ px: 1.5, py: 1, bgcolor: headerSurface }}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Typography variant=\"subtitle2\" fontWeight={700}>\n Target for {locationHierarchy || \"selected location\"}\n </Typography>\n </Stack>\n </Stack>\n <Divider />\n <TableContainer>\n <Table size=\"small\" sx={denseTableSx}>\n <TableHead>\n <TableRow>\n <TableCell sx={{ width: 56 }}>#</TableCell>\n <TableCell sx={{ minWidth: 180 }}>Location Name</TableCell>\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code}>{indicator.label}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell />\n <TableCell>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n <span>{locationHierarchy || \"Selected location\"}</span>\n {parentState === LOCKED && (\n <Box component=\"span\" sx={{ color: \"error.main\", display: \"inline-flex\" }}>\n <FontAwesomeIcon icon={faLock} size=\"sm\" />\n </Box>\n )}\n </Stack>\n </TableCell>\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code}>\n <TextField\n type=\"text\"\n inputMode=\"numeric\"\n size=\"small\"\n sx={denseInputSx}\n disabled={!parentEditable}\n value={currentTarget.values?.[indicator.code] ?? \"\"}\n onChange={(e) => updateCurrentTargetValue(indicator.code, e.target.value)}\n />\n </TableCell>\n ))}\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n\n {!isEntryPoint && !isBottomUp && (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: \"block\", px: 1.5, py: 1 }}>\n This location&apos;s own target is set when its parent distributes targets, so it\n can&apos;t be entered here. Only the top level of the hierarchy enters its target\n directly.\n </Typography>\n )}\n\n {!isEntryPoint && isBottomUp && (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: \"block\", px: 1.5, py: 1 }}>\n This value is calculated automatically as the sum of its{\" \"}\n {childEntityType === ENTITY_TYPE_FACILITY ? \"facilities\" : \"child locations\"} - it\n updates whenever the {childEntityType === ENTITY_TYPE_FACILITY ? \"facilities\" : \"locations\"}{\" \"}\n below it are saved.\n </Typography>\n )}\n\n {isEntryPoint && (\n <Stack direction=\"row\" spacing={1} justifyContent=\"center\" sx={{ py: 1.5 }}>\n {parentState === DRAFT && perms.canUpdate && (\n <Button size=\"small\" variant=\"outlined\" onClick={() => saveCurrentTarget(DRAFT)}>\n Save\n </Button>\n )}\n {perms.canUpdate && (parentState === DRAFT || parentState === UNLOCKED) && (\n <Button\n size=\"small\"\n variant=\"contained\"\n disableElevation\n startIcon={<FontAwesomeIcon icon={faLock} style={{ fontSize: 16 }} />}\n onClick={() => saveCurrentTarget(LOCKED)}\n >\n Save &amp; Lock\n </Button>\n )}\n {perms.canUpdate && perms.canUnlock && parentState === LOCKED && (\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"warning\"\n startIcon={<FontAwesomeIcon icon={faLockOpen} style={{ fontSize: 16 }} />}\n onClick={() => setConfirmUnlock(\"parent\")}\n >\n Unlock\n </Button>\n )}\n </Stack>\n )}\n </Paper>\n )}\n\n {hasSearched &&\n activeIndicators.length > 0 &&\n childRows.length === 0 &&\n (!isBottomUp || !isEntryPoint) && (\n <Paper\n variant=\"outlined\"\n sx={{ p: 3, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\", mt: 2 }}\n >\n <Typography variant=\"body2\" color=\"text.secondary\">\n {childEntityType === ENTITY_TYPE_FACILITY\n ? isBottomUp\n ? \"This location has no active facilities to enter values for.\"\n : \"This location has no active facilities, so there is nothing to distribute to.\"\n : \"This location has no child locations, so there is nothing to distribute to.\"}\n </Typography>\n </Paper>\n )}\n\n {hasSearched && childRows.length > 0 && activeIndicators.length > 0 && (\n <Paper variant=\"outlined\" sx={{ borderRadius: 2, overflow: \"hidden\" }}>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n sx={{ px: 1.5, py: 1, bgcolor: headerSurface }}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Typography variant=\"subtitle2\" fontWeight={700}>\n Targets to be distributed\n </Typography>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${childRows.length} ${childEntityType === ENTITY_TYPE_FACILITY ? \"facilities\" : \"locations\"}`}\n />\n </Stack>\n {!isBottomUp &&\n parentState !== LOCKED &&\n (isEntryPoint ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n Lock the target above to start distributing it\n </Typography>\n ) : (\n <Typography variant=\"caption\" color=\"warning.main\" sx={{ maxWidth: 520, textAlign: \"right\" }}>\n This location&apos;s own target is {parentState === UNLOCKED ? \"reopened\" : \"still in draft\"},\n so it can&apos;t be distributed yet. Someone at the level above needs to lock it\n (select the parent location and use Save &amp; Lock).\n </Typography>\n ))}\n </Stack>\n <Divider />\n <TableContainer sx={{ maxHeight: 520 }}>\n <Table size=\"small\" stickyHeader sx={denseTableSx}>\n <TableHead>\n <TableRow>\n <TableCell sx={{ fontWeight: 700, width: 56 }}>#</TableCell>\n <TableCell sx={{ fontWeight: 700, minWidth: 180 }}>\n {childEntityType === ENTITY_TYPE_FACILITY ? \"Facility Name\" : \"Location Name\"}\n </TableCell>\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code} sx={{ fontWeight: 700 }}>\n {indicator.label}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {childRows.map((row, index) => {\n // In FACILITY depth a location is never the entry point, even a leaf one - only\n // its facilities are (childEntityType === FACILITY for those rows). A leaf\n // location shown here while still drilling through the location hierarchy must\n // stay computed/read-only just like a non-leaf ancestor.\n const rowIsComputed =\n isBottomUp &&\n childEntityType !== ENTITY_TYPE_FACILITY &&\n (!row.isLeaf || isFacilityDepth);\n return (\n <TableRow key={row.id} hover>\n <TableCell>{index + 1}</TableCell>\n <TableCell>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n <span>{row.name}</span>\n {row.state === LOCKED && (\n <Box component=\"span\" sx={{ color: \"error.main\", display: \"inline-flex\" }}>\n <FontAwesomeIcon icon={faLock} size=\"sm\" />\n </Box>\n )}\n </Stack>\n </TableCell>\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code}>\n <TextField\n type=\"text\"\n inputMode=\"numeric\"\n size=\"small\"\n sx={denseInputSx}\n disabled={rowIsComputed || !childrenEditable || row.state === LOCKED}\n value={row.values?.[indicator.code] ?? \"\"}\n onChange={(e) => updateChildValue(row.id, indicator.code, e.target.value)}\n />\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n <TableRow sx={{ bgcolor: \"action.hover\" }}>\n <TableCell />\n <TableCell sx={{ fontWeight: 700 }}>Total</TableCell>\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code} sx={{ fontWeight: 700 }}>\n {totals[indicator.code]}\n </TableCell>\n ))}\n </TableRow>\n {!isBottomUp && (\n <TableRow sx={{ bgcolor: \"action.hover\" }}>\n <TableCell />\n <TableCell sx={{ fontWeight: 700 }}>Difference</TableCell>\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code}>\n <Chip\n size=\"small\"\n label={differences[indicator.code]}\n color={differences[indicator.code] === 0 ? \"success\" : \"error\"}\n />\n </TableCell>\n ))}\n </TableRow>\n )}\n\n {relevantChildRows.length > 0 && childState === DRAFT && childrenEditable && perms.canUpdate && (\n <TableRow>\n <TableCell />\n <TableCell />\n {activeIndicators.map((indicator) => (\n <TableCell key={indicator.code} align=\"center\">\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<FontAwesomeIcon icon={faFloppyDisk} style={{ fontSize: 14 }} />}\n onClick={() => saveColumn(indicator.code)}\n sx={{\n py: 0.1,\n px: 1,\n fontSize: 11,\n minWidth: 0,\n \"& .MuiButton-startIcon\": { mr: 0.5 },\n }}\n >\n Save\n </Button>\n </TableCell>\n ))}\n </TableRow>\n )}\n\n <TableRow>\n <TableCell align=\"center\" colSpan={activeIndicators.length + 2}>\n <Stack direction=\"row\" spacing={1} justifyContent=\"center\" sx={{ py: 0.5 }}>\n {perms.canUpdate &&\n childrenEditable &&\n relevantChildRows.length > 0 &&\n (childState === DRAFT || childState === UNLOCKED) && (\n <Button\n size=\"small\"\n variant=\"contained\"\n disableElevation\n startIcon={<FontAwesomeIcon icon={faLock} style={{ fontSize: 16 }} />}\n onClick={saveAndLockChildRows}\n >\n Save &amp; Lock\n </Button>\n )}\n {perms.canUpdate && perms.canUnlock && childState === LOCKED && (\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"warning\"\n startIcon={<FontAwesomeIcon icon={faLockOpen} style={{ fontSize: 16 }} />}\n onClick={() => setConfirmUnlock(\"children\")}\n >\n Unlock\n </Button>\n )}\n </Stack>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n )}\n\n <Dialog open={Boolean(confirmUnlock)} onClose={() => setConfirmUnlock(null)} maxWidth=\"xs\" fullWidth>\n <DialogTitle>Confirm</DialogTitle>\n <DialogContent>\n <Typography variant=\"body2\">\n Are you sure you want to unlock the data for editing?\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button color=\"inherit\" onClick={() => setConfirmUnlock(null)}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"warning\"\n disableElevation\n onClick={() => {\n const target = confirmUnlock;\n setConfirmUnlock(null);\n if (target === \"parent\") {\n unlockCurrentTarget();\n } else {\n unlockChildRows();\n }\n }}\n >\n Unlock\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog open={configOpen} onClose={() => setConfigOpen(false)} maxWidth=\"md\" fullWidth>\n <DialogTitle sx={{ pb: 1 }}>Configure</DialogTitle>\n <DialogContent dividers>\n <IndicatorConfigPanel\n onSaved={({ indicators: saved, settings: savedSettings }) => {\n setIndicators(saved);\n if (savedSettings) {\n setSettings(savedSettings);\n }\n setConfigOpen(false);\n if (hasSearched) {\n handleSearch();\n }\n }}\n />\n </DialogContent>\n </Dialog>\n </Card>\n );\n}\n\nexport default function LocationWiseExpectedTargetPage() {\n return (\n <LwetGuard perm={LWET_PERMS.VIEW}>\n <LocationWiseExpectedTargetContent />\n </LwetGuard>\n );\n}\n"],"names":["ENTITY_TYPE_LOCATION","ENTITY_TYPE_FACILITY","DIRECTION_TOP_DOWN","DIRECTION_BOTTOM_UP","firstRow","response","_b","_a","extractDbMessage","error","fallback","raw","_d","_c","match","parseJsonColumn","value","getIndicators","execute","a","b","saveIndicators","indicators","DEFAULT_SETTINGS","getSettings","stored","saveSettings","settings","hasExistingTargets","toTargetRow","row","getTarget","entityId","financialYear","entityType","getChildrenTargets","saveTargets","rows","unlockTargets","entityIds","getChildLocations","locationId","api","getLocationFacilities","getChildFacilityTargets","getChildLocationsWithLeaf","saveTargetsBottomUp","saveTargetsBottomUpFacility","getCurrentFinancialYearStart","today","getFinancialYearOptions","pastYears","futureYears","current","options","start","LWET_MENU_KEY","LWET_PERMS","useLwetPermissions","linearMenuItems","useSelector","state","useMemo","node","grants","grantSet","has","permId","LwetGuard","perm","children","perms","navigate","useNavigate","jsx","Box","Alert","FontAwesomeIcon","faLock","jsxs","Stack","Typography","Button","LinearProgress","PropTypes","nextLocalKey","SortableIndicatorRow","position","onChange","onRemove","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","Paper","CSS","Tooltip","faGripVertical","TextField","e","Switch","IconButton","faTrashCan","IndicatorConfigPanel","onSaved","setRows","useState","loading","setLoading","fetching","setFetching","setPastYears","setFutureYears","restSettings","setRestSettings","originalMode","setOriginalMode","confirmModeSwitch","setConfirmModeSwitch","rowErrors","counts","code","errors","hasRowErrors","missingLabel","yearCountError","parsed","pastYearsError","futureYearsError","hasYearError","yearPreview","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","useEffect","loadedIndicators","loadedSettings","indicator","showToast","updateRow","key","field","addRow","removeRow","handleDragEnd","active","over","oldIndex","newIndex","arrayMove","modeChanged","performSave","payload","index","savedIndicators","savedSettings","handleSave","existingData","confirmModeSwitchAndSave","CircularProgress","DndContext","closestCenter","restrictToVerticalAxis","restrictToParentElement","SortableContext","verticalListSortingStrategy","faPlus","Divider","FormControl","InputLabel","Select","MenuItem","Dialog","DialogTitle","DialogContent","DialogActions","HEADER_STYLE","INFO_KEY_STYLE","TOTAL_STYLE","buildGrid","locationHierarchy","parentValues","childRows","totals","differences","childEntityType","isBottomUp","columns","downloadTargetsExcel","aoa","headerRowIndex","ws","XLSX.utils","range","footerRowCount","totalRowIndex","C","cell","_","wb","stamp","XLSX.writeFile","escapeHtml","char","printTargets","generatedBy","headHtml","column","bodyHtml","isFooter","cells","footer","printWindow","LocationSelectionComponent","lazy","DRAFT","LOCKED","UNLOCKED","headerSurface","theme","emptyValues","acc","denseTableSx","denseInputSx","LocationWiseExpectedTargetContent","loggedInUser","selectedLocation","setSelectedLocation","locations","setLocations","setFinancialYear","setIndicators","hasSearched","setHasSearched","setLocationHierarchy","currentTarget","setCurrentTarget","setChildRows","setChildEntityType","configOpen","setConfigOpen","filterOpen","setFilterOpen","selectedLocationLevel","setSelectedLocationLevel","selectedLocationIsLeaf","setSelectedLocationIsLeaf","confirmUnlock","setConfirmUnlock","yearTouched","setYearTouched","setSettings","financialYearOptions","isFacilityDepth","isEntryPoint","activeIndicators","loadConfig","result","sum","parentValue","parentState","relevantChildRows","childState","parentEditable","childrenEditable","columnFilled","columnMatches","allColumnsFilled","allDifferencesZero","parentFilled","exportPayload","handlePrint","name","handleSearch","pickedLevels","childEntities","childTargets","useFacilities","isLeafLocation","childLocEntities","childLocationList","target","childTargetsByEntityId","entity","hierarchy","level","toTargetValue","digitsOnly","updateChildValue","updateCurrentTargetValue","saveCurrentTarget","unlockCurrentTarget","persistChildRows","codes","saveColumn","saveAndLockChildRows","unlockChildRows","Card","Chip","Fragment","faPrint","faFileExcel","alpha","faSliders","faFilter","Drawer","faXmark","Suspense","year","FormHelperText","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","faLockOpen","rowIsComputed","faFloppyDisk","saved","LocationWiseExpectedTargetPage"],"mappings":"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"}