DynamicFormController.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. <?php
  2. /*
  3. Desarrollador: Ing. Jean Jairo Benitez Meza
  4. Ultima Modificación: 11/04/2023
  5. Módulo: Formularios Dinámicos
  6. */
  7. namespace App\Http\Controllers;
  8. use App\Http\Controllers\Controller;
  9. use App\Http\Controllers\ResponseController;
  10. use App\Http\Controllers\EncryptionController;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Carbon;
  13. use Illuminate\Support\Facades\DB;
  14. use Illuminate\Support\Facades\Validator;
  15. use App\Http\Controllers\FunctionsController;
  16. use App\Http\Controllers\ResourcesController;
  17. use Illuminate\Support\Facades\Schema;
  18. class DynamicFormController extends Controller
  19. {
  20. private $responseController;
  21. private $encController;
  22. private $functionsController;
  23. private $resourcesController;
  24. public function __construct(){
  25. $this->responseController = new ResponseController();
  26. $this->encController = new EncryptionController();
  27. $this->functionsController = new FunctionsController();
  28. $this->resourcesController = new ResourcesController();
  29. }
  30. public function getForms($user, $line){
  31. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  32. if ($arrResponseCheckUser['error']) {
  33. DB::rollBack();
  34. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  35. }
  36. try{
  37. $arrForms = DB::table('S002V01TFODI')
  38. ->where('FODI_NULI', '=', $line)
  39. ->join('S002V01TMODU', 'MODU_IDMO', '=', 'FODI_IDMO')
  40. ->get([
  41. 'FODI_NUFO AS CODIGO_FORMULARIO',
  42. 'FODI_TIRE AS TITULO_REGISTRO',
  43. 'FODI_TIMO AS TITULO_MODIFICACION',
  44. 'MODU_NOMO AS MODULO',
  45. 'FODI_ESTA AS ESTADO',
  46. 'FODI_WOFL AS WORKFLOW',
  47. 'FODI_USRE AS USUARIO_REGISTRA',
  48. 'FODI_FERE AS FECHA_REGISTRA',
  49. 'FODI_USMO AS USUARIO_MODIFICA',
  50. 'FODI_FEMO AS FECHA_MODIFICA',
  51. ]);
  52. $arrForms = json_decode(json_encode($arrForms), true);
  53. } catch (\Throwable $th) {
  54. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET000: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  55. }
  56. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrForms, $line);
  57. if ($responseCheckLatestUpdate['error']) {
  58. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  59. }
  60. $arrForms = $responseCheckLatestUpdate['response'];
  61. return $this->responseController->makeResponse(false, "ÉXITO", $arrForms);
  62. }
  63. public function getInformationDataSelect($tableName, $columnValue, $columnName, $user, $line){
  64. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  65. if ($arrResponseCheckUser['error']) {
  66. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  67. }
  68. $tableName = $this->encController->decrypt($tableName);
  69. if (is_null($tableName)) {
  70. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el nombre de la tabla.', [], 500);
  71. }
  72. $columnValue = $this->encController->decrypt($columnValue);
  73. if (is_null($columnValue)) {
  74. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la columna del valor.', [], 500);
  75. }
  76. $columnName = $this->encController->decrypt($columnName);
  77. if (is_null($columnName)) {
  78. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la columna del nombre.', [], 500);
  79. }
  80. $arrResponseNumberLine = $this->getNumberLineColumn($tableName);
  81. if ($arrResponseNumberLine['error']) {
  82. return $this->responseController->makeResponse(true, $arrResponseNumberLine['msg'], $arrResponseNumberLine['response'], 500);
  83. }
  84. $numberLineColumn = $arrResponseNumberLine['response'];
  85. try {
  86. $arrColumn = DB::table($tableName)
  87. ->where($numberLineColumn, '=', $line)
  88. ->get([
  89. "{$columnValue} AS VALOR_CAMPO",
  90. "{$columnName} AS NOMBRE_CAMPO",
  91. ]);
  92. $arrColumn = json_decode(json_encode($arrColumn), true);
  93. } catch (\Throwable $th) {
  94. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las columnas de la tabla {$tableName}.", $th->getMessage(), 500);
  95. }
  96. return $this->responseController->makeResponse(false, "ÉXITO", $arrColumn);
  97. }
  98. public function registerForms(Request $request) {
  99. $validator = Validator::make($request->all(), [
  100. 'MODULO' => 'required|string',
  101. 'REGISTRO_FORMULARIO' => 'required|string',
  102. 'MODIFICA_FORMULARIO' => 'required|string',
  103. 'TABLA' => 'required|array',
  104. 'COLUMNAS' => 'required|array',
  105. 'DATA_FORM' => 'required|array',
  106. 'INFO_VALIDATE' => 'required|array',
  107. 'PERSONALITY_COLUMNS' => 'array',
  108. 'NUMERO_LINEA' => 'required|integer',
  109. 'USUARIO' => 'required|string'
  110. ]);
  111. if ($validator->fails()) {
  112. return $this->responseController->makeResponse(
  113. true,
  114. "Se encontraron uno o más errores.",
  115. $this->responseController->makeErrors($validator->errors()->messages()),
  116. 401
  117. );
  118. }
  119. DB::beginTransaction();
  120. $requestData = $request->all();
  121. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  122. if ($arrResponseCheckUser['error']) {
  123. DB::rollBack();
  124. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  125. }
  126. $user = $arrResponseCheckUser['response'];
  127. $now = $this->functionsController->now();
  128. $currentDate = $now->toDateTimeString();
  129. $dataForm = [
  130. 'DATA_BASE' => [
  131. 'TABLA' => $requestData['TABLA'],
  132. 'COLUMNAS' =>$requestData['COLUMNAS'],
  133. ],
  134. 'PERSONALITY_COLUMNS' => $requestData['PERSONALITY_COLUMNS'],
  135. 'INFO_VALIDATE' => $requestData['INFO_VALIDATE'],
  136. 'COMPONENTS' => $requestData['DATA_FORM'],
  137. ];
  138. $strDataForm = json_encode($dataForm);
  139. try {
  140. $validateRegister = DB::table('S002V01TFODI')->insert([
  141. 'FODI_NULI' => $requestData['NUMERO_LINEA'],
  142. 'FODI_IDMO' => $requestData['MODULO'],
  143. 'FODI_TIRE' => $requestData['REGISTRO_FORMULARIO'],
  144. 'FODI_TIMO' => $requestData['MODIFICA_FORMULARIO'],
  145. 'FODI_DAFO' => $strDataForm,
  146. 'FODI_USRE' => $user,
  147. 'FODI_FERE' => $currentDate,
  148. 'FODI_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  149. ]);
  150. } catch (\Throwable $th) {
  151. DB::rollBack();
  152. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar los datos del formulario dinámico.", $th->getMessage(), 401);
  153. }
  154. if (!$validateRegister) {
  155. DB::rollBack();
  156. return $this->responseController->makeResponse(true, "No se pudo registrar los datos del formulario dinámico.", [], 401);
  157. }
  158. DB::commit();
  159. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  160. }
  161. public function getFormById($idForm, $user, $line) {
  162. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  163. if ($arrResponseCheckUser['error']) {
  164. DB::rollBack();
  165. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  166. }
  167. $user = $arrResponseCheckUser['response'];
  168. $idForm = $this->encController->decrypt($idForm);
  169. if (is_null($idForm)) {
  170. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el identificador del formulario.', [], 500);
  171. }
  172. try {
  173. $exists = DB::table('S002V01TFODI')
  174. ->where('FODI_NUFO', '=', $idForm)
  175. ->where('FODI_NULI', '=', $line)
  176. ->exists();
  177. } catch (\Throwable $th) {
  178. DB::rollBack();
  179. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar el formulario dinámico.", $th->getMessage(), 401);
  180. }
  181. if (!$exists) {
  182. DB::rollBack();
  183. return $this->responseController->makeResponse(true, "El formulario dinámico no existe.", [], 401);
  184. }
  185. try {
  186. $arrForms = DB::table('S002V01TFODI')
  187. ->where('FODI_NUFO', '=', $idForm)
  188. ->where('FODI_NULI', '=', $line)
  189. ->first([
  190. 'FODI_NUFO AS NUMERO_FORMULARIO',
  191. 'FODI_IDMO AS ID_MODULO',
  192. 'FODI_TIRE AS TITULO_REGISTRO',
  193. 'FODI_TIMO AS TITULO_MODIFICACION',
  194. 'FODI_DAFO AS DATOS_FORMULARIO',
  195. 'FODI_ESTA AS ESTADO',
  196. ]);
  197. } catch (\Throwable $th) {
  198. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del formulario.', $th->getMessage(), 500);
  199. }
  200. $arrForms->DATOS_FORMULARIO = json_decode($arrForms->DATOS_FORMULARIO);
  201. return $this->responseController->makeResponse(false, "ÉXITO", $arrForms);
  202. }
  203. public function updateForms(Request $request, $idForm) {
  204. $validator = Validator::make($request->all(), [
  205. 'MODULO' => 'required|string',
  206. 'REGISTRO_FORMULARIO' => 'required|string',
  207. 'MODIFICA_FORMULARIO' => 'required|string',
  208. 'TABLA' => 'required|array',
  209. 'COLUMNAS' => 'required|array',
  210. 'DATA_FORM' => 'required|array',
  211. 'INFO_VALIDATE' => 'required|array',
  212. 'PERSONALITY_COLUMNS' => 'array',
  213. 'NUMERO_LINEA' => 'required|integer',
  214. 'USUARIO' => 'required|string'
  215. ]);
  216. if ($validator->fails()) {
  217. return $this->responseController->makeResponse(
  218. true,
  219. "Se encontraron uno o más errores.",
  220. $this->responseController->makeErrors($validator->errors()->messages()),
  221. 401
  222. );
  223. }
  224. DB::beginTransaction();
  225. $requestData = $request->all();
  226. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  227. if ($arrResponseCheckUser['error']) {
  228. DB::rollBack();
  229. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  230. }
  231. $user = $arrResponseCheckUser['response'];
  232. $now = $this->functionsController->now();
  233. $currentDate = $now->toDateTimeString();
  234. $idForm = $this->encController->decrypt($idForm);
  235. if (is_null($idForm)) {
  236. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el identificador del formulario.', [], 500);
  237. }
  238. try {
  239. $exists = DB::table('S002V01TFODI')
  240. ->where('FODI_NUFO', '=', $idForm)
  241. ->where('FODI_NULI', '=', $requestData['NUMERO_LINEA'])
  242. ->exists();
  243. } catch (\Throwable $th) {
  244. DB::rollBack();
  245. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar el formulario dinámico.", $th->getMessage(), 401);
  246. }
  247. if (!$exists) {
  248. DB::rollBack();
  249. return $this->responseController->makeResponse(true, "El formulario dinámico no existe.", [], 401);
  250. }
  251. $dataForm = [
  252. 'DATA_BASE' => [
  253. 'TABLA' => $requestData['TABLA'],
  254. 'COLUMNAS' =>$requestData['COLUMNAS'],
  255. ],
  256. 'PERSONALITY_COLUMNS' => $requestData['PERSONALITY_COLUMNS'],
  257. 'INFO_VALIDATE' => $requestData['INFO_VALIDATE'],
  258. 'COMPONENTS' => $requestData['DATA_FORM'],
  259. ];
  260. $strDataForm = json_encode($dataForm);
  261. try {
  262. $validateUpdate = DB::table('S002V01TFODI')
  263. ->where('FODI_NUFO', '=', $idForm)
  264. ->where('FODI_NULI', '=', $requestData['NUMERO_LINEA'])
  265. ->update([
  266. 'FODI_IDMO' => $requestData['MODULO'],
  267. 'FODI_TIRE' => $requestData['REGISTRO_FORMULARIO'],
  268. 'FODI_TIMO' => $requestData['MODIFICA_FORMULARIO'],
  269. 'FODI_DAFO' => $strDataForm,
  270. 'FODI_USMO' => $user,
  271. 'FODI_FEMO' => $currentDate,
  272. 'FODI_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  273. ]);
  274. } catch (\Throwable $th) {
  275. DB::rollBack();
  276. return $this->responseController->makeResponse(true, "Ocurrió un error al modificar los datos del formulario dinámico.", $th->getMessage(), 401);
  277. }
  278. if (!$validateUpdate) {
  279. DB::rollBack();
  280. return $this->responseController->makeResponse(true, "No se pudo modificar los datos del formulario dinámico.", [], 401);
  281. }
  282. DB::commit();
  283. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  284. }
  285. public function registerDynamicForm(Request $request) {
  286. $validator = Validator::make($request->all(), [
  287. 'IDFORM' => 'required|string',
  288. 'DATAFORM' => 'required',
  289. 'USUARIO' => 'required|string',
  290. 'NUMERO_LINEA' => 'required|integer',
  291. ]);
  292. if ($validator->fails()) {
  293. return $this->responseController->makeResponse(
  294. true,
  295. "Se encontraron uno o más errores.",
  296. $this->responseController->makeErrors($validator->errors()->messages()),
  297. 401
  298. );
  299. }
  300. DB::beginTransaction();
  301. $requestData = $request->all();
  302. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  303. if ($arrResponseCheckUser['error']) {
  304. DB::rollBack();
  305. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  306. }
  307. $user = $arrResponseCheckUser['response'];
  308. $idForm = $this->encController->decrypt($requestData['IDFORM']);
  309. if (is_null($idForm)) {
  310. DB::rollBack();
  311. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el identificador del formulario.', [], 500);
  312. }
  313. $arrDataInsert = [];
  314. $arrDataInsertPersonality = [];
  315. foreach ($requestData['DATAFORM'] as $keyColumn => $dataForm) {
  316. $codeTable = substr($keyColumn, 0, 4);
  317. $table = "S002V01T{$codeTable}";
  318. if (strlen($keyColumn) === 9) {
  319. $arrDataInsert[$table][$keyColumn] = $dataForm;
  320. } else if (strlen($keyColumn) === 25) {
  321. $arrDataInsertPersonality[$table][$keyColumn] = $dataForm;
  322. } else {
  323. DB::rollBack();
  324. return $this->responseController->makeResponse(true, "El formato de la columna {$dataForm} no es válido.", [], 500);
  325. }
  326. }
  327. $now = $this->functionsController->now();
  328. $currentDate = $now->toDateTimeString();
  329. foreach ($arrDataInsert as $table => $dataColumn) {
  330. $codeTable = substr($table, 8, 12);
  331. if ( !empty((array) $arrDataInsertPersonality) ) {
  332. $INEX = "{$codeTable}_INEX";
  333. $dataColumn[$INEX] = json_encode($arrDataInsertPersonality[$table]);
  334. }
  335. $NULI = "{$codeTable}_NULI";
  336. $FERE = "{$codeTable}_FERE";
  337. $USFE = "{$codeTable}_USRE";
  338. $FEAR = "{$codeTable}_FEAR";
  339. $dataColumn[$NULI] = $requestData['NUMERO_LINEA'];
  340. $dataColumn[$FERE] = $currentDate;
  341. $dataColumn[$USFE] = $user;
  342. $dataColumn[$FEAR] = DB::raw('CURRENT_TIMESTAMP');
  343. try {
  344. $validateRegister = DB::table($table)->insert($dataColumn);
  345. } catch (\Throwable $th) {
  346. DB::rollBack();
  347. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el formulario en la tabla {$table}.", $th->getMessage(), 500);
  348. }
  349. if (!$validateRegister) {
  350. DB::rollBack();
  351. return $this->responseController->makeResponse(true, "No se pudo registrar el formulario en la tabla {$table}.", [], 500);
  352. }
  353. }
  354. DB::commit();
  355. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  356. }
  357. public function getFormDataById(Request $request, $idForm, $user, $line) {
  358. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  359. if ($arrResponseCheckUser['error']) {
  360. DB::rollBack();
  361. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  362. }
  363. $user = $arrResponseCheckUser['response'];
  364. $idForm = $this->encController->decrypt($idForm);
  365. if (is_null($idForm)) {
  366. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el identificador del formulario.', [], 500);
  367. }
  368. $requestData = $request->all();
  369. try {
  370. $exists = DB::table('S002V01TFODI')
  371. ->where('FODI_NUFO', '=', $idForm)
  372. ->where('FODI_NULI', '=', $line)
  373. ->exists();
  374. } catch (\Throwable $th) {
  375. DB::rollBack();
  376. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar el formulario dinámico.", $th->getMessage(), 401);
  377. }
  378. if (!$exists) {
  379. DB::rollBack();
  380. return $this->responseController->makeResponse(true, "El formulario dinámico no existe.", [], 401);
  381. }
  382. try {
  383. $arrForms = DB::table('S002V01TFODI')
  384. ->where('FODI_NUFO', '=', $idForm)
  385. ->where('FODI_NULI', '=', $line)
  386. ->first([
  387. 'FODI_NUFO AS NUMERO_FORMULARIO',
  388. 'FODI_IDMO AS ID_MODULO',
  389. 'FODI_TIRE AS TITULO_REGISTRO',
  390. 'FODI_TIMO AS TITULO_MODIFICACION',
  391. 'FODI_DAFO AS DATOS_FORMULARIO',
  392. 'FODI_ESTA AS ESTADO',
  393. ]);
  394. } catch (\Throwable $th) {
  395. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del formulario.', $th->getMessage(), 500);
  396. }
  397. $arrForms->DATOS_FORMULARIO = json_decode($arrForms->DATOS_FORMULARIO);
  398. $arrWhere = [];
  399. foreach ($requestData['VALUES'] as $value) {
  400. $codeTable = substr($value['COLUMN'], 0, 4);
  401. $tableName = "S002V01T{$codeTable}";
  402. $arrWhere[$tableName][] = [ $value['COLUMN'], '=', $value['VALUE'] ];
  403. }
  404. $arrValues = [];
  405. foreach ($arrWhere as $table => $where) {
  406. try {
  407. $arrValues[$table] = DB::table($table)->where($where)->first();
  408. } catch (\Throwable $th) {
  409. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del formulario.', $th->getMessage(), 500);
  410. }
  411. }
  412. foreach ($arrForms->DATOS_FORMULARIO->DATA_BASE->TABLA as $key => $table) {
  413. $arrColumnsValue = (array) $arrValues[$table];
  414. $codeTable = substr($table, 8, 12);
  415. $columnInformationExtra = "{$codeTable}_INEX";
  416. if (array_key_exists($columnInformationExtra, $arrColumnsValue) && !is_null($arrColumnsValue[$columnInformationExtra])) {
  417. $arrExtraColumn = (array) json_decode($arrColumnsValue[$columnInformationExtra]);
  418. foreach ($arrForms->DATOS_FORMULARIO->COMPONENTS as $key => $dataComponent) {
  419. $columns = $dataComponent->COMPONENT->COLUMNA;
  420. if (array_key_exists($columns, $arrExtraColumn) && array_key_exists('VALOR_DEFECTO', (array) $dataComponent->COMPONENT)) {
  421. $dataComponent->COMPONENT->VALOR_DEFECTO = $arrExtraColumn[$columns];
  422. }
  423. }
  424. }
  425. foreach ($arrForms->DATOS_FORMULARIO->COMPONENTS as $key => $dataComponent) {
  426. $columns = $dataComponent->COMPONENT->COLUMNA;
  427. if (array_key_exists($columns, $arrColumnsValue) && array_key_exists('VALOR_DEFECTO', (array) $dataComponent->COMPONENT)) {
  428. $dataComponent->COMPONENT->VALOR_DEFECTO = $arrColumnsValue[$columns];
  429. }
  430. }
  431. }
  432. return $this->responseController->makeResponse(false, "ÉXITO", $arrForms);
  433. }
  434. public function updateDynamicForm(Request $request) {
  435. $validator = Validator::make($request->all(), [
  436. 'IDFORM' => 'required|string',
  437. 'DATAFORM' => 'required',
  438. 'USUARIO' => 'required|string',
  439. 'NUMERO_LINEA' => 'required|integer',
  440. 'WHERE' => 'required|array',
  441. ]);
  442. if ($validator->fails()) {
  443. return $this->responseController->makeResponse(
  444. true,
  445. "Se encontraron uno o más errores.",
  446. $this->responseController->makeErrors($validator->errors()->messages()),
  447. 401
  448. );
  449. }
  450. DB::beginTransaction();
  451. $requestData = $request->all();
  452. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  453. if ($arrResponseCheckUser['error']) {
  454. DB::rollBack();
  455. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  456. }
  457. $user = $arrResponseCheckUser['response'];
  458. $idForm = $this->encController->decrypt($requestData['IDFORM']);
  459. if (is_null($idForm)) {
  460. DB::rollBack();
  461. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el identificador del formulario.', [], 500);
  462. }
  463. $arrDataUpdate = [];
  464. $arrDataUpdatePersonality = [];
  465. foreach ($requestData['DATAFORM'] as $keyColumn => $dataForm) {
  466. $codeTable = substr($keyColumn, 0, 4);
  467. $table = "S002V01T{$codeTable}";
  468. if (strlen($keyColumn) === 9) {
  469. $arrDataUpdate[$table][$keyColumn] = $dataForm;
  470. } else if (strlen($keyColumn) === 25) {
  471. $arrDataUpdatePersonality[$table][$keyColumn] = $dataForm;
  472. } else {
  473. DB::rollBack();
  474. return $this->responseController->makeResponse(true, "El formato de la columna {$dataForm} no es válido.", [], 500);
  475. }
  476. }
  477. $arrWhere = [];
  478. foreach ($requestData['WHERE'] as $value) {
  479. $codeTable = substr($value['COLUMN'], 0, 4);
  480. $tableName = "S002V01T{$codeTable}";
  481. $arrWhere[$tableName][] = [ $value['COLUMN'], '=', $value['VALUE'] ];
  482. }
  483. $now = $this->functionsController->now();
  484. $currentDate = $now->toDateTimeString();
  485. foreach ($arrDataUpdate as $table => $dataColumn) {
  486. $codeTable = substr($table, 8, 12);
  487. if ( !empty((array) $arrDataUpdatePersonality) ) {
  488. $INEX = "{$codeTable}_INEX";
  489. $dataColumn[$INEX] = json_encode($arrDataUpdatePersonality[$table]);
  490. }
  491. $NULI = "{$codeTable}_NULI";
  492. $FEMO = "{$codeTable}_FEMO";
  493. $USMO = "{$codeTable}_USMO";
  494. $FEAR = "{$codeTable}_FEAR";
  495. $dataColumn[$NULI] = $requestData['NUMERO_LINEA'];
  496. $dataColumn[$FEMO] = $currentDate;
  497. $dataColumn[$USMO] = $user;
  498. $dataColumn[$FEAR] = DB::raw('CURRENT_TIMESTAMP');
  499. $contentWhere = $arrWhere[$table];
  500. try {
  501. $validateWhere = DB::table($table)->where($contentWhere)->update($dataColumn);
  502. } catch (\Throwable $th) {
  503. DB::rollBack();
  504. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el formulario en la tabla {$table}.", $th->getMessage(), 500);
  505. }
  506. if (!$validateWhere) {
  507. DB::rollBack();
  508. return $this->responseController->makeResponse(true, "No se pudo registrar el formulario en la tabla {$table}.", [], 500);
  509. }
  510. }
  511. DB::commit();
  512. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  513. }
  514. public function getTables($user, $line) {
  515. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  516. if ($arrResponseCheckUser['error']) {
  517. DB::rollBack();
  518. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  519. }
  520. try {
  521. $arrTables = DB::table('S002V01TTABL')
  522. ->where('TABL_NULI', '=', $line)
  523. ->where('TABL_ESTA', '=', 'Activo')
  524. ->get([
  525. 'TABL_IDTA AS CODIGO_TABLA',
  526. 'TABL_NOMB AS NOMBRE_TABLA',
  527. ]);
  528. $arrTables = json_decode(json_encode($arrTables), true);
  529. } catch (\Throwable $th) {
  530. return $this->responseController->makeResponse(true, "ERR_TABLE_GET000: Ocurrió un error al consultar los datos.", $th->getMessage(), 500);
  531. }
  532. foreach ($arrTables as $key => $table) {
  533. $arrDataColumns = DB::select("SHOW FULL COLUMNS FROM {$table['NOMBRE_TABLA']}");
  534. $arrColumns = array();
  535. foreach ($arrDataColumns as $dataColumn) {
  536. $arrColumns[] = [
  537. 'COLUMN' => $dataColumn->Field,
  538. 'TYPE_COLUMN' => $dataColumn->Type,
  539. 'COMMENTS' => $dataColumn->Comment,
  540. 'NULLABLE' => $dataColumn->Null,
  541. ];
  542. }
  543. $table['COLUMNS'] = $arrColumns;
  544. $arrTables[$key] = $table;
  545. }
  546. return $this->responseController->makeResponse(false, "ÉXITO", $arrTables);
  547. }
  548. public function registerTable(Request $request) {
  549. $validator = Validator::make($request->all(), [
  550. 'TABLA' => 'required|string',
  551. 'USUARIO' => 'required|string',
  552. 'NUMERO_LINEA' => 'required|integer',
  553. ]);
  554. if ($validator->fails()) {
  555. return $this->responseController->makeResponse(
  556. true,
  557. "Se encontraron uno o más errores.",
  558. $this->responseController->makeErrors($validator->errors()->messages()),
  559. 401
  560. );
  561. }
  562. DB::beginTransaction();
  563. $requestData = $request->all();
  564. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  565. if ($arrResponseCheckUser['error']) {
  566. DB::rollBack();
  567. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  568. }
  569. $user = $arrResponseCheckUser['response'];
  570. $now = $this->functionsController->now();
  571. $currentDate = $now->toDateTimeString();
  572. $requestData['TABLA'] = $this->encController->decrypt($requestData['TABLA']);
  573. if (is_null($requestData['TABLA'])) {
  574. DB::rollBack();
  575. return $this->responseController->makeResponse(true, "Ocurrió un error al desencriptar el nombre de la tabla.", [], 500);
  576. }
  577. try {
  578. $validateInsert = DB::table('S002V01TTABL')->insert([
  579. 'TABL_NULI' => $requestData['NUMERO_LINEA'],
  580. 'TABL_NOMB' => $requestData['TABLA'],
  581. 'TABL_USRE' => $user,
  582. 'TABL_FERE' => $currentDate,
  583. 'TABL_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  584. ]);
  585. } catch (\Throwable $th) {
  586. DB::rollBack();
  587. return $this->responseController->makeResponse(true, "Ocurrió un error al insertar el nombre de la tabla.", $th->getMessage(), 500);
  588. }
  589. if (!$validateInsert) {
  590. DB::rollBack();
  591. return $this->responseController->makeResponse(true, "No se pudo insertar el nombre de la tabla.", [], 500);
  592. }
  593. DB::commit();
  594. return $this->responseController->makeResponse(false, "ÉXITO: Registro correcto");
  595. }
  596. private function getNumberLineColumn(string $table) {
  597. $arrResponse = array('error' => false, 'msg' => 'ÉXITO: Consulta exitosa', 'response' => null);
  598. $table = trim($table);
  599. if ( strlen($table) !== 12 ) {
  600. $arrResponse['error'] = true;
  601. $arrResponse['msg'] = "El formato de la tabla no es correcto.";
  602. return $arrResponse;
  603. }
  604. try {
  605. $columns = DB::getSchemaBuilder()->getColumnListing($table);
  606. } catch (\Throwable $th) {
  607. $arrResponse['error'] = true;
  608. $arrResponse['msg'] = "Ocurrió un error al obtener las columnas de la tabla {$table}.";
  609. return $arrResponse;
  610. }
  611. $codeTable = substr($table, 8, 12);
  612. $codeNumberLine = "{$codeTable}_NULI";
  613. if ( in_array($codeNumberLine, $columns) ) {
  614. $arrResponse['error'] = true;
  615. $arrResponse['msg'] = "El número de línea no existe en la tabla {$table}";
  616. return $arrResponse;
  617. }
  618. $arrResponse['response'] = $codeNumberLine;
  619. return $arrResponse;
  620. }
  621. }