WorkTeamController.php 20 KB

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