InterventionController.php 28 KB

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