WorkTeamController.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  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 Equipos de Trabajo. Perteneciente al Módulo 13 - Gestion del Personal de Mantenimiento
  6. */
  7. namespace App\Http\Controllers;
  8. use Illuminate\Http\Request;
  9. use Carbon\Carbon;
  10. use Illuminate\Support\Facades\DB;
  11. use Illuminate\Support\Facades\Validator;
  12. use Throwable;
  13. class WorkTeamController extends Controller
  14. {
  15. private $response_controller;
  16. private $encrypt_controller;
  17. public function __construct()
  18. {
  19. $this->response_controller = new ResponseController();
  20. $this->encrypt_controller = new EncryptionController();
  21. }
  22. // Metodo para la consulta de equipos de trabajo
  23. public function getConsultOfWorkteams($line_number)
  24. {
  25. try {
  26. $workteams = DB::table('S002V01TEQMA')
  27. ->select(
  28. 'EQMA_IDEQ as WORKTEAM_ID',
  29. 'EQMA_NOMB as NAME',
  30. 'EQMA_ESPE as SPECIALITY',
  31. 'EQMA_ESTA as STATUS'
  32. )
  33. ->where('EQMA_NULI', '=', $line_number)
  34. ->get();
  35. // Verifica si el objeto esta vacio
  36. if (!isset($workteams[0]) && empty($workteams[0])) {
  37. return $this->response_controller
  38. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG001: No se encontraron datos', $workteams, 500);
  39. }
  40. return $this->response_controller->makeResponse(FALSE, 'Consulta exitosa', $workteams, 200);
  41. } catch (Throwable $th) {
  42. return $this->response_controller
  43. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  44. }
  45. }
  46. // Metodo para la consulta de equipos de trabajo
  47. public function getActiveWorkteams($line_number)
  48. {
  49. try {
  50. $workteams = DB::table('S002V01TEQMA')
  51. ->select(
  52. 'EQMA_IDEQ as WORKTEAM_ID',
  53. 'EQMA_NOMB as NAME',
  54. )
  55. ->orderBy('NAME', 'asc')
  56. ->where('EQMA_ESTA', '=', 'Activo')
  57. ->where('EQMA_NULI', '=', $line_number)
  58. ->get();
  59. // Verifica si el objeto esta vacio
  60. if (!isset($workteams[0]) && empty($workteams[0])) {
  61. return $this->response_controller
  62. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG001: No se encontraron datos', $workteams, 500);
  63. }
  64. return $this->response_controller->makeResponse(FALSE, 'Consulta exitosa', $workteams, 200);
  65. } catch (Throwable $th) {
  66. return $this->response_controller
  67. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  68. }
  69. }
  70. // Metodo para la consulta de un equipo de trabajo por medio de su id
  71. public function getWorkteamById($id_workteam, $line_number)
  72. {
  73. try {
  74. $workteams = DB::table('S002V01TEQMA')
  75. ->select(
  76. 'EQMA_IDEQ as WORKTEAM_ID',
  77. 'EQMA_NOMB as NAME',
  78. 'EQMA_ESPE as SPECIALITY',
  79. 'EQMA_ESTA as STATUS'
  80. )
  81. ->where('EQMA_IDEQ', '=', $id_workteam)
  82. ->where('EQMA_NULI', '=', $line_number)
  83. ->first();
  84. // Verifica si el objeto esta vacio
  85. if (!isset($workteams) && empty($workteams)) {
  86. return $this->response_controller
  87. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG001: No se encontró al equipo de trabajo', $workteams, 500);
  88. }
  89. return $this->response_controller->makeResponse(FALSE, 'Consulta exitosa', $workteams, 200);
  90. } catch (Throwable $th) {
  91. return $this->response_controller
  92. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  93. }
  94. }
  95. // Metodo para obtener los integrantes de un equipo
  96. public function getMembersOfWorkteamById($id_workteam, $line_number)
  97. {
  98. try {
  99. // Obtiene las intervenciones del empleado
  100. $workteam_members = DB::table('S002V01TPERS')
  101. ->select(
  102. DB::raw('TRIM(CONCAT(S002V01TUSUA.USUA_NOMB, " " , S002V01TUSUA.USUA_APPA, " ", COALESCE(S002V01TUSUA.USUA_APMA,""))) as NAME')
  103. )
  104. ->where('S002V01TPEEM.PEEM_IDEM', '=', $id_workteam)
  105. ->where('S002V01TPERS.PERS_NULI', '=', $line_number)
  106. ->where('S002V01TPEEM.PEEM_NULI', '=', $line_number)
  107. ->join('S002V01TPEEM', 'S002V01TPERS.PERS_IDPE', '=', 'S002V01TPEEM.PEEM_IDPE')
  108. ->join('S002V01TUSUA', 'S002V01TPERS.PERS_IDUS', '=', 'S002V01TUSUA.USUA_IDUS')
  109. ->get();
  110. return $this->response_controller->makeResponse(FALSE, 'Consulta exitosa', $workteam_members, 200);
  111. } catch (Throwable $th) {
  112. return $this->response_controller
  113. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: Error inesperado', strtoupper($th->getMessage()), 500);
  114. }
  115. }
  116. // Metodo para obtener los detalles de un equipo de trabajo por el id
  117. public function getDetailsOfWorkteamById($id_workteam, $line_number)
  118. {
  119. try {
  120. $workteam = DB::table("S002V01TEQMA")
  121. ->select(
  122. 'EQMA_IDEQ as WORKTEAM_ID',
  123. 'EQMA_NOMB as NAME',
  124. 'EQMA_ESPE as SPECIALITY',
  125. "EQMA_FERE as REGISTER_DATE",
  126. "EQMA_USRE as REGISTERED_BY",
  127. "EQMA_FEMO as UPDATE_DATE",
  128. "EQMA_USMO as UPDATED_BY"
  129. )
  130. ->where("EQMA_IDEQ", '=', $id_workteam)
  131. ->where("EQMA_NULI", '=', $line_number)
  132. ->first();
  133. // Verifica si el objeto esta vacio
  134. if (!isset($workteam) && empty($workteam)) {
  135. return $this->response_controller
  136. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG001: No se encontró al equipo de trabajo', [], 500);
  137. }
  138. $users = DB::table("S002V01TUSUA")
  139. ->select("USUA_IDUS as ID", DB::raw('TRIM(CONCAT(USUA_NOMB, " " , USUA_APPA, " ", COALESCE(USUA_APMA,""))) AS NAME'))
  140. ->where('USUA_NULI', '=', $line_number)
  141. ->get();
  142. // Verifica si el objeto esta vacio
  143. if (!isset($users[0]) && empty($users[0])) {
  144. return $this->response_controller
  145. ->makeResponse(TRUE, 'ERR_USUARIO_REG002: No se encontraron datos', [], 500);
  146. }
  147. foreach ($users as $user) {
  148. // Inserta el nombre del usuario que lo registro y actualizó si hubo alguno.
  149. if ($workteam->REGISTERED_BY == $user->ID) {
  150. $workteam->REGISTERED_BY = $user->NAME;
  151. }
  152. if ($workteam->UPDATED_BY == $user->ID) {
  153. $workteam->UPDATED_BY = $user->NAME;
  154. }
  155. }
  156. // Inserta la fecha de registro y actualización si hubo alguna.
  157. $workteam->REGISTER_DATE = Carbon::create($workteam->REGISTER_DATE)->format("d-m-Y h:i:s A");
  158. if ($workteam->UPDATE_DATE != null) {
  159. $workteam->UPDATE_DATE = Carbon::create($workteam->UPDATE_DATE)->format("d-m-Y h:i:s A");
  160. } else {
  161. $workteam->UPDATE_DATE = "-";
  162. }
  163. if ($workteam->UPDATED_BY == null) {
  164. $workteam->UPDATED_BY = "-";
  165. }
  166. return $this->response_controller->makeResponse(FALSE, 'Consulta exitosa', $workteam, 200);
  167. } catch (Throwable $th) {
  168. return $this->response_controller
  169. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG003: Error inesperado', strtoupper($th->getMessage()), 500);
  170. }
  171. }
  172. // Metodo para la eliminación lógica de un equipo de trabajo
  173. public function updateToInactiveStatus(Request $request, $id_workteam)
  174. {
  175. try {
  176. $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
  177. $validator = Validator::make($request->all(), [
  178. "SAVED_BY_USER" => ['required', 'digits:10']
  179. ]);
  180. if ($validator->fails()) {
  181. return $this->response_controller->makeResponse(
  182. TRUE,
  183. 'ERR_EQUIPO_TRABAJO_REG001: Uno o más errores encontrados',
  184. $this->response_controller->makeErrors($validator->errors()->messages()),
  185. 400
  186. );
  187. }
  188. $workteam = DB::table('S002V01TEQMA')
  189. ->select("EQMA_IDEQ")
  190. ->where("EQMA_IDEQ", '=', $id_workteam)
  191. ->first();
  192. // Verifica si el objeto esta vacio
  193. if (!isset($workteam) && empty($workteam)) {
  194. return $this->response_controller
  195. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: No se encontró al equipo de trabajo', [], 500);
  196. }
  197. $workteam_has_employees = DB::table("S002V01TPEEM")
  198. ->select(DB::raw("COUNT(PEEM_IDEM) as MEMBERS_QUANTITY"))
  199. ->where("PEEM_IDEM", '=', $id_workteam)
  200. ->where("PEEM_ESTA", '=', 'Activo')
  201. ->where('PEEM_NULI', '=', $request->LINE_NUMBER)
  202. ->first();
  203. // Verifica que el equipo no tenga empleados activos
  204. if ($workteam_has_employees->MEMBERS_QUANTITY > 0) {
  205. return $this->response_controller
  206. ->makeResponse(TRUE, 'ERR_EQUIPO_PERSONAL_REG003: El equipo de trabajo tiene miembros activos', $workteam_has_employees, 500);
  207. }
  208. $user_register = DB::table('S002V01TUSUA')
  209. ->select('USUA_IDUS as ID_USER')
  210. ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
  211. ->where('USUA_NULI', '=', $request->LINE_NUMBER)
  212. ->first();
  213. // Verifica si el objeto esta vacio
  214. if (!isset($user_register) && empty($user_register)) {
  215. return $this->response_controller
  216. ->makeResponse(TRUE, "ERR_EQUIPO_TRABAJO_REG004: Tu usuario no es válido para eliminar equipos de trabajo", [], 500);
  217. }
  218. $UPDATE_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
  219. $delete_workteam = DB::table('S002V01TEQMA')
  220. ->where("EQMA_IDEQ", '=', $id_workteam)
  221. ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
  222. ->update([
  223. "EQMA_ESTA" => "Eliminado",
  224. "EQMA_USMO" => trim($request->SAVED_BY_USER),
  225. "EQMA_FEMO" => $UPDATE_DATE,
  226. "EQMA_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  227. ]);
  228. if (!$delete_workteam) {
  229. return $this->response_controller
  230. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG005: Algo salió mal, error eliminando al equipo de trabajo', [], 500);
  231. }
  232. return $this->response_controller
  233. ->makeResponse(FALSE, 'Eliminación exitosa');
  234. } catch (Throwable $th) {
  235. return $this->response_controller
  236. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG006: Error inesperado', strtoupper($th->getMessage()), 500);
  237. }
  238. }
  239. // Metodo para la activación lógica de un equipo de trabajo
  240. public function updateToActiveStatus(Request $request, $id_workteam)
  241. {
  242. try {
  243. $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
  244. $validator = Validator::make($request->all(), [
  245. "SAVED_BY_USER" => ['required', 'digits:10']
  246. ]);
  247. if ($validator->fails()) {
  248. return $this->response_controller->makeResponse(
  249. TRUE,
  250. 'ERR_EQUIPO_TRABAJO_REG001: Uno o más errores encontrados',
  251. $this->response_controller->makeErrors($validator->errors()->messages()),
  252. 400
  253. );
  254. }
  255. $workteam = DB::table('S002V01TEQMA')
  256. ->select("EQMA_IDEQ")
  257. ->where("EQMA_IDEQ", '=', $id_workteam)
  258. ->first();
  259. // Verifica si el objeto esta vacio
  260. if (!isset($workteam) && empty($workteam)) {
  261. return $this->response_controller
  262. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: No se encontró al equipo de trabajo', [], 500);
  263. }
  264. $user_register = DB::table('S002V01TUSUA')
  265. ->select('USUA_IDUS as ID_USER')
  266. ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
  267. ->where('USUA_NULI', '=', $request->LINE_NUMBER)
  268. ->first();
  269. // Verifica si el objeto esta vacio
  270. if (!isset($user_register) && empty($user_register)) {
  271. return $this->response_controller
  272. ->makeResponse(TRUE, "ERR_EQUIPO_TRABAJO_REG003: Tu usuario no es válido para activar equipos de trabajo", [], 500);
  273. }
  274. $UPDATE_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
  275. $activate_workteam = DB::table('S002V01TEQMA')
  276. ->where("EQMA_IDEQ", '=', $id_workteam)
  277. ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
  278. ->update([
  279. "EQMA_ESTA" => "Activo",
  280. "EQMA_USMO" => trim($request->SAVED_BY_USER),
  281. "EQMA_FEMO" => $UPDATE_DATE,
  282. "EQMA_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  283. ]);
  284. if (!$activate_workteam) {
  285. return $this->response_controller
  286. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG004: Algo salió mal, error activando al equipo de trabajo', [], 500);
  287. }
  288. return $this->response_controller
  289. ->makeResponse(FALSE, 'Activación exitosa');
  290. } catch (Throwable $th) {
  291. return $this->response_controller
  292. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG005: Error inesperado', strtoupper($th->getMessage()), 500);
  293. }
  294. }
  295. // Metodo para guardar un equipo de trabajo
  296. public function storeWorkteam(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. $validator = Validator::make($request->all(), [
  302. "NAME" => ['required', 'max:100'],
  303. "SPECIALITY" => ['required', 'max:100'],
  304. "SAVED_BY_USER" => ['required', 'digits:10'],
  305. "LINE_NUMBER" => ['required', 'digits:1']
  306. ]);
  307. if ($validator->fails()) {
  308. return $this->response_controller->makeResponse(
  309. TRUE,
  310. 'ERR_EQUIPO_TRABAJO_REG001: Uno o más errores encontrados',
  311. $this->response_controller->makeErrors($validator->errors()->messages()),
  312. 400
  313. );
  314. }
  315. $search_workteam_name = DB::table('S002V01TEQMA')
  316. ->select("EQMA_NOMB")
  317. ->where("EQMA_NOMB", '=', $request->NAME)
  318. ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
  319. ->first();
  320. // Verifica si el objeto tiene algo
  321. if (isset($search_workteam_name) && !empty($search_workteam_name)) {
  322. return $this->response_controller
  323. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: El nombre ya fue tomado', [], 500);
  324. }
  325. $user_register = DB::table('S002V01TUSUA')
  326. ->select('USUA_IDUS as ID_USER')
  327. ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
  328. ->where('USUA_NULI', '=', $request->LINE_NUMBER)
  329. ->first();
  330. // Verifica si el objeto esta vacio
  331. if (!isset($user_register) && empty($user_register)) {
  332. return $this->response_controller
  333. ->makeResponse(TRUE, "ERR_USUARIO_REG003: Tu usuario no es válido para registrar equipos de trabajo", [], 500);
  334. }
  335. $insert_workteam = DB::table('S002V01TEQMA')
  336. ->insert([
  337. "EQMA_NOMB" => $request->NAME,
  338. "EQMA_ESPE" => $request->SPECIALITY,
  339. "EQMA_NULI" => $request->LINE_NUMBER,
  340. "EQMA_ESTA" => "Activo",
  341. "EQMA_USRE" => $request->SAVED_BY_USER,
  342. "EQMA_FERE" => $REGISTER_DATE,
  343. "EQMA_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  344. ]);
  345. if (!$insert_workteam) {
  346. return $this->response_controller
  347. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG004: Algo salió mal, error registrando al equipo de trabajo', [], 500);
  348. }
  349. return $this->response_controller
  350. ->makeResponse(FALSE, 'CREACIÓN EXITOSA');
  351. } catch (Throwable $th) {
  352. return $this->response_controller
  353. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG005: Error inesperado', strtoupper($th->getMessage()), 500);
  354. }
  355. }
  356. // Metodo para actualizar un equipo de trabajo
  357. public function updateWorkteam(Request $request, $id_workteam)
  358. {
  359. try {
  360. $UPDATE_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
  361. $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
  362. $validator = Validator::make($request->all(), [
  363. "NAME" => ['required', 'max:100'],
  364. "SPECIALITY" => ['required', 'max:100'],
  365. "SAVED_BY_USER" => ['required', 'digits:10'],
  366. "LINE_NUMBER" => ['required', 'digits:1']
  367. ]);
  368. if ($validator->fails()) {
  369. return $this->response_controller->makeResponse(
  370. TRUE,
  371. 'ERR_EQUIPO_TRABAJO_REG001: Uno o más errores encontrados',
  372. $this->response_controller->makeErrors($validator->errors()->messages()),
  373. 400
  374. );
  375. }
  376. $search_workteam = DB::table('S002V01TEQMA')
  377. ->select("EQMA_IDEQ")
  378. ->where("EQMA_IDEQ", '=', $id_workteam)
  379. ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
  380. ->first();
  381. // Verifica si el objeto esta vacio
  382. if (!isset($search_workteam) && empty($search_workteam)) {
  383. return $this->response_controller
  384. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: No se encontró al equipo de trabajo', [], 500);
  385. }
  386. $search_workteam_name = DB::table('S002V01TEQMA')
  387. ->select("EQMA_NOMB")
  388. ->where("EQMA_NOMB", '=', $request->NAME)
  389. ->where("EQMA_IDEQ", '<>', $id_workteam)
  390. ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
  391. ->first();
  392. // Verifica si el objeto tiene algo
  393. if (isset($search_workteam_name) && !empty($search_workteam_name)) {
  394. return $this->response_controller
  395. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG003: El nombre ya fue tomado', [], 500);
  396. }
  397. $user_register = DB::table('S002V01TUSUA')
  398. ->select('USUA_IDUS as ID_USER')
  399. ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
  400. ->where('USUA_NULI', '=', $request->LINE_NUMBER)
  401. ->first();
  402. // Verifica si el objeto esta vacio
  403. if (!isset($user_register) && empty($user_register)) {
  404. return $this->response_controller
  405. ->makeResponse(TRUE, "ERR_USUARIO_REG004: Tu usuario no es válido para actualizar equipos de trabajo", [], 500);
  406. }
  407. $update_workteam = DB::table('S002V01TEQMA')
  408. ->where("EQMA_IDEQ", '=', $id_workteam)
  409. ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
  410. ->update([
  411. "EQMA_NOMB" => $request->NAME,
  412. "EQMA_ESPE" => $request->SPECIALITY,
  413. "EQMA_ESTA" => "Activo",
  414. "EQMA_USMO" => $request->SAVED_BY_USER,
  415. "EQMA_FEMO" => $UPDATE_DATE,
  416. "EQMA_FEAR" => DB::raw('CURRENT_TIMESTAMP')
  417. ]);
  418. if (!$update_workteam) {
  419. return $this->response_controller
  420. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG005: Algo salió mal, error actualizando al equipo de trabajo', [], 500);
  421. }
  422. return $this->response_controller
  423. ->makeResponse(FALSE, 'Actualización exitosa');
  424. } catch (Throwable $th) {
  425. return $this->response_controller
  426. ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG006: Error inesperado', strtoupper($th->getMessage()), 500);
  427. }
  428. }
  429. }