beca-ui 2.1.1-beta.15 → 2.1.1-beta.16

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 (322) hide show
  1. package/dist/ConvertVietnameseNumber.js +136 -0
  2. package/dist/DynamicWorkflowScript.js +1141 -0
  3. package/dist/assets/locales/en.json.d.ts +34 -0
  4. package/dist/assets/locales/vi.json.d.ts +34 -0
  5. package/dist/beca-ui.js +151430 -0
  6. package/dist/components/AIChat/AIChat.d.ts +11 -0
  7. package/dist/components/AIChat/AIChat.types.d.ts +21 -0
  8. package/dist/components/AIChat/index.d.ts +2 -0
  9. package/dist/components/Alert/Alert.d.ts +2 -0
  10. package/dist/components/Alert/Alert.types.d.ts +3 -0
  11. package/dist/components/Alert/index.d.ts +2 -0
  12. package/dist/components/Anchor/Anchor.d.ts +4 -0
  13. package/dist/components/Anchor/Anchor.types.d.ts +2 -0
  14. package/dist/components/Anchor/index.d.ts +2 -0
  15. package/dist/components/App/App.d.ts +2 -0
  16. package/dist/components/App/App.types.d.ts +3 -0
  17. package/dist/components/App/index.d.ts +3 -0
  18. package/dist/components/ApplicationsCard/ApplicationsCard.d.ts +3 -0
  19. package/dist/components/ApplicationsCard/ApplicationsCard.types.d.ts +27 -0
  20. package/dist/components/ApplicationsCard/index.d.ts +2 -0
  21. package/dist/components/AudioPlayer/AudioPlayer.d.ts +4 -0
  22. package/dist/components/AudioPlayer/AudioPlayer.types.d.ts +10 -0
  23. package/dist/components/AudioPlayer/index.d.ts +3 -0
  24. package/dist/components/AutoComplete/AutoComplete.d.ts +2 -0
  25. package/dist/components/AutoComplete/AutoComplete.types.d.ts +3 -0
  26. package/dist/components/AutoComplete/index.d.ts +3 -0
  27. package/dist/components/Avatar/Avatar.d.ts +6 -0
  28. package/dist/components/Avatar/Avatar.types.d.ts +6 -0
  29. package/dist/components/Avatar/index.d.ts +4 -0
  30. package/dist/components/Badge/Badge.d.ts +4 -0
  31. package/dist/components/Badge/Badge.types.d.ts +3 -0
  32. package/dist/components/Badge/index.d.ts +3 -0
  33. package/dist/components/BecaChatBox/BecaChatBox.d.ts +24 -0
  34. package/dist/components/BecaChatBox/Composer.d.ts +20 -0
  35. package/dist/components/BecaChatBox/MainChat.d.ts +36 -0
  36. package/dist/components/BecaChatBox/MessageBubble.d.ts +27 -0
  37. package/dist/components/BecaChatBox/Sidebar.d.ts +11 -0
  38. package/dist/components/BecaChatBox/index.d.ts +1 -0
  39. package/dist/components/BecaChatBox/types.d.ts +26 -0
  40. package/dist/components/BecaChatBox/utils.d.ts +3 -0
  41. package/dist/components/BecaColorPicker/BecaColorPicker.d.ts +2 -0
  42. package/dist/components/BecaColorPicker/BecaColorPicker.types.d.ts +2 -0
  43. package/dist/components/BecaColorPicker/index.d.ts +3 -0
  44. package/dist/components/BodyCard/BodyCard.d.ts +3 -0
  45. package/dist/components/BodyCard/BodyCard.types.d.ts +20 -0
  46. package/dist/components/BodyCard/index.d.ts +3 -0
  47. package/dist/components/Breadcrumb/Breadcrumb.d.ts +6 -0
  48. package/dist/components/Breadcrumb/Breadcrumb.types.d.ts +5 -0
  49. package/dist/components/Breadcrumb/index.d.ts +3 -0
  50. package/dist/components/Button/Button.d.ts +2 -0
  51. package/dist/components/Button/Button.types.d.ts +18 -0
  52. package/dist/components/Button/index.d.ts +2 -0
  53. package/dist/components/Calendar/Calendar.d.ts +3 -0
  54. package/dist/components/Calendar/Calendar.types.d.ts +3 -0
  55. package/dist/components/Calendar/index.d.ts +3 -0
  56. package/dist/components/Card/Card.d.ts +6 -0
  57. package/dist/components/Card/Card.types.d.ts +6 -0
  58. package/dist/components/Card/index.d.ts +2 -0
  59. package/dist/components/Carousel/Carousel.d.ts +2 -0
  60. package/dist/components/Carousel/Carousel.types.d.ts +3 -0
  61. package/dist/components/Carousel/index.d.ts +3 -0
  62. package/dist/components/Checkbox/Checkbox.d.ts +6 -0
  63. package/dist/components/Checkbox/Checkbox.types.d.ts +11 -0
  64. package/dist/components/Checkbox/index.d.ts +2 -0
  65. package/dist/components/Col/Col.d.ts +3 -0
  66. package/dist/components/Col/Col.types.d.ts +3 -0
  67. package/dist/components/Col/index.d.ts +3 -0
  68. package/dist/components/Collapse/Collapse.d.ts +6 -0
  69. package/dist/components/Collapse/Collapse.types.d.ts +5 -0
  70. package/dist/components/Collapse/index.d.ts +3 -0
  71. package/dist/components/ColorPicker/ColorPicker.d.ts +4 -0
  72. package/dist/components/ColorPicker/ColorPicker.types.d.ts +3 -0
  73. package/dist/components/ColorPicker/index.d.ts +3 -0
  74. package/dist/components/CommonTypes.d.ts +2 -0
  75. package/dist/components/ConfigProvider/ConfigProvider.d.ts +4 -0
  76. package/dist/components/ConfigProvider/ConfigProvider.types.d.ts +5 -0
  77. package/dist/components/ConfigProvider/index.d.ts +3 -0
  78. package/dist/components/Content/Content.d.ts +3 -0
  79. package/dist/components/Content/Content.types.d.ts +4 -0
  80. package/dist/components/Content/index.d.ts +3 -0
  81. package/dist/components/DatePicker/DatePicker.d.ts +7 -0
  82. package/dist/components/DatePicker/DatePicker.types.d.ts +9 -0
  83. package/dist/components/DatePicker/index.d.ts +3 -0
  84. package/dist/components/Descriptions/Descriptions.d.ts +6 -0
  85. package/dist/components/Descriptions/Descriptions.types.d.ts +6 -0
  86. package/dist/components/Descriptions/index.d.ts +3 -0
  87. package/dist/components/Divider/Divider.d.ts +4 -0
  88. package/dist/components/Divider/Divider.types.d.ts +3 -0
  89. package/dist/components/Divider/index.d.ts +3 -0
  90. package/dist/components/Drawer/Drawer.d.ts +4 -0
  91. package/dist/components/Drawer/Drawer.types.d.ts +3 -0
  92. package/dist/components/Drawer/index.d.ts +3 -0
  93. package/dist/components/Dropdown/Dropdown.d.ts +3 -0
  94. package/dist/components/Dropdown/Dropdown.types.d.ts +5 -0
  95. package/dist/components/Dropdown/index.d.ts +3 -0
  96. package/dist/components/Empty/Empty.d.ts +2 -0
  97. package/dist/components/Empty/Empty.types.d.ts +3 -0
  98. package/dist/components/Empty/index.d.ts +3 -0
  99. package/dist/components/ErrorPage/ErrorPage.d.ts +3 -0
  100. package/dist/components/ErrorPage/ErrorPage.types.d.ts +13 -0
  101. package/dist/components/ErrorPage/index.d.ts +3 -0
  102. package/dist/components/Flex/Flex.d.ts +4 -0
  103. package/dist/components/Flex/Flex.types.d.ts +3 -0
  104. package/dist/components/Flex/index.d.ts +3 -0
  105. package/dist/components/FloatButton/FloatButton.d.ts +2 -0
  106. package/dist/components/FloatButton/FloatButton.types.d.ts +3 -0
  107. package/dist/components/FloatButton/index.d.ts +3 -0
  108. package/dist/components/Form/Form.d.ts +15 -0
  109. package/dist/components/Form/Form.types.d.ts +5 -0
  110. package/dist/components/Form/index.d.ts +2 -0
  111. package/dist/components/Grid/index.d.ts +2 -0
  112. package/dist/components/Icons/Icons.d.ts +19 -0
  113. package/dist/components/Icons/index.d.ts +1 -0
  114. package/dist/components/Image/Image.d.ts +6 -0
  115. package/dist/components/Image/Image.types.d.ts +6 -0
  116. package/dist/components/Image/index.d.ts +3 -0
  117. package/dist/components/ImgCrop/ImgCrop.d.ts +4 -0
  118. package/dist/components/ImgCrop/index.d.ts +1 -0
  119. package/dist/components/Input/Input.d.ts +9 -0
  120. package/dist/components/Input/Input.types.d.ts +17 -0
  121. package/dist/components/Input/index.d.ts +3 -0
  122. package/dist/components/InputNumber/InputNumber.d.ts +3 -0
  123. package/dist/components/InputNumber/InputNumber.types.d.ts +3 -0
  124. package/dist/components/InputNumber/index.d.ts +3 -0
  125. package/dist/components/Layout/Layout.d.ts +2 -0
  126. package/dist/components/Layout/Layout.types.d.ts +3 -0
  127. package/dist/components/Layout/index.d.ts +3 -0
  128. package/dist/components/LazyLoadImage/LazyLoadImage.d.ts +3 -0
  129. package/dist/components/LazyLoadImage/LazyLoadImage.types.d.ts +3 -0
  130. package/dist/components/LazyLoadImage/index.d.ts +1 -0
  131. package/dist/components/List/List.d.ts +10 -0
  132. package/dist/components/List/List.types.d.ts +8 -0
  133. package/dist/components/List/index.d.ts +3 -0
  134. package/dist/components/MainLayout/AppMenu/AppMenu.d.ts +13 -0
  135. package/dist/components/MainLayout/AppMenu/index.d.ts +1 -0
  136. package/dist/components/MainLayout/Content/Content.d.ts +3 -0
  137. package/dist/components/MainLayout/Content/Content.types.d.ts +3 -0
  138. package/dist/components/MainLayout/Content/index.d.ts +2 -0
  139. package/dist/components/MainLayout/Header/Header.d.ts +3 -0
  140. package/dist/components/MainLayout/Header/Header.types.d.ts +90 -0
  141. package/dist/components/MainLayout/Header/Notification.d.ts +11 -0
  142. package/dist/components/MainLayout/Header/index.d.ts +2 -0
  143. package/dist/components/MainLayout/MainLayout.d.ts +14 -0
  144. package/dist/components/MainLayout/MainLayout.types.d.ts +97 -0
  145. package/dist/components/MainLayout/SideBarMenu/SideBarMenu.d.ts +10 -0
  146. package/dist/components/MainLayout/SideBarMenu/SideBarMenu.types.d.ts +27 -0
  147. package/dist/components/MainLayout/SideBarMenu/index.d.ts +2 -0
  148. package/dist/components/MainLayout/index.d.ts +4 -0
  149. package/dist/components/Mentions/Mentions.d.ts +2 -0
  150. package/dist/components/Mentions/Mentions.types.d.ts +2 -0
  151. package/dist/components/Mentions/index.d.ts +2 -0
  152. package/dist/components/Menu/Menu.d.ts +2 -0
  153. package/dist/components/Menu/Menu.types.d.ts +8 -0
  154. package/dist/components/Menu/index.d.ts +2 -0
  155. package/dist/components/Message/Message.d.ts +2 -0
  156. package/dist/components/Message/Message.types.d.ts +0 -0
  157. package/dist/components/Message/index.d.ts +1 -0
  158. package/dist/components/Modal/Modal.d.ts +13 -0
  159. package/dist/components/Modal/Modal.types.d.ts +19 -0
  160. package/dist/components/Modal/index.d.ts +3 -0
  161. package/dist/components/Notification/Notification.d.ts +2 -0
  162. package/dist/components/Notification/index.d.ts +1 -0
  163. package/dist/components/Pagination/Pagination.d.ts +4 -0
  164. package/dist/components/Pagination/Pagination.types.d.ts +3 -0
  165. package/dist/components/Pagination/index.d.ts +3 -0
  166. package/dist/components/Popconfirm/Popconfirm.d.ts +4 -0
  167. package/dist/components/Popconfirm/Popconfirm.types.d.ts +8 -0
  168. package/dist/components/Popconfirm/index.d.ts +3 -0
  169. package/dist/components/Popover/Popover.d.ts +3 -0
  170. package/dist/components/Popover/Popover.types.d.ts +5 -0
  171. package/dist/components/Popover/index.d.ts +3 -0
  172. package/dist/components/Progress/Progress.d.ts +2 -0
  173. package/dist/components/Progress/Progress.types.d.ts +3 -0
  174. package/dist/components/Progress/index.d.ts +3 -0
  175. package/dist/components/QRCode/QRCode.d.ts +4 -0
  176. package/dist/components/QRCode/QRCode.types.d.ts +3 -0
  177. package/dist/components/QRCode/index.d.ts +3 -0
  178. package/dist/components/Radio/Radio.d.ts +6 -0
  179. package/dist/components/Radio/Radio.types.d.ts +5 -0
  180. package/dist/components/Radio/index.d.ts +3 -0
  181. package/dist/components/Rate/Rate.d.ts +4 -0
  182. package/dist/components/Rate/Rate.types.d.ts +3 -0
  183. package/dist/components/Rate/index.d.ts +3 -0
  184. package/dist/components/Row/Row.d.ts +3 -0
  185. package/dist/components/Row/Row.types.d.ts +4 -0
  186. package/dist/components/Row/index.d.ts +3 -0
  187. package/dist/components/ScrollView/ScrollView.d.ts +4 -0
  188. package/dist/components/ScrollView/ScrollView.types.d.ts +4 -0
  189. package/dist/components/ScrollView/index.d.ts +3 -0
  190. package/dist/components/Segmented/Segmented.d.ts +4 -0
  191. package/dist/components/Segmented/Segmented.types.d.ts +3 -0
  192. package/dist/components/Segmented/index.d.ts +3 -0
  193. package/dist/components/Select/Select.d.ts +7 -0
  194. package/dist/components/Select/Select.types.d.ts +19 -0
  195. package/dist/components/Select/index.d.ts +3 -0
  196. package/dist/components/SelectField/SelectField.d.ts +3 -0
  197. package/dist/components/SelectField/SelectField.types.d.ts +10 -0
  198. package/dist/components/SelectField/index.d.ts +3 -0
  199. package/dist/components/Skeleton/Skeleton.d.ts +2 -0
  200. package/dist/components/Skeleton/Skeleton.types.d.ts +3 -0
  201. package/dist/components/Skeleton/index.d.ts +3 -0
  202. package/dist/components/Slider/Slider.d.ts +4 -0
  203. package/dist/components/Slider/Slider.types.d.ts +5 -0
  204. package/dist/components/Slider/index.d.ts +3 -0
  205. package/dist/components/Space/Space.d.ts +2 -0
  206. package/dist/components/Space/Space.types.d.ts +3 -0
  207. package/dist/components/Space/index.d.ts +2 -0
  208. package/dist/components/Spin/Spin.d.ts +3 -0
  209. package/dist/components/Spin/Spin.types.d.ts +4 -0
  210. package/dist/components/Spin/index.d.ts +3 -0
  211. package/dist/components/Statistic/Statistic.d.ts +4 -0
  212. package/dist/components/Statistic/Statistic.types.d.ts +3 -0
  213. package/dist/components/Statistic/index.d.ts +3 -0
  214. package/dist/components/Steps/Steps.d.ts +2 -0
  215. package/dist/components/Steps/Steps.types.d.ts +5 -0
  216. package/dist/components/Steps/index.d.ts +3 -0
  217. package/dist/components/Switch/Switch.d.ts +4 -0
  218. package/dist/components/Switch/Switch.types.d.ts +3 -0
  219. package/dist/components/Switch/index.d.ts +3 -0
  220. package/dist/components/Table/ResizeableTitle.d.ts +2 -0
  221. package/dist/components/Table/Table.d.ts +4 -0
  222. package/dist/components/Table/Table.types.d.ts +33 -0
  223. package/dist/components/Table/index.d.ts +3 -0
  224. package/dist/components/Tabs/Tabs.d.ts +6 -0
  225. package/dist/components/Tabs/Tabs.types.d.ts +9 -0
  226. package/dist/components/Tabs/index.d.ts +3 -0
  227. package/dist/components/Tag/Tag.d.ts +4 -0
  228. package/dist/components/Tag/Tag.types.d.ts +3 -0
  229. package/dist/components/Tag/index.d.ts +3 -0
  230. package/dist/components/TextEditor/BubbleMenu/TextEditorBubbleMenu.d.ts +27 -0
  231. package/dist/components/TextEditor/ColorPicker/ColorPicker.component.d.ts +6 -0
  232. package/dist/components/TextEditor/FontSize/index.d.ts +2 -0
  233. package/dist/components/TextEditor/Image/NodeView.d.ts +14 -0
  234. package/dist/components/TextEditor/Image/icons/index.d.ts +6 -0
  235. package/dist/components/TextEditor/Image/index.d.ts +28 -0
  236. package/dist/components/TextEditor/Image/resizableMediaMenuUtil.d.ts +9 -0
  237. package/dist/components/TextEditor/Image/upload_image.d.ts +7 -0
  238. package/dist/components/TextEditor/MentionList.d.ts +3 -0
  239. package/dist/components/TextEditor/Menu/Menu.component.d.ts +6 -0
  240. package/dist/components/TextEditor/Menu/index.d.ts +1 -0
  241. package/dist/components/TextEditor/SmilieReplacer.d.ts +2 -0
  242. package/dist/components/TextEditor/Suggestions/EditorSuggestionsInlineRender.d.ts +10 -0
  243. package/dist/components/TextEditor/Suggestions/Mention.d.ts +6 -0
  244. package/dist/components/TextEditor/Suggestions/MentionExtension.d.ts +2 -0
  245. package/dist/components/TextEditor/Suggestions/MentionList.d.ts +8 -0
  246. package/dist/components/TextEditor/Suggestions/Suggestions.d.ts +2 -0
  247. package/dist/components/TextEditor/TableTools/TableTools.component.d.ts +11 -0
  248. package/dist/components/TextEditor/TextBubbleMenu/TextBubbleMenu.d.ts +6 -0
  249. package/dist/components/TextEditor/TextEditor.d.ts +11 -0
  250. package/dist/components/TextEditor/TextEditor.types.d.ts +72 -0
  251. package/dist/components/TextEditor/components/ActionButton.d.ts +0 -0
  252. package/dist/components/TextEditor/index.d.ts +3 -0
  253. package/dist/components/TimePicker/TimePicker.d.ts +7 -0
  254. package/dist/components/TimePicker/TimePicker.types.d.ts +5 -0
  255. package/dist/components/TimePicker/index.d.ts +3 -0
  256. package/dist/components/Timeline/Timeline.d.ts +2 -0
  257. package/dist/components/Timeline/Timeline.types.d.ts +6 -0
  258. package/dist/components/Timeline/index.d.ts +3 -0
  259. package/dist/components/Tooltip/Tooltip.d.ts +4 -0
  260. package/dist/components/Tooltip/Tooltip.types.d.ts +2 -0
  261. package/dist/components/Tooltip/index.d.ts +3 -0
  262. package/dist/components/Tour/Tour.d.ts +4 -0
  263. package/dist/components/Tour/Tour.types.d.ts +3 -0
  264. package/dist/components/Tour/index.d.ts +3 -0
  265. package/dist/components/Tree/Tree.d.ts +4 -0
  266. package/dist/components/Tree/Tree.types.d.ts +3 -0
  267. package/dist/components/Tree/index.d.ts +3 -0
  268. package/dist/components/TreeSelect/TreeSelect.d.ts +8 -0
  269. package/dist/components/TreeSelect/TreeSelect.types.d.ts +10 -0
  270. package/dist/components/TreeSelect/index.d.ts +3 -0
  271. package/dist/components/TreeSelectField/TreeSelectField.d.ts +3 -0
  272. package/dist/components/TreeSelectField/TreeSelectField.types.d.ts +7 -0
  273. package/dist/components/TreeSelectField/index.d.ts +2 -0
  274. package/dist/components/Typography/Typography.d.ts +10 -0
  275. package/dist/components/Typography/Typography.types.d.ts +10 -0
  276. package/dist/components/Typography/index.d.ts +3 -0
  277. package/dist/components/Upload/Upload.d.ts +10 -0
  278. package/dist/components/Upload/Upload.types.d.ts +8 -0
  279. package/dist/components/Upload/index.d.ts +3 -0
  280. package/dist/components/VideoPlayer/VideoPlayer.d.ts +4 -0
  281. package/dist/components/VideoPlayer/VideoPlayer.types.d.ts +19 -0
  282. package/dist/components/VideoPlayer/index.d.ts +3 -0
  283. package/dist/components/VirtualList/VirtualList.d.ts +4 -0
  284. package/dist/components/VirtualList/VirtualList.types.d.ts +36 -0
  285. package/dist/components/VirtualList/index.d.ts +3 -0
  286. package/dist/components/index.d.ts +82 -0
  287. package/dist/data/LocalesTexts/EnglishTexts.d.ts +67 -0
  288. package/dist/data/LocalesTexts/VietnameseTexts.d.ts +67 -0
  289. package/dist/data/Permissions.d.ts +5 -0
  290. package/dist/data/SideBarMenu.d.ts +2 -0
  291. package/dist/hooks/ConfigHooks.d.ts +10 -0
  292. package/dist/hooks/DeviceHook.d.ts +6 -0
  293. package/dist/hooks/GlobalHooks.d.ts +1 -0
  294. package/dist/hooks/LocaleHook.d.ts +69 -0
  295. package/dist/hooks/i18n.d.ts +7 -0
  296. package/dist/hooks/index.d.ts +5 -0
  297. package/dist/main.css +1 -0
  298. package/dist/main.d.ts +5 -0
  299. package/dist/models/Core/Result.d.ts +7 -0
  300. package/dist/models/Core/index.d.ts +2 -0
  301. package/dist/models/Layout/MenuModel.d.ts +16 -0
  302. package/dist/models/Layout/SideBarMenuModel.d.ts +5 -0
  303. package/dist/models/Layout/index.d.ts +2 -0
  304. package/dist/models/NotificationModel.d.ts +12 -0
  305. package/dist/models/PersonalProfileModel.d.ts +28 -0
  306. package/dist/models/Session/IServiceUser.d.ts +3 -0
  307. package/dist/models/Session/IWebSessionContext.d.ts +21 -0
  308. package/dist/models/Session/index.d.ts +3 -0
  309. package/dist/models/SupportContactModel.d.ts +8 -0
  310. package/dist/models/index.d.ts +6 -0
  311. package/dist/services/DataService.d.ts +4 -0
  312. package/dist/services/FormatDateTimeService.d.ts +13 -0
  313. package/dist/services/LayoutService.d.ts +11 -0
  314. package/dist/services/NotificationService.d.ts +24 -0
  315. package/dist/services/Service.d.ts +1 -0
  316. package/dist/services/index.d.ts +4 -0
  317. package/dist/styles/components/layout/test.d.ts +0 -0
  318. package/dist/styles/font.d.ts +0 -0
  319. package/dist/theme/index.d.ts +1 -0
  320. package/dist/theme/styles.d.ts +62 -0
  321. package/dist/vite.svg +1 -0
  322. package/package.json +1 -1
@@ -0,0 +1,1141 @@
1
+ const docTien = new DocTienBangChu();
2
+ const DEFAULT_MONEY_UNIT = 'đồng';
3
+
4
+ var isDetail = false;
5
+ var isMasterDetail = false;
6
+ var colName = undefined;
7
+ var mdCellId = undefined;
8
+ var masterDetailId = undefined;
9
+
10
+ function capitalize(word = '') {
11
+ word = word.toLowerCase();
12
+ return word.charAt(0).toUpperCase() + word.slice(1);
13
+ }
14
+
15
+ function runScript(scriptString) {
16
+ eval(scriptString);
17
+ }
18
+
19
+ function isNumeric(n) {
20
+ return !isNaN(parseFloat(n)) && isFinite(n);
21
+ }
22
+
23
+ function getMoneyUnitName(unit) {
24
+ switch (unit) {
25
+ case 'VND':
26
+ return 'đồng';
27
+ case 'USD':
28
+ return 'đô la';
29
+ case 'EUR':
30
+ return 'ơ-rô';
31
+ case 'JPY':
32
+ return 'yên';
33
+ case 'SGD':
34
+ return 'đô la Singapore';
35
+ case 'KRW':
36
+ return 'won';
37
+ default:
38
+ return '';
39
+ }
40
+ }
41
+
42
+ function docSoTien(number, unit = DEFAULT_MONEY_UNIT, locale = 'vi') {
43
+ let result = '';
44
+ const numbers = number?.toString().split('.');
45
+
46
+ if (locale === 'en') {
47
+ const numberText1 = numberToTextEN(Number(numbers[0]));
48
+ result = numberText1.trim();
49
+ } else {
50
+ const numberText1 = docTien.doc(numbers[0]);
51
+ result = numberText1.trim();
52
+ }
53
+
54
+ if (numbers.length === 2) {
55
+ if (locale === 'en') {
56
+ const numberText2 = numberToTextEN(numbers[1]);
57
+ result += ` point ${numberText2.toLowerCase()}`;
58
+ } else {
59
+ const numberText2 = docTien.doc(numbers[1]);
60
+ result += ` phẩy ${numberText2.toLowerCase()}`;
61
+ }
62
+ }
63
+ result = capitalize(result);
64
+ if (unit?.trim() !== '') {
65
+ result += ` ${unit}`;
66
+ }
67
+
68
+ return result;
69
+ }
70
+
71
+ function fetchDataFromApi(api, from, property, to, fromName) {
72
+ var htmlElement = document.getElementById('field_' + fromName);
73
+ if (htmlElement && htmlElement.tagName === 'SPAN') {
74
+ return;
75
+ }
76
+ if (from && from[property]) {
77
+ if (!isNumeric(from[property])) {
78
+ return;
79
+ }
80
+ api = window.location.origin + api + from[property];
81
+ var myHeaders = new Headers();
82
+ myHeaders.append('Accept', '*/*');
83
+ myHeaders.append('Accept-Language', 'en');
84
+ myHeaders.append('Accept-Encoding', 'gzip, deflate, br');
85
+ myHeaders.append('Connection', 'keep-alive');
86
+ var requestOptions = {
87
+ method: 'GET',
88
+ headers: myHeaders,
89
+ redirect: 'follow',
90
+ };
91
+
92
+ fetch(api, requestOptions)
93
+ .then(response => response.text())
94
+ .then(result => {
95
+ result = result.replace(/"/g, '');
96
+
97
+ const textValue = document.getElementById('field_' + to);
98
+
99
+ if (textValue) {
100
+ if (result) {
101
+ textValue.innerHTML = result;
102
+ } else {
103
+ textValue.innerHTML = '';
104
+ }
105
+ }
106
+ })
107
+ .catch(error => console.log('error', error));
108
+ }
109
+ }
110
+
111
+ function getPathFromUrl(url) {
112
+ return url.split(/[?#]/)[0];
113
+ }
114
+
115
+ function searchDataByProperyName(api, from, to) {
116
+ api = window.location.origin + api + encodeURIComponent(from.value);
117
+ var myHeaders = new Headers();
118
+ myHeaders.append('Accept', '*/*');
119
+ myHeaders.append('Accept-Language', 'en');
120
+ myHeaders.append('Accept-Encoding', 'gzip, deflate, br');
121
+ myHeaders.append('Connection', 'keep-alive');
122
+ var requestOptions = {
123
+ method: 'GET',
124
+ headers: myHeaders,
125
+ redirect: 'follow',
126
+ };
127
+
128
+ fetch(api, requestOptions)
129
+ .then(response => response.json())
130
+ .then(result => {
131
+ mapArrayIntoChoiceProperty(to, result);
132
+ })
133
+ .catch(error => console.log('error', error));
134
+ }
135
+
136
+ function _searchDataAndMapIntoDropdown(api, from, to) {
137
+ searchDataAndMapIntoDropdown(api, from, to);
138
+ }
139
+
140
+ function searchDataAndMapIntoDropdown(api, from, to) {
141
+ if (from && !isHtmlCollection(from)) {
142
+ api = window.location.origin + api + encodeURIComponent(from.value);
143
+ var myHeaders = new Headers();
144
+ myHeaders.append('Accept', '*/*');
145
+ myHeaders.append('Accept-Language', 'en');
146
+ myHeaders.append('Accept-Encoding', 'gzip, deflate, br');
147
+ myHeaders.append('Connection', 'keep-alive');
148
+ var requestOptions = {
149
+ method: 'GET',
150
+ headers: myHeaders,
151
+ redirect: 'follow',
152
+ };
153
+
154
+ fetch(api, requestOptions)
155
+ .then(response => {
156
+ if (response.ok) {
157
+ return response.json();
158
+ }
159
+ console.log('Error: searchDataAndMapIntoDropdown');
160
+ throw new Error();
161
+ })
162
+ .then(result => {
163
+ mapDropDownValueIntoProperty(to, result);
164
+ });
165
+ }
166
+ }
167
+
168
+ function _searchDataFromMDAndMapIntoMD(api, from, to, fromName) {
169
+ searchDataFromMDAndMapIntoMD(api, from, to, fromName);
170
+ }
171
+
172
+ function mapMDFromMD({
173
+ from,
174
+ fromName = 'value',
175
+ masterDetailId,
176
+ fromMDName,
177
+ filterName = 'UserWorkflowId',
178
+ toMDName,
179
+ }) {
180
+ searchDataFromMDAndMapIntoMD(
181
+ `/api/v2/workflowReport/SearchDataFromMDAndMapIntoMD/${masterDetailId}?filterName=${filterName}&mdName=${fromMDName}&filterValue=`,
182
+ from,
183
+ `${toMDName}`,
184
+ fromName
185
+ );
186
+ }
187
+
188
+ function searchDataFromMDAndMapIntoMD(api, from, to, fromName) {
189
+ if (from) {
190
+ api =
191
+ window.location.origin +
192
+ api +
193
+ encodeURIComponent(from[fromName ?? 'value']);
194
+
195
+ var myHeaders = new Headers();
196
+
197
+ myHeaders.append('Accept', '*/*');
198
+ myHeaders.append('Accept-Language', 'en');
199
+ myHeaders.append('Accept-Encoding', 'gzip, deflate, br');
200
+ myHeaders.append('Connection', 'keep-alive');
201
+
202
+ var requestOptions = {
203
+ method: 'GET',
204
+ headers: myHeaders,
205
+ redirect: 'follow',
206
+ };
207
+
208
+ fetch(api, requestOptions)
209
+ .then(response => response.json())
210
+ .then(result => {
211
+ mapMdValueIntoMD(to, result);
212
+ })
213
+ .catch(error => console.log('error', error));
214
+ }
215
+ }
216
+
217
+ // function reSearchDataByProperyName(api, from, fromProperty, to) {
218
+ // console.log('searchDataByProperyName');
219
+ // api = window.location.origin + api + from[fromProperty];
220
+ // var myHeaders = new Headers();
221
+ // myHeaders.append('Accept', '*/*');
222
+ // myHeaders.append('Accept-Language', 'en');
223
+ // myHeaders.append('Accept-Encoding', 'gzip, deflate, br');
224
+ // myHeaders.append('Connection', 'keep-alive');
225
+ // var requestOptions = {
226
+ // method: 'GET',
227
+ // headers: myHeaders,
228
+ // redirect: 'follow',
229
+ // };
230
+
231
+ // fetch(api, requestOptions)
232
+ // .then(response => response.json())
233
+ // .then(result => {
234
+ // console.log(result);
235
+ // mapArrayIntoChoiceProperty(to, result);
236
+ // })
237
+ // .catch(error => console.log('error', error));
238
+ // }
239
+
240
+ function fromSelectToText(dataFrom, dataTo) {
241
+ const selectElement = document.getElementById(dataFrom);
242
+ if (selectElement) {
243
+ const selectItems = selectElement.getElementsByClassName(
244
+ 'ant-select-selection-item'
245
+ );
246
+ if (selectItems && selectItems.length > 0) {
247
+ const title = selectItems[0].title;
248
+ const textValue = document.getElementById('field_' + dataTo);
249
+ if (textValue) {
250
+ const value = title.split('=')[0].trim();
251
+ textValue.innerHTML = value;
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ function _numberToText(dataFrom, dataTo, unitId, locale) {
258
+ numberToText(dataFrom, dataTo, unitId, locale);
259
+ }
260
+
261
+ function numberToText(dataFrom, dataTo, unitId, locale) {
262
+ if (isDetail === undefined || isDetail === null || isDetail === false) {
263
+ let numberValue = getValue(dataFrom);
264
+ if (numberValue !== undefined && numberValue !== null) {
265
+ // numberValue = formatNumberString(numberValue, locale);
266
+
267
+ const textValueElement = getElementById(dataTo);
268
+ if (textValueElement) {
269
+ if (numberValue !== undefined && numberValue !== null) {
270
+ let unit = DEFAULT_MONEY_UNIT;
271
+
272
+ if (unitId) {
273
+ const unitElement = getElementById(unitId);
274
+
275
+ if (unitElement) {
276
+ const itemValue = getValue(unitId);
277
+ if (itemValue !== undefined) {
278
+ const unitName = getMoneyUnitName(itemValue);
279
+ unit = unitName;
280
+ }
281
+ } else {
282
+ unit = unitId;
283
+ }
284
+ }
285
+ let text = docSoTien(numberValue.toString(), unit, locale);
286
+ text = text?.replaceAll(' ', ' ');
287
+ textValueElement.innerHTML = text;
288
+ } else {
289
+ textValueElement.innerHTML = '';
290
+ }
291
+ }
292
+ }
293
+ } else {
294
+ numberToTextDetail(dataFrom, dataTo, unitId, locale);
295
+ }
296
+ }
297
+
298
+ function numberToTextEN(n) {
299
+ if (n < 0) return false;
300
+
301
+ // Arrays to hold words for single-digit, double-digit, and below-hundred numbers
302
+ single_digit = [
303
+ '',
304
+ 'One',
305
+ 'Two',
306
+ 'Three',
307
+ 'Four',
308
+ 'Five',
309
+ 'Six',
310
+ 'Seven',
311
+ 'Eight',
312
+ 'Nine',
313
+ ];
314
+ double_digit = [
315
+ 'Ten',
316
+ 'Eleven',
317
+ 'Twelve',
318
+ 'Thirteen',
319
+ 'Fourteen',
320
+ 'Fifteen',
321
+ 'Sixteen',
322
+ 'Seventeen',
323
+ 'Eighteen',
324
+ 'Nineteen',
325
+ ];
326
+ below_hundred = [
327
+ 'Twenty',
328
+ 'Thirty',
329
+ 'Forty',
330
+ 'Fifty',
331
+ 'Sixty',
332
+ 'Seventy',
333
+ 'Eighty',
334
+ 'Ninety',
335
+ ];
336
+
337
+ if (n === 0) return 'Zero';
338
+
339
+ // Recursive function to translate the number into words
340
+ function translate(n) {
341
+ let word = '';
342
+ if (n < 10) {
343
+ word = single_digit[n] + ' ';
344
+ } else if (n < 20) {
345
+ word = double_digit[n - 10] + ' ';
346
+ } else if (n < 100) {
347
+ let rem = translate(n % 10);
348
+ word = below_hundred[(n - (n % 10)) / 10 - 2] + ' ' + rem;
349
+ } else if (n < 1000) {
350
+ word =
351
+ single_digit[Math.trunc(n / 100)] + ' Hundred ' + translate(n % 100);
352
+ } else if (n < 1000000) {
353
+ word =
354
+ translate(parseInt(n / 1000)).trim() +
355
+ ' Thousand ' +
356
+ translate(n % 1000);
357
+ } else if (n < 1000000000) {
358
+ word =
359
+ translate(parseInt(n / 1000000)).trim() +
360
+ ' Million ' +
361
+ translate(n % 1000000);
362
+ } else {
363
+ word =
364
+ translate(parseInt(n / 1000000000)).trim() +
365
+ ' Billion ' +
366
+ translate(n % 1000000000);
367
+ }
368
+ return word;
369
+ }
370
+
371
+ // Get the result by translating the given number
372
+ let result = translate(n);
373
+ return result.trim();
374
+ }
375
+
376
+ function readNumber(dataFrom, unitId, locale, dataTo = colName) {
377
+ if (isDetail === undefined || isDetail === null || isDetail === false) {
378
+ let numberValue = getFieldValue(dataFrom);
379
+ if (numberValue !== undefined && numberValue !== null) {
380
+ numberValue = formatNumberString(numberValue, locale);
381
+ const textValueElement = getElementById(dataTo);
382
+ if (textValueElement) {
383
+ if (numberValue !== undefined && numberValue !== null) {
384
+ let unit = DEFAULT_MONEY_UNIT;
385
+ if (unitId) {
386
+ const unitElement = getElementById(unitId);
387
+ if (unitElement) {
388
+ const itemValue = getValue(unitId);
389
+ if (itemValue !== undefined) {
390
+ const unitName = getMoneyUnitName(itemValue);
391
+ unit = unitName;
392
+ }
393
+ } else {
394
+ unit = unitId;
395
+ }
396
+ }
397
+ let text = docSoTien(numberValue.toString(), unit, locale);
398
+ text = text?.replaceAll(' ', ' ');
399
+ // textValueElement.innerHTML = text;
400
+ setValue(dataTo, text);
401
+ } else {
402
+ // textValueElement.innerHTML = '';
403
+ setValue(dataTo, '');
404
+ }
405
+ }
406
+ }
407
+ } else {
408
+ numberToTextDetail(dataFrom, dataTo, unitId, locale);
409
+ }
410
+ }
411
+
412
+ function numberToTextDetail(dataFrom, dataTo, unitId, locale) {
413
+ let unit = DEFAULT_MONEY_UNIT;
414
+ if (unitId) {
415
+ const unitElement = document.querySelector(`#${unitId}`);
416
+ if (unitElement) {
417
+ const itemElement = unitElement.querySelector(
418
+ '.ant-select-selection-item'
419
+ );
420
+ if (itemElement && itemElement.title) {
421
+ const unitName = getMoneyUnitName(itemElement.title);
422
+ unit = unitName;
423
+ }
424
+ } else {
425
+ unit = unitId;
426
+ }
427
+ }
428
+
429
+ const numberValue = getValueMD(dataFrom);
430
+ if (numberValue) {
431
+ const value = formatNumberString(numberValue);
432
+ const textValue = getElementById(dataTo, true);
433
+ if (textValue) {
434
+ if (value !== undefined && value !== null) {
435
+ let text = docSoTien(value, unit, locale);
436
+ text = text?.replaceAll(' ', ' ');
437
+ textValue.innerHTML = text;
438
+ } else {
439
+ textValue.innerHTML = '';
440
+ }
441
+ }
442
+ }
443
+ }
444
+
445
+ function textNumberToText(dataFrom, dataTo, unitId) {
446
+ const fromElement = document.getElementById('field_' + dataFrom);
447
+ if (fromElement) {
448
+ const fromValue = fromElement.innerHTML;
449
+ const numberValue = formatNumberString(fromValue);
450
+ const toElement = document.getElementById('field_' + dataTo);
451
+ if (toElement) {
452
+ if (numberValue) {
453
+ let unit = DEFAULT_MONEY_UNIT;
454
+ if (unitId) {
455
+ const unitElement = document.querySelector(`#${unitId}`);
456
+ if (unitElement) {
457
+ const itemElement = unitElement.querySelector(
458
+ '.ant-select-selection-item'
459
+ );
460
+ if (itemElement && itemElement.title) {
461
+ const unitName = getMoneyUnitName(itemElement.title);
462
+ unit = unitName;
463
+ }
464
+ } else {
465
+ unit = unitId;
466
+ }
467
+ }
468
+ let text = docSoTien(numberValue.toString(), unit);
469
+ text = text?.replaceAll(' ', ' ');
470
+ toElement.innerHTML = text;
471
+ } else {
472
+ toElement.innerHTML = '';
473
+ }
474
+ }
475
+ }
476
+ }
477
+
478
+ function _textNumberToText(dataFrom, dataTo, unitId) {
479
+ textNumberToText(dataFrom, dataTo, unitId);
480
+ }
481
+
482
+ // Locale: "vi" | "en"
483
+ function formatNumberString(number, locale = 'vi') {
484
+ let result = '0';
485
+ if (locale === 'vi') {
486
+ result = number
487
+ ? number?.toString().replaceAll('.', '').replaceAll('= ', '')
488
+ : '0';
489
+ result = result.replaceAll(',', '.');
490
+ } else {
491
+ result = number;
492
+ }
493
+
494
+ return Number(result);
495
+ }
496
+
497
+ function setValue(toId, value, isMD = false) {
498
+ const name = toId ?? getCurrentId();
499
+ window.setFieldValue(name, value, isMD ? masterDetailId : undefined);
500
+ }
501
+
502
+ function setValueMD(name, value, mdId) {
503
+ window.setFieldValue(name, value, mdId);
504
+ }
505
+
506
+ function calc(name, string) {
507
+ try {
508
+ if (string && string.length > 0) {
509
+ const split = string.split(`'`);
510
+ for (let i in split) {
511
+ const splitItem = split[i].trim();
512
+
513
+ if (splitItem.length > 0 && isStringValid(splitItem)) {
514
+ string = calcSub(splitItem, string);
515
+ }
516
+ }
517
+ const money = eval(string);
518
+ setValue(name, money);
519
+ // const ele = document.getElementById('field_' + name);
520
+ // if (ele) {
521
+ // if (ele.innerHTML.includes(' %')) {
522
+ // result += ' %';
523
+ // }
524
+ // ele.innerHTML = result;
525
+ // }
526
+ }
527
+ } catch (e) {
528
+ console.log(e);
529
+ }
530
+ }
531
+
532
+ const getFieldValue = (name, isMD) => {
533
+ return window.getFieldValue(name, isMD);
534
+ };
535
+
536
+ const handleFormular = (formularString, isMD) => {
537
+ if (formularString?.length > 0) {
538
+ formularString = formularString.replace(/\s/g, '');
539
+ let name = '';
540
+ let adding = false;
541
+ const ids = [];
542
+
543
+ for (let i = 0; i < formularString.length; i++) {
544
+ if (formularString[i] === '[') {
545
+ adding = true;
546
+ } else if (formularString[i] === ']') {
547
+ ids.push(name);
548
+ adding = false;
549
+ name = '';
550
+ } else if (adding === true) {
551
+ name += formularString[i];
552
+ }
553
+ }
554
+
555
+ let formular = formularString;
556
+
557
+ if (ids.length > 0) {
558
+ ids.forEach(id => {
559
+ const value = getFieldValue(id, isMD) ?? 0;
560
+ formular = formular.replaceAll(`[${id}]`, value);
561
+ });
562
+ }
563
+
564
+ return { math: formular, elementIds: ids };
565
+ } else {
566
+ return { math: formularString, elementIds: [] };
567
+ }
568
+ };
569
+
570
+ function calculate(calcText, to = colName) {
571
+ try {
572
+ if (calcText && calcText.length > 0) {
573
+ const formular = handleFormular(calcText, isMasterDetail);
574
+ const result = eval(formular.math);
575
+ setValue(to, result, masterDetailId);
576
+ }
577
+ } catch (e) {
578
+ console.log(e);
579
+ }
580
+ }
581
+
582
+ function _calculate(calcText, to) {
583
+ calculate(calcText, to);
584
+ }
585
+
586
+ function _calc(calcText, to) {
587
+ calc(calcText, to);
588
+ }
589
+
590
+ function calcSub(name, string) {
591
+ try {
592
+ let element =
593
+ getElementById(name) ??
594
+ document.getElementById(`dynamicWorkflowForm_${name}`);
595
+ if (element) {
596
+ const num = getValue(name) ?? 0;
597
+ string = string.replaceAll(
598
+ `'${name}'`,
599
+ `
600
+ ${num}
601
+ `
602
+ );
603
+ }
604
+ } catch (e) {
605
+ console.log('calcSub', e);
606
+ }
607
+ return string;
608
+ }
609
+
610
+ function isHtmlCollection(element) {
611
+ return HTMLCollection.prototype.isPrototypeOf(element);
612
+ }
613
+
614
+ function mapData(name, from, to, type) {
615
+ if (isHtmlCollection(from)) return;
616
+
617
+ let value = from ? from[name] : undefined;
618
+
619
+ if (value && type === 'number') {
620
+ value = convertNumberToText(value);
621
+ }
622
+ setValue(to, value);
623
+ // const toElement = getElementById(to);
624
+ // if (toElement) {
625
+ // toElement.innerHTML = value ?? '';
626
+ // }
627
+ }
628
+
629
+ function _mapData(name, from, to, type) {
630
+ mapData(name, from, to, type);
631
+ }
632
+
633
+ function mapDataMasterDetail(
634
+ from,
635
+ fromProperty,
636
+ to,
637
+ id,
638
+ type,
639
+ isEditMasterDetail
640
+ ) {
641
+ try {
642
+ if (!isEditMasterDetail) {
643
+ if (fromProperty && to && id !== undefined) {
644
+ let value = '';
645
+ if (from) {
646
+ value = from[fromProperty];
647
+ // if (value && type === 'number') {
648
+ // value = '= ' + convertNumberToText(value);
649
+ // }
650
+ }
651
+ // toElement.innerHTML = value ?? '';
652
+ setValueMD(to, value ?? '', id);
653
+ }
654
+ }
655
+ } catch (e) {
656
+ console.log('mapDataMasterDetailError:', e);
657
+ }
658
+ }
659
+
660
+ function _mapDataMasterDetail(from, fromProperty, to, id, isEditMasterDetail) {
661
+ mapDataMasterDetail(from, fromProperty, to, id, isEditMasterDetail);
662
+ }
663
+
664
+ function sendLinkToWebView(path, fileName) {
665
+ try {
666
+ let pathSendToWebView =
667
+ window.location.protocol +
668
+ '//' +
669
+ window.location.host +
670
+ path.replace('downloadFile', 'downloadFileAnonymous');
671
+ let data = {
672
+ path: pathSendToWebView,
673
+ fileName: fileName,
674
+ };
675
+ window.parent.postMessage(JSON.stringify(data), window.parent.origin);
676
+ window.postMessage(JSON.stringify(data), window.parent.origin);
677
+ window.ReactNativeWebView.postMessage(JSON.stringify(data));
678
+ } catch (error) {
679
+ console.log(error);
680
+ }
681
+ }
682
+
683
+ function fromSelectToTextMasterDetail(from, fromProperty, to, id) {
684
+ if (from) {
685
+ let value = from[fromProperty];
686
+ const toId = id.toString() + '_' + to;
687
+ const toElement = document.getElementById(toId);
688
+ if (toElement) {
689
+ if (value) {
690
+ const textValue = value.split('=')[0].trim();
691
+ toElement.innerHTML = textValue;
692
+ }
693
+ }
694
+ }
695
+ }
696
+
697
+ function isStringValid(string) {
698
+ let format = /[!@#$%^&*()+\-=\[\]{};':"\\|,.<>\/?]+/;
699
+ return !format.test(string);
700
+ }
701
+
702
+ function _mapNumberMD2F(fromId, toNumberId, toTextId) {
703
+ const num = _mapFromMasterDetail(fromId, toNumberId);
704
+
705
+ _numberToTextFromMD(num, toTextId);
706
+ }
707
+
708
+ function _mapFromMasterDetail(fromId, toId) {
709
+ let result;
710
+ const fromElement = getElementById(fromId, true);
711
+ if (fromElement) {
712
+ const fromValue = getValueMD(fromId) ?? 0;
713
+ const toElement = document.querySelector(`#field_${toId}`);
714
+ if (toElement) {
715
+ toElement.innerHTML = fromValue;
716
+ result = fromValue;
717
+ }
718
+ }
719
+ return result;
720
+ }
721
+
722
+ function _numberToTextFromMD(num, dataTo) {
723
+ const toElement = document.querySelector(`#field_${dataTo}`);
724
+ if (toElement) {
725
+ if (num) {
726
+ let number = formatNumberString(num);
727
+ if (toElement) {
728
+ if (number) {
729
+ toElement.innerHTML = docTien.doc(number);
730
+ } else {
731
+ toElement.innerHTML = '';
732
+ }
733
+ }
734
+ } else {
735
+ toElement.innerHTML = '';
736
+ }
737
+ }
738
+ }
739
+
740
+ function removeDuplicates(arr) {
741
+ return arr.filter((item, index) => arr.indexOf(item) === index);
742
+ }
743
+
744
+ function calcMD(calcText, to, id) {
745
+ try {
746
+ // const toElement = document.getElementById(`${id}_${to}`);
747
+ const toElement = to ? getElementById(`${to}`, true) : getCurrentElement();
748
+ let text = calcText.replace(/[^a-zA-Z0-9 ]/g, ' ');
749
+
750
+ text = text.trim().replace(/\s+/g, ' ');
751
+ let variables = text.split(' ');
752
+
753
+ if (toElement && variables.length > 0) {
754
+ variables = removeDuplicates(variables);
755
+
756
+ const names = [];
757
+
758
+ variables.forEach(variable => {
759
+ if (isNaN(variable)) {
760
+ names.push(variable);
761
+ }
762
+ });
763
+
764
+ let calc = calcText;
765
+ names.forEach(name => {
766
+ try {
767
+ const numberValue = getValueMD(name) ?? 0;
768
+ // const num = numberElement
769
+ // ? Number(
770
+ // formatNumberString(
771
+ // numberElement.replace('= ', '').replace(' %', '')
772
+ // )
773
+ // )
774
+ // : 0;
775
+
776
+ calc = calc.replaceAll(`'${name}'`, numberValue);
777
+ } catch (e) {
778
+ throw 'Not found element: ' + name;
779
+ }
780
+ });
781
+ const result = eval(calc);
782
+
783
+ // toElement.innerHTML = result;
784
+ // toElement.dataValue = result;
785
+ setValueMD(to, result, id ?? masterDetailId);
786
+ // toElement.innerHTML = `= ${Intl.NumberFormat('vi-VN', {}).format(
787
+ // result
788
+ // )}`;
789
+ }
790
+ } catch (e) {
791
+ console.log(e);
792
+ }
793
+ }
794
+
795
+ function map(from, to) {}
796
+
797
+ function _calcMMD(calcText, to) {
798
+ calcMMD(calcText, to);
799
+ }
800
+
801
+ function calcMMD(calcText, to) {
802
+ try {
803
+ const toElement = to ? getElementById(`${to}`) : getCurrentElement();
804
+
805
+ // const calcText = `('num1_mdsum' - 'num2_mdsum')`;
806
+ let calc = calcText;
807
+ let text = calcText.replaceAll('+', ' ');
808
+ text = text.replaceAll('-', ' ');
809
+ text = text.replaceAll('*', ' ');
810
+ text = text.replaceAll('/', ' ');
811
+ text = text.replaceAll('(', ' ');
812
+ text = text.replaceAll(')', ' ');
813
+ text = text.replaceAll("'", ' ');
814
+ text = text.replaceAll('"', ' ');
815
+
816
+ text = text.trim().replace(/\s+/g, ' ');
817
+
818
+ let variables = text.split(' ');
819
+
820
+ if (toElement && variables.length > 0) {
821
+ variables = removeDuplicates(variables);
822
+
823
+ const names = [];
824
+
825
+ variables.forEach(variable => {
826
+ if (isNaN(variable)) {
827
+ names.push(variable);
828
+ }
829
+ });
830
+
831
+ names.forEach(name => {
832
+ let val = 0;
833
+ const nameSplit = name.split('_');
834
+ if (nameSplit.length === 2) {
835
+ const tableElement = document.getElementById(`${nameSplit[0]}`);
836
+ if (tableElement) {
837
+ const valueElement = tableElement.querySelector(
838
+ `.sum-${nameSplit[1]}`
839
+ );
840
+
841
+ if (valueElement) {
842
+ val = valueElement.innerHTML;
843
+ }
844
+ }
845
+ }
846
+ if (val !== 0) {
847
+ val = formatNumberString(val);
848
+ }
849
+ calc = calc.replaceAll(`'${name}'`, val ?? 0);
850
+ });
851
+ const result = eval(calc !== '()' ? calc : '');
852
+ setValue(to, result);
853
+ // toElement.innerHTML = Intl.NumberFormat('vi-VN', {}).format(result);
854
+ }
855
+ } catch (e) {
856
+ console.log(e);
857
+ }
858
+ }
859
+
860
+ const getElementById = (name, isMD) => {
861
+ if (name) {
862
+ let isMasterDetailT = isMD;
863
+ if (!isMasterDetailT) {
864
+ const splitName = name.split('-');
865
+ if (splitName.length === 2 && splitName[0] === 'md') {
866
+ isMasterDetailT = true;
867
+ }
868
+ }
869
+ // check if master detail
870
+ if (isMasterDetailT && mdCellId) {
871
+ const ids = mdCellId.split('_');
872
+ if (ids.length === 3) {
873
+ const id = `${ids[0]}_${ids[1]}_${name}`;
874
+ const ele = document.getElementById(id);
875
+ if (ele) {
876
+ const element = ele.querySelector(`#${name}`);
877
+ if (element) {
878
+ return element;
879
+ } else {
880
+ return ele;
881
+ }
882
+ }
883
+ }
884
+ } else {
885
+ const ele = document.getElementById('field_' + name);
886
+
887
+ if (ele) {
888
+ return ele;
889
+ } else {
890
+ const classEle = document.querySelector(`.field_${name}`);
891
+ if (classEle) {
892
+ return classEle;
893
+ }
894
+ return document.getElementById('dynamicWorkflowForm_' + name);
895
+ }
896
+ }
897
+ }
898
+ };
899
+
900
+ const getValueMD = (name, mdId) => {
901
+ return getValue(name, mdId ?? masterDetailId ?? true);
902
+ };
903
+
904
+ const getValue = (name, mdId) => {
905
+ return window.getFieldValue(name, mdId);
906
+ // const element = getElementById(name, isMD);
907
+
908
+ // if (element) {
909
+ // if (element.role === 'combobox') {
910
+ // const parentElement = element.parentElement?.parentElement;
911
+ // if (parentElement) {
912
+ // const selectItem = parentElement.querySelector(
913
+ // '.ant-select-selection-item'
914
+ // );
915
+ // if (selectItem) {
916
+ // return selectItem.title;
917
+ // }
918
+ // }
919
+ // }
920
+
921
+ // if (element.value) {
922
+ // return element.value;
923
+ // }
924
+ // return element.innerHTML;
925
+ // }
926
+ };
927
+
928
+ const getCurrentElement = isMD => {
929
+ let isMasterDetailT = isMasterDetail;
930
+ if (isMD !== undefined) {
931
+ isMasterDetailT = isMD;
932
+ }
933
+ if (isMasterDetailT) {
934
+ return document.getElementById(mdCellId);
935
+ } else {
936
+ return document.getElementById('field_' + colName);
937
+ }
938
+ };
939
+
940
+ const getCurrentId = isMD => {
941
+ let isMasterDetailT = isMasterDetail;
942
+ if (isMD !== undefined) {
943
+ isMasterDetailT = isMD;
944
+ }
945
+ if (isMasterDetailT) {
946
+ return mdCellId;
947
+ } else {
948
+ return colName;
949
+ }
950
+ };
951
+
952
+ function isValidDate(str) {
953
+ return dayjs(str, 'YYYY-MM-DD', true).isValid();
954
+ }
955
+
956
+ const datetime = {
957
+ formatDayjs(date) {
958
+ if (date) {
959
+ if (dayjs.isDayjs(date)) {
960
+ return date;
961
+ }
962
+ let dateTime;
963
+ if (date.length === 10) {
964
+ let dateSplit = date.split('/');
965
+
966
+ if (dateSplit[2].length === 4) {
967
+ dateSplit = dateSplit.reverse();
968
+ }
969
+ dateTime = dateSplit.join('/') + ' 00:00';
970
+ } else if (date.length === 16) {
971
+ const dateTimes = date.split(' ');
972
+ const dateSplit = dateTimes[0].split('/');
973
+ dateTime = dateSplit.reverse().join('/') + ` ${dateTimes[1]}`;
974
+ } else if (date.length === 19) {
975
+ return dayjs(date, 'YYYY-MM-DDTHH:mm:ss');
976
+ }
977
+ if (dateTime) {
978
+ return dayjs(dateTime, 'YYYY/MM/DD HH:mm');
979
+ } else if (isValidDate(date)) {
980
+ return dayjs(date);
981
+ }
982
+ }
983
+ },
984
+
985
+ count(type, fromDateName, toDateName, toId = colName) {
986
+ let result = '';
987
+
988
+ const fromDateValue = getFieldValue(fromDateName, isMasterDetail);
989
+ const toDateValue = getFieldValue(toDateName, isMasterDetail);
990
+
991
+ if (
992
+ fromDateValue &&
993
+ fromDateValue !== 'Invalid Date' &&
994
+ toDateValue &&
995
+ toDateValue !== 'Invalid Date'
996
+ ) {
997
+ let fromDate = this.formatDayjs(fromDateValue);
998
+ let toDate = this.formatDayjs(toDateValue);
999
+
1000
+ let diff = '';
1001
+ switch (type) {
1002
+ case 'minutes':
1003
+ diff = toDate.diff(fromDate, 'minutes');
1004
+ break;
1005
+ case 'hours':
1006
+ diff = toDate.diff(fromDate, 'hours');
1007
+ break;
1008
+ case 'days':
1009
+ diff = toDate.diff(fromDate, 'days') + 1;
1010
+ break;
1011
+ case 'months':
1012
+ diff = toDate.diff(fromDate, 'months');
1013
+ break;
1014
+ case 'years':
1015
+ diff = toDate.diff(fromDate, 'years');
1016
+ break;
1017
+
1018
+ default:
1019
+ break;
1020
+ }
1021
+ result = diff.toString();
1022
+ }
1023
+
1024
+ setValue(toId, result, isMasterDetail);
1025
+ // toElement.innerHTML = result;
1026
+ },
1027
+ };
1028
+
1029
+ const countYears = (fromDateName, toDateName, toId) => {
1030
+ datetime.count('years', fromDateName, toDateName, toId);
1031
+ };
1032
+
1033
+ const countMonths = (fromDateName, toDateName, toId) => {
1034
+ datetime.count('months', fromDateName, toDateName, toId);
1035
+ };
1036
+
1037
+ const countDays = (fromDateName, toDateName, toId) => {
1038
+ datetime.count('days', fromDateName, toDateName, toId);
1039
+ };
1040
+
1041
+ const countHours = (fromDateName, toDateName, toId) => {
1042
+ datetime.count('hours', fromDateName, toDateName, toId);
1043
+ };
1044
+
1045
+ const countMinutes = (fromDateName, toDateName, toId) => {
1046
+ datetime.count('minutes', fromDateName, toDateName, toId);
1047
+ };
1048
+
1049
+ const validateDatesRange = (startDate, toDate, dateType, count) => {
1050
+ window.validateDatesRange(startDate, toDate, dateType, count);
1051
+ };
1052
+
1053
+ const validatePhoneNumber = name => {
1054
+ window.validatePhoneNumber(name);
1055
+ };
1056
+
1057
+ const validateEmail = name => {
1058
+ window.validateEmail(name);
1059
+ };
1060
+
1061
+ const convertNumberToText = value => {
1062
+ return new Intl.NumberFormat('vi-VN').format(Number(value));
1063
+ };
1064
+
1065
+ const displayNumber = elementId => {
1066
+ const id = elementId ?? colName;
1067
+ const element = getElementById(id);
1068
+ if (element) {
1069
+ const value = getValue(id) ?? 0;
1070
+ if (!value.includes('.')) {
1071
+ element.innerHTML = new Intl.NumberFormat('vi-VN').format(Number(value));
1072
+ }
1073
+ }
1074
+ };
1075
+
1076
+ const _displayNumber = elementId => {
1077
+ displayNumber(elementId);
1078
+ };
1079
+
1080
+ const validateForm = (isValid, elementIds, isMD) => {
1081
+ window.handleActionButtons(isValid, elementIds, isMD);
1082
+ };
1083
+
1084
+ const compareNumbers = (compareString, isMD) => {
1085
+ const formular = handleFormularString(compareString, isMD);
1086
+
1087
+ window.handleActionButtons(eval(formular.math), formular.elementIds, isMD);
1088
+ };
1089
+
1090
+ const compareNumbersMD = compareString => {
1091
+ compareNumbers(compareString, true);
1092
+ };
1093
+
1094
+ const handleFormularString = (formularString, isMD) => {
1095
+ if (formularString?.length > 0) {
1096
+ formularString = formularString.replace(/\s/g, '');
1097
+ let name = '';
1098
+ let adding = false;
1099
+ const ids = [];
1100
+
1101
+ for (let i = 0; i < formularString.length; i++) {
1102
+ if (formularString[i] === '[') {
1103
+ adding = true;
1104
+ } else if (formularString[i] === ']') {
1105
+ ids.push(name);
1106
+ adding = false;
1107
+ name = '';
1108
+ } else if (adding === true) {
1109
+ name += formularString[i];
1110
+ }
1111
+ }
1112
+
1113
+ let formular = formularString;
1114
+ if (ids.length > 0) {
1115
+ ids.forEach(id => {
1116
+ const value = formatNumberString(
1117
+ isMD ? getValueMD(id) : getValue(id) ?? '0'
1118
+ );
1119
+ formular = formular.replaceAll(`[${id}]`, value);
1120
+ });
1121
+ }
1122
+ return { math: formular, elementIds: ids };
1123
+ } else {
1124
+ return { math: formularString, elementIds: [] };
1125
+ }
1126
+ };
1127
+
1128
+ const valid = () => {
1129
+ window.handleActionButtons(true);
1130
+ };
1131
+
1132
+ const invalid = () => {
1133
+ window.handleActionButtons(false);
1134
+ };
1135
+
1136
+ const convertVIToENNumber = num => {
1137
+ num = num.replaceAll(',', '-');
1138
+ num = num.replaceAll('.', ',');
1139
+ num = num.replaceAll('-', '.');
1140
+ return num;
1141
+ };