@newpeak/barista-cli 0.1.6 → 0.1.8

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 (370) hide show
  1. package/README.en.md +714 -0
  2. package/README.ja.md +708 -0
  3. package/README.md +68 -0
  4. package/README.vi.md +714 -0
  5. package/dist/commands/liberica/calendar/index.d.ts +3 -0
  6. package/dist/commands/liberica/calendar/index.d.ts.map +1 -0
  7. package/dist/commands/liberica/calendar/index.js +11 -0
  8. package/dist/commands/liberica/calendar/index.js.map +1 -0
  9. package/dist/commands/liberica/calendar/list.d.ts +3 -0
  10. package/dist/commands/liberica/calendar/list.d.ts.map +1 -0
  11. package/dist/commands/liberica/calendar/list.js +181 -0
  12. package/dist/commands/liberica/calendar/list.js.map +1 -0
  13. package/dist/commands/liberica/calendar/set.d.ts +3 -0
  14. package/dist/commands/liberica/calendar/set.d.ts.map +1 -0
  15. package/dist/commands/liberica/calendar/set.js +120 -0
  16. package/dist/commands/liberica/calendar/set.js.map +1 -0
  17. package/dist/commands/liberica/client-contacts/create.d.ts +3 -0
  18. package/dist/commands/liberica/client-contacts/create.d.ts.map +1 -0
  19. package/dist/commands/liberica/client-contacts/create.js +132 -0
  20. package/dist/commands/liberica/client-contacts/create.js.map +1 -0
  21. package/dist/commands/liberica/client-contacts/delete.d.ts +3 -0
  22. package/dist/commands/liberica/client-contacts/delete.d.ts.map +1 -0
  23. package/dist/commands/liberica/client-contacts/delete.js +139 -0
  24. package/dist/commands/liberica/client-contacts/delete.js.map +1 -0
  25. package/dist/commands/liberica/client-contacts/get.d.ts +3 -0
  26. package/dist/commands/liberica/client-contacts/get.d.ts.map +1 -0
  27. package/dist/commands/liberica/client-contacts/get.js +92 -0
  28. package/dist/commands/liberica/client-contacts/get.js.map +1 -0
  29. package/dist/commands/liberica/client-contacts/index.d.ts +3 -0
  30. package/dist/commands/liberica/client-contacts/index.d.ts.map +1 -0
  31. package/dist/commands/liberica/client-contacts/index.js +17 -0
  32. package/dist/commands/liberica/client-contacts/index.js.map +1 -0
  33. package/dist/commands/liberica/client-contacts/list.d.ts +3 -0
  34. package/dist/commands/liberica/client-contacts/list.d.ts.map +1 -0
  35. package/dist/commands/liberica/client-contacts/list.js +92 -0
  36. package/dist/commands/liberica/client-contacts/list.js.map +1 -0
  37. package/dist/commands/liberica/client-contacts/update.d.ts +3 -0
  38. package/dist/commands/liberica/client-contacts/update.d.ts.map +1 -0
  39. package/dist/commands/liberica/client-contacts/update.js +156 -0
  40. package/dist/commands/liberica/client-contacts/update.js.map +1 -0
  41. package/dist/commands/liberica/dict-types/get.d.ts +3 -0
  42. package/dist/commands/liberica/dict-types/get.d.ts.map +1 -0
  43. package/dist/commands/liberica/dict-types/get.js +62 -0
  44. package/dist/commands/liberica/dict-types/get.js.map +1 -0
  45. package/dist/commands/liberica/dict-types/index.d.ts +3 -0
  46. package/dist/commands/liberica/dict-types/index.d.ts.map +1 -0
  47. package/dist/commands/liberica/dict-types/index.js +13 -0
  48. package/dist/commands/liberica/dict-types/index.js.map +1 -0
  49. package/dist/commands/liberica/dict-types/list.d.ts +3 -0
  50. package/dist/commands/liberica/dict-types/list.d.ts.map +1 -0
  51. package/dist/commands/liberica/dict-types/list.js +91 -0
  52. package/dist/commands/liberica/dict-types/list.js.map +1 -0
  53. package/dist/commands/liberica/dict-types/update.d.ts +3 -0
  54. package/dist/commands/liberica/dict-types/update.d.ts.map +1 -0
  55. package/dist/commands/liberica/dict-types/update.js +127 -0
  56. package/dist/commands/liberica/dict-types/update.js.map +1 -0
  57. package/dist/commands/liberica/dicts/create.d.ts +3 -0
  58. package/dist/commands/liberica/dicts/create.d.ts.map +1 -0
  59. package/dist/commands/liberica/dicts/create.js +157 -0
  60. package/dist/commands/liberica/dicts/create.js.map +1 -0
  61. package/dist/commands/liberica/dicts/delete.d.ts +3 -0
  62. package/dist/commands/liberica/dicts/delete.d.ts.map +1 -0
  63. package/dist/commands/liberica/dicts/delete.js +106 -0
  64. package/dist/commands/liberica/dicts/delete.js.map +1 -0
  65. package/dist/commands/liberica/dicts/get.d.ts +3 -0
  66. package/dist/commands/liberica/dicts/get.d.ts.map +1 -0
  67. package/dist/commands/liberica/dicts/get.js +69 -0
  68. package/dist/commands/liberica/dicts/get.js.map +1 -0
  69. package/dist/commands/liberica/dicts/index.d.ts +3 -0
  70. package/dist/commands/liberica/dicts/index.d.ts.map +1 -0
  71. package/dist/commands/liberica/dicts/index.js +17 -0
  72. package/dist/commands/liberica/dicts/index.js.map +1 -0
  73. package/dist/commands/liberica/dicts/list.d.ts +3 -0
  74. package/dist/commands/liberica/dicts/list.d.ts.map +1 -0
  75. package/dist/commands/liberica/dicts/list.js +88 -0
  76. package/dist/commands/liberica/dicts/list.js.map +1 -0
  77. package/dist/commands/liberica/dicts/update.d.ts +3 -0
  78. package/dist/commands/liberica/dicts/update.d.ts.map +1 -0
  79. package/dist/commands/liberica/dicts/update.js +112 -0
  80. package/dist/commands/liberica/dicts/update.js.map +1 -0
  81. package/dist/commands/liberica/index.d.ts.map +1 -1
  82. package/dist/commands/liberica/index.js +22 -0
  83. package/dist/commands/liberica/index.js.map +1 -1
  84. package/dist/commands/liberica/materials/create.d.ts.map +1 -1
  85. package/dist/commands/liberica/materials/create.js +35 -9
  86. package/dist/commands/liberica/materials/create.js.map +1 -1
  87. package/dist/commands/liberica/operations/active.d.ts +3 -0
  88. package/dist/commands/liberica/operations/active.d.ts.map +1 -0
  89. package/dist/commands/liberica/operations/active.js +152 -0
  90. package/dist/commands/liberica/operations/active.js.map +1 -0
  91. package/dist/commands/liberica/operations/batch-delete.d.ts +3 -0
  92. package/dist/commands/liberica/operations/batch-delete.d.ts.map +1 -0
  93. package/dist/commands/liberica/operations/batch-delete.js +130 -0
  94. package/dist/commands/liberica/operations/batch-delete.js.map +1 -0
  95. package/dist/commands/liberica/operations/copy.d.ts +3 -0
  96. package/dist/commands/liberica/operations/copy.d.ts.map +1 -0
  97. package/dist/commands/liberica/operations/copy.js +137 -0
  98. package/dist/commands/liberica/operations/copy.js.map +1 -0
  99. package/dist/commands/liberica/operations/create.d.ts +3 -0
  100. package/dist/commands/liberica/operations/create.d.ts.map +1 -0
  101. package/dist/commands/liberica/operations/create.js +212 -0
  102. package/dist/commands/liberica/operations/create.js.map +1 -0
  103. package/dist/commands/liberica/operations/deactive.d.ts +3 -0
  104. package/dist/commands/liberica/operations/deactive.d.ts.map +1 -0
  105. package/dist/commands/liberica/operations/deactive.js +152 -0
  106. package/dist/commands/liberica/operations/deactive.js.map +1 -0
  107. package/dist/commands/liberica/operations/delete.d.ts +3 -0
  108. package/dist/commands/liberica/operations/delete.d.ts.map +1 -0
  109. package/dist/commands/liberica/operations/delete.js +128 -0
  110. package/dist/commands/liberica/operations/delete.js.map +1 -0
  111. package/dist/commands/liberica/operations/get.d.ts +3 -0
  112. package/dist/commands/liberica/operations/get.d.ts.map +1 -0
  113. package/dist/commands/liberica/operations/get.js +93 -0
  114. package/dist/commands/liberica/operations/get.js.map +1 -0
  115. package/dist/commands/liberica/operations/index.d.ts +3 -0
  116. package/dist/commands/liberica/operations/index.d.ts.map +1 -0
  117. package/dist/commands/liberica/operations/index.js +25 -0
  118. package/dist/commands/liberica/operations/index.js.map +1 -0
  119. package/dist/commands/liberica/operations/list.d.ts +3 -0
  120. package/dist/commands/liberica/operations/list.d.ts.map +1 -0
  121. package/dist/commands/liberica/operations/list.js +141 -0
  122. package/dist/commands/liberica/operations/list.js.map +1 -0
  123. package/dist/commands/liberica/operations/update.d.ts +3 -0
  124. package/dist/commands/liberica/operations/update.d.ts.map +1 -0
  125. package/dist/commands/liberica/operations/update.js +208 -0
  126. package/dist/commands/liberica/operations/update.js.map +1 -0
  127. package/dist/commands/liberica/orgs/index.d.ts.map +1 -1
  128. package/dist/commands/liberica/orgs/index.js.map +1 -1
  129. package/dist/commands/liberica/stock/__tests__/ledger.test.d.ts +2 -0
  130. package/dist/commands/liberica/stock/__tests__/ledger.test.d.ts.map +1 -0
  131. package/dist/commands/liberica/stock/__tests__/ledger.test.js +41 -0
  132. package/dist/commands/liberica/stock/__tests__/ledger.test.js.map +1 -0
  133. package/dist/commands/liberica/stock/__tests__/list.test.d.ts +2 -0
  134. package/dist/commands/liberica/stock/__tests__/list.test.d.ts.map +1 -0
  135. package/dist/commands/liberica/stock/__tests__/list.test.js +39 -0
  136. package/dist/commands/liberica/stock/__tests__/list.test.js.map +1 -0
  137. package/dist/commands/liberica/stock/index.d.ts +3 -0
  138. package/dist/commands/liberica/stock/index.d.ts.map +1 -0
  139. package/dist/commands/liberica/stock/index.js +11 -0
  140. package/dist/commands/liberica/stock/index.js.map +1 -0
  141. package/dist/commands/liberica/stock/ledger.d.ts +3 -0
  142. package/dist/commands/liberica/stock/ledger.d.ts.map +1 -0
  143. package/dist/commands/liberica/stock/ledger.js +154 -0
  144. package/dist/commands/liberica/stock/ledger.js.map +1 -0
  145. package/dist/commands/liberica/stock/list.d.ts +3 -0
  146. package/dist/commands/liberica/stock/list.d.ts.map +1 -0
  147. package/dist/commands/liberica/stock/list.js +127 -0
  148. package/dist/commands/liberica/stock/list.js.map +1 -0
  149. package/dist/commands/liberica/supplier-contacts/create.d.ts +3 -0
  150. package/dist/commands/liberica/supplier-contacts/create.d.ts.map +1 -0
  151. package/dist/commands/liberica/supplier-contacts/create.js +129 -0
  152. package/dist/commands/liberica/supplier-contacts/create.js.map +1 -0
  153. package/dist/commands/liberica/supplier-contacts/delete.d.ts +3 -0
  154. package/dist/commands/liberica/supplier-contacts/delete.d.ts.map +1 -0
  155. package/dist/commands/liberica/supplier-contacts/delete.js +88 -0
  156. package/dist/commands/liberica/supplier-contacts/delete.js.map +1 -0
  157. package/dist/commands/liberica/supplier-contacts/get.d.ts +3 -0
  158. package/dist/commands/liberica/supplier-contacts/get.d.ts.map +1 -0
  159. package/dist/commands/liberica/supplier-contacts/get.js +84 -0
  160. package/dist/commands/liberica/supplier-contacts/get.js.map +1 -0
  161. package/dist/commands/liberica/supplier-contacts/index.d.ts +3 -0
  162. package/dist/commands/liberica/supplier-contacts/index.d.ts.map +1 -0
  163. package/dist/commands/liberica/supplier-contacts/index.js +17 -0
  164. package/dist/commands/liberica/supplier-contacts/index.js.map +1 -0
  165. package/dist/commands/liberica/supplier-contacts/list.d.ts +3 -0
  166. package/dist/commands/liberica/supplier-contacts/list.d.ts.map +1 -0
  167. package/dist/commands/liberica/supplier-contacts/list.js +98 -0
  168. package/dist/commands/liberica/supplier-contacts/list.js.map +1 -0
  169. package/dist/commands/liberica/supplier-contacts/update.d.ts +3 -0
  170. package/dist/commands/liberica/supplier-contacts/update.d.ts.map +1 -0
  171. package/dist/commands/liberica/supplier-contacts/update.js +136 -0
  172. package/dist/commands/liberica/supplier-contacts/update.js.map +1 -0
  173. package/dist/commands/liberica/users/create.d.ts.map +1 -1
  174. package/dist/commands/liberica/users/create.js +1 -0
  175. package/dist/commands/liberica/users/create.js.map +1 -1
  176. package/dist/commands/liberica/warehouses/create.d.ts +3 -0
  177. package/dist/commands/liberica/warehouses/create.d.ts.map +1 -0
  178. package/dist/commands/liberica/warehouses/create.js +196 -0
  179. package/dist/commands/liberica/warehouses/create.js.map +1 -0
  180. package/dist/commands/liberica/warehouses/delete.d.ts +3 -0
  181. package/dist/commands/liberica/warehouses/delete.d.ts.map +1 -0
  182. package/dist/commands/liberica/warehouses/delete.js +111 -0
  183. package/dist/commands/liberica/warehouses/delete.js.map +1 -0
  184. package/dist/commands/liberica/warehouses/disable.d.ts +3 -0
  185. package/dist/commands/liberica/warehouses/disable.d.ts.map +1 -0
  186. package/dist/commands/liberica/warehouses/disable.js +173 -0
  187. package/dist/commands/liberica/warehouses/disable.js.map +1 -0
  188. package/dist/commands/liberica/warehouses/enable.d.ts +3 -0
  189. package/dist/commands/liberica/warehouses/enable.d.ts.map +1 -0
  190. package/dist/commands/liberica/warehouses/enable.js +173 -0
  191. package/dist/commands/liberica/warehouses/enable.js.map +1 -0
  192. package/dist/commands/liberica/warehouses/get.d.ts +3 -0
  193. package/dist/commands/liberica/warehouses/get.d.ts.map +1 -0
  194. package/dist/commands/liberica/warehouses/get.js +90 -0
  195. package/dist/commands/liberica/warehouses/get.js.map +1 -0
  196. package/dist/commands/liberica/warehouses/index.d.ts +3 -0
  197. package/dist/commands/liberica/warehouses/index.d.ts.map +1 -0
  198. package/dist/commands/liberica/warehouses/index.js +23 -0
  199. package/dist/commands/liberica/warehouses/index.js.map +1 -0
  200. package/dist/commands/liberica/warehouses/list.d.ts +3 -0
  201. package/dist/commands/liberica/warehouses/list.d.ts.map +1 -0
  202. package/dist/commands/liberica/warehouses/list.js +101 -0
  203. package/dist/commands/liberica/warehouses/list.js.map +1 -0
  204. package/dist/commands/liberica/warehouses/locations/create.d.ts +3 -0
  205. package/dist/commands/liberica/warehouses/locations/create.d.ts.map +1 -0
  206. package/dist/commands/liberica/warehouses/locations/create.js +199 -0
  207. package/dist/commands/liberica/warehouses/locations/create.js.map +1 -0
  208. package/dist/commands/liberica/warehouses/locations/delete.d.ts +3 -0
  209. package/dist/commands/liberica/warehouses/locations/delete.d.ts.map +1 -0
  210. package/dist/commands/liberica/warehouses/locations/delete.js +115 -0
  211. package/dist/commands/liberica/warehouses/locations/delete.js.map +1 -0
  212. package/dist/commands/liberica/warehouses/locations/disable.d.ts +3 -0
  213. package/dist/commands/liberica/warehouses/locations/disable.d.ts.map +1 -0
  214. package/dist/commands/liberica/warehouses/locations/disable.js +173 -0
  215. package/dist/commands/liberica/warehouses/locations/disable.js.map +1 -0
  216. package/dist/commands/liberica/warehouses/locations/enable.d.ts +3 -0
  217. package/dist/commands/liberica/warehouses/locations/enable.d.ts.map +1 -0
  218. package/dist/commands/liberica/warehouses/locations/enable.js +173 -0
  219. package/dist/commands/liberica/warehouses/locations/enable.js.map +1 -0
  220. package/dist/commands/liberica/warehouses/locations/get.d.ts +3 -0
  221. package/dist/commands/liberica/warehouses/locations/get.d.ts.map +1 -0
  222. package/dist/commands/liberica/warehouses/locations/get.js +73 -0
  223. package/dist/commands/liberica/warehouses/locations/get.js.map +1 -0
  224. package/dist/commands/liberica/warehouses/locations/index.d.ts +3 -0
  225. package/dist/commands/liberica/warehouses/locations/index.d.ts.map +1 -0
  226. package/dist/commands/liberica/warehouses/locations/index.js +21 -0
  227. package/dist/commands/liberica/warehouses/locations/index.js.map +1 -0
  228. package/dist/commands/liberica/warehouses/locations/list.d.ts +3 -0
  229. package/dist/commands/liberica/warehouses/locations/list.d.ts.map +1 -0
  230. package/dist/commands/liberica/warehouses/locations/list.js +104 -0
  231. package/dist/commands/liberica/warehouses/locations/list.js.map +1 -0
  232. package/dist/commands/liberica/warehouses/locations/update.d.ts +3 -0
  233. package/dist/commands/liberica/warehouses/locations/update.d.ts.map +1 -0
  234. package/dist/commands/liberica/warehouses/locations/update.js +128 -0
  235. package/dist/commands/liberica/warehouses/locations/update.js.map +1 -0
  236. package/dist/commands/liberica/warehouses/update.d.ts +3 -0
  237. package/dist/commands/liberica/warehouses/update.d.ts.map +1 -0
  238. package/dist/commands/liberica/warehouses/update.js +143 -0
  239. package/dist/commands/liberica/warehouses/update.js.map +1 -0
  240. package/dist/core/api/client.d.ts +62 -0
  241. package/dist/core/api/client.d.ts.map +1 -1
  242. package/dist/core/api/client.js +1203 -104
  243. package/dist/core/api/client.js.map +1 -1
  244. package/dist/index.js +1 -3
  245. package/dist/index.js.map +1 -1
  246. package/dist/types/calendar.d.ts +28 -0
  247. package/dist/types/calendar.d.ts.map +1 -0
  248. package/dist/types/calendar.js +2 -0
  249. package/dist/types/calendar.js.map +1 -0
  250. package/dist/types/client-contact.d.ts +65 -0
  251. package/dist/types/client-contact.d.ts.map +1 -0
  252. package/dist/types/client-contact.js +4 -0
  253. package/dist/types/client-contact.js.map +1 -0
  254. package/dist/types/dict.d.ts +97 -0
  255. package/dist/types/dict.d.ts.map +1 -0
  256. package/dist/types/dict.js +2 -0
  257. package/dist/types/dict.js.map +1 -0
  258. package/dist/types/index.d.ts +9 -4
  259. package/dist/types/index.d.ts.map +1 -1
  260. package/dist/types/index.js +1 -0
  261. package/dist/types/index.js.map +1 -1
  262. package/dist/types/location.d.ts +53 -0
  263. package/dist/types/location.d.ts.map +1 -0
  264. package/dist/types/location.js +2 -0
  265. package/dist/types/location.js.map +1 -0
  266. package/dist/types/operation.d.ts +66 -0
  267. package/dist/types/operation.d.ts.map +1 -0
  268. package/dist/types/operation.js +2 -0
  269. package/dist/types/operation.js.map +1 -0
  270. package/dist/types/stock.d.ts +133 -0
  271. package/dist/types/stock.d.ts.map +1 -0
  272. package/dist/types/stock.js +3 -0
  273. package/dist/types/stock.js.map +1 -0
  274. package/dist/types/supplier-contact.d.ts +65 -0
  275. package/dist/types/supplier-contact.d.ts.map +1 -0
  276. package/dist/types/supplier-contact.js +4 -0
  277. package/dist/types/supplier-contact.js.map +1 -0
  278. package/dist/types/warehouse.d.ts +68 -0
  279. package/dist/types/warehouse.d.ts.map +1 -0
  280. package/dist/types/warehouse.js +2 -0
  281. package/dist/types/warehouse.js.map +1 -0
  282. package/docs/commands/REFERENCE.md +24 -4
  283. package/docs/commands/liberica/calendar/DESIGN.md +333 -0
  284. package/docs/commands/liberica/client-contacts/create.md +152 -0
  285. package/docs/commands/liberica/client-contacts/delete.md +123 -0
  286. package/docs/commands/liberica/client-contacts/get.md +133 -0
  287. package/docs/commands/liberica/client-contacts/list.md +143 -0
  288. package/docs/commands/liberica/client-contacts/update.md +158 -0
  289. package/docs/commands/liberica/locations/create.md +195 -0
  290. package/docs/commands/liberica/locations/list.md +171 -0
  291. package/docs/commands/liberica/stock/ledger.md +209 -0
  292. package/docs/commands/liberica/stock/list.md +165 -0
  293. package/docs/commands/liberica/supplier-contacts/create.md +152 -0
  294. package/docs/commands/liberica/supplier-contacts/delete.md +123 -0
  295. package/docs/commands/liberica/supplier-contacts/get.md +133 -0
  296. package/docs/commands/liberica/supplier-contacts/list.md +143 -0
  297. package/docs/commands/liberica/supplier-contacts/update.md +158 -0
  298. package/docs/commands/liberica/warehouses/create.md +222 -0
  299. package/docs/commands/liberica/warehouses/list.md +184 -0
  300. package/package.json +1 -1
  301. package/src/commands/liberica/calendar/index.ts +13 -0
  302. package/src/commands/liberica/calendar/list.ts +214 -0
  303. package/src/commands/liberica/calendar/set.ts +130 -0
  304. package/src/commands/liberica/client-contacts/create.ts +115 -0
  305. package/src/commands/liberica/client-contacts/delete.ts +140 -0
  306. package/src/commands/liberica/client-contacts/get.ts +103 -0
  307. package/src/commands/liberica/client-contacts/index.ts +19 -0
  308. package/src/commands/liberica/client-contacts/list.ts +118 -0
  309. package/src/commands/liberica/client-contacts/update.ts +137 -0
  310. package/src/commands/liberica/dict-types/get.ts +74 -0
  311. package/src/commands/liberica/dict-types/index.ts +15 -0
  312. package/src/commands/liberica/dict-types/list.ts +118 -0
  313. package/src/commands/liberica/dict-types/update.ts +134 -0
  314. package/src/commands/liberica/dicts/create.ts +175 -0
  315. package/src/commands/liberica/dicts/delete.ts +107 -0
  316. package/src/commands/liberica/dicts/get.ts +80 -0
  317. package/src/commands/liberica/dicts/index.ts +19 -0
  318. package/src/commands/liberica/dicts/list.ts +114 -0
  319. package/src/commands/liberica/dicts/update.ts +116 -0
  320. package/src/commands/liberica/index.ts +22 -0
  321. package/src/commands/liberica/materials/create.ts +32 -9
  322. package/src/commands/liberica/operations/active.ts +153 -0
  323. package/src/commands/liberica/operations/batch-delete.ts +131 -0
  324. package/src/commands/liberica/operations/copy.ts +138 -0
  325. package/src/commands/liberica/operations/create.ts +223 -0
  326. package/src/commands/liberica/operations/deactive.ts +152 -0
  327. package/src/commands/liberica/operations/delete.ts +128 -0
  328. package/src/commands/liberica/operations/design.md +587 -0
  329. package/src/commands/liberica/operations/get.ts +112 -0
  330. package/src/commands/liberica/operations/index.ts +27 -0
  331. package/src/commands/liberica/operations/list.ts +180 -0
  332. package/src/commands/liberica/operations/update.ts +218 -0
  333. package/src/commands/liberica/orgs/index.ts +0 -1
  334. package/src/commands/liberica/stock/index.ts +13 -0
  335. package/src/commands/liberica/stock/ledger.ts +159 -0
  336. package/src/commands/liberica/stock/list.ts +128 -0
  337. package/src/commands/liberica/supplier-contacts/create.ts +120 -0
  338. package/src/commands/liberica/supplier-contacts/delete.ts +88 -0
  339. package/src/commands/liberica/supplier-contacts/get.ts +94 -0
  340. package/src/commands/liberica/supplier-contacts/index.ts +19 -0
  341. package/src/commands/liberica/supplier-contacts/list.ts +130 -0
  342. package/src/commands/liberica/supplier-contacts/update.ts +127 -0
  343. package/src/commands/liberica/users/create.ts +1 -0
  344. package/src/commands/liberica/warehouses/create.ts +204 -0
  345. package/src/commands/liberica/warehouses/delete.ts +112 -0
  346. package/src/commands/liberica/warehouses/disable.ts +174 -0
  347. package/src/commands/liberica/warehouses/enable.ts +174 -0
  348. package/src/commands/liberica/warehouses/get.ts +101 -0
  349. package/src/commands/liberica/warehouses/index.ts +25 -0
  350. package/src/commands/liberica/warehouses/list.ts +136 -0
  351. package/src/commands/liberica/warehouses/locations/create.ts +209 -0
  352. package/src/commands/liberica/warehouses/locations/delete.ts +116 -0
  353. package/src/commands/liberica/warehouses/locations/disable.ts +174 -0
  354. package/src/commands/liberica/warehouses/locations/enable.ts +174 -0
  355. package/src/commands/liberica/warehouses/locations/get.ts +84 -0
  356. package/src/commands/liberica/warehouses/locations/index.ts +23 -0
  357. package/src/commands/liberica/warehouses/locations/list.ts +140 -0
  358. package/src/commands/liberica/warehouses/locations/update.ts +135 -0
  359. package/src/commands/liberica/warehouses/update.ts +142 -0
  360. package/src/core/api/client.ts +1493 -78
  361. package/src/index.ts +1 -3
  362. package/src/types/calendar.ts +36 -0
  363. package/src/types/client-contact.ts +78 -0
  364. package/src/types/dict.ts +121 -0
  365. package/src/types/index.ts +9 -4
  366. package/src/types/location.ts +66 -0
  367. package/src/types/operation.ts +72 -0
  368. package/src/types/stock.ts +161 -0
  369. package/src/types/supplier-contact.ts +78 -0
  370. package/src/types/warehouse.ts +82 -0
@@ -0,0 +1,116 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../core/config/manager.js';
4
+ import { apiClient } from '../../../core/api/client.js';
5
+ import { Environment } from '../../../types/index.js';
6
+ import { DictItem, UpdateDictItemRequest } from '../../../types/dict.js';
7
+
8
+ export function createDictUpdateCommand(): Command {
9
+ const updateCommand = new Command('update');
10
+ updateCommand
11
+ .description('Update dictionary item')
12
+ .argument('<dictId>', 'Dictionary item ID')
13
+ .option('--code <code>', 'Dictionary code')
14
+ .option('--name <name>', 'Dictionary name')
15
+ .option('--parent <id>', 'Parent dict type ID')
16
+ .option('--status <status>', 'Status (1=enable, 2=disable)', (val) => {
17
+ const num = parseInt(val, 10);
18
+ if (num !== 1 && num !== 2) {
19
+ throw new Error('Status must be 1 or 2');
20
+ }
21
+ return num;
22
+ })
23
+ .option('--sort <sort>', 'Sort order', (val) => parseInt(val, 10))
24
+ .option('--json', 'Output as JSON')
25
+ .action(async (dictId: string, options: Record<string, unknown>) => {
26
+ const context = configManager.getCurrentContext();
27
+ const environment = context.environment as Environment;
28
+ const tenant = context.tenant;
29
+
30
+ const fields: Partial<UpdateDictItemRequest> = {};
31
+ if (options.code) fields.dictCode = options.code as string;
32
+ if (options.name) fields.dictName = options.name as string;
33
+ if (options.parent) fields.dictTypeId = options.parent as string;
34
+ if (options.status) fields.statusFlag = options.status as 1 | 2;
35
+ if (options.sort) fields.sortOrder = options.sort as number;
36
+
37
+ const providedFields = Object.keys(fields).filter(
38
+ (k) => fields[k as keyof UpdateDictItemRequest] !== undefined
39
+ );
40
+ if (providedFields.length === 0) {
41
+ console.error(
42
+ chalk.red('\n✗ No fields to update. Provide at least one of: --code, --name, --parent, --status, --sort\n')
43
+ );
44
+ process.exit(1);
45
+ }
46
+
47
+ let currentItem: DictItem | undefined;
48
+ try {
49
+ const itemResponse = await apiClient.getDictItem(environment, tenant, dictId);
50
+ if (!itemResponse.success || !itemResponse.data) {
51
+ console.error(chalk.red(`\n✗ Dictionary item not found: ${dictId}`));
52
+ if (itemResponse.error?.message) {
53
+ console.error(chalk.gray(` ${itemResponse.error.message}`));
54
+ }
55
+ if (itemResponse.error?.code) {
56
+ console.error(chalk.gray(` Error code: ${itemResponse.error.code}`));
57
+ }
58
+ console.error();
59
+ process.exit(1);
60
+ }
61
+ currentItem = itemResponse.data as DictItem;
62
+ } catch (error) {
63
+ console.error(chalk.red(`\n✗ Failed to fetch dictionary item: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
64
+ process.exit(1);
65
+ }
66
+
67
+ console.log(chalk.bold(`\n📖 Update Dictionary Item (${environment})\n`));
68
+ console.log(chalk.gray(` Dict ID: ${dictId}`));
69
+ console.log(chalk.gray(` Current Name: ${currentItem.dictName}`));
70
+ console.log(chalk.gray('\n Changes:'));
71
+ for (const field of providedFields) {
72
+ const label = field.replace(/([A-Z])/g, (m) => ` ${m.toLowerCase()}`).trim();
73
+ const currentVal = (currentItem as unknown as Record<string, unknown>)[field] ?? '(not set)';
74
+ const newVal = fields[field as keyof UpdateDictItemRequest];
75
+ console.log(chalk.cyan(` ${label}: "${currentVal}" -> "${newVal}"`));
76
+ }
77
+
78
+ const updateData: UpdateDictItemRequest = { dictId, dictTypeId: currentItem.dictTypeId, ...fields };
79
+ try {
80
+ const response = await apiClient.updateDictItem(environment, tenant, updateData);
81
+
82
+ if (response.success) {
83
+ if (options.json) {
84
+ console.log(JSON.stringify({ success: true, data: response.data }, null, 2));
85
+ } else {
86
+ console.log(chalk.green(`\n✓ Dictionary item updated successfully\n`));
87
+ }
88
+ } else {
89
+ if (options.json) {
90
+ console.log(JSON.stringify({ success: false, error: response.error }, null, 2));
91
+ } else {
92
+ console.error(chalk.red(`\n✗ Update failed: ${response.error?.message || 'Unknown error'}`));
93
+ if (response.error?.code) {
94
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
95
+ }
96
+ console.error();
97
+ }
98
+ process.exit(1);
99
+ }
100
+ } catch (error) {
101
+ if (options.json) {
102
+ console.log(
103
+ JSON.stringify({
104
+ success: false,
105
+ error: { message: error instanceof Error ? error.message : 'Unknown error' },
106
+ })
107
+ );
108
+ } else {
109
+ console.error(chalk.red(`\n✗ Error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
110
+ }
111
+ process.exit(1);
112
+ }
113
+ });
114
+
115
+ return updateCommand;
116
+ }
@@ -12,6 +12,14 @@ import { createSuppliersCommand } from './suppliers/index.js';
12
12
  import { createMaterialsCommand } from './materials/index.js';
13
13
  import { createUomsCommand } from './uoms/index.js';
14
14
  import { createCurrencyCommand } from './currency/index.js';
15
+ import { createWarehousesCommand } from './warehouses/index.js';
16
+ import { createDictTypesCommand } from './dict-types/index.js';
17
+ import { createDictsCommand } from './dicts/index.js';
18
+ import { createOperationsCommand } from './operations/index.js';
19
+ import { createStockCommand } from './stock/index.js';
20
+ import { createCalendarCommand } from './calendar/index.js';
21
+ import { createClientContactsCommand } from './client-contacts/index.js';
22
+ import { createSupplierContactsCommand } from './supplier-contacts/index.js';
15
23
 
16
24
  export function createLibericaCommand(): Command {
17
25
  const libericaCommand = new Command('liberica');
@@ -29,6 +37,14 @@ export function createLibericaCommand(): Command {
29
37
  libericaCommand.addCommand(createMaterialsCommand());
30
38
  libericaCommand.addCommand(createUomsCommand());
31
39
  libericaCommand.addCommand(createCurrencyCommand());
40
+ libericaCommand.addCommand(createWarehousesCommand());
41
+ libericaCommand.addCommand(createDictTypesCommand());
42
+ libericaCommand.addCommand(createDictsCommand());
43
+ libericaCommand.addCommand(createOperationsCommand());
44
+ libericaCommand.addCommand(createStockCommand());
45
+ libericaCommand.addCommand(createCalendarCommand());
46
+ libericaCommand.addCommand(createClientContactsCommand());
47
+ libericaCommand.addCommand(createSupplierContactsCommand());
32
48
 
33
49
  libericaCommand.action(() => {
34
50
  console.log(chalk.bold('\n☕ Liberica Commands\n'));
@@ -43,6 +59,12 @@ export function createLibericaCommand(): Command {
43
59
  console.log(' Use "barista liberica materials <command>" for material management');
44
60
  console.log(' Use "barista liberica uoms <command>" for unit of measure management');
45
61
  console.log(' Use "barista liberica currencies <command>" for currency management');
62
+ console.log(' Use "barista liberica warehouses <command>" for warehouse management');
63
+ console.log(' Use "barista liberica warehouses locations <command>" for warehouse location management');
64
+ console.log(' Use "barista liberica dict-types <command>" for dictionary type management');
65
+ console.log(' Use "barista liberica dicts <command>" for dictionary item management');
66
+ console.log(' Use "barista liberica operations <command>" for operation management');
67
+ console.log(' Use "barista liberica stock <command>" for stock management');
46
68
  console.log('\n Run "barista liberica <command> --help" for more details\n');
47
69
  });
48
70
 
@@ -29,19 +29,26 @@ export function createMaterialsCreateCommand(): Command {
29
29
  .option('--dry-run', 'Preview without making API call')
30
30
  .option('--json', 'Output as JSON');
31
31
 
32
- cmd.action(async () => {
32
+ cmd.action(async (options) => {
33
33
  const context = configManager.getCurrentContext();
34
- const opts = cmd.opts();
35
34
 
36
- let name = opts.name as string | undefined;
37
- let materialNo = (opts.no as string | undefined) || (opts['no'] as string | undefined);
38
- let materialClass = opts.class as string | undefined;
39
- const materialType = opts.type as string | undefined;
40
- const materialUnit = opts.unit as string | undefined;
41
- const dryRun = opts.dryRun === true;
42
- const outputJson = (opts as any).json === true || process.argv.includes('--json');
35
+ let name = options.name as string | undefined;
36
+ let materialNo = (options.no as string | undefined) || (options['no'] as string | undefined);
37
+ let materialClass = options.class as string | undefined;
38
+ const materialType = options.type as string | undefined;
39
+ const materialUnit = options.unit as string | undefined;
40
+ const dryRun = options.dryRun === true;
41
+ const outputJson = options.json === true;
43
42
 
44
43
  if (!name) {
44
+ if (dryRun) {
45
+ if (outputJson) {
46
+ console.log(JSON.stringify({ success: false, error: { code: 'DRY_RUN_MISSING_ARGS', message: 'Missing required --name in dry-run mode' } }));
47
+ } else {
48
+ console.error(chalk.red('\n✗ --name is required. Cannot preview without material name.\n'));
49
+ }
50
+ process.exit(1);
51
+ }
45
52
  const { inputName } = await inquirer.prompt([
46
53
  {
47
54
  type: 'input',
@@ -54,6 +61,14 @@ export function createMaterialsCreateCommand(): Command {
54
61
  }
55
62
 
56
63
  if (!materialClass) {
64
+ if (dryRun) {
65
+ if (outputJson) {
66
+ console.log(JSON.stringify({ success: false, error: { code: 'DRY_RUN_MISSING_ARGS', message: 'Missing required --class in dry-run mode' } }));
67
+ } else {
68
+ console.error(chalk.red('\n✗ --class is required. Cannot preview without material class.\n'));
69
+ }
70
+ process.exit(1);
71
+ }
57
72
  const { inputClass } = await inquirer.prompt([
58
73
  {
59
74
  type: 'input',
@@ -66,6 +81,14 @@ export function createMaterialsCreateCommand(): Command {
66
81
  }
67
82
 
68
83
  if (!materialNo) {
84
+ if (dryRun) {
85
+ if (outputJson) {
86
+ console.log(JSON.stringify({ success: false, error: { code: 'DRY_RUN_MISSING_ARGS', message: 'Missing required --no in dry-run mode' } }));
87
+ } else {
88
+ console.error(chalk.red('\n✗ --no is required. Cannot preview without material number.\n'));
89
+ }
90
+ process.exit(1);
91
+ }
69
92
  const { inputNo } = await inquirer.prompt([
70
93
  {
71
94
  type: 'input',
@@ -0,0 +1,153 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../core/config/manager.js';
4
+ import { apiClient } from '../../../core/api/client.js';
5
+ import { Environment } from '../../../types/index.js';
6
+ import { Operation } from '../../../types/operation.js';
7
+
8
+ export function createOperationActiveCommand(): Command {
9
+ const activeCommand = new Command('active');
10
+ activeCommand
11
+ .description('Enable (activate) operation(s)')
12
+ .argument('[operation-id]', 'Operation ID (mutually exclusive with --ids)')
13
+ .option('--ids <ids>', 'Comma-separated operation IDs for batch operations')
14
+ .option('--force', 'Execute the operation (skip dry-run preview)')
15
+ .option('--dry-run', 'Preview the operation without executing (default)')
16
+ .option('--json', 'Output as JSON')
17
+ .action(async (operationId: string | undefined, options: Record<string, unknown>) => {
18
+ const context = configManager.getCurrentContext();
19
+ const environment = context.environment as Environment;
20
+ const tenant = context.tenant;
21
+ const force = options.force === true;
22
+ const dryRun = !force;
23
+
24
+ const batchIds = options.ids
25
+ ? (options.ids as string).split(',').map((id) => id.trim()).filter((id) => id !== '')
26
+ : [];
27
+
28
+ const jsonOutput = options.json === true;
29
+
30
+ if (!operationId && batchIds.length === 0) {
31
+ const errMsg = 'Invalid operation ID. Provide <operation-id> or use --ids for batch operations.';
32
+ if (jsonOutput) {
33
+ console.log(JSON.stringify({ success: false, error: { code: 'INVALID_ID', message: errMsg } }));
34
+ } else {
35
+ console.error(chalk.red(`\n✗ ${errMsg}\n`));
36
+ }
37
+ process.exit(1);
38
+ }
39
+
40
+ const allIds = operationId ? [operationId] : batchIds;
41
+
42
+ if (!jsonOutput) {
43
+ console.log(chalk.bold(`\n↑ Enable Operation(s) (${environment})\n`));
44
+ if (batchIds.length > 0) {
45
+ console.log(chalk.gray(` Operation IDs: ${batchIds.join(', ')}`));
46
+ } else {
47
+ console.log(chalk.gray(` Operation ID: ${operationId}`));
48
+ }
49
+ }
50
+
51
+ if (dryRun) {
52
+ if (jsonOutput) {
53
+ console.log(JSON.stringify({
54
+ success: true,
55
+ dryRun: true,
56
+ operationIds: allIds,
57
+ message: 'No actual API call will be made',
58
+ }));
59
+ } else {
60
+ console.log(chalk.cyan('\n🔍 Dry-Run Mode: No actual API call will be made\n'));
61
+ console.log(chalk.gray(` This operation will enable ${allIds.length} operation(s).`));
62
+ console.log(chalk.gray('\n To execute, add --force flag.\n'));
63
+ }
64
+ return;
65
+ }
66
+
67
+ const operations: Operation[] = [];
68
+ for (const id of allIds) {
69
+ try {
70
+ const response = await apiClient.getOperationDetail(environment, tenant, id);
71
+ if (!response.success || !response.data || !('operationId' in response.data)) {
72
+ const errMsg = `Operation not found: ${id}`;
73
+ if (jsonOutput) {
74
+ console.log(JSON.stringify({ success: false, error: { code: 'NOT_FOUND', message: errMsg } }));
75
+ } else {
76
+ console.error(chalk.red(`\n✗ ${errMsg}\n`));
77
+ }
78
+ process.exit(1);
79
+ }
80
+ operations.push(response.data as Operation);
81
+ } catch (error) {
82
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
83
+ const jsonErr = { success: false, error: { code: 'FETCH_ERROR', message: 'Failed to fetch operation: ' + errMsg } };
84
+ if (jsonOutput) {
85
+ console.log(JSON.stringify(jsonErr));
86
+ } else {
87
+ console.error(chalk.red(`\n✗ Failed to fetch operation: ${errMsg}\n`));
88
+ }
89
+ process.exit(1);
90
+ }
91
+ }
92
+
93
+ const allAlreadyEnabled = operations.every((op) => op.statusFlag === 1);
94
+ if (allAlreadyEnabled) {
95
+ const names = operations.map((op) => `"${op.operationName}"`).join(', ');
96
+ const errMsg = `Operation(s) ${names} ${operations.length === 1 ? 'is' : 'are'} already enabled`;
97
+ if (jsonOutput) {
98
+ console.log(JSON.stringify({ success: false, error: { code: 'ALREADY_ENABLED', message: errMsg } }));
99
+ } else {
100
+ console.error(chalk.yellow(`\n⚠ ${errMsg}\n`));
101
+ }
102
+ process.exit(1);
103
+ }
104
+
105
+ if (!jsonOutput) {
106
+ if (operations.length === 1) {
107
+ console.log(chalk.gray(` Name: ${operations[0].operationName}`));
108
+ console.log(chalk.gray(` Code: ${operations[0].operationCode}`));
109
+ } else {
110
+ operations.forEach((op, i) => {
111
+ console.log(chalk.gray(` [${i + 1}] ${op.operationName} (${op.operationCode})`));
112
+ });
113
+ }
114
+ console.log();
115
+ }
116
+
117
+ try {
118
+ const response = await apiClient.batchActiveOperations(environment, tenant, allIds);
119
+
120
+ if (response.success) {
121
+ if (jsonOutput) {
122
+ console.log(JSON.stringify({ success: true, operationIds: allIds }));
123
+ } else {
124
+ const names = operations.map((op) => op.operationName).join(', ');
125
+ console.log(chalk.green(`\n✓ Operation(s) ${names || allIds.join(', ')} enabled\n`));
126
+ }
127
+ } else {
128
+ const errorMsg = response.error?.message || 'Unknown error';
129
+ const errorCode = response.error?.code || 'ACTIVE_ERROR';
130
+ if (jsonOutput) {
131
+ console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
132
+ } else {
133
+ console.error(chalk.red(`\n✗ Failed to enable operation(s): ${errorMsg}`));
134
+ if (response.error?.code) {
135
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
136
+ }
137
+ console.error();
138
+ }
139
+ process.exit(1);
140
+ }
141
+ } catch (error) {
142
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
143
+ if (jsonOutput) {
144
+ console.log(JSON.stringify({ success: false, error: { code: 'ERROR', message: errMsg } }));
145
+ } else {
146
+ console.error(chalk.red(`\n✗ Error: ${errMsg}\n`));
147
+ }
148
+ process.exit(1);
149
+ }
150
+ });
151
+
152
+ return activeCommand;
153
+ }
@@ -0,0 +1,131 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../core/config/manager.js';
4
+ import { apiClient } from '../../../core/api/client.js';
5
+ import { Environment } from '../../../types/index.js';
6
+ import { Operation } from '../../../types/operation.js';
7
+
8
+ export function createBatchDeleteCommand(): Command {
9
+ const batchDeleteCommand = new Command('batch-delete');
10
+ batchDeleteCommand
11
+ .description('Batch delete operations')
12
+ .requiredOption('--ids <ids>', 'Comma-separated operation IDs')
13
+ .option('--force', 'Skip confirmation and delete directly')
14
+ .option('--dry-run', 'Preview without API call (default)')
15
+ .option('--json', 'Output as JSON')
16
+ .action(async (options: Record<string, unknown>) => {
17
+ const context = configManager.getCurrentContext();
18
+ const environment = context.environment as Environment;
19
+ const tenant = context.tenant;
20
+ const force = options.force === true;
21
+ const dryRun = options.dryRun === true || !force;
22
+ const jsonOutput = options.json === true;
23
+ const idsParam = options.ids as string;
24
+
25
+ if (!idsParam) {
26
+ const errMsg = 'Missing required option: --ids';
27
+ if (jsonOutput) {
28
+ console.log(JSON.stringify({ success: false, error: { code: 'MISSING_IDS', message: errMsg } }));
29
+ } else {
30
+ console.error(chalk.red(`\n✗ ${errMsg}\n`));
31
+ }
32
+ process.exit(1);
33
+ }
34
+
35
+ const ids = idsParam.split(',').map((id) => id.trim()).filter((id) => id !== '');
36
+
37
+ if (ids.length === 0) {
38
+ const errMsg = 'No valid operation IDs provided';
39
+ if (jsonOutput) {
40
+ console.log(JSON.stringify({ success: false, error: { code: 'INVALID_IDS', message: errMsg } }));
41
+ } else {
42
+ console.error(chalk.red(`\n✗ ${errMsg}\n`));
43
+ }
44
+ process.exit(1);
45
+ }
46
+
47
+ if (!jsonOutput) {
48
+ console.log(chalk.bold(`\n🗑️ Batch Delete Operations (${environment})\n`));
49
+ console.log(chalk.gray(` Operation IDs: ${ids.join(', ')}`));
50
+ }
51
+
52
+ if (dryRun) {
53
+ const operations: Operation[] = [];
54
+ for (const id of ids) {
55
+ try {
56
+ const response = await apiClient.getOperationDetail(environment, tenant, id);
57
+ if (response.success && response.data && 'operationId' in response.data) {
58
+ operations.push(response.data as Operation);
59
+ }
60
+ } catch {
61
+ // skip fetch errors
62
+ }
63
+ }
64
+
65
+ if (jsonOutput) {
66
+ console.log(JSON.stringify({
67
+ success: true,
68
+ dryRun: true,
69
+ operationIds: ids,
70
+ operations: operations.map((op) => ({
71
+ operationId: op.operationId,
72
+ operationCode: op.operationCode,
73
+ operationName: op.operationName,
74
+ operationType: op.operationType,
75
+ })),
76
+ message: 'Dry-run mode: no actual deletion will be performed',
77
+ }));
78
+ } else {
79
+ console.log(chalk.cyan('\n🔍 Dry-Run Mode: No actual deletion will be performed\n'));
80
+ if (operations.length > 0) {
81
+ console.log(chalk.gray(' Operations to be deleted:'));
82
+ operations.forEach((op) => {
83
+ console.log(chalk.gray(` - ${op.operationName} (${op.operationCode}) [${op.operationId}]`));
84
+ });
85
+ } else {
86
+ console.log(chalk.gray(` ${ids.length} operation(s) will be deleted.`));
87
+ }
88
+ console.log();
89
+ console.log(chalk.yellow(' To delete, run with --force flag'));
90
+ console.log();
91
+ }
92
+ return;
93
+ }
94
+
95
+ // Actual deletion with --force
96
+ try {
97
+ const response = await apiClient.batchDeleteOperations(environment, tenant, ids);
98
+
99
+ if (response.success) {
100
+ if (jsonOutput) {
101
+ console.log(JSON.stringify({ success: true, operationIds: ids }));
102
+ } else {
103
+ console.log(chalk.green(`\n✓ Deleted ${ids.length} operation(s)\n`));
104
+ }
105
+ } else {
106
+ const errorMsg = response.error?.message || 'Unknown error';
107
+ const errorCode = response.error?.code || 'DELETE_ERROR';
108
+ if (jsonOutput) {
109
+ console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
110
+ } else {
111
+ console.error(chalk.red(`\n✗ Failed to delete operations: ${errorMsg}`));
112
+ if (response.error?.code) {
113
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
114
+ }
115
+ console.error();
116
+ }
117
+ process.exit(1);
118
+ }
119
+ } catch (error) {
120
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
121
+ if (jsonOutput) {
122
+ console.log(JSON.stringify({ success: false, error: { code: 'ERROR', message: errMsg } }));
123
+ } else {
124
+ console.error(chalk.red(`\n✗ Error: ${errMsg}\n`));
125
+ }
126
+ process.exit(1);
127
+ }
128
+ });
129
+
130
+ return batchDeleteCommand;
131
+ }
@@ -0,0 +1,138 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../core/config/manager.js';
4
+ import { apiClient } from '../../../core/api/client.js';
5
+ import { Environment } from '../../../types/index.js';
6
+ import { Operation } from '../../../types/operation.js';
7
+
8
+ export function createOperationsCopyCommand(): Command {
9
+ const copyCommand = new Command('copy');
10
+ copyCommand
11
+ .description('Copy an operation')
12
+ .option('--id <id>', 'Source operation ID')
13
+ .option('-n, --name <name>', 'New operation name (optional, defaults to "Copy of {originalName}")')
14
+ .option('--force', 'Skip confirmation and copy directly')
15
+ .option('--dry-run', 'Preview without making API call')
16
+ .option('--json', 'Output as JSON')
17
+ .action(async (options: Record<string, unknown>) => {
18
+ const context = configManager.getCurrentContext();
19
+ const environment = context.environment as Environment;
20
+ const tenant = context.tenant;
21
+ const force = options.force === true;
22
+ const dryRun = options.dryRun === true;
23
+ const jsonOutput = options.json === true;
24
+ const newName = options.name as string | undefined;
25
+
26
+ const operationId = options.id as string | undefined;
27
+ if (!operationId) {
28
+ if (jsonOutput) {
29
+ console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ID', message: '--id is required' } }));
30
+ } else {
31
+ console.error(chalk.red('\n✗ --id is required\n'));
32
+ }
33
+ process.exit(1);
34
+ }
35
+
36
+ if (!jsonOutput) {
37
+ console.log(chalk.bold(`\n📋 Copy Operation (${environment})\n`));
38
+ console.log(chalk.gray(` Source ID: ${operationId}`));
39
+ }
40
+
41
+ let operation: Operation | undefined;
42
+ try {
43
+ const operationResponse = await apiClient.getOperationDetail(environment, tenant, operationId);
44
+ if (!operationResponse.success || !operationResponse.data || !('operationId' in operationResponse.data)) {
45
+ const errMsg = `Operation not found: ${operationId}`;
46
+ if (jsonOutput) {
47
+ console.log(JSON.stringify({ success: false, error: { code: 'NOT_FOUND', message: errMsg } }));
48
+ } else {
49
+ console.error(chalk.red(`\n✗ ${errMsg}\n`));
50
+ }
51
+ process.exit(1);
52
+ }
53
+ operation = operationResponse.data as Operation;
54
+ } catch (error) {
55
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
56
+ if (jsonOutput) {
57
+ console.log(JSON.stringify({ success: false, error: { code: 'FETCH_ERROR', message: `Failed to fetch operation: ${errMsg}` } }));
58
+ } else {
59
+ console.error(chalk.red(`\n✗ Failed to fetch operation: ${errMsg}\n`));
60
+ }
61
+ process.exit(1);
62
+ }
63
+
64
+ const operationName = newName || `Copy of ${operation.operationName}`;
65
+
66
+ if (!jsonOutput) {
67
+ console.log(chalk.gray(` Source Name: ${operation.operationName}`));
68
+ console.log(chalk.gray(` Source Code: ${operation.operationCode}`));
69
+ console.log(chalk.gray(` Type: ${operation.operationType}`));
70
+ if (operation.workCenterCode) {
71
+ console.log(chalk.gray(` Work Center: ${operation.workCenterCode}`));
72
+ }
73
+ if (operation.leadTime) {
74
+ console.log(chalk.gray(` Lead Time: ${operation.leadTime}h`));
75
+ }
76
+ console.log(chalk.cyan(`\n → New Name: ${operationName}\n`));
77
+ }
78
+
79
+ if (dryRun) {
80
+ if (jsonOutput) {
81
+ console.log(JSON.stringify({ success: true, dryRun: true, sourceOperation: operation, newName: operationName }));
82
+ } else {
83
+ console.log(chalk.cyan('🔍 Dry-Run Mode: No actual copy will be made\n'));
84
+ console.log(chalk.yellow(' To copy, run without --dry-run\n'));
85
+ }
86
+ return;
87
+ }
88
+
89
+ if (!force) {
90
+ if (jsonOutput) {
91
+ console.log(JSON.stringify({ success: true, dryRun: true, sourceOperation: operation, newName: operationName }));
92
+ } else {
93
+ console.log(chalk.cyan('🔍 Dry-Run Mode: No actual copy will be made\n'));
94
+ console.log(chalk.yellow(' To copy, add --force flag\n'));
95
+ }
96
+ return;
97
+ }
98
+
99
+ try {
100
+ const response = await apiClient.copyOperation(environment, tenant, operationId);
101
+
102
+ if (response.success && response.data && 'operationId' in response.data) {
103
+ const newOperation = response.data as Operation;
104
+ if (jsonOutput) {
105
+ console.log(JSON.stringify({ success: true, operation: newOperation }));
106
+ } else {
107
+ console.log(chalk.green(`\n✓ Operation copied successfully\n`));
108
+ console.log(chalk.gray(` New ID: ${newOperation.operationId}`));
109
+ console.log(chalk.gray(` New Code: ${newOperation.operationCode}`));
110
+ console.log(chalk.gray(` New Name: ${newOperation.operationName}\n`));
111
+ }
112
+ } else {
113
+ const errorMsg = response.error?.message || 'Unknown error';
114
+ const errorCode = response.error?.code || 'COPY_ERROR';
115
+ if (jsonOutput) {
116
+ console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
117
+ } else {
118
+ console.error(chalk.red(`\n✗ Failed to copy operation: ${errorMsg}`));
119
+ if (response.error?.code) {
120
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
121
+ }
122
+ console.error();
123
+ }
124
+ process.exit(1);
125
+ }
126
+ } catch (error) {
127
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
128
+ if (jsonOutput) {
129
+ console.log(JSON.stringify({ success: false, error: { code: 'ERROR', message: errMsg } }));
130
+ } else {
131
+ console.error(chalk.red(`\n✗ Error: ${errMsg}\n`));
132
+ }
133
+ process.exit(1);
134
+ }
135
+ });
136
+
137
+ return copyCommand;
138
+ }