InterventionController.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  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_TIPO as CONTRACT_TYPE',
  186. 'CONT_FEIN as START_DATE',
  187. 'CONT_FEFI as END_DATE',
  188. 'CONT_COST as CONTRACT_COST',
  189. 'CONT_FERE as REGISTER_DATE',
  190. 'CONT_USRE as REGISTERED_BY',
  191. 'CONT_LIDO as DOCUMENT'
  192. )
  193. ->where('CONT_NULI', '=', $line_number)
  194. ->get();
  195. $users = DB::table('S002V01TUSUA')
  196. ->select(
  197. 'USUA_IDUS as USER_ID',
  198. DB::raw('TRIM(CONCAT(USUA_NOMB, " " , USUA_APPA, " ", COALESCE(USUA_APMA,""))) as NAME')
  199. )
  200. ->where('USUA_NULI', '=', $line_number)
  201. ->get();
  202. $employees = DB::table('S002V01TPERS')
  203. ->select(
  204. DB::raw('TRIM(CONCAT(S002V01TUSUA.USUA_NOMB, " " , S002V01TUSUA.USUA_APPA, " ", COALESCE(S002V01TUSUA.USUA_APMA,""))) as EMPLOYEE'),
  205. 'S002V01TPERS.PERS_IDPS as TYPE_EMPLOYEE',
  206. 'S002V01TPECO.PECO_IDCO as CONTRACT_ID',
  207. 'S002V01TPESU.PESU_RASO AS SUBCONTRATIST',
  208. )
  209. ->where('S002V01TPERS.PERS_NULI', '=', $line_number)
  210. ->where('S002V01TUSUA.USUA_NULI', '=', $line_number)
  211. ->where('S002V01TPECO.PECO_NULI', '=', $line_number)
  212. ->orWhere('S002V01TPESU.PESU_NULI', '=', $line_number)
  213. ->join('S002V01TUSUA', 'S002V01TPERS.PERS_IDUS', '=', 'S002V01TUSUA.USUA_IDUS')
  214. ->leftJoin('S002V01TPESU', 'S002V01TPERS.PERS_IDPS', '=', 'S002V01TPESU.PESU_IDPS')
  215. ->join('S002V01TPECO', 'S002V01TPERS.PERS_IDPE', '=', 'S002V01TPECO.PECO_IDPE')
  216. ->get();
  217. // Itera los contratos para agregar a los dueños de los mismos y su duración
  218. foreach ($contracts as $contract) {
  219. $contract->DENOMINATION = [];
  220. $contract->START_DATE = Carbon::create($contract->START_DATE)->format("d-m-Y");
  221. $contract->END_DATE = Carbon::create($contract->END_DATE)->format("d-m-Y");
  222. $contract->CONTRACT_COST = $this->encrypt_controller->encrypt($contract->CONTRACT_COST);
  223. $contract->DOCUMENT = $this->encrypt_controller->encrypt(Storage::disk('pdf')->url($contract->DOCUMENT));
  224. // Para establecer la duracion del contrato
  225. $duration = Carbon::create($contract->START_DATE)->diff($contract->END_DATE);
  226. $contract->DURATION = $this->resources_controller->durationDate($duration);
  227. $contract->REGISTER_DATE = Carbon::create($contract->REGISTER_DATE)->format("d-m-Y h:i:s A");
  228. foreach ($users as $user) {
  229. if ($contract->REGISTERED_BY == $user->USER_ID) {
  230. $contract->REGISTERED_BY = $user->NAME;
  231. }
  232. }
  233. // Ingresa el nombre del propietario del contrato, si fue por medio de un subcontratista, se coloca el nombre de este
  234. foreach ($employees as $employee) {
  235. if ($employee->CONTRACT_ID == $contract->CONTRACT_ID) {
  236. if ($contract->CONTRACT_TYPE == "Subcontratista") {
  237. // // Evita duplicados de subcontratista
  238. if (!in_array(trim($employee->SUBCONTRATIST), $contract->DENOMINATION)) {
  239. $contract->DENOMINATION[] = trim($employee->SUBCONTRATIST);
  240. }
  241. } else {
  242. $contract->DENOMINATION[] = $employee->EMPLOYEE;
  243. }
  244. }
  245. }
  246. }
  247. return $this->response_controller
  248. ->makeResponse(FALSE, 'Consulta exitosa', $contracts);
  249. } catch (Throwable $th) {
  250. return $this->response_controller
  251. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG001: Error inesperado', strtoupper($th->getMessage()), 500);
  252. }
  253. }
  254. // Metodo para obtener un contrato por el ID
  255. public function getContractById($id_contract, $line_number)
  256. {
  257. try {
  258. $contract = DB::table('S002V01TCONT')
  259. ->select(
  260. 'CONT_IDCO as CONTRACT_ID',
  261. 'CONT_TIPO as CONTRACT_TYPE',
  262. 'CONT_FEIN as START_DATE',
  263. 'CONT_FEFI as END_DATE',
  264. 'CONT_COST as CONTRACT_COST',
  265. 'CONT_LIDO as CONTRACT_DOCUMENT',
  266. 'CONT_FERE as REGISTER_DATE',
  267. 'CONT_USRE as REGISTERED_BY'
  268. )
  269. ->where('CONT_IDCO', '=', $id_contract)
  270. ->where('CONT_NULI', '=', $line_number)
  271. ->first();
  272. // Verifica si el objeto esta vacio
  273. if (!isset($contract) && empty($contract)) {
  274. return $this->response_controller
  275. ->makeResponse(TRUE, 'ERR_CONTRATO_REG001: No se encontró el contrato', $contract, 500);
  276. }
  277. $employee = DB::table('S002V01TPECO')
  278. ->select("PECO_IDPE as DENOMINATION")
  279. ->where('PECO_IDCO', '=', $id_contract)
  280. ->where('PECO_NULI', '=', $line_number)
  281. ->first();
  282. $contract->START_DATE = Carbon::create($contract->START_DATE)->format("d-m-Y h:i:s A");
  283. $contract->END_DATE = Carbon::create($contract->END_DATE)->format("d-m-Y h:i:s A");
  284. $contract->REGISTER_DATE = Carbon::create($contract->REGISTER_DATE)->format("d-m-Y h:i:s A");
  285. $contract->CONTRACT_COST = $this->encrypt_controller->encrypt($contract->CONTRACT_COST);
  286. $contract->CONTRACT_DOCUMENT = $this->encrypt_controller->encrypt($contract->CONTRACT_DOCUMENT);
  287. $contract->DENOMINATION = $employee->DENOMINATION;
  288. return $this->response_controller
  289. ->makeResponse(FALSE, 'Consulta exitosa', $contract);
  290. } catch (Throwable $th) {
  291. return $this->response_controller
  292. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  293. }
  294. }
  295. // Metodo para guardar un contrato
  296. public function storeContract(Request $request)
  297. {
  298. try {
  299. $REGISTER_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
  300. $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
  301. $request['CONTRACT_COST'] = $this->encrypt_controller->decrypt($request->CONTRACT_COST);
  302. $validator = Validator::make($request->all(), [
  303. "CONTRACT_TYPE" => ['required'],
  304. "DENOMINATION" => ['required', 'size:10'],
  305. "START_DATE" => ['required', 'date'],
  306. "END_DATE" => ['required', 'date'],
  307. "CONTRACT_COST" => ['required'],
  308. "DOCUMENT" => ['required'],
  309. "SAVED_BY_USER" => ['required', 'digits:10'],
  310. "LINE_NUMBER" => ['required', 'digits:1']
  311. ]);
  312. if ($validator->fails()) {
  313. return $this->response_controller->makeResponse(
  314. TRUE,
  315. 'ERR_CONTRATO_REG001: Uno o más errores encontrados',
  316. $this->response_controller->makeErrors($validator->errors()->messages()),
  317. 400
  318. );
  319. }
  320. $user_register = DB::table('S002V01TUSUA')
  321. ->select('USUA_IDUS as ID_USER')
  322. ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
  323. ->where('USUA_NULI', '=', $request->LINE_NUMBER)
  324. ->first();
  325. // Verifica si el objeto esta vacio
  326. if (!isset($user_register) && empty($user_register)) {
  327. return $this->response_controller
  328. ->makeResponse(TRUE, "ERR_USUARIO_REG002: Tu usuario no es válido para registrar contratos", [], 500);
  329. }
  330. DB::beginTransaction(); # Para impedir que las actualizaciones queden a incompletas
  331. // Busca si el empleado existe en la base de datos
  332. $employee_exist = DB::table('S002V01TPERS')
  333. ->select("PERS_IDPE")
  334. ->where('PERS_IDPE', '=', $request->DENOMINATION)
  335. ->where('PERS_NULI', '=', $request->LINE_NUMBER)
  336. ->first();
  337. // Verifica si el objeto esta vacio
  338. if (!isset($employee_exist) && empty($employee_exist)) {
  339. return $this->response_controller
  340. ->makeResponse(TRUE, 'ERR_PERSONAL_REG003: No se encontró al empleado', [], 500);
  341. }
  342. // Para la creación del contrato y guardar su enlace
  343. $doc = $request->DOCUMENT;
  344. // Se obtiene el nombre del archivo con su extensión
  345. $completeFileName = $doc->getClientOriginalName();
  346. // Se obtiene únicamente el nombre
  347. $fileNameOnly = pathinfo($completeFileName, PATHINFO_FILENAME);
  348. // Se obtiene la extensión del archivo
  349. $extension = $doc->getClientOriginalExtension();
  350. // Se quitan los espacios y se concatena datos para ser guardado
  351. $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
  352. // Se agrega la fecha actual con el formato de la nomenclatura de documentos
  353. $DATE_TO_DOCUMENT = Carbon::now()->timezone('America/Mexico_City')->format("ymd");
  354. // Verifica que el nombre del documento no sea el mismo de la generada automaticamente
  355. if (substr($final_part_name_document, 0, 8) == ('01-GPRS-') && strlen($final_part_name_document) > 28) {
  356. $final_part_name_document = substr($final_part_name_document, 28);
  357. }
  358. $contracts = DB::table("S002V01TCONT")
  359. ->select("CONT_LIDO as SEQUENCE")
  360. ->get();
  361. $sequence_number = "000001";
  362. // Itera cada archivo guardado en el la base
  363. foreach ($contracts as $contract) {
  364. // Encuentra el siguiente numero de secuencia
  365. if (substr($contract->SEQUENCE, 18, 6) >= $sequence_number) {
  366. $sequence_number = substr($contract->SEQUENCE, 18, 6);
  367. $sequence_number++;
  368. }
  369. }
  370. // Se crea el nombre del documento
  371. $name_document = '01-GPRS-CO-' . $DATE_TO_DOCUMENT . '-' . $this->resources_controller->formatSecuence($sequence_number, 6) . '=01=' . $final_part_name_document;
  372. // Verifica si el nombre de documento no existe aún
  373. $repeated_names = $this->documents_controller->getDocumentsWithSameCodificationStructureName($name_document, 'pdf');
  374. if ($repeated_names != null) {
  375. if ($this->documents_controller->sameDocumentsPdfOnRequest($doc, $repeated_names) != null) {
  376. return $this->response_controller
  377. ->makeResponse(TRUE, 'ERR_CONTRATO_REG004: Este contrato ya ha sido registrado', [], 500);
  378. }
  379. foreach ($repeated_names as $name) {
  380. if ($name == $name_document) {
  381. return $this->response_controller
  382. ->makeResponse(TRUE, 'ERR_CONTRATO_REG005: El nombre de contrato ya ha sido ocupado el dia de hoy', [], 500);
  383. }
  384. }
  385. }
  386. // El contrato es guardado en el storage
  387. $doc->storeAs('public/pdf_documents', $name_document);
  388. $insert_contract = DB::table('S002V01TCONT')
  389. ->insert([
  390. "CONT_TIPO" => $request->CONTRACT_TYPE,
  391. "CONT_FEIN" => Carbon::create($request->START_DATE)->format('Y-m-d H:i:s'),
  392. "CONT_FEFI" => Carbon::create($request->END_DATE)->format('Y-m-d H:i:s'),
  393. "CONT_COST" => $request->CONTRACT_COST,
  394. "CONT_NULI" => $request->LINE_NUMBER,
  395. "CONT_LIDO" => $name_document,
  396. "CONT_USRE" => $request->SAVED_BY_USER,
  397. "CONT_FERE" => $REGISTER_DATE,
  398. "CONT_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  399. ]);
  400. if (!$insert_contract) {
  401. return $this->response_controller
  402. ->makeResponse(TRUE, 'ERR_CONTRATO_REG006: Algo salió mal, error registrando el contrato', [], 500);
  403. }
  404. // Busca el id del contrato insertado
  405. $contract_id = DB::table('S002V01TCONT')
  406. ->select("CONT_IDCO as CONTRACT_ID")
  407. ->where("CONT_TIPO", '=', $request->CONTRACT_TYPE)
  408. ->where("CONT_FERE", '=', $REGISTER_DATE)
  409. ->where("CONT_COST", '=', $request->CONTRACT_COST)
  410. ->where("CONT_USRE", '=', $request->SAVED_BY_USER)
  411. ->where("CONT_LIDO", '=', $name_document)
  412. ->where('CONT_NULI', '=', $request->LINE_NUMBER)
  413. ->first();
  414. $contract_id = $contract_id->CONTRACT_ID;
  415. // Verifica si el objeto esta vacio
  416. if (!isset($contract_id) && empty($contract_id)) {
  417. DB::rollBack(); # Si no se logra insertar el contrato con empleado, se revierten los cambios previos
  418. return $this->response_controller
  419. ->makeResponse(TRUE, 'ERR_CONTRATO_REG007: Algo salió mal, error buscando el contrato registrado', [], 500);
  420. }
  421. $insert_contract_with_employee = DB::table('S002V01TPECO')
  422. ->insert([
  423. "PECO_IDPE" => $request->DENOMINATION,
  424. "PECO_IDCO" => $contract_id,
  425. "PECO_USRE" => $request->SAVED_BY_USER,
  426. "PECO_NULI" => $request->LINE_NUMBER,
  427. "PECO_FERE" => $REGISTER_DATE,
  428. "PECO_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  429. ]);
  430. if (!$insert_contract_with_employee) {
  431. DB::rollBack(); # Si no se logra insertar el contrato con empleado, se revierten los cambios previos
  432. return $this->response_controller
  433. ->makeResponse(TRUE, 'ERR_CONTRATO_PERSONAL_REG008: Algo salió mal, error registrando el contrato con el empleado', [], 500);
  434. }
  435. DB::commit(); # Para guardar los cambios en la base de datos
  436. return $this->response_controller->makeResponse(FALSE, 'Registro exitoso', 200);
  437. } catch (Throwable $th) {
  438. return $this->response_controller
  439. ->makeResponse(TRUE, 'ERR_CONTRATO_REG009: Error inesperado', strtoupper($th->getMessage()), 500);
  440. }
  441. }
  442. // Metodo para obtener un contrato por el ID
  443. public function getAllContracts($line_number)
  444. {
  445. try {
  446. $contracts = DB::table('S002V01TCONT')
  447. ->select(
  448. 'CONT_IDCO as CONTRACT_ID',
  449. 'CONT_TIPO as CONTRACT_TYPE',
  450. 'CONT_FEIN as START_DATE',
  451. 'CONT_FEFI as END_DATE',
  452. 'CONT_COST as CONTRACT_COST',
  453. 'CONT_LIDO as CONTRACT_DOCUMENT',
  454. 'CONT_FERE as REGISTER_DATE',
  455. 'CONT_USRE as REGISTERED_BY'
  456. )
  457. ->where('CONT_NULI', '=', $line_number)
  458. ->get();
  459. foreach ($contracts as $contract) {
  460. $contract->START_DATE = Carbon::create($contract->START_DATE)->format("d-m-Y h:i:s A");
  461. $contract->END_DATE = Carbon::create($contract->END_DATE)->format("d-m-Y h:i:s A");
  462. $contract->REGISTER_DATE = Carbon::create($contract->REGISTER_DATE)->format("d-m-Y h:i:s A");
  463. $contract->CONTRACT_COST = $this->encrypt_controller->encrypt($contract->CONTRACT_COST);
  464. $contract->CONTRACT_DOCUMENT = $this->encrypt_controller->encrypt($contract->CONTRACT_DOCUMENT);
  465. }
  466. return $this->response_controller
  467. ->makeResponse(FALSE, 'Consulta exitosa', $contracts);
  468. } catch (Throwable $th) {
  469. return $this->response_controller
  470. ->makeResponse(TRUE, 'ERR_INTERVENCIÓN_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  471. }
  472. }
  473. }