RequestLineController.php 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105
  1. <?php
  2. /*
  3. Desarrollador: Ing. Jean Jairo Benitez Meza
  4. Ultima Modificación: 27/04/2023
  5. Módulo: Gestión de Adquisiciones
  6. */
  7. namespace App\Http\Controllers;
  8. use App\Http\Controllers\ResponseController;
  9. use App\Http\Controllers\EncryptionController;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Carbon;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Validator;
  14. use App\Http\Controllers\FunctionsController;
  15. class RequestLineController extends Controller
  16. {
  17. private $responseController;
  18. private $encController;
  19. private $documentManagementController;
  20. private $functionsController;
  21. private $resourcesController;
  22. private $processManagementController;
  23. public function __construct(){
  24. $this->responseController = new ResponseController();
  25. $this->encController = new EncryptionController();
  26. $this->documentManagementController = new DocumentManagementController();
  27. $this->functionsController = new FunctionsController();
  28. $this->resourcesController = new ResourcesController();
  29. $this->processManagementController = new ProcessManagementController();
  30. }
  31. /*
  32. [
  33. {
  34. "TABLA": "S002V01TLINE",
  35. "CAMPO_ESTADO": "LINE_ESTA",
  36. "CAMBIO_ESTADO": "En espera",
  37. "NUMERO_LINEA": "LINE_NULI",
  38. "FECHA_MODIFICA": "LINE_FEMO",
  39. "FECHA_REGISTRA": "LINE_FERE",
  40. "USUARIO_MODIFICA": "LINE_USMO",
  41. "USUARIO_REGISTRA": "LINE_USRE"
  42. }
  43. ]
  44. */
  45. // Se registran las líneas de solicitud
  46. public function createRequestLine(Request $request){
  47. $validator = Validator::make($request->all(), [
  48. 'LINE' => 'required|integer',
  49. 'USER' => 'required|string',
  50. 'PRODUCTS' => 'required|array',
  51. 'PURPOSE' => 'required',
  52. ]);
  53. if ($validator->fails()) {
  54. return $this->responseController->makeResponse(
  55. true,
  56. "ERR_REQUESTLINE_REG000: Se encontraron uno o más errores.",
  57. $this->responseController->makeErrors($validator->errors()->messages()),
  58. 401
  59. );
  60. }
  61. DB::beginTransaction();
  62. $requestData = $request->all();
  63. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USER'], $requestData['LINE']);
  64. if ($arrResponseCheckUser['error']) {
  65. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_REG001:'.$arrResponseCheckUser['msg'], [], 401);
  66. }
  67. $user = $arrResponseCheckUser['response'];
  68. $idOrderPreventive = null;
  69. if ($requestData['PURPOSE']['PROPOSITO'] == 'MANT-PREV') {
  70. $idOrderPreventive = $requestData['PURPOSE']['ID'];
  71. try {
  72. $validateExistsPreventive = DB::table('S002V01TOTPR')
  73. ->where('OTPR_NULI', '=', $requestData['LINE'])
  74. ->where('OTPR_IDOT', '=', $idOrderPreventive )
  75. ->exists();
  76. } catch (\Throwable $th) {
  77. DB::rollBack();
  78. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG002: Ocurrió un error al validar la orden de mantenimiento preventivo.", $th->getMessage(), 500);
  79. }
  80. if (!$validateExistsPreventive) {
  81. DB::rollBack();
  82. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG003: La orden de mantenimiento preventivo no existe", [], 500);
  83. }
  84. }
  85. $idOrderCorrective = null;
  86. if ($requestData['PURPOSE']['PROPOSITO'] == 'MANT-CORR') {
  87. $idOrderCorrective = $requestData['PURPOSE']['ID'];
  88. try {
  89. $validateExistsCorrective = DB::table('S002V01TOTCO')
  90. ->where('OTCO_NULI', '=', $requestData['LINE'])
  91. ->where('OTCO_IDOT', '=', $idOrderCorrective )
  92. ->exists();
  93. } catch (\Throwable $th) {
  94. DB::rollBack();
  95. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG004: Ocurrió un error al validar la orden de mantenimiento correctivo.", $th->getMessage(), 500);
  96. }
  97. if (!$validateExistsCorrective) {
  98. DB::rollBack();
  99. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG005: La orden de mantenimiento correctivo no existe", [], 500);
  100. }
  101. }
  102. $arrArtitles = array();
  103. $count = 0;
  104. foreach ($requestData['PRODUCTS'] as $keyProducts => $products) {
  105. if ($keyProducts === 0) {
  106. $arrArtitles[$count] = [
  107. "NUMERO_ARTICULO" => $products['NUMERO_ARTICULO'],
  108. "NUMERO_PROVEEDOR" => $products['NUMERO_PROVEEDOR'],
  109. "NUMERO_INFORMACION" => $products['NUMERO_INFORMACION'],
  110. "CANTIDAD" => 1,
  111. ];
  112. $count++;
  113. } else {
  114. $find = false;
  115. foreach ($arrArtitles as $key => $value) {
  116. if (
  117. $value['NUMERO_ARTICULO'] === $products['NUMERO_ARTICULO'] &&
  118. $value['NUMERO_PROVEEDOR'] === $products['NUMERO_PROVEEDOR'] &&
  119. $value['NUMERO_INFORMACION'] === $products['NUMERO_INFORMACION']
  120. ) {
  121. $arrArtitles[$key]['CANTIDAD']++;
  122. $find = true;
  123. }
  124. }
  125. if ($find === false) {
  126. $arrArtitles[$count] = [
  127. "NUMERO_ARTICULO" => $products['NUMERO_ARTICULO'],
  128. "NUMERO_PROVEEDOR" => $products['NUMERO_PROVEEDOR'],
  129. "NUMERO_INFORMACION" => $products['NUMERO_INFORMACION'],
  130. "CANTIDAD" => 1,
  131. ];
  132. $count++;
  133. }
  134. }
  135. }
  136. $arrToWorkflow = array();
  137. foreach ($arrArtitles as $articles) {
  138. try {
  139. $arrArticle = (array) DB::table('S002V01TARTI')
  140. ->where('ARTI_IDAR', '=', $articles['NUMERO_ARTICULO'])
  141. ->where('INAR_IDIN', '=', $articles['NUMERO_INFORMACION'])
  142. ->where('ARTI_NULI', '=', $requestData['LINE'])
  143. ->where('DEAR_NULI', '=', $requestData['LINE'])
  144. ->where('INAR_NULI', '=', $requestData['LINE'])
  145. ->where('ARTI_ESTA', '=', 'Activo')
  146. ->where('DEAR_ESTA', '=', 'Activo')
  147. ->where('INAR_ESTA', '=', 'Activo')
  148. ->join('S002V01TDEAR', 'DEAR_IDAR', '=', 'ARTI_IDAR')
  149. ->join('S002V01TINAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
  150. ->join('S002V01TFAMI','FAMI_COFA','=','ARTI_COFA')
  151. ->join('S002V01TSUBF','SUBF_COSU','=','ARTI_COSU')
  152. ->first([
  153. DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'),
  154. DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'),
  155. 'INAR_MODE AS MODELO',
  156. 'INAR_CODI AS CODIGO_MODELO',
  157. DB::raw('CONCAT("$ ", INAR_PREC, " ", INAR_COMO) AS PRECIO'),
  158. ]);
  159. } catch (\Throwable $th) {
  160. DB::rollBack();
  161. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG005: No se pudo obtener la información de los productos.", $th->getMessage(), 500);
  162. }
  163. $arrArticle['CANTIDAD'] = $articles['CANTIDAD'];
  164. $arrArticle['NUMERO_PROVEEDOR'] = $articles['NUMERO_PROVEEDOR'];
  165. $arrToWorkflow[] = $arrArticle;
  166. }
  167. $strToWorkflow = json_encode($arrToWorkflow);
  168. $encToWorkflow = $this->encController->encrypt($strToWorkflow);
  169. $now = $this->functionsController->now();
  170. $currentDate = $now->toDateTimeString();
  171. $arrProviders = array_unique(array_column($requestData['PRODUCTS'], 'NUMERO_PROVEEDOR'));
  172. $arrInfoRegistro = array();
  173. foreach ($arrProviders as $provider) {
  174. try {
  175. $idRegisterLine = DB::table('S002V01TLINE')->insertGetId([
  176. 'LINE_NUPR' => $provider,
  177. 'LINE_OTPR' => $idOrderPreventive,
  178. 'LINE_OTCO' => $idOrderCorrective,
  179. 'LINE_NULI' => $requestData['LINE'],
  180. 'LINE_ESTA' => 'Workflow',
  181. 'LINE_USRE' => $user,
  182. 'LINE_FERE' => $currentDate,
  183. 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  184. ]);
  185. } catch (\Throwable $th) {
  186. DB::rollBack();
  187. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG006: Ocurrió un error al hacer la inserción en la base.", $th->getMessage(), 500);
  188. }
  189. if ($idRegisterLine == null || $idRegisterLine <= 0) {
  190. DB::rollBack();
  191. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG007: Ocurrió un error al hacer la inserción en la base.", [], 500);
  192. }
  193. $arrInfoRegistro['S002V01TLINE'][] = [
  194. 'LINE_IDLI' => $idRegisterLine,
  195. ];
  196. $nuar = 0;
  197. foreach ($requestData['PRODUCTS'] as $products) {
  198. if ($products['NUMERO_PROVEEDOR'] === $provider) {
  199. try {
  200. $validateInsert = DB::table('S002V01TARSE')->insert([
  201. 'ARSE_IDAS' => $nuar,
  202. 'ARSE_NULI' => $requestData['LINE'],
  203. 'ARSE_IDLI' => $idRegisterLine,
  204. 'ARSE_IDAR' => $products['NUMERO_ARTICULO'],
  205. 'ARSE_NUPR' => $products['NUMERO_PROVEEDOR'],
  206. 'ARSE_IDIN' => $products['NUMERO_INFORMACION'],
  207. 'ARSE_USRE' => $user,
  208. 'ARSE_FERE' => $currentDate,
  209. 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  210. ]);
  211. } catch (\Throwable $th) {
  212. DB::rollBack();
  213. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG008: Ocurrió un error al insertar los artículos en la base de datos.", $th->getMessage(), 500);
  214. }
  215. if (!$validateInsert) {
  216. DB::rollBack();
  217. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_REG009: No se pudo insertar los datos en la base de datos.", [], 500);
  218. }
  219. $nuar = $nuar + 1;
  220. }
  221. }
  222. }
  223. $strInfoRegistro = json_encode($arrInfoRegistro);
  224. $encInfoRegistro = $this->encController->encrypt($strInfoRegistro);
  225. $arrResponseRequestWorkflow = $this->processManagementController->registerRequestWorkflow(1, $encToWorkflow, $encInfoRegistro, $user, $requestData['LINE']);
  226. if ($arrResponseRequestWorkflow['error']) {
  227. DB::rollBack();
  228. return $this->responseController->makeResponse(true, $arrResponseRequestWorkflow['msg'], $arrResponseRequestWorkflow['response'], 500);
  229. }
  230. DB::commit();
  231. return $this->responseController->makeResponse(false, "ÉXITO: Registro correcto");
  232. }
  233. public function getAllRequestLines($user, $line) {
  234. try {
  235. $arrRequestLines = DB::table('S002V01TLINE')
  236. ->where("LINE_NULI", "=", $line)
  237. ->where("LINE_ESTA", "!=", 'Workflow')
  238. ->where("LINE_ESTA", "!=", 'Workflow Rechazado')
  239. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'LINE_NUPR')
  240. ->get([
  241. 'LINE_IDLI AS ID_LINEA_SOLICITUD',
  242. 'LINE_NUPR AS NUMERO_PROVEEDOR',
  243. 'PROV_NOCO AS NOMBRE_COMERCIAL',
  244. 'LINE_OTPR AS ORDEN_TRABAJO_PREVENTIVO',
  245. 'LINE_OTCO AS ORDEN_TRABAJO_CORRECTIVO',
  246. 'LINE_ESTA AS ESTADO',
  247. 'LINE_USRE AS USUARIO_REGISTRA',
  248. 'LINE_FERE AS FECHA_REGISTRA',
  249. 'LINE_USMO AS USUARIO_MODIFICA',
  250. 'LINE_FEMO AS FECHA_MODIFICA',
  251. ]);
  252. } catch (\Throwable $th) {
  253. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GET000: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  254. }
  255. $arrRequestLines = json_decode(json_encode($arrRequestLines), true);
  256. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrRequestLines, $line);
  257. if ($responseCheckLatestUpdate['error']) {
  258. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  259. }
  260. $arrRequestLines = $responseCheckLatestUpdate['response'];
  261. try {
  262. $arrOrders= DB::table('S002V01TORCO')
  263. ->where("ORCO_NULI", "=", $line)
  264. ->get([
  265. 'ORCO_NUOR AS NUMERO_ORDEN',
  266. 'ORCO_IDLI AS ID_LINEA_SOLICITUD',
  267. 'ORCO_IDDE AS ID_DESPACHO',
  268. 'ORCO_ESTA AS ESTADO',
  269. ]);
  270. } catch (\Throwable $th) {
  271. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GET001: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  272. }
  273. $arrOrders = json_decode(json_encode($arrOrders), true);
  274. foreach ($arrRequestLines as $keyRequest => $requestLine) {
  275. try {
  276. $getSelected = DB::table('S002V01TARSE')
  277. ->where('ARSE_IDLI', '=', $requestLine['ID_LINEA_SOLICITUD'])
  278. ->where('ARSE_NULI', '=', $line)
  279. ->where('INAR_NULI', '=', $line)
  280. ->where('DEAR_NULI', '=', $line)
  281. ->where('ARTI_NULI', '=', $line)
  282. ->where('FAMI_NULI', '=', $line)
  283. ->where('SUBF_NULI', '=', $line)
  284. ->where('UNID_NULI', '=', $line)
  285. ->join('S002V01TINAR','INAR_IDIN','=','ARSE_IDIN')
  286. ->join('S002V01TDEAR','DEAR_IDDE','=','INAR_IDDE')
  287. ->join('S002V01TARTI','ARTI_IDAR','=','DEAR_IDAR')
  288. ->join('S002V01TFAMI','FAMI_COFA','=','ARTI_COFA')
  289. ->join('S002V01TSUBF','SUBF_COSU','=','ARTI_COSU')
  290. ->join('S002V01TUNID','UNID_IDUN','=','DEAR_IDUN')
  291. ->join('S002V01TCAMO','CAMO_COMO','=','INAR_COMO')
  292. ->get([
  293. 'ARSE_IDAS AS ID_ARTICULO_SELECCIONADO',
  294. 'ARSE_NUPR AS NUMERO_PROVEEDOR',
  295. 'ARSE_ESTA AS ESTADO',
  296. 'INAR_IDIN AS NUMERO_INFORMACION',
  297. 'INAR_CODI AS CODIGO_INFORMACION',
  298. 'INAR_MODE AS MODELO_INFORMACION',
  299. 'CAMO_COMO AS CODIGO_MONEDA',
  300. 'CAMO_DESC AS MONEDA_DESCRIPCION',
  301. 'INAR_PREC AS PRECIO_UNITARIO',
  302. 'INAR_MOMI AS MONTO_MINIMO',
  303. 'INAR_CARA AS CARACTERISTICAS_INFORMACION',
  304. 'DEAR_IDDE AS NUMERO_DESCRIPCION',
  305. 'DEAR_IMAG AS IMAGENES',
  306. 'DEAR_DESC AS DESCRIPCION',
  307. 'DEAR_CARA AS CARACTERISTICAS',
  308. 'DEAR_COWE AS COMPRA_WEB',
  309. 'ARTI_IDAR AS NUMERO_ARTICULO',
  310. 'ARTI_CODI AS CODIGO',
  311. 'ARTI_NOMB AS ARTICULO',
  312. 'FAMI_COFA AS CODIGO_FAMILIA',
  313. 'FAMI_NOFA AS NOMBRE_FAMILIA',
  314. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  315. 'SUBF_NOSU AS NOMBRE_SUBFAMILIA',
  316. 'UNID_IDUN AS ID_UNIDAD',
  317. 'UNID_NOMB AS NOMBRE_UNIDAD',
  318. 'UNID_ACRO AS ACRONIMO_UNIDAD',
  319. ]);
  320. } catch (\Throwable $th) {
  321. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GET002: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  322. }
  323. $arrSelected = json_decode(json_encode($getSelected), true);
  324. $index = 0;
  325. $arrArtitles = array();
  326. foreach ($arrSelected as $keyArtitle => $artitles) {
  327. if ($keyArtitle === 0) {
  328. $arrArtitles[$index] = $artitles;
  329. $arrArtitles[$index]['CANTIDAD'] = 1;
  330. } else {
  331. if (
  332. in_array($artitles['NUMERO_INFORMACION'], array_column($arrArtitles, 'NUMERO_INFORMACION'))
  333. ) {
  334. $indexArtitle = array_search($artitles['NUMERO_INFORMACION'], array_column($arrArtitles, 'NUMERO_INFORMACION'));
  335. $arrArtitles[$indexArtitle]['CANTIDAD'] = $arrArtitles[$indexArtitle]['CANTIDAD'] + 1;
  336. } else {
  337. $index = $index + 1;
  338. $arrArtitles[$index] = $artitles;
  339. $arrArtitles[$index]['CANTIDAD'] = 1;
  340. }
  341. }
  342. }
  343. foreach ($arrArtitles as $keySelected => $selected) {
  344. $arrImagen = json_decode($selected['IMAGENES']);
  345. $arrUrlImage = array();
  346. foreach ($arrImagen as $key => $imagen) {
  347. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($imagen, $user, $line);
  348. if ($responseDocument['error']) {
  349. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GET003: Ocurrió un error al obtener la URL de la imágen.", [], 500);
  350. }
  351. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  352. }
  353. $arrArtitles[$keySelected]['IMAGENES'] = $arrUrlImage;
  354. }
  355. foreach ($arrOrders as $order) {
  356. if ($requestLine['ID_LINEA_SOLICITUD'] == $order['ID_LINEA_SOLICITUD']) {
  357. $requestLine['NUMERO_ORDEN'] = $order['NUMERO_ORDEN'];
  358. }
  359. }
  360. if (!array_key_exists('LINE_NUOR', $requestLine)) {
  361. $requestLine['NUMERO_ORDEN'] = null;
  362. }
  363. $arrRequestLines[$keyRequest] = $requestLine;
  364. $arrRequestLines[$keyRequest]['SELECTED'] = $arrArtitles;
  365. }
  366. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrRequestLines);
  367. }
  368. // Se obtiene una línea de solicitud en específico
  369. public function getRequestLine($encIdRequestLine, $user, $line){
  370. try {
  371. $idRequestLine = $this->encController->decrypt($encIdRequestLine);
  372. } catch (\Throwable $th) {
  373. return $this->responseController->makeResponse(true, "ERR_ORDER_GET000: Ocurrió un error al obtener el contenido.", $th->getMessage(), 500);
  374. }
  375. try {
  376. $arrRequestLines = DB::table('S002V01TLINE')
  377. ->where("LINE_NULI", "=", $line)
  378. ->where("LINE_IDLI", "=", $idRequestLine)
  379. ->first([
  380. 'LINE_IDLI AS ID_LINEA_SOLICITUD',
  381. 'LINE_ESTA AS ESTADO',
  382. 'LINE_IDME AS METODO_PAGO',
  383. 'LINE_FERE AS FECHA_REGISTRA',
  384. 'LINE_FEMO AS FECHA_MODIFICA',
  385. 'LINE_USRE AS USUARIO_REGISTRA',
  386. 'LINE_USMO AS USUARIO_MODIFICA'
  387. ]);
  388. } catch (\Throwable $th) {
  389. return $this->responseController->makeResponse(true, "ERR_ORDER_GET001: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  390. }
  391. try {
  392. $arrProducts = DB::table('S002V01TARSE')
  393. ->where("ARSE_NULI", "=", $line)
  394. ->where('ARSE_IDLI', '=', $idRequestLine)
  395. ->where('PROV_ESTA', '=', 'Activo')
  396. ->join('S002V01TPROV', 'ARSE_NUPR', '=', 'PROV_NUPR')
  397. ->join('S002V01TINAR', 'ARSE_IDIN', '=', 'INAR_IDIN')
  398. ->join('S002V01TCAMO', 'CAMO_COMO', '=', 'INAR_COMO')
  399. ->get([
  400. 'ARSE_IDAS AS NUMERO_ARTI_SELE',
  401. 'ARSE_IDAR AS NUMERO_ARTICULO',
  402. 'ARSE_NUPR AS NUMERO_PRODUCTO',
  403. 'INAR_MODE AS MODELO',
  404. 'INAR_CODI AS CODIGO',
  405. 'INAR_CARA AS CARACTERISTICAS',
  406. 'ARSE_CANT AS CANTIDAD',
  407. 'INAR_PREC AS PRECIO_UNITARIO',
  408. 'CAMO_COMO AS MONEDA',
  409. 'CAMO_DESC AS MONEDA_DESCRIPCION',
  410. // 'ARSE_PRTO AS PRECIO_TOTAL',
  411. 'ARSE_ESTA AS ESTADO',
  412. 'ARSE_USRE AS USUARIO_REGISTRA',
  413. 'ARSE_FERE AS FECHA_REGISTRA',
  414. 'ARSE_USMO AS USUARIO_MODIFICA',
  415. 'ARSE_FEMO AS FECHA_MODIFICA',
  416. 'PROV_NUPR AS NUMERO_PROVEEDOR',
  417. 'PROV_NOCO AS PROVEEDOR',
  418. 'PROV_ESTA AS ESTADO_PROVEEDOR'
  419. ]);
  420. foreach ($arrProducts as $productos) {
  421. if ($productos == 'Eliminado') {
  422. return $this->responseController->makeResponse(true, "ERR_ORDER_GET002: Existe un usuario en la solicitud que se encuentra eliminado", [], 500);
  423. }
  424. }
  425. $arrRequestLines->PRODUCTOS = $arrProducts;
  426. } catch (\Throwable $th) {
  427. return $this->responseController->makeResponse(true, "ERR_ORDER_GET003: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  428. }
  429. return $this->responseController->makeResponse(false, "ÉXITO", $arrRequestLines);
  430. }
  431. // Se cancalan la linea de solicitud de compra
  432. public function cancelRequestLine(Request $request){
  433. $validator = Validator::make($request->all(), [
  434. 'ID_LINEA_SOLICITUD' => 'required|string',
  435. 'NUMERO_PROVEEDOR' => 'required|string',
  436. 'NUMERO_LINEA' => 'required|integer',
  437. 'USUARIO' => 'required|string',
  438. ]);
  439. if ($validator->fails()) {
  440. return $this->responseController->makeResponse(
  441. true,
  442. "ERR_REQUESTLINE_CAN000: Se encontraron uno o más errores.",
  443. $this->responseController->makeErrors($validator->errors()->messages()),
  444. 401
  445. );
  446. }
  447. DB::beginTransaction();
  448. $requestData = $request->all();
  449. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  450. if ($arrResponseCheckUser['error']) {
  451. DB::rollBack();
  452. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN001:'.$arrResponseCheckUser['msg'], [], 401);
  453. }
  454. $user = $arrResponseCheckUser['response'];
  455. try {
  456. $requestData['ID_LINEA_SOLICITUD'] = $this->encController->decrypt($requestData['ID_LINEA_SOLICITUD']);
  457. } catch (\Throwable $th) {
  458. DB::rollBack();
  459. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN002: Ocurrió un error al desencriptar la línea de solicitud de compra.', $th->getMessage(), 500);
  460. }
  461. try {
  462. $requestData['NUMERO_PROVEEDOR'] = $this->encController->decrypt($requestData['NUMERO_PROVEEDOR']);
  463. } catch (\Throwable $th) {
  464. DB::rollBack();
  465. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN003: Ocurrió un error al desencriptar el número de proveedor.', $th->getMessage(), 500);
  466. }
  467. $now = $this->functionsController->now();
  468. $currentDate = $now->toDateTimeString();
  469. try {
  470. $validateExists = DB::table('S002V01TPROV')
  471. ->where('PROV_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  472. ->where('PROV_NULI', '=', $requestData['NUMERO_LINEA'])
  473. ->where('PROV_ESTA', '=', 'Activo')
  474. ->exists();
  475. } catch (\Throwable $th) {
  476. DB::rollBack();
  477. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN004: Ocurrió un error al verificar el número del proveedor.', $th->getMessage(), 500);
  478. }
  479. if (!$validateExists) {
  480. DB::rollBack();
  481. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN005: El número del proveedor no existe.', [], 500);
  482. }
  483. try {
  484. $validateExists = DB::table('S002V01TLINE')
  485. ->where('LINE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  486. ->where('LINE_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  487. ->where('LINE_NULI', '=', $requestData['NUMERO_LINEA'])
  488. ->exists();
  489. } catch (\Throwable $th) {
  490. DB::rollBack();
  491. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN006: Ocurrió un error al verificar la línea de solicitud de compra.', $th->getMessage(), 500);
  492. }
  493. if (!$validateExists) {
  494. DB::rollBack();
  495. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN007: La linea de solicitud de compra no existe.', [], 500);
  496. }
  497. try {
  498. $validateUpdate = DB::table('S002V01TLINE')
  499. ->where('LINE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  500. ->where('LINE_NULI', '=', $requestData['NUMERO_LINEA'])
  501. ->where('LINE_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  502. ->update([
  503. 'LINE_ESTA' => 'Cancelado',
  504. 'LINE_USMO' => $user,
  505. 'LINE_FEMO' => $currentDate,
  506. 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  507. ]);
  508. } catch (\Throwable $th) {
  509. DB::rollBack();
  510. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN008: Ocurrió un error al modificar la línea de solicitud de compra.', $th->getMessage(), 500);
  511. }
  512. if (!$validateUpdate) {
  513. DB::rollBack();
  514. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN009: No se pudo cancelar la solicitud de compra.', [], 500);
  515. }
  516. try {
  517. $validateUpdate = DB::table('S002V01TARSE')
  518. ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA'])
  519. ->where('ARSE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  520. ->where('ARSE_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  521. ->update([
  522. 'ARSE_ESTA' => 'Eliminado',
  523. 'ARSE_USMO' => $user,
  524. 'ARSE_FEMO' => $currentDate,
  525. 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  526. ]);
  527. } catch (\Throwable $th) {
  528. DB::rollBack();
  529. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN010: Ocurrió un error al modificar la línea de solicitud de compra.', $th->getMessage(), 500);
  530. }
  531. if (!$validateUpdate) {
  532. DB::rollBack();
  533. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_CAN011: No se pudo eliminar los artículos seleccionados.', [], 500);
  534. }
  535. DB::commit();
  536. return $this->responseController->makeResponse(false, "ÉXITO: Cancelación Exitosa");
  537. }
  538. public function deleteArtitleByRequestLine(Request $request) {
  539. $validator = Validator::make($request->all(), [
  540. 'USUARIO' => 'required|string',
  541. 'NUMERO_LINEA' => 'required|integer',
  542. 'NUMERO_INFORMACION' => 'required|string',
  543. 'NUMERO_PROVEEDOR' => 'required|string',
  544. 'NUMERO_ARTICULO' => 'required|string',
  545. 'ID_LINEA_SOLICITUD' => 'required|string',
  546. ]);
  547. if ($validator->fails()) {
  548. return $this->responseController->makeResponse(
  549. true,
  550. "ERR_REQUESTLINE_DEL000: Se encontraron uno o más errores.",
  551. $this->responseController->makeErrors($validator->errors()->messages()),
  552. 401
  553. );
  554. }
  555. DB::beginTransaction();
  556. $requestData = $request->all();
  557. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  558. if ($arrResponseCheckUser['error']) {
  559. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD004:'.$arrResponseCheckUser['msg'], [], 401);
  560. }
  561. $user = $arrResponseCheckUser['response'];
  562. try {
  563. $requestData['NUMERO_INFORMACION'] = $this->encController->decrypt($requestData['NUMERO_INFORMACION']);
  564. } catch (\Throwable $th) {
  565. DB::rollBack();
  566. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL002: Ocurrió un error al obtener el número de información.", $th->getMessage(), 500);
  567. }
  568. try {
  569. $requestData['ID_LINEA_SOLICITUD'] = $this->encController->decrypt($requestData['ID_LINEA_SOLICITUD']);
  570. } catch (\Throwable $th) {
  571. DB::rollBack();
  572. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL003: Ocurrió un error al obtener la línea de solicitud de compra.", $th->getMessage(), 500);
  573. }
  574. try {
  575. $requestData['NUMERO_PROVEEDOR'] = $this->encController->decrypt($requestData['NUMERO_PROVEEDOR']);
  576. } catch (\Throwable $th) {
  577. DB::rollBack();
  578. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL004: Ocurrió un error al obtener el número del proveedor.", $th->getMessage(), 500);
  579. }
  580. try {
  581. $requestData['NUMERO_ARTICULO'] = $this->encController->decrypt($requestData['NUMERO_ARTICULO']);
  582. } catch (\Throwable $th) {
  583. DB::rollBack();
  584. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL005: Ocurrió un error al obtener el número del artículo.", $th->getMessage(), 500);
  585. }
  586. $now = $this->functionsController->now();
  587. $currentDate = $now->toDateTimeString();
  588. try {
  589. $validateExists = DB::table('S002V01TLINE')
  590. ->where('LINE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  591. ->where('LINE_NULI', '=', $requestData['NUMERO_LINEA'])
  592. ->exists();
  593. } catch (\Throwable $th) {
  594. DB::rollBack();
  595. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL006: Ocurrió un error al verificar si existe la línea de solicitud de comrpa.", $th->getMessage(), 500);
  596. }
  597. if (!$validateExists) {
  598. DB::rollBack();
  599. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL007: El número de línea de solicitud de compra no existe.", [], 500);
  600. }
  601. try {
  602. $validateExists = DB::table('S002V01TARTI')
  603. ->where('ARTI_IDAR', '=', $requestData['NUMERO_ARTICULO'])
  604. ->where('ARTI_NULI', '=', $requestData['NUMERO_LINEA'])
  605. ->where('ARTI_ESTA', '=', 'Activo')
  606. ->exists();
  607. } catch (\Throwable $th) {
  608. DB::rollBack();
  609. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL008: Ocurrió un error al verificar si existe el número del artículo.", $th->getMessage(), 500);
  610. }
  611. if (!$validateExists) {
  612. DB::rollBack();
  613. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL009: El número del artículo no existe.", [], 500);
  614. }
  615. try {
  616. $validateExists = DB::table('S002V01TPROV')
  617. ->where('PROV_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  618. ->where('PROV_NULI', '=', $requestData['NUMERO_LINEA'])
  619. ->where('PROV_ESTA', '=', 'Activo')
  620. ->exists();
  621. } catch (\Throwable $th) {
  622. DB::rollBack();
  623. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL010: Ocurrió un error al verificar si existe el número de proveedor.", $th->getMessage(), 500);
  624. }
  625. if (!$validateExists) {
  626. DB::rollBack();
  627. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL011: El número de proveedor no existe.", [], 500);
  628. }
  629. try {
  630. $validateExists = DB::table('S002V01TINAR')
  631. ->where('INAR_IDIN', '=', $requestData['NUMERO_INFORMACION'])
  632. ->where('INAR_NULI', '=', $requestData['NUMERO_LINEA'])
  633. ->where('INAR_ESTA', '=', 'Activo')
  634. ->exists();
  635. } catch (\Throwable $th) {
  636. DB::rollBack();
  637. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL012: Ocurrió un error al verificar si existe el numero de información del artículo.", $th->getMessage(), 500);
  638. }
  639. if (!$validateExists) {
  640. DB::rollBack();
  641. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL013: El número de información del artículo no existe.", [], 500);
  642. }
  643. try {
  644. $existsSelected = DB::table('S002V01TARSE')
  645. ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA'])
  646. ->where('ARSE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  647. ->where('ARSE_IDAR', '=', $requestData['NUMERO_ARTICULO'])
  648. ->where('ARSE_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  649. ->where('ARSE_IDIN', '=', $requestData['NUMERO_INFORMACION'])
  650. ->exists();
  651. } catch (\Throwable $th) {
  652. DB::rollBack();
  653. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL014: Ocurrió un error al modificar los artículos seleccionados.", $th->getMessage(), 500);
  654. }
  655. if (!$existsSelected) {
  656. DB::rollBack();
  657. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL015: No existen artículos asociados a la información obtenida.", [], 500);
  658. }
  659. try {
  660. $validateUpdate = DB::table('S002V01TARSE')
  661. ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA'])
  662. ->where('ARSE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  663. ->where('ARSE_IDAR', '=', $requestData['NUMERO_ARTICULO'])
  664. ->where('ARSE_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  665. ->where('ARSE_IDIN', '=', $requestData['NUMERO_INFORMACION'])
  666. ->update([
  667. 'ARSE_ESTA' => 'Eliminado',
  668. 'ARSE_USMO' => $user,
  669. 'ARSE_FEMO' => $currentDate,
  670. 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  671. ]);
  672. } catch (\Throwable $th) {
  673. DB::rollBack();
  674. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL016: Ocurrió un error al modificar los artículos seleccionados.", $th->getMessage(), 500);
  675. }
  676. if (!$validateUpdate) {
  677. DB::rollBack();
  678. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL017: Ocurrió un error al eliminar el artículo seleccionado.", [], 500);
  679. }
  680. try {
  681. $existsArtitles = DB::table('S002V01TARSE')
  682. ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA'])
  683. ->where('ARSE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  684. ->where('ARSE_ESTA', '=', 'Activo')
  685. ->exists();
  686. } catch (\Throwable $th) {
  687. DB::rollBack();
  688. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL018: Ocurrió un error al verificar los artículos disponibles.", $th->getMessage(), 500);
  689. }
  690. if (!$existsArtitles) {
  691. try {
  692. $validateUpdate = DB::table('S002V01TLINE')
  693. ->where('LINE_IDLI', '=', $requestData['ID_LINEA_SOLICITUD'])
  694. ->where('LINE_NULI', '=', $requestData['NUMERO_LINEA'])
  695. ->where('LINE_NUPR', '=', $requestData['NUMERO_PROVEEDOR'])
  696. ->update([
  697. 'LINE_ESTA' => 'Cancelado',
  698. 'LINE_USMO' => $user,
  699. 'LINE_FEMO' => $currentDate,
  700. 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  701. ]);
  702. } catch (\Throwable $th) {
  703. DB::rollBack();
  704. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL019: Ocurrió un error al cancelar la línea de solicitud de compra.", $th->getMessage(), 500);
  705. }
  706. if (!$validateUpdate) {
  707. DB::rollBack();
  708. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_DEL020: No se pudo cancelar la línea de solicitud de compra.", [], 500);
  709. }
  710. }
  711. DB::commit();
  712. return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Correcta");
  713. }
  714. public function updateStatusRequestLine(Request $request) {
  715. $validator = Validator::make($request->all(), [
  716. 'NUMERO_SOLICITUD' => 'required|string',
  717. 'ESTADO' => 'required|string',
  718. 'USUARIO' => 'required|string',
  719. 'METODO_PAGO' => 'required|string',
  720. 'NUMERO_LINEA' => 'required|integer',
  721. // 'COMENTARIOS' => 'string',
  722. ]);
  723. if ($validator->fails()) {
  724. return $this->responseController->makeResponse(
  725. true,
  726. "ERR_ORDER_UPST000: Se encontraron uno o más errores.",
  727. $this->responseController->makeErrors($validator->errors()->messages()),
  728. 401
  729. );
  730. }
  731. DB::beginTransaction();
  732. $requestData = $request->all();
  733. try {
  734. $user = $this->encController->decrypt($requestData['USUARIO']);
  735. } catch (\Throwable $th) {
  736. DB::rollBack();
  737. return $this->responseController->makeResponse(true, "ERR_ORDER_UPST001: Ocurrió un error al obtener el usuario.", [], 500);
  738. }
  739. $now = $this->functionsController->now();
  740. $currentDate = $now->toDateTimeString();
  741. try {
  742. $validateUpdate = DB::table('S002V01TLINE')
  743. ->where('LINE_IDLI', '=', $requestData['NUMERO_SOLICITUD'])
  744. ->where('LINE_NULI', '=', $requestData['NUMERO_LINEA'])
  745. ->update([
  746. 'LINE_ESTA' => $requestData['ESTADO'],
  747. 'LINE_IDME' => $requestData['METODO_PAGO'],
  748. 'LINE_COME' => $requestData['COMENTARIOS'] === '' ? null : $requestData['COMENTARIOS'],
  749. 'LINE_USMO' => $user,
  750. 'LINE_FEMO' => $currentDate,
  751. 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  752. ]);
  753. } catch (\Throwable $th) {
  754. DB::rollBack();
  755. return $this->responseController->makeResponse(true, "ERR_ORDER_UPST002: Ocurrió un error al modificar el estado.", $th->getMessage(), 500);
  756. }
  757. if ( !$validateUpdate ) {
  758. DB::rollBack();
  759. return $this->responseController->makeResponse(true, "ERR_ORDER_UPST003: No se pudo modificar el estado de la línea de solicitud.", [], 500);
  760. }
  761. DB::commit();
  762. return $this->responseController->makeResponse(false, "ÉXITO: Modificación de Estado Exitoso");
  763. }
  764. public function getArtitlesByRequestLine($requestLine, $user, $line) {
  765. try {
  766. $requestLine = $this->encController->decrypt($requestLine);
  767. } catch (\Throwable $th) {
  768. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GETBY000: Ocurrió un error al obtener la línea de solicitud.", $th->getMessage(), 500);
  769. }
  770. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  771. if ($arrResponseCheckUser['error']) {
  772. return $this->responseController->makeResponse(true, 'ERR_REQUESTLINE_GETBY001:'.$arrResponseCheckUser['msg'], [], 401);
  773. }
  774. try {
  775. $getArtitleSelected = DB::table('S002V01TARSE')
  776. ->where('ARSE_IDLI', '=', $requestLine)
  777. ->where('ARSE_NULI', '=', $line)
  778. ->where('INAR_NULI', '=', $line)
  779. ->where('DEAR_NULI', '=', $line)
  780. ->where('ARTI_NULI', '=', $line)
  781. ->where('FAMI_NULI', '=', $line)
  782. ->where('SUBF_NULI', '=', $line)
  783. ->where('UNID_NULI', '=', $line)
  784. ->where('ARSE_ESTA', '=', 'Activo')
  785. ->where('INAR_ESTA', '=', 'Activo')
  786. ->where('DEAR_ESTA', '=', 'Activo')
  787. ->where('ARTI_ESTA', '=', 'Activo')
  788. ->where('FAMI_ESTA', '=', 'Activo')
  789. ->where('SUBF_ESTA', '=', 'Activo')
  790. ->where('UNID_ESTA', '=', 'Activo')
  791. ->join('S002V01TINAR', 'INAR_IDIN', '=', 'ARSE_IDIN')
  792. ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
  793. ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'DEAR_IDAR')
  794. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'ARTI_COFA')
  795. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'ARTI_COSU')
  796. ->join('S002V01TUNID', 'UNID_IDUN', '=', 'DEAR_IDUN')
  797. ->join('S002V01TCAMO', 'CAMO_COMO', '=', 'INAR_COMO')
  798. ->get([
  799. 'ARTI_IDAR AS NUMERO_ARTICULO',
  800. 'DEAR_IDDE AS NUMERO_DESCRIPCION',
  801. 'DEAR_NUPR AS NUMERO_PROVEEDOR',
  802. 'DEAR_IMAG AS IMAGENES',
  803. 'ARTI_NOMB AS ARTICULO',
  804. 'INAR_CARA AS CARACTERISTICAS',
  805. 'INAR_CODI AS CODIGO',
  806. 'INAR_MODE AS MODELO',
  807. 'CAMO_COMO AS MONEDA',
  808. 'CAMO_DESC AS MONEDA_DESCRIPCION',
  809. 'INAR_MOMI AS MONTO_MINIMO',
  810. 'INAR_IDIN AS NUMERO_INFORMACION',
  811. 'INAR_PREC AS PRECIO',
  812. ]);
  813. } catch (\Throwable $th) {
  814. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GETBY002: Ocurrió un error al obtener la información.", $th->getMessage(), 500);
  815. }
  816. $arrArtitleSelected = json_decode(json_encode($getArtitleSelected), true);
  817. $index = 0;
  818. $arrArtitles = array();
  819. foreach ($arrArtitleSelected as $keyArtitle => $artitles) {
  820. if ($keyArtitle === 0) {
  821. $arrArtitles[$index] = $artitles;
  822. $arrArtitles[$index]['CANTIDAD'] = 1;
  823. } else {
  824. if (
  825. in_array($artitles['NUMERO_INFORMACION'], array_column($arrArtitles, 'NUMERO_INFORMACION'))
  826. ) {
  827. $indexArtitle = array_search($artitles['NUMERO_INFORMACION'], array_column($arrArtitles, 'NUMERO_INFORMACION'));
  828. $arrArtitles[$indexArtitle]['CANTIDAD'] = $arrArtitles[$indexArtitle]['CANTIDAD'] + 1;
  829. } else {
  830. $index = $index + 1;
  831. $arrArtitles[$index] = $artitles;
  832. $arrArtitles[$index]['CANTIDAD'] = 1;
  833. }
  834. }
  835. }
  836. $arrArtitleSelected = $arrArtitles;
  837. foreach ($arrArtitleSelected as $keyArtitleSelected => $artitleSelected) {
  838. $arrImage = json_decode($artitleSelected['IMAGENES']);
  839. $arrUrlImage = array();
  840. foreach ($arrImage as $key => $encImage) {
  841. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($encImage, $user, $line);
  842. if ($responseDocument['error']) {
  843. return $this->responseController->makeResponse(true, "ERR_REQUESTLINE_GETBY003: Ocurrió un error al obtener la URL de la imágen.", [], 500);
  844. }
  845. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  846. }
  847. $artitleSelected['IMAGENES'] = $arrUrlImage;
  848. $arrArtitleSelected[$keyArtitleSelected] = $artitleSelected;
  849. }
  850. return $this->responseController->makeResponse(false, "ÉXITO", $arrArtitleSelected);
  851. }
  852. public function checkItemsWorkOrder ($resources, $idOrder, $user, $line) {
  853. foreach ($resources as $resource) {
  854. if ($resource['REQ'] !== '-') {
  855. goto next;
  856. }
  857. $id = $this->encController->decrypt($resource['REQ']);
  858. if (is_null($id)) {
  859. return $this->responseController->makeResponse(true, 'El ID de la herramienta o refacción no está encriptado correctamente.', [], 500);
  860. }
  861. try {
  862. $amountStock = DB::table('S002V01TSTAR')
  863. ->where([
  864. ['STAR_IDIS', '=', $id],
  865. ['STAR_NULI', '=', $line],
  866. ['STAR_ESTA', '=', 'Activo'],
  867. ])
  868. ->count();
  869. } catch (\Throwable $th) {
  870. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  871. }
  872. $amountRequest = intval($resource['REQ']);
  873. if ($amountRequest > $amountStock) {
  874. goto next;
  875. }
  876. $adquisitionAmount = $amountRequest - $amountStock;
  877. try {
  878. $adquisition = (array) DB::table('S002V01TINST')
  879. ->where([
  880. ['INST_IDIS', '=', $id],
  881. ['INST_NULI', '=', $line],
  882. ['INST_ESTA', '=', 'Activo'],
  883. ])
  884. ->join('S002V01TINAR', 'INAR_CODI', '=', 'INST_COMO')
  885. ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'INST_ARTI')
  886. ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
  887. ->first([
  888. 'ARTI_IDAR',
  889. 'DEAR_NUPR',
  890. 'INAR_IDIN',
  891. ]);
  892. } catch (\Throwable $th) {
  893. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la adquisición.', $th->getMessage(), 500);
  894. }
  895. if (is_null($adquisition) || empty($adquisition)) {
  896. return $this->responseController->makeResponse(true, 'No se pudo obtener la información de la adquisición.', [], 500);
  897. }
  898. $now = $this->functionsController->now();
  899. $currentDate = $now->toDateTimeString();
  900. try {
  901. $idLine = DB::table('S002V01TLINE')->insertGetId([
  902. 'LINE_NUPR' => $adquisition['DEAR_NUPR'],
  903. 'LINE_OTPR' => null,
  904. 'LINE_OTCO' => $idOrder,
  905. 'LINE_NULI' => $line,
  906. 'LINE_ESTA' => 'En OC',
  907. 'LINE_USRE' => $user,
  908. 'LINE_FERE' => $currentDate,
  909. 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  910. ]);
  911. } catch (\Throwable $th) {
  912. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar la línea de solicitud.', $th->getMessage(), 500);
  913. }
  914. if (is_null($idLine) || $idLine < 1) {
  915. return $this->responseController->makeResponse(true, 'No se pudo registrar la línea de solicitud.', [], 500);
  916. }
  917. for ($i=1; $i <= $adquisitionAmount; $i++) {
  918. try {
  919. $validateInsert = DB::table('S002V01TARSE')->insert([
  920. 'ARSE_IDAS' => $i,
  921. 'ARSE_NULI' => $line,
  922. 'ARSE_IDLI' => $idLine,
  923. 'ARSE_IDAR' => $adquisition['ARTI_IDAR'],
  924. 'ARSE_NUPR' => $adquisition['DEAR_NUPR'],
  925. 'ARSE_IDIN' => $adquisition['INAR_IDIN'],
  926. 'ARSE_USRE' => $user,
  927. 'ARSE_FERE' => $currentDate,
  928. 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  929. ]);
  930. } catch (\Throwable $th) {
  931. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar los artículos en la línea de solicitud.', $th->getMessage(), 500);
  932. }
  933. if (is_null($validateInsert) || !$validateInsert) {
  934. return $this->responseController->makeResponse(true, 'No se pudo registrar los artículos en la línea de solicitud.', [], 500);
  935. }
  936. }
  937. $typeOrder = rand(0, 1) === 0 ? 'ASC' : 'DESC';
  938. try {
  939. $dispatch = (array) DB::table('S002V01TDESP')
  940. ->where([
  941. ['DESP_NULI', '=', $line],
  942. ['DESP_ESTA', '=', 'Activo'],
  943. ])
  944. ->orderBy('DESP_IDDE', $typeOrder)
  945. ->first([
  946. 'DESP_IDDE'
  947. ]);
  948. } catch (\Throwable $th) {
  949. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del despacho.', [], 500);
  950. }
  951. if (is_null($dispatch) || empty($dispatch)) {
  952. return $this->responseController->makeResponse(true, 'No se pudo obtener la información del despacho.', [], 500);
  953. }
  954. try {
  955. $idOrder = DB::table('S002V01TORCO')->insertGetId([
  956. 'ORCO_NULI' => $line,
  957. 'ORCO_IDLI' => $idLine,
  958. 'ORCO_IDDE' => $dispatch['DESP_IDDE'],
  959. 'ORCO_USRE' => $user,
  960. 'ORCO_FERE' => $currentDate,
  961. 'ORCO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  962. ]);
  963. } catch (\Throwable $th) {
  964. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar la orden de compra.', $th->getMessage(), 500);
  965. }
  966. if (is_null($idOrder) || $idOrder < 1) {
  967. return $this->responseController->makeResponse(true, 'No se pudo registrar la línea de solicitud.', [], 500);
  968. }
  969. try {
  970. $validateInsert = DB::table('S002V01THIOR')->insert([
  971. 'HIOR_NULI' => $idLine,
  972. 'HIOR_NUOR' => $idOrder,
  973. 'HIOR_POEN' => 10,
  974. 'HIOR_USRE' => $user,
  975. 'HIOR_FERE' => $currentDate,
  976. 'HIOR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  977. ]);
  978. } catch (\Throwable $th) {
  979. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar el historial de la orden de compra.', $th->getMessage(), 500);
  980. }
  981. if (is_null($validateInsert) || !$validateInsert) {
  982. return $this->responseController->makeResponse(true, 'No se pudo registrar el historial de la orden de compra.', [], 500);
  983. }
  984. next:
  985. }
  986. }
  987. }