InterventionController.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. <?php
  2. /*
  3. Nombre del programador: Cordourier Rojas Mathew
  4. Ultima fecha de modificación: [ 03 / Marzo / 2023 ]
  5. Descripción: Controlador del submodulo Intervenciones. Perteneciente al Módulo 13 - Gestion del Personal de Mantenimiento
  6. */
  7. namespace App\Http\Controllers;
  8. use Carbon\Carbon;
  9. use Illuminate\Support\Facades\DB;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Storage;
  12. use Illuminate\Support\Facades\Validator;
  13. use stdClass;
  14. use Throwable;
  15. class InterventionController extends Controller
  16. {
  17. private $response_controller;
  18. private $encrypt_controller;
  19. private $resources_controller;
  20. private $documents_controller;
  21. public function __construct()
  22. {
  23. $this->response_controller = new ResponseController();
  24. $this->encrypt_controller = new EncryptionController();
  25. $this->resources_controller = new ResourcesController();
  26. $this->documents_controller = new DocumentsController();
  27. }
  28. // Metodo para consultar de las intervenciones
  29. public function getConsultOfInterventions($line_number)
  30. {
  31. try {
  32. $interventions = DB::table('S002V01TINTE_P')
  33. ->select(
  34. 'INTE_IDIN as INTERVENTION_ID',
  35. 'INTE_FECS as START_DATE',
  36. 'INTE_FESD as END_DATE'
  37. )
  38. ->where('INTE_ESTA', '=', 'Activo')
  39. ->where('INTE_NULI', '=', $line_number)
  40. ->get();
  41. // Obtiene los datos de la tabla intermediaria entre intervenciones y equipos de mantenimiento
  42. $equipment_by_intervention = DB::table('S002V01TINMA')
  43. ->select(
  44. 'S002V01TINMA.INMA_IDMA as EQUIPMENT_ID',
  45. 'S002V01TMATE_P.MATE_NOMB as EQUIPMENT_NAME',
  46. 'S002V01TINMA.INMA_IDIN as INTERVENTION_ID'
  47. )
  48. ->where('INMA_NULI', '=', $line_number)
  49. ->join('S002V01TMATE_P', 'S002V01TINMA.INMA_IDMA', '=', 'S002V01TMATE_P.MATE_IDMA')
  50. ->get();
  51. // Cambia el formato de las fechas y el equipamiento que se utilizó por intervención
  52. foreach ($interventions as $intervention) {
  53. $intervention->START_DATE = Carbon::create($intervention->START_DATE)->format("d-m-Y h:i:s A");
  54. $intervention->END_DATE = Carbon::create($intervention->END_DATE)->format("d-m-Y h:i:s A");
  55. $intervention->EQUIPMENT = new stdClass();
  56. foreach ($equipment_by_intervention as $equipment) {
  57. if ($equipment->INTERVENTION_ID == $intervention->INTERVENTION_ID) {
  58. $intervention->EQUIPMENT->ID = $equipment->EQUIPMENT_ID;
  59. $intervention->EQUIPMENT->NAME = $equipment->EQUIPMENT_NAME;
  60. }
  61. }
  62. // Verifica si el objeto esta vacio
  63. if (!isset($intervention->EQUIPMENT->ID) && empty($intervention->EQUIPMENT->ID)) {
  64. $intervention->EQUIPMENT = null;
  65. }
  66. }
  67. return $this->response_controller
  68. ->makeResponse(FALSE, 'Consulta exitosa', $interventions);
  69. } catch (Throwable $th) {
  70. return $this->response_controller
  71. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG001: Error inesperado', strtoupper($th->getMessage()), 500);
  72. }
  73. }
  74. // Metodo para obtener los detalles de una intervención
  75. public function getDetailsOfInterventionsById($id_intervention, $line_number)
  76. {
  77. try {
  78. $intervention_details = DB::table('S002V01TINTE_P')
  79. ->select(
  80. 'INTE_IDIN as INTERVENTION_ID',
  81. 'INTE_FECS as START_DATE',
  82. 'INTE_FESD as END_DATE',
  83. 'INTE_DEFA as FAILURES_INTERVENTION',
  84. 'INTE_DEAC as ACTIVITIES_INTERVENTION'
  85. )
  86. ->where('INTE_IDIN', '=', $id_intervention)
  87. ->where('INTE_NULI', '=', $line_number)
  88. ->first();
  89. // Verifica si el objeto esta vacio
  90. if (!isset($intervention_details) && empty($intervention_details)) {
  91. return $this->response_controller
  92. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG001: No se encontró la intervención', $intervention_details, 500);
  93. }
  94. $images_failures = DB::table('S002V01TIMAG_P')
  95. ->select(
  96. 'IMAG_LIIM as FAILURES_IMAGE_INTERVENTION'
  97. )
  98. ->where('IMAG_IDIN', '=', $id_intervention)
  99. ->where('IMAG_TIIM', '=', 'Falla')
  100. ->where('IMAG_ESTA', '=', 'Activo')
  101. ->where('IMAG_NULI', '=', $line_number)
  102. ->get();
  103. $images_activities = DB::table('S002V01TIMAG_P')
  104. ->select(
  105. 'IMAG_LIIM as ACTIVITIES_IMAGE_INTERVENTION'
  106. )
  107. ->where('IMAG_IDIN', '=', $id_intervention)
  108. ->where('IMAG_TIIM', '=', 'Actividad')
  109. ->where('IMAG_ESTA', '=', 'Activo')
  110. ->where('IMAG_NULI', '=', $line_number)
  111. ->get();
  112. // Obtiene los equipos que estuvieron presentes en la intervención
  113. $workteams_on_intervention = DB::table('S002V01TEQMA')
  114. ->select('S002V01TEQMA.EQMA_NOMB as WORKTEAM_NAME', 'S002V01TEQMA.EQMA_IDEQ as WORKTEAM_ID')
  115. ->where('S002V01TEMIN.EMIN_IDIN', '=', $id_intervention)
  116. ->where('S002V01TEMIN.EMIN_NULI', '=', $line_number)
  117. ->join('S002V01TEMIN', 'S002V01TEQMA.EQMA_IDEQ', '=', 'S002V01TEMIN.EMIN_IDEM')
  118. ->get();
  119. // Obtiene los equipamientos que se utilizaron para la intervención
  120. $equipment_on_intervention = DB::table('S002V01TMATE_P')
  121. ->select('S002V01TMATE_P.MATE_NOMB as NAME', 'S002V01TMATE_P.MATE_LIIM as IMAGE')
  122. ->where('S002V01TINMA.INMA_IDIN', '=', $id_intervention)
  123. ->where('S002V01TINMA.INMA_NULI', '=', $line_number)
  124. ->join('S002V01TINMA', 'S002V01TMATE_P.MATE_IDMA', '=', 'S002V01TINMA.INMA_IDMA')
  125. ->get();
  126. // Obtiene a los empleados con su nombre
  127. $employees_workteam = DB::table('S002V01TPEEM')
  128. ->select(
  129. DB::raw('TRIM(CONCAT(S002V01TUSUA.USUA_NOMB, " " , S002V01TUSUA.USUA_APPA, " ", COALESCE(S002V01TUSUA.USUA_APMA,""))) as NAME'),
  130. 'S002V01TPEEM.PEEM_IDEM as WORKTEAM_ID'
  131. )
  132. ->where('S002V01TPEEM.PEEM_NULI', '=', $line_number)
  133. ->where('S002V01TPERS.PERS_NULI', '=', $line_number)
  134. ->where('S002V01TUSUA.USUA_NULI', '=', $line_number)
  135. ->join('S002V01TPERS', 'S002V01TPEEM.PEEM_IDPE', '=', 'S002V01TPERS.PERS_IDPE')
  136. ->join('S002V01TUSUA', 'S002V01TPERS.PERS_IDUS', '=', 'S002V01TUSUA.USUA_IDUS')
  137. ->get();
  138. // Introduce el equipamiento utilizado, si es que hubo
  139. if (!isset($equipment_on_intervention[0]) && empty($equipment_on_intervention[0])) {
  140. $intervention_details->EQUIPMENT = "-";
  141. } else {
  142. $intervention_details->EQUIPMENT = $equipment_on_intervention;
  143. }
  144. // Introduce los empleados en su equipo de trabajo
  145. foreach ($workteams_on_intervention as $workteam) {
  146. foreach ($employees_workteam as $employee) {
  147. if ($workteam->WORKTEAM_ID == $employee->WORKTEAM_ID) {
  148. $workteam->MEMBERS[] = $employee->NAME;
  149. }
  150. }
  151. }
  152. $intervention_details->WORKTEAMS = $workteams_on_intervention;
  153. // Verifica si el objeto esta vacio
  154. if (!isset($images_activities[0]) && empty($images_activities[0])) {
  155. $intervention_details->ACTIVITIES_IMAGE_INTERVENTION = "-";
  156. } else {
  157. foreach ($images_activities as $image) {
  158. $intervention_details->ACTIVITIES_IMAGE_INTERVENTION[] = $image->ACTIVITIES_IMAGE_INTERVENTION;
  159. }
  160. }
  161. // Verifica si el objeto esta vacio
  162. if (!isset($images_failures[0]) && empty($images_failures[0])) {
  163. $intervention_details->FAILURES_IMAGE_INTERVENTION = "-";
  164. } else {
  165. foreach ($images_failures as $image) {
  166. $intervention_details->FAILURES_IMAGE_INTERVENTION[] = $image->FAILURES_IMAGE_INTERVENTION;
  167. }
  168. }
  169. $intervention_details->START_DATE = Carbon::create($intervention_details->START_DATE)->format("d-m-Y h:i:s A");
  170. $intervention_details->END_DATE = Carbon::create($intervention_details->END_DATE)->format("d-m-Y h:i:s A");
  171. return $this->response_controller
  172. ->makeResponse(FALSE, 'Consulta exitosa', $intervention_details);
  173. } catch (Throwable $th) {
  174. return $this->response_controller
  175. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  176. }
  177. }
  178. // Metodo para obtener datos de los contratos
  179. public function getConsultOfContracts($line_number)
  180. {
  181. try {
  182. $contracts = DB::table('S002V01TCONT')
  183. ->select(
  184. 'CONT_IDCO as CONTRACT_ID',
  185. 'CONT_NOMB as CONTRACT_NAME',
  186. 'CONT_TIPO as CONTRACT_TYPE',
  187. 'CONT_FEIN as START_DATE',
  188. 'CONT_FEFI as END_DATE',
  189. 'CONT_COST as CONTRACT_COST',
  190. 'CONT_FERE as REGISTER_DATE',
  191. 'CONT_USRE as REGISTERED_BY',
  192. 'CONT_LIDO as DOCUMENT'
  193. )
  194. ->where('CONT_NULI', '=', $line_number)
  195. ->get();
  196. $users = DB::table('S002V01TUSUA')
  197. ->select(
  198. 'USUA_IDUS as USER_ID',
  199. DB::raw('TRIM(CONCAT(USUA_NOMB, " " , USUA_APPA, " ", COALESCE(USUA_APMA,""))) as NAME')
  200. )
  201. ->where('USUA_NULI', '=', $line_number)
  202. ->get();
  203. $employees = DB::table('S002V01TPERS')
  204. ->select(
  205. DB::raw('TRIM(CONCAT(S002V01TUSUA.USUA_NOMB, " " , S002V01TUSUA.USUA_APPA, " ", COALESCE(S002V01TUSUA.USUA_APMA,""))) as EMPLOYEE'),
  206. 'S002V01TPERS.PERS_IDPS as TYPE_EMPLOYEE',
  207. 'S002V01TPECO.PECO_IDCO as CONTRACT_ID',
  208. 'S002V01TPESU.PESU_RASO AS SUBCONTRATIST',
  209. )
  210. ->where('S002V01TPERS.PERS_NULI', '=', $line_number)
  211. ->where('S002V01TUSUA.USUA_NULI', '=', $line_number)
  212. ->where('S002V01TPECO.PECO_NULI', '=', $line_number)
  213. ->orWhere('S002V01TPESU.PESU_NULI', '=', $line_number)
  214. ->join('S002V01TUSUA', 'S002V01TPERS.PERS_IDUS', '=', 'S002V01TUSUA.USUA_IDUS')
  215. ->leftJoin('S002V01TPESU', 'S002V01TPERS.PERS_IDPS', '=', 'S002V01TPESU.PESU_IDPS')
  216. ->join('S002V01TPECO', 'S002V01TPERS.PERS_IDPE', '=', 'S002V01TPECO.PECO_IDPE')
  217. ->get();
  218. $todays_date = Carbon::now();
  219. // Itera los contratos para agregar a los dueños de los mismos y su duración
  220. foreach ($contracts as $contract) {
  221. $contract->DENOMINATION = [];
  222. // Verifica el estado del contrato, si ya paso su fecha de fin
  223. $contract->STATUS = $todays_date->greaterThan(Carbon::create($contract->END_DATE)) ? "Expirado" : "Activo";
  224. $contract->START_DATE = Carbon::create($contract->START_DATE)->format("d-m-Y");
  225. $contract->END_DATE = Carbon::create($contract->END_DATE)->format("d-m-Y");
  226. $contract->CONTRACT_COST = $this->encrypt_controller->encrypt($contract->CONTRACT_COST);
  227. $contract->DOCUMENT = $this->encrypt_controller->encrypt(Storage::disk('pdf')->url($contract->DOCUMENT));
  228. // Para establecer la duracion del contrato
  229. $duration = Carbon::create($contract->START_DATE)->diff($contract->END_DATE);
  230. $contract->DURATION = $this->resources_controller->durationDate($duration);
  231. $contract->REGISTER_DATE = Carbon::create($contract->REGISTER_DATE)->format("d-m-Y h:i:s A");
  232. foreach ($users as $user) {
  233. if ($contract->REGISTERED_BY == $user->USER_ID) {
  234. $contract->REGISTERED_BY = $user->NAME;
  235. }
  236. }
  237. // Ingresa el nombre del propietario del contrato, si fue por medio de un subcontratista, se coloca el nombre de este
  238. foreach ($employees as $employee) {
  239. if ($employee->CONTRACT_ID == $contract->CONTRACT_ID) {
  240. if ($contract->CONTRACT_TYPE == "Subcontratista") {
  241. // // Evita duplicados de subcontratista
  242. if (!in_array(trim($employee->SUBCONTRATIST), $contract->DENOMINATION)) {
  243. $contract->DENOMINATION[] = trim($employee->SUBCONTRATIST);
  244. }
  245. } else {
  246. $contract->DENOMINATION[] = $employee->EMPLOYEE;
  247. }
  248. }
  249. }
  250. }
  251. return $this->response_controller
  252. ->makeResponse(FALSE, 'Consulta exitosa', $contracts);
  253. } catch (Throwable $th) {
  254. return $this->response_controller
  255. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG001: Error inesperado', strtoupper($th->getMessage()), 500);
  256. }
  257. }
  258. // Metodo para obtener un contrato por el ID
  259. public function getContractById($id_contract, $line_number)
  260. {
  261. try {
  262. $contract = DB::table('S002V01TCONT')
  263. ->select(
  264. 'CONT_IDCO as CONTRACT_ID',
  265. 'CONT_NOMB as CONTRACT_NAME',
  266. 'CONT_TIPO as CONTRACT_TYPE',
  267. 'CONT_FEIN as START_DATE',
  268. 'CONT_FEFI as END_DATE',
  269. 'CONT_COST as CONTRACT_COST',
  270. 'CONT_LIDO as CONTRACT_DOCUMENT',
  271. 'CONT_FERE as REGISTER_DATE',
  272. 'CONT_USRE as REGISTERED_BY'
  273. )
  274. ->where('CONT_IDCO', '=', $id_contract)
  275. ->where('CONT_NULI', '=', $line_number)
  276. ->first();
  277. // Verifica si el objeto esta vacio
  278. if (!isset($contract) && empty($contract)) {
  279. return $this->response_controller
  280. ->makeResponse(TRUE, 'ERR_CONTRATO_REG001: No se encontró el contrato', $contract, 500);
  281. }
  282. $employee = DB::table('S002V01TPECO')
  283. ->select("PECO_IDPE as DENOMINATION")
  284. ->where('PECO_IDCO', '=', $id_contract)
  285. ->where('PECO_NULI', '=', $line_number)
  286. ->first();
  287. $contract->START_DATE = Carbon::create($contract->START_DATE)->format("d-m-Y h:i:s A");
  288. $contract->END_DATE = Carbon::create($contract->END_DATE)->format("d-m-Y h:i:s A");
  289. $contract->REGISTER_DATE = Carbon::create($contract->REGISTER_DATE)->format("d-m-Y h:i:s A");
  290. $contract->CONTRACT_COST = $this->encrypt_controller->encrypt($contract->CONTRACT_COST);
  291. $contract->CONTRACT_DOCUMENT = $this->encrypt_controller->encrypt($contract->CONTRACT_DOCUMENT);
  292. $contract->DENOMINATION = $employee->DENOMINATION;
  293. return $this->response_controller
  294. ->makeResponse(FALSE, 'Consulta exitosa', $contract);
  295. } catch (Throwable $th) {
  296. return $this->response_controller
  297. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  298. }
  299. }
  300. // Metodo para guardar un contrato
  301. public function storeContract(Request $request)
  302. {
  303. try {
  304. $REGISTER_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
  305. $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
  306. $request['CONTRACT_COST'] = $this->encrypt_controller->decrypt($request->CONTRACT_COST);
  307. $validator = Validator::make($request->all(), [
  308. "CONTRACT_NAME" => ['required'],
  309. "CONTRACT_TYPE" => ['required'],
  310. "DENOMINATION" => ['required', 'size:10'],
  311. "START_DATE" => ['required', 'date'],
  312. "END_DATE" => ['required', 'date'],
  313. "CONTRACT_COST" => ['required'],
  314. "DOCUMENT" => ['required'],
  315. "SAVED_BY_USER" => ['required', 'digits:10'],
  316. "LINE_NUMBER" => ['required', 'digits:1']
  317. ]);
  318. if ($validator->fails()) {
  319. return $this->response_controller->makeResponse(
  320. TRUE,
  321. 'ERR_CONTRATO_REG001: Uno o más errores encontrados',
  322. $this->response_controller->makeErrors($validator->errors()->messages()),
  323. 400
  324. );
  325. }
  326. $user_register = DB::table('S002V01TUSUA')
  327. ->select('USUA_IDUS as ID_USER')
  328. ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
  329. ->where('USUA_NULI', '=', $request->LINE_NUMBER)
  330. ->first();
  331. // Verifica si el objeto esta vacio
  332. if (!isset($user_register) && empty($user_register)) {
  333. return $this->response_controller
  334. ->makeResponse(TRUE, "ERR_USUARIO_REG002: Tu usuario no es válido para registrar contratos", [], 500);
  335. }
  336. DB::beginTransaction(); # Para impedir que las actualizaciones queden a incompletas
  337. // Busca si el empleado existe en la base de datos
  338. $employee_exist = DB::table('S002V01TPERS')
  339. ->select("PERS_IDPE")
  340. ->where('PERS_IDPE', '=', $request->DENOMINATION)
  341. ->where('PERS_NULI', '=', $request->LINE_NUMBER)
  342. ->first();
  343. // Verifica si el objeto esta vacio
  344. if (!isset($employee_exist) && empty($employee_exist)) {
  345. return $this->response_controller
  346. ->makeResponse(TRUE, 'ERR_PERSONAL_REG003: No se encontró al empleado', [], 500);
  347. }
  348. // Para la creación del contrato y guardar su enlace
  349. $doc = $request->DOCUMENT;
  350. // Se obtiene el nombre del archivo con su extensión
  351. $completeFileName = $doc->getClientOriginalName();
  352. // Se obtiene únicamente el nombre
  353. $fileNameOnly = pathinfo($completeFileName, PATHINFO_FILENAME);
  354. // Se obtiene la extensión del archivo
  355. $extension = $doc->getClientOriginalExtension();
  356. // Se quitan los espacios y se concatena datos para ser guardado
  357. $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
  358. // Se agrega la fecha actual con el formato de la nomenclatura de documentos
  359. $DATE_TO_DOCUMENT = Carbon::now()->timezone('America/Mexico_City')->format("ymd");
  360. // Verifica que el nombre del documento no sea el mismo de la generada automaticamente
  361. if (substr($final_part_name_document, 0, 8) == ('01-GPRS-') && strlen($final_part_name_document) > 28) {
  362. $final_part_name_document = substr($final_part_name_document, 28);
  363. }
  364. $contracts = DB::table("S002V01TCONT")
  365. ->select("CONT_LIDO as SEQUENCE")
  366. ->get();
  367. $sequence_number = "000001";
  368. // Itera cada archivo guardado en el la base
  369. foreach ($contracts as $contract) {
  370. // Encuentra el siguiente numero de secuencia
  371. if (substr($contract->SEQUENCE, 18, 6) >= $sequence_number) {
  372. $sequence_number = substr($contract->SEQUENCE, 18, 6);
  373. $sequence_number++;
  374. }
  375. }
  376. // Se crea el nombre del documento
  377. $name_document = '01-GPRS-CO-' . $DATE_TO_DOCUMENT . '-' . $this->resources_controller->formatSecuence($sequence_number, 6) . '=01=' . $final_part_name_document;
  378. // Verifica si el nombre de documento no existe aún
  379. $repeated_names = $this->documents_controller->getDocumentsWithSameCodificationStructureName($name_document, 'pdf');
  380. if ($repeated_names != null) {
  381. if ($this->documents_controller->sameDocumentsPdfOnRequest($doc, $repeated_names) != null) {
  382. return $this->response_controller
  383. ->makeResponse(TRUE, 'ERR_CONTRATO_REG004: Este contrato ya ha sido registrado', [], 500);
  384. }
  385. foreach ($repeated_names as $name) {
  386. if ($name == $name_document) {
  387. return $this->response_controller
  388. ->makeResponse(TRUE, 'ERR_CONTRATO_REG005: El nombre de contrato ya ha sido ocupado el dia de hoy', [], 500);
  389. }
  390. }
  391. }
  392. // El contrato es guardado en el storage
  393. $doc->storeAs('public/pdf_documents', $name_document);
  394. $insert_contract = DB::table('S002V01TCONT')
  395. ->insert([
  396. "CONT_NOMB" => $request->CONTRACT_NAME,
  397. "CONT_TIPO" => $request->CONTRACT_TYPE,
  398. "CONT_FEIN" => Carbon::create($request->START_DATE)->format('Y-m-d H:i:s'),
  399. "CONT_FEFI" => Carbon::create($request->END_DATE)->format('Y-m-d H:i:s'),
  400. "CONT_COST" => $request->CONTRACT_COST,
  401. "CONT_NULI" => $request->LINE_NUMBER,
  402. "CONT_LIDO" => $name_document,
  403. "CONT_USRE" => $request->SAVED_BY_USER,
  404. "CONT_FERE" => $REGISTER_DATE,
  405. "CONT_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  406. ]);
  407. if (!$insert_contract) {
  408. return $this->response_controller
  409. ->makeResponse(TRUE, 'ERR_CONTRATO_REG006: Algo salió mal, error registrando el contrato', [], 500);
  410. }
  411. // Busca el id del contrato insertado
  412. $contract_id = DB::table('S002V01TCONT')
  413. ->select("CONT_IDCO as CONTRACT_ID")
  414. ->where("CONT_NAME", '=', $request->CONTRACT_NAME)
  415. ->where("CONT_TIPO", '=', $request->CONTRACT_TYPE)
  416. ->where("CONT_FERE", '=', $REGISTER_DATE)
  417. ->where("CONT_COST", '=', $request->CONTRACT_COST)
  418. ->where("CONT_USRE", '=', $request->SAVED_BY_USER)
  419. ->where("CONT_LIDO", '=', $name_document)
  420. ->where('CONT_NULI', '=', $request->LINE_NUMBER)
  421. ->first();
  422. $contract_id = $contract_id->CONTRACT_ID;
  423. // Verifica si el objeto esta vacio
  424. if (!isset($contract_id) && empty($contract_id)) {
  425. DB::rollBack(); # Si no se logra insertar el contrato con empleado, se revierten los cambios previos
  426. return $this->response_controller
  427. ->makeResponse(TRUE, 'ERR_CONTRATO_REG007: Algo salió mal, error buscando el contrato registrado', [], 500);
  428. }
  429. $insert_contract_with_employee = DB::table('S002V01TPECO')
  430. ->insert([
  431. "PECO_IDPE" => $request->DENOMINATION,
  432. "PECO_IDCO" => $contract_id,
  433. "PECO_USRE" => $request->SAVED_BY_USER,
  434. "PECO_NULI" => $request->LINE_NUMBER,
  435. "PECO_FERE" => $REGISTER_DATE,
  436. "PECO_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  437. ]);
  438. if (!$insert_contract_with_employee) {
  439. DB::rollBack(); # Si no se logra insertar el contrato con empleado, se revierten los cambios previos
  440. return $this->response_controller
  441. ->makeResponse(TRUE, 'ERR_CONTRATO_PERSONAL_REG008: Algo salió mal, error registrando el contrato con el empleado', [], 500);
  442. }
  443. DB::commit(); # Para guardar los cambios en la base de datos
  444. return $this->response_controller->makeResponse(FALSE, 'Registro exitoso', 200);
  445. } catch (Throwable $th) {
  446. return $this->response_controller
  447. ->makeResponse(TRUE, 'ERR_CONTRATO_REG009: Error inesperado', strtoupper($th->getMessage()), 500);
  448. }
  449. }
  450. // Metodo para obtener un contrato por el ID
  451. public function getAllContracts($line_number)
  452. {
  453. try {
  454. $contracts = DB::table('S002V01TCONT')
  455. ->select(
  456. 'CONT_IDCO as CONTRACT_ID',
  457. 'CONT_NOMB as CONTRACT_NANE',
  458. 'CONT_TIPO as CONTRACT_TYPE',
  459. 'CONT_FEIN as START_DATE',
  460. 'CONT_FEFI as END_DATE',
  461. 'CONT_COST as CONTRACT_COST',
  462. 'CONT_LIDO as CONTRACT_DOCUMENT',
  463. 'CONT_FERE as REGISTER_DATE',
  464. 'CONT_USRE as REGISTERED_BY'
  465. )
  466. ->where('CONT_NULI', '=', $line_number)
  467. ->get();
  468. foreach ($contracts as $contract) {
  469. $contract->START_DATE = Carbon::create($contract->START_DATE)->format("d-m-Y h:i:s A");
  470. $contract->END_DATE = Carbon::create($contract->END_DATE)->format("d-m-Y h:i:s A");
  471. $contract->REGISTER_DATE = Carbon::create($contract->REGISTER_DATE)->format("d-m-Y h:i:s A");
  472. $contract->CONTRACT_COST = $this->encrypt_controller->encrypt($contract->CONTRACT_COST);
  473. $contract->CONTRACT_DOCUMENT = $this->encrypt_controller->encrypt($contract->CONTRACT_DOCUMENT);
  474. }
  475. return $this->response_controller
  476. ->makeResponse(FALSE, 'Consulta exitosa', $contracts);
  477. } catch (Throwable $th) {
  478. return $this->response_controller
  479. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  480. }
  481. }
  482. }