GenericController.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  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. class GenericController extends Controller
  17. {
  18. private $responseController;
  19. private $encryptionController;
  20. private $functionsController;
  21. public function __construct(){
  22. $this->responseController = new ResponseController();
  23. $this->encryptionController = new EncryptionController();
  24. $this->functionsController = new FunctionsController();
  25. }
  26. public function generateForm($numberForm, $user, $line){
  27. try {
  28. $objForm = DB::table('S002V01TFODI')
  29. ->where('FODI_NUFO', '=', $numberForm)
  30. ->where('FODI_ESTA', '=', 'Activo')
  31. ->where('FODI_NULI', '=', $line)
  32. ->first([
  33. 'FODI_TIRE AS TITULO_REGISTRO',
  34. 'FODI_TIMO AS TITULO_MODIFICACION',
  35. 'FODI_DAFO AS DATA_FORM'
  36. ]);
  37. } catch (\Throwable $th) {
  38. return $this->responseController->makeResponse(true, "ERR_GENERIC_GEN000: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  39. }
  40. if (empty($objForm)) {
  41. return $this->responseController->makeResponse(true, "ERR_GENERIC_GEN001: No se encontró el formulario", [], 500);
  42. }
  43. $dataFormDynamic = json_decode($objForm->DATA_FORM);
  44. try {
  45. for ($i = 0; $i < count($dataFormDynamic->fields); $i++){
  46. for ($j = 0; $j < count($dataFormDynamic->fields[$i]->form); $j++){
  47. if (
  48. $dataFormDynamic->fields[$i]->form[$j]->tag == 'select' &&
  49. array_key_exists('table_rel', (array) $dataFormDynamic->fields[$i]->form[$j]) &&
  50. $dataFormDynamic->fields[$i]->form[$j]->column_rel
  51. ){
  52. $nomTab = $dataFormDynamic->fields[$i]->form[$j]->table_rel->NOMBRE_TABLA;
  53. $column_rel = $dataFormDynamic->fields[$i]->form[$j]->column_rel;
  54. $data_select = $this->getDataSelect($nomTab,$column_rel);
  55. if($data_select['error']) return ["error" => true, "msg" => $data_select['msg']];
  56. $dataFormDynamic->fields[$i]->form[$j]->data_select = $data_select['response'];
  57. }
  58. }
  59. }
  60. } catch (\Throwable $th) {
  61. return $this->responseController->makeResponse(true, "ERR_GENERIC_GEN002: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  62. }
  63. $objResponse = [
  64. 'TITULO_REGISTRO' => $objForm->TITULO_REGISTRO,
  65. 'TITULO_MODIFICACION' => $objForm->TITULO_MODIFICACION,
  66. 'FIELDS' => $dataFormDynamic->fields
  67. ];
  68. return $this->responseController->makeResponse(false, "ÉXITO", $objResponse);
  69. }
  70. public function getDataInfo(Request $request, $numberForm){
  71. $request = $request->all();
  72. $idTableMain = $request['tables']['main_table'];
  73. $arr_id_secondary = $request['tables']['secondary_table'];
  74. if (empty($numberForm) || empty($numberForm)) {
  75. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET000: Los identificadores no pueden estar vacios.", [], 500);
  76. }
  77. try {
  78. $data_form = DB::table('S002V01TFODI')->where('FODI_NUFO', $numberForm)->first(['FODI_DAFO AS DATA_FORM', 'FODI_NOMB AS NOMBRE']);
  79. $data_json = json_decode($data_form->DATA_FORM);
  80. } catch (\Throwable $th) {
  81. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET001: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  82. }
  83. // Obtenemos los datos del formulario
  84. $arr_fields = $data_json->fields;
  85. $name_form = $data_form->NOMBRE;
  86. // Obtener el nombre de la tabla principal
  87. $table_main = $data_json->table_main;
  88. try {
  89. $str_table_main = $this->encryptionController->decrypt($table_main);
  90. } catch (\Throwable $th) {
  91. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET002: Ocurrió un error al obtener la tabla principal.", $th->getMessage(), 500);
  92. }
  93. // Obtener el arreglo de las tablas relacionales
  94. $table_relationship = $data_json->table_relationship;
  95. try {
  96. $table_relationship = $this->encryptionController->decrypt($table_relationship);
  97. } catch (\Throwable $th) {
  98. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET003: Ocurrió un error al obtener las tablas relacionales", $th->getMessage(), 500);
  99. }
  100. // Se obtienen los datos del formulario por tablas
  101. $arr_form_main = array();
  102. $arr_form_mm = array();
  103. $arr_form_secondary = array();
  104. foreach ($arr_fields as $field) {
  105. foreach ($field->form as $form) {
  106. $date_table = (array) $form->data_table;
  107. if ($date_table['table'] == $str_table_main) {
  108. $arr_form_main[] = $form;
  109. }else if(array_key_exists('columnMM', $date_table)){
  110. $arr_form_mm[] = $form;
  111. }else{
  112. $arr_form_secondary[] = $form;
  113. }
  114. }
  115. }
  116. // Se le asignan los valores al formulario principales
  117. $arr_resp = $this->getPrimaryKeyData($str_table_main);
  118. if ($arr_resp['error']) {
  119. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET004: No se pudo obtener la información de la llave principal.", [], 500);
  120. }else{
  121. $primary_key = $arr_resp['response']->COLUMN_NAME;
  122. try {
  123. $arr_data_main = (array) DB::table($str_table_main)->where($primary_key, '=', $idTableMain)->first();
  124. } catch (\Throwable $th) {
  125. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET005: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  126. }
  127. // Se asignan los valores obtenidos al formulario
  128. foreach ($arr_form_main as $data_form) {
  129. $column_form = $data_form->data_table->column;
  130. foreach ($arr_data_main as $key => $data_main) {
  131. if ($key == $column_form) {
  132. $data_form->value = $data_main;
  133. }
  134. }
  135. // Se obtienen los datos del select
  136. if ($data_form->tag == 'select' && $data_form->table_rel != null && $data_form->column_rel != null) {
  137. $nomTab = $data_form->table_rel->NOMBRE_TABLA;
  138. $column_rel = $data_form->column_rel;
  139. $data_select = $this->getDataSelect($nomTab,$column_rel);
  140. if($data_select['error']){
  141. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET006: No se pudo realizar la consulta a la base.", [], 500);
  142. }
  143. $data_form->data_select = $data_select['response'];
  144. }
  145. }
  146. }
  147. // Se le asignan los valores al formulario M:M
  148. foreach ($arr_form_mm as $form_mm) {
  149. $table = $form_mm->columnMM->table;
  150. $column = $form_mm->columnMM->column;
  151. $table_rel = $form_mm->table_rel->NOMBRE_TABLA;
  152. $column_rel = $form_mm->column_rel;
  153. $data_select = $this->getDataSelect($table_rel,$column_rel);
  154. if ($data_select['error']) {
  155. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET007: No se pudo realizar la consulta a la base.", [], 500);
  156. }else{
  157. $form_mm->data_select = [];
  158. foreach ($data_select['response'] as $value) {
  159. $form_mm->data_select[] = $value;
  160. }
  161. }
  162. try {
  163. $arr_data_mm = DB::table($table)->where($column, '=', $idTableMain)->get();
  164. } catch (\Throwable $th) {
  165. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET008: No se pudo realizar la consulta a la base.", [], 500);
  166. }
  167. $form_mm->value = [];
  168. foreach ($arr_data_mm as $value) {
  169. $form_mm->value[] = $value->PRAR_IDPR;
  170. }
  171. }
  172. // Se le asignan los valores al formulario secundarios
  173. foreach ($arr_id_secondary as $data_form) {
  174. $arr_resp = $this->getPrimaryKeyData($data_form['table']);
  175. if ($arr_resp['error']) {
  176. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET009: No se pudo obtener la información de la llave principal.", [], 500);
  177. }else{
  178. $primary_key = $arr_resp['response']->COLUMN_NAME;
  179. try {
  180. $arr_data_secondary = (array) DB::table($data_form['table'])->where($primary_key, '=', $data_form['id'])->first();
  181. } catch (\Throwable $th) {
  182. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET010: No se pudo realizar la consulta a la base.", $th->getMessage(), 500);
  183. }
  184. }
  185. // Se asignan los valores obtenidos al formulario
  186. foreach ($arr_form_secondary as $form_secondary) {
  187. if ($form_secondary->data_table->table == $data_form['table']) {
  188. $column_form = $form_secondary->data_table->column;
  189. foreach ($arr_data_secondary as $key => $data_main) {
  190. if ($key == $column_form) {
  191. $form_secondary->value = $data_main;
  192. }
  193. }
  194. // Se obtienen los datos del select
  195. if ($form_secondary->tag == 'select' && $form_secondary->table_rel != null && $form_secondary->column_rel != null) {
  196. $nomTab = $form_secondary->table_rel->NOMBRE_TABLA;
  197. $column_rel = $form_secondary->column_rel;
  198. $data_select = $this->getDataSelect($nomTab,$column_rel);
  199. if($data_select['error']){
  200. return $this->responseController->makeResponse(true, "ERR_DYNFORM_GET011: No se pudo realizar la consulta a la base.", [], 500);
  201. }
  202. $form_secondary->data_select = $data_select['response'];
  203. }
  204. }
  205. }
  206. }
  207. foreach ($arr_fields as $key => $fields) {
  208. foreach ($fields->form as $key => $form) {
  209. $data_table = $form->data_table;
  210. foreach ($arr_form_main as $key => $form_main) {
  211. $data_table_main = $form_main->data_table;
  212. if ($data_table->table == $data_table_main->table && $data_table->column == $data_table_main->column) {
  213. $form->value = $form_main->value;
  214. }
  215. }
  216. foreach ($arr_form_mm as $key => $form_mm) {
  217. $data_table_main = $form_mm->data_table;
  218. if ($data_table->table == $data_table_main->table && $data_table->column == $data_table_main->column) {
  219. $form->value = $form_mm->value;
  220. }
  221. }
  222. foreach ($arr_form_secondary as $key => $form_secondary) {
  223. $data_table_main = $form_secondary->data_table;
  224. if ($data_table->table == $data_table_main->table && $data_table->column == $data_table_main->column) {
  225. $form->value = $form_secondary->value;
  226. }
  227. }
  228. }
  229. }
  230. $resp = [ 'NOMBRE_FORM' => $name_form, 'FIELDS' => $arr_fields];
  231. return $this->responseController->makeResponse(false, "ÉXITO", $resp);
  232. }
  233. public function registerForm(Request $request) {
  234. $validator = Validator::make($request->all(), [
  235. 'CODIGO_FORM' => 'required|string',
  236. 'DATA_VALUE' => 'required|string',
  237. 'USER' => 'required|string',
  238. 'LINE' => 'required|string',
  239. ]);
  240. if ($validator->fails()) {
  241. return $this->responseController->makeResponse(
  242. true,
  243. "ERR_GENERIC_REG000: Se encontraron uno o más errores.",
  244. $this->responseController->makeErrors($validator->errors()->messages()),
  245. 401
  246. );
  247. }
  248. $response = $request->all();
  249. // Se obtiene el número del formulario
  250. try {
  251. $numberForm = $this->encryptionController->decrypt($response['CODIGO_FORM']);
  252. } catch (\Throwable $th) {
  253. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG001: Ocurrió al obtener el número de formulario.",$th->getMessage(),500);
  254. }
  255. // Se obtiene la información a un objeto
  256. $arrDataValue = json_decode($response['DATA_VALUE']);
  257. // Se obtiene el usuario
  258. try {
  259. $user = $this->encryptionController->decrypt($response['USER']);
  260. } catch (\Throwable $th) {
  261. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG002: Ocurrió un error al obtener el usuario.",$th->getMessage(),500);
  262. }
  263. // Se obtiene el número de línea
  264. $line = $response['LINE'];
  265. try {
  266. // Se consulta la información del formulario
  267. $getForm = DB::table('S002V01TFODI')
  268. ->where('FODI_NUFO', '=', $numberForm)
  269. ->where('FODI_ESTA', '=', 'Activo')
  270. ->where('FODI_NULI', '=', $line)
  271. ->first([ 'FODI_DAFO' ]);
  272. // Si no encuentra ningún registro, entonces manda un mensaje de error
  273. if (empty($getForm)) {
  274. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG003: No se encontró el formulario.",[],500);
  275. }
  276. } catch (\Throwable $th) {
  277. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG004: Ocurrió un error en la consulta.",$th->getMessage(),500);
  278. }
  279. // Se obtiene la información del formulario dinámico
  280. $arrFields = json_decode($getForm->FODI_DAFO);
  281. try {
  282. $mainTable = $this->encryptionController->decrypt($arrFields->table_main);
  283. } catch (\Throwable $th) {
  284. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG005: Ocurrió un error al obtener la tabla principal",$th->getMessage(),500);
  285. }
  286. // Se obtienen las columnas condicionales
  287. $arrInformationWhere = $arrFields->info_users_dates;
  288. // Se iteran según las condicionales
  289. foreach ($arrInformationWhere as $keyInfo => $informationWhere) {
  290. // Se obtiene el nombre de la tabla
  291. $tableNameInformation = $informationWhere->table;
  292. // Se inicializa el arreglo para la inserción
  293. $arrInsert = array();
  294. $codeTable = strtoupper(substr($mainTable, 8, strlen($mainTable)));
  295. // Se itera la información del formulario
  296. foreach ($arrDataValue as $key => $dataValue) {
  297. $tableNameForm = $dataValue->data_table->table;
  298. // Se verifica que la tabla de las condicionales coincida con la información del formulario
  299. if ($tableNameForm == $tableNameInformation) {
  300. // Se inserta la información de la columna con el valor perteneciente
  301. if (array_key_exists('value', (array) $dataValue)) {
  302. $arrInsert[$dataValue->column] = $dataValue->value;
  303. }else{
  304. $arrInsert[$dataValue->column] = false;
  305. }
  306. }
  307. if ($tableNameForm == 'NA') {
  308. $columnTable = $dataValue->data_table->column;
  309. $arrInsert[$codeTable.'_INEX'][$columnTable] = $dataValue->value;
  310. }
  311. }
  312. $now = $this->functionsController->now();
  313. $currentDate = $now->toDateTimeString();
  314. // Se ingresa en la tabla el usuario
  315. $arrInsert[$informationWhere->user_reg] = $user;
  316. $arrInsert[$informationWhere->date_reg] = $currentDate;
  317. $arrInsert[$informationWhere->timestamp] = DB::raw('CURRENT_TIMESTAMP');
  318. if (array_key_exists($codeTable.'_INEX', $arrInsert)) {
  319. $arrInsert[$codeTable.'_INEX'] = json_encode($arrInsert[$codeTable.'_INEX']);
  320. }
  321. // Se verifica que el arreglo contenga datos
  322. if (!empty($arrInsert)) {
  323. try {
  324. $response = DB::table($tableNameInformation)->insert($arrInsert);
  325. if (!$response) {
  326. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG006: El registro no fue exitoso.", [], 500);
  327. }
  328. } catch (\Throwable $th) {
  329. $message = $th->getMessage();
  330. if (count(explode('Duplicate entry', $message)) == 2) {
  331. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG007: El identificador se encuentra duplicado.", $th->getMessage(), 500);
  332. } else {
  333. return $this->responseController->makeResponse(true,"ERR_GENERIC_REG008: Ocurrió un error al momento de insertar los registros.", $th->getMessage(), 500);
  334. }
  335. }
  336. }
  337. }
  338. return $this->responseController->makeResponse(false, "ÉXITO");
  339. }
  340. public function updateForm(Request $request) {
  341. $validator = Validator::make($request->all(), [
  342. 'CODIGO_FORM' => 'required|string',
  343. 'DATA_VALUE' => 'required|string',
  344. 'USER' => 'required|string',
  345. 'LINE' => 'required|string',
  346. ]);
  347. if ($validator->fails()) {
  348. return $this->responseController->makeResponse(
  349. true,
  350. "ERR_GENERIC_UPD000: Se encontraron uno o más errores.",
  351. $this->responseController->makeErrors($validator->errors()->messages()),
  352. 401
  353. );
  354. }
  355. $response = $request->all();
  356. // Se obtiene el número del formulario
  357. try {
  358. $numberForm = $this->encryptionController->decrypt($response['CODIGO_FORM']);
  359. } catch (\Throwable $th) {
  360. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD001: Ocurrió un error al obtener el número del formulario.",$th->getMessage(),500);
  361. }
  362. // Se obtiene la información a un objeto
  363. $arrDataValue = json_decode($response['DATA_VALUE']);
  364. // Se obtiene el usuario
  365. try {
  366. $user = $this->encryptionController->decrypt($response['USER']);
  367. } catch (\Throwable $th) {
  368. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD002: Ocurrió un error al obtener el usuario.",$th->getMessage(),500);
  369. }
  370. // Se obtiene el número de línea
  371. $line = $response['LINE'];
  372. try {
  373. // Se consulta la información del formulario
  374. $getForm = DB::table('S002V01TFODI')
  375. ->where('FODI_NUFO', '=', $numberForm)
  376. ->where('FODI_ESTA', '=', 'Activo')
  377. ->where('FODI_NULI', '=', $line)
  378. ->first([ 'FODI_DAFO' ]);
  379. // Si no encuentra ningún registro, entonces manda un mensaje de error
  380. if (empty($getForm)) {
  381. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD003: No se encontró el formulario.",[],500);
  382. }
  383. } catch (\Throwable $th) {
  384. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD004: Ocurrió un error en la consulta.",$th->getMessage(),500);
  385. }
  386. // Se obtiene la información del formulario dinámico
  387. $arrFields = json_decode($getForm->FODI_DAFO);
  388. // Se obtienen las columnas condicionales
  389. $arrInformationWhere = $arrFields->info_users_dates;
  390. try {
  391. $mainTable = $this->encryptionController->decrypt($arrFields->table_main);
  392. } catch (\Throwable $th) {
  393. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD005: Ocurrió un error en la consulta.",$th->getMessage(),500);
  394. }
  395. foreach ($arrInformationWhere as $keyInfo => $informationWhere) {
  396. // Se obtiene el nombre de la tabla
  397. $tableNameInformation = $informationWhere->table;
  398. // Se inicializa el arreglo para la inserción
  399. $arrUpdate = array();
  400. // Se inicializa el arreglo para la condicional
  401. $arrWhere = array();
  402. $codeTable = strtoupper(substr($mainTable, 8, strlen($mainTable)));
  403. // Se itera la información del formulario
  404. foreach ($arrDataValue as $key => $dataValue) {
  405. $tableNameForm = $dataValue->data_table->table;
  406. // Se verifica que la tabla de las condicionales coincida con la información del formulario
  407. if ($tableNameForm == $tableNameInformation) {
  408. // Se inserta la información de la columna con el valor perteneciente
  409. $arrUpdate[$dataValue->column] = $dataValue->value;
  410. }
  411. if ($tableNameForm == 'NA') {
  412. $columnTable = $dataValue->data_table->column;
  413. $arrUpdate[$codeTable.'_INEX'][$columnTable] = $dataValue->value;
  414. }
  415. }
  416. $now = $this->functionsController->now();
  417. $currentDate = $now->toDateTimeString();
  418. // Se ingresa en la tabla el usuario
  419. $arrUpdate[$informationWhere->user_mod] = $user;
  420. $arrUpdate[$informationWhere->date_mod] = $currentDate;
  421. $arrUpdate[$informationWhere->timestamp] = DB::raw('CURRENT_TIMESTAMP');
  422. if (array_key_exists($codeTable.'_INEX', $arrUpdate)) {
  423. $arrUpdate[$codeTable.'_INEX'] = json_encode($arrUpdate[$codeTable.'_INEX']);
  424. }
  425. foreach ($informationWhere->where as $keyInfoWhere => $infoWhere) {
  426. foreach ($arrDataValue as $key => $dataValue) {
  427. if ($infoWhere == $dataValue->column) {
  428. $arrWhere[$infoWhere] = $dataValue->value;
  429. }
  430. }
  431. }
  432. // Se verifica que el arreglo contenga datos
  433. if (!empty($arrUpdate)) {
  434. try {
  435. $responseUpdate = DB::table($tableNameInformation)->where($arrWhere)->update($arrUpdate);
  436. if (!$responseUpdate) {
  437. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD005: No se encontró el registros selecciondo.",[],500);
  438. }
  439. } catch (\Throwable $th) {
  440. $message = $th->getMessage();
  441. if (count(explode('Duplicate entry', $message)) == 2) {
  442. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD006: El identificador se encuentra duplicado.",$th->getMessage(),500);
  443. } else {
  444. return $this->responseController->makeResponse(true,"ERR_GENERIC_UPD007: Ocurrió un error al momento de insertar los registros. ",$th->getMessage(),500);
  445. }
  446. }
  447. }
  448. }
  449. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  450. }
  451. /* ------------------------------------------------------ FUNCIONES ----------------------------------------------------------------------*/
  452. private function getConditions($conditions, $query, $flag = 0):string {
  453. foreach ($conditions as $condition){
  454. $queryAux = "";
  455. $cond1 = $condition->cond1;
  456. $cond2 = $condition->cond2;
  457. $queryAux .= "$cond1->table.$cond1->column $condition->ope ";
  458. if(!$condition->isCond2Column && !$condition->isCond2Request ){
  459. $queryAux .= $cond2." ";
  460. }else if($condition->isCond2Column && !$condition->isCond2Request){
  461. $queryAux .= "$cond2->table.$cond2->column ";
  462. }else if($condition->isCond2Request && !$condition->isCond2Column){
  463. $queryAux .= "";
  464. }else{
  465. return "";
  466. }
  467. if($condition->conditionAnidada){
  468. $flag ++;
  469. $query .= "$condition->operadorLogic ($queryAux";
  470. return $this->getConditions($condition->conditionAnidada, $query, $flag);
  471. }else{
  472. $query .= $condition->operadorLogic." ".$queryAux;
  473. if ($flag > 0){
  474. $query .= str_repeat(")", $flag);
  475. $flag = 0;
  476. }
  477. }
  478. }
  479. return $query;
  480. }
  481. private function getTablesName(){
  482. $databaseName = DB::connection()->getDatabaseName();
  483. try {
  484. $resp = DB::select('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="'.$databaseName.'"');
  485. } catch (\Throwable $th) {
  486. return ["error" => true, "msg" => "ERR_GENERIC_REG000: No se pudo realizar la consulta a la base.", "response" => $th->getMessage()];
  487. }
  488. if ( count($resp) == 0) {
  489. return ["error" => true, "msg" => "ERR_GENERIC_REG001: Ocurrió un error con obtener los nombres de las tablas."];
  490. }
  491. return ["error" => false, "msg" => "ÉXITO", "response" => $resp];
  492. }
  493. private function getDataSelect($base_name, $column){
  494. $pk_data = $this->getPrimaryKeyData($base_name);
  495. if($pk_data['error']) return ["error" => true, "msg" => $pk_data['msg']];
  496. $pk = $pk_data['response']->COLUMN_NAME;
  497. try {
  498. $resp = DB::table($base_name)->get([ $pk.' AS valor', $column. ' AS opcion' ]);
  499. } catch (\Throwable $th) {
  500. return ["error" => true, "msg" => "ERR_GENERIC_REG000: No se pudo realizar la consulta a la base.", "response" => $th->getMessage()];
  501. }
  502. return ["error" => false, "msg" => "ÉXITO", "response" => $resp];
  503. }
  504. private function getPrimaryKeyData($table_name_main){
  505. $databaseName = DB::connection()->getDatabaseName();
  506. try {
  507. $resp = DB::select(DB::raw("SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH AS LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".$databaseName."' AND TABLE_NAME = '".$table_name_main."' AND COLUMN_KEY = 'PRI'"));
  508. } catch (\Throwable $th) {
  509. return ["error" => true, "msg" => "ERR_GENERIC_REG000: No se pudo realizar la consulta a la base.", "response" => $th->getMessage()];
  510. }
  511. if (count($resp) == 0) {
  512. return ["error" => true, "msg" => "ERR_GENERIC_REG001: No se pudo realizar la consulta a la base."];
  513. }
  514. return ["error" => false, "msg" => "ÉXITO", "response" => $resp[0]];
  515. }
  516. }