responseController = new ResponseController(); $this->encController = new EncryptionController(); $this->resourcesController = new ResourcesController(); $this->documentManagementController = new DocumentManagementController(); $this->functionsController = new FunctionsController(); $this->processManagementController = new ProcessManagementController(); } // Crear Artículo en Stock public function createArtitleWithoutOrder(Request $request) { $validator = Validator::make($request->all(), [ 'ARTICULO' => 'required', 'MODELO' => 'required', 'CODIGO_MODELO' => 'required', 'FAMILIA' => 'required', 'SUBFAMILIA' => 'required', 'UNIDAD' => 'required', 'CODIGO_BARRAS' => 'required', 'CANTIDAD' => 'required', 'STOCK_MINIMO' => 'required', 'STOCK_MAXIMO' => 'required', 'REPARACION' => 'required|boolean', 'CONSUMIBLE' => 'required|boolean', 'PELIGROSO' => 'required|boolean', // 'FECHA_VENCIMIENTO' => '', // 'PROVEEDOR' => 'required', 'IMAGEN' => 'required', 'NUMERO_LINEA' => 'required', 'USUARIO' => 'required', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_STOCK_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $user = $this->encController->decrypt($requestData['USUARIO']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG001: Ocurrió un error al obtener el usuario.", $th->getMessage(), 500); } try { $validateFamily = DB::table('S002V01TFAMI') ->where('FAMI_COFA','=', $requestData['FAMILIA']) ->where('FAMI_NULI','=', $requestData['NUMERO_LINEA']) ->where('FAMI_ESTA','=','Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG002: Ocurrió un error al validar la familia.", $th->getMessage(), 500); } if (!$validateFamily) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG003: La familia no existe.", [], 500); } try { $validateSubfamily = DB::table('S002V01TSUBF') ->where('SUBF_COSU','=', $requestData['SUBFAMILIA']) ->where('SUBF_NULI','=', $requestData['NUMERO_LINEA']) ->where('SUBF_ESTA','=','Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG004: Ocurrió un error al validar la subfamilia.", $th->getMessage(), 500); } if (!$validateSubfamily) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG005: La subfamilia no existe.", [], 500); } try { $validateUnit = DB::table('S002V01TUNID') ->where('UNID_IDUN','=', $requestData['UNIDAD']) ->where('UNID_NULI','=', $requestData['NUMERO_LINEA']) ->where('UNID_ESTA','=','Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG006: Ocurrió un error al validar la unidad.", $th->getMessage(), 500); } if (!$validateUnit) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG007: La unidad no existe.", [], 500); } $requestData['PROVEEDOR'] = $requestData['PROVEEDOR'] === '' ? null : $requestData['PROVEEDOR']; if (!is_null($requestData['PROVEEDOR'])) { try { $validateUnit = DB::table('S002V01TPROV') ->where('PROV_NUPR','=', $requestData['PROVEEDOR']) ->where('PROV_NULI','=', $requestData['NUMERO_LINEA']) ->where('PROV_ESTA','=','Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG008: Ocurrió un error al validar el proveedor.", $th->getMessage(), 500); } if (!$validateUnit) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG009: El proveedor no existe.", [], 500); } } $arrCodeImages = array(); foreach ($requestData['IMAGEN'] as $key => $encIdFile) { $idFile = $this->encController->decrypt($encIdFile); $tempFile = DB::table('S002V01TARTE')->where([ ['ARTE_NULI', '=', $requestData['NUMERO_LINEA']], ['ARTE_IDAR', '=', $idFile], ])->first(); if(is_null($tempFile)){ return $this->responseController->makeResponse(true, 'ERR_ARTITLE_REG006: El archivo consultado no está registrado', [], 404); }else if($tempFile->ARTE_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'ERR_ARTITLE_REG007: El archivo consultado está eliminado', [], 404); } $fileResponse = $this->documentManagementController->moveFinalFile( intval($requestData['NUMERO_LINEA']), 'GIST', 'FO', $tempFile, $user, ); if(!$fileResponse[0]){ return $this->responseController->makeResponse(true, 'ERR_ARTITLE_REG008: '.$fileResponse[1], [], 400); } $arrCodeImages[] = $this->encController->encrypt($fileResponse[1]); } $jsonImages = json_encode($arrCodeImages); $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateRegister = DB::table('S002V01TSTAR')->insert([ // 'STAR_CODI' => $requestData['CODIGO_STOCK'], 'STAR_ARTI' => $requestData['ARTICULO'], 'STAR_MODE' => $requestData['MODELO'], 'STAR_COMO' => $requestData['CODIGO_MODELO'], 'STAR_IDFA' => $requestData['FAMILIA'], 'STAR_IDSU' => $requestData['SUBFAMILIA'], 'STAR_NUPR' => $requestData['PROVEEDOR'], 'STAR_IDUN' => $requestData['UNIDAD'], 'STAR_COBA' => $requestData['CODIGO_BARRAS'], 'STAR_CANT' => $requestData['CANTIDAD'], 'STAR_STMI' => $requestData['STOCK_MINIMO'], 'STAR_STMA' => $requestData['STOCK_MAXIMO'], 'STAR_REPA' => $requestData['REPARACION'], 'STAR_CONS' => $requestData['CONSUMIBLE'], 'STAR_PELI' => $requestData['PELIGROSO'], 'STAR_FEVE' => $requestData['FECHA_VENCIMIENTO'], 'STAR_IMAG' => $jsonImages, 'STAR_TIAD' => 'Sin Pedido', 'STAR_NULI' => $requestData['NUMERO_LINEA'], 'STAR_USRE' => $user, 'STAR_FERE' => $currentDate, 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG011: Ocurrió un error al registrar el artículo.", $th->getMessage(), 500); } if (!$validateRegister) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_STOCK_REG012: No se pudo registrar el artículo.", [], 500); } DB::commit(); return $this->responseController->makeResponse(false, "EXITO: Registro Exitoso"); } // FUNCIÓN GESTIÓN DE ALMACENES public function getWarehouse( $user, $line ) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401); } try { $arrWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $line) ->get([ 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'ALMA_NORE AS NOMBRE_RESPONSABLE', 'ALMA_APRE AS APELLIDO_PATERNO_RESPONSABLE', 'ALMA_AMRE AS APELLIDO_MATERNO_RESPONSABLE', 'ALMA_COR1 AS CORREO1', 'ALMA_COR2 AS CORREO2', 'ALMA_LAD1 AS LADA1', 'ALMA_TEL1 AS TELEFONO1', 'ALMA_LAD2 AS LADA2', 'ALMA_TEL2 AS TELEFONO2', 'ALMA_CALL AS CALLE', 'ALMA_NUEX AS NUMERO_EXTERIOR', 'ALMA_NUIN AS NUMERO_INTERIOR', 'ALMA_COPO AS CODIGO_POSTAL', 'ALMA_COLO AS COLONIA', 'ALMA_LOCA AS LOCALIDAD', 'ALMA_MUNI AS MUNICIPIO', 'ALMA_ENTI AS ENTIDAD_FEDERATIVA', 'ALMA_PAIS AS PAIS', 'ALMA_ESTA AS ESTADO', 'ALMA_USRE AS USUARIO_REGISTRA', 'ALMA_FERE AS FECHA_REGISTRA', 'ALMA_USMO AS USUARIO_MODIFICA', 'ALMA_FEMO AS FECHA_MODIFICA', ]); $arrWarehouse = json_decode( json_encode($arrWarehouse), true ); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET001: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } foreach ($arrWarehouse as $keyWarehouse => $warehouse) { $arrResponseGetAddress = $this->resourcesController->getAddress( $warehouse['CODIGO_POSTAL'], $warehouse['COLONIA'], $warehouse['MUNICIPIO'], $warehouse['LOCALIDAD'], $warehouse['ENTIDAD_FEDERATIVA'], $warehouse['PAIS'], $line ); if ($arrResponseGetAddress['error']) { return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GET002: '.$arrResponseGetAddress['msg'], $arrResponseGetAddress['response'], 401); } $warehouse['CODIGO_POSTAL'] = $arrResponseGetAddress['response']['CODIGO_POSTAL']; $warehouse['COLONIA'] = $arrResponseGetAddress['response']['COLONIA']; $warehouse['MUNICIPIO'] = $arrResponseGetAddress['response']['MUNICIPIO']; $warehouse['LOCALIDAD'] = $arrResponseGetAddress['response']['LOCALIDAD']; $warehouse['ENTIDAD_FEDERATIVA'] = $arrResponseGetAddress['response']['ENTIDAD_FEDERATIVA']; $warehouse['PAIS'] = $arrResponseGetAddress['response']['PAIS']; try { $countStock = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->where('UBAR_COAL', '=', $warehouse['CODIGO_ALMACEN']) ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } $warehouse['CANTIDAD_STOCK'] = $countStock; $arrWarehouse[$keyWarehouse] = $warehouse; } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrWarehouse, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrWarehouse = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWarehouse); } public function getWarehouseById( $idWarehouse, $user, $line ) { try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401); } try { $arrWarehouse = (array) DB::table('S002V01TALMA') ->where('ALMA_COAL', '=', $idWarehouse) ->where('ALMA_NULI', '=', $line) ->first([ 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'ALMA_NORE AS NOMBRE_RESPONSABLE', 'ALMA_APRE AS APELLIDO_PATERNO_RESPONSABLE', 'ALMA_AMRE AS APELLIDO_MATERNO_RESPONSABLE', 'ALMA_COR1 AS CORREO1', 'ALMA_COR2 AS CORREO2', 'ALMA_LAD1 AS LADA1', 'ALMA_TEL1 AS TELEFONO1', 'ALMA_LAD2 AS LADA2', 'ALMA_TEL2 AS TELEFONO2', 'ALMA_CALL AS CALLE', 'ALMA_NUEX AS NUMERO_EXTERIOR', 'ALMA_NUIN AS NUMERO_INTERIOR', 'ALMA_COPO AS CODIGO_POSTAL', 'ALMA_COLO AS COLONIA', 'ALMA_LOCA AS LOCALIDAD', 'ALMA_MUNI AS MUNICIPIO', 'ALMA_ENTI AS ENTIDAD_FEDERATIVA', 'ALMA_PAIS AS PAIS', 'ALMA_ESTA AS ESTADO', 'ALMA_USRE AS USUARIO_REGISTRA', 'ALMA_FERE AS FECHA_REGISTRA', 'ALMA_USMO AS USUARIO_MODIFICA', 'ALMA_FEMO AS FECHA_MODIFICA', ]); $arrWarehouse = json_decode( json_encode($arrWarehouse), true ); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GETBY001: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } if (!empty($arrWarehouse)) { $arrResponseGetAddress = $this->resourcesController->getAddress( $arrWarehouse['CODIGO_POSTAL'], $arrWarehouse['COLONIA'], $arrWarehouse['MUNICIPIO'], $arrWarehouse['LOCALIDAD'], $arrWarehouse['ENTIDAD_FEDERATIVA'], $arrWarehouse['PAIS'], $line ); if ($arrResponseGetAddress['error']) { return $this->responseController->makeResponse(true, 'ERR_arrWarehouse_GETBY002: '.$arrResponseGetAddress['msg'], $arrResponseGetAddress['response'], 406); } $arrWarehouse['CODIGO_POSTAL'] = $arrResponseGetAddress['response']['CODIGO_POSTAL']; $arrWarehouse['COLONIA'] = $arrResponseGetAddress['response']['COLONIA']; $arrWarehouse['MUNICIPIO'] = $arrResponseGetAddress['response']['MUNICIPIO']; $arrWarehouse['LOCALIDAD'] = $arrResponseGetAddress['response']['LOCALIDAD']; $arrWarehouse['ENTIDAD_FEDERATIVA'] = $arrResponseGetAddress['response']['ENTIDAD_FEDERATIVA']; $arrWarehouse['PAIS'] = $arrResponseGetAddress['response']['PAIS']; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWarehouse); } public function getWarehouseActives($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401); } try { $arrWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $line) ->where('ALMA_ESTA', '=', 'Activo') ->get([ 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'ALMA_NORE AS NOMBRE_RESPONSABLE', 'ALMA_APRE AS APELLIDO_PATERNO_RESPONSABLE', 'ALMA_AMRE AS APELLIDO_MATERNO_RESPONSABLE', 'ALMA_COR1 AS CORREO1', 'ALMA_LAD1 AS LADA1', 'ALMA_TEL1 AS TELEFONO1', ]); $arrWarehouse = json_decode( json_encode($arrWarehouse), true ); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET001: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } foreach ($arrWarehouse as $key => $warehouse) { try { $countStock = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->where('UBAR_COAL', '=', $warehouse['CODIGO_ALMACEN']) ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } $warehouse['CODIGO_ALMACEN'] = $this->encController->encrypt($warehouse['CODIGO_ALMACEN'] ); $warehouse['CANTIDAD_STOCK'] = $countStock; $arrWarehouse[$key] = $warehouse; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWarehouse); } public function createWarehouse( Request $request ) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'NOMBRE_ALMACEN' => 'required|string', 'NOMBRE_RESPONSABLE' => 'required|string', 'APELLIDO_PATERNO_RESPONSABLE' => 'required|string', 'APELLIDO_MATERNO_RESPONSABLE' => 'nullable|string', 'CORREO1' => 'required|string', 'CORREO2' => 'nullable|string', 'LADA1' => 'required|string', 'TELEFONO1' => 'required|string', 'LADA2' => 'nullable|string', 'TELEFONO2' => 'nullable|string', 'CALLE' => 'required|string', 'NUMERO_EXTERIOR' => 'required|string', 'NUMERO_INTERIOR' => 'nullable|string', 'CODIGO_POSTAL' => 'required|string', 'COLONIA' => 'required|string', 'LOCALIDAD' => 'nullable|string', 'MUNICIPIO' => 'required|string', 'ENTIDAD_FEDERATIVA' => 'required|string', 'PAIS' => 'required|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); // Se valida y se obtiene el usuario $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_REG001:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; // Se vallidan los campos de dirección $arrResponseCheckAddress = $this->resourcesController->validateAddress( $requestData['CODIGO_POSTAL'], $requestData['COLONIA'], $requestData['MUNICIPIO'], $requestData['LOCALIDAD'], $requestData['ENTIDAD_FEDERATIVA'], $requestData['PAIS'], $requestData['NUMERO_LINEA'], ); if ($arrResponseCheckAddress['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_REG002: '.$arrResponseCheckAddress['msg'], $arrResponseCheckAddress['response'], 401); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TALMA')->insert([ 'ALMA_NULI' => $requestData['NUMERO_LINEA'], 'ALMA_COAL' => $requestData['CODIGO_ALMACEN'], 'ALMA_NOAL' => $requestData['NOMBRE_ALMACEN'], 'ALMA_NORE' => $requestData['NOMBRE_RESPONSABLE'], 'ALMA_APRE' => $requestData['APELLIDO_PATERNO_RESPONSABLE'], 'ALMA_AMRE' => $requestData['APELLIDO_MATERNO_RESPONSABLE'], 'ALMA_COR1' => $requestData['CORREO1'], 'ALMA_COR2' => $requestData['CORREO2'], 'ALMA_LAD1' => $requestData['LADA1'], 'ALMA_TEL1' => $requestData['TELEFONO1'], 'ALMA_LAD2' => $requestData['LADA2'], 'ALMA_TEL2' => $requestData['TELEFONO2'], 'ALMA_CALL' => $requestData['CALLE'], 'ALMA_NUEX' => $requestData['NUMERO_EXTERIOR'], 'ALMA_NUIN' => $requestData['NUMERO_INTERIOR'], 'ALMA_COPO' => $requestData['CODIGO_POSTAL'], 'ALMA_COLO' => $requestData['COLONIA'], 'ALMA_LOCA' => $requestData['LOCALIDAD'], 'ALMA_MUNI' => $requestData['MUNICIPIO'], 'ALMA_ENTI' => $requestData['ENTIDAD_FEDERATIVA'], 'ALMA_PAIS' => $requestData['PAIS'], 'ALMA_USRE' => $user, 'ALMA_FERE' => $currentDate, 'ALMA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_REG003: Ocurrió un error al insertar el registro del almacen.", $th->getMessage(), 500 ); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_REG004: No se pudo insertar el registro del almacen.", [], 500 ); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } public function updateWarehouse( Request $request, $idWarehouse ) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'NOMBRE_ALMACEN' => 'required|string', 'NOMBRE_RESPONSABLE' => 'required|string', 'APELLIDO_PATERNO_RESPONSABLE' => 'required|string', 'APELLIDO_MATERNO_RESPONSABLE' => 'nullable|string', 'CORREO1' => 'required|string', 'CORREO2' => 'nullable|string', 'LADA1' => 'required|string', 'TELEFONO1' => 'required|string', 'LADA2' => 'nullable|string', 'TELEFONO2' => 'nullable|string', 'CALLE' => 'required|string', 'NUMERO_EXTERIOR' => 'required|string', 'NUMERO_INTERIOR' => 'nullable|string', 'CODIGO_POSTAL' => 'required|string', 'COLONIA' => 'required|string', 'LOCALIDAD' => 'nullable|string', 'MUNICIPIO' => 'required|string', 'ENTIDAD_FEDERATIVA' => 'required|string', 'PAIS' => 'required|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_UPD000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "ERR_WAREHOUSE_UPD001: Ocurrió un error al desencriptar el ID del almacen.". $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_UPD002:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $arrResponseCheckAddress = $this->resourcesController->validateAddress( $requestData['CODIGO_POSTAL'], $requestData['COLONIA'], $requestData['MUNICIPIO'], $requestData['LOCALIDAD'], $requestData['ENTIDAD_FEDERATIVA'], $requestData['PAIS'], $requestData['NUMERO_LINEA'], ); if ($arrResponseCheckAddress['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_UPD003: '.$arrResponseCheckAddress['msg'], $arrResponseCheckAddress['response'], 401); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $idWarehouse) ->update([ 'ALMA_COAL' => $requestData['CODIGO_ALMACEN'], 'ALMA_NOAL' => $requestData['NOMBRE_ALMACEN'], 'ALMA_NORE' => $requestData['NOMBRE_RESPONSABLE'], 'ALMA_APRE' => $requestData['APELLIDO_PATERNO_RESPONSABLE'], 'ALMA_AMRE' => $requestData['APELLIDO_MATERNO_RESPONSABLE'], 'ALMA_COR1' => $requestData['CORREO1'], 'ALMA_COR2' => $requestData['CORREO2'], 'ALMA_LAD1' => $requestData['LADA1'], 'ALMA_TEL1' => $requestData['TELEFONO1'], 'ALMA_LAD2' => $requestData['LADA2'], 'ALMA_TEL2' => $requestData['TELEFONO2'], 'ALMA_CALL' => $requestData['CALLE'], 'ALMA_NUEX' => $requestData['NUMERO_EXTERIOR'], 'ALMA_NUIN' => $requestData['NUMERO_INTERIOR'], 'ALMA_COPO' => $requestData['CODIGO_POSTAL'], 'ALMA_COLO' => $requestData['COLONIA'], 'ALMA_LOCA' => $requestData['LOCALIDAD'], 'ALMA_MUNI' => $requestData['MUNICIPIO'], 'ALMA_ENTI' => $requestData['ENTIDAD_FEDERATIVA'], 'ALMA_PAIS' => $requestData['PAIS'], 'ALMA_USMO' => $user, 'ALMA_FEMO' => $currentDate, 'ALMA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_UPD004: Ocurrió un error al insertar el registro del almacen.", $th->getMessage(), 500 ); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_UPD005: No se pudo insertar el registro del almacen.", [], 500 ); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa"); } public function deleteWarehouse( Request $request, $idWarehouse ) { $validator = Validator::make($request->all(), [ 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_DEL000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL001: Ocurrió un error al desencriptar el nivel.', $th->getMessage(), 500); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL002:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $validateExists = DB::table('S002V01TALMA') ->where('ALMA_COAL', '=', $idWarehouse) ->where('ALMA_ESTA', '=', 'Activo') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL003: Ocurrió un error al obtener la información del área.', $th->getMessage(), 500); } if (!$validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL004: El almacen no existe.', [], 406); } try { $validateExists = DB::table('S002V01TUBAR') ->where('UBAR_COAL', '=', $idWarehouse) ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UBAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500); } if($validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL006: No se puede eliminar debido a que existen artículos ubicados en el almacen.', [], 406); } try { $countArea = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAL', '=', $idWarehouse) ->where('AREA_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL007: Ocurrió un error al obtener la información del área.', $th->getMessage(), 500); } if ($countArea > 0) { DB::rollBack(); $quantity = $countArea === 1 ? 'existe 1 área activa' : 'existen'.$countArea.' áreas activas'; return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL008: No se puede elminar debido a que '.$quantity.'.', [], 406); } try { $countLevel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $idWarehouse) ->where('NIVE_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL009: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500); } if ($countLevel > 0) { DB::rollBack(); $quantity = $countLevel === 1 ? 'existe 1 nivel activo' : 'existen '.$countLevel.' niveles activos'; return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL010: No se puede eliminar debido a que '.$quantity.'.', [], 406); } try { $countZones = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COAL', '=', $idWarehouse) ->where('ZONA_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL011: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500); } if ($countZones > 0) { DB::rollBack(); $quantity = $countZones === 1 ? 'existe 1 zona activa' : 'existen '.$countZones.' zonas activas'; return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL012: No se puede eliminar debido a que '.$quantity.'.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TALMA') ->where('ALMA_COAL', '=', $idWarehouse) ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->update([ 'ALMA_ESTA' => 'Eliminado', 'ALMA_USMO' => $user, 'ALMA_FEMO' => $currentDate, 'ALMA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL013: Ocurrió un error al eliminar el área.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL014: No se pudo eliminar el área.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa"); } public function getAreaByWarehouse($idWarehouse, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401); } try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY001:'.$arrResponseCheckUser['msg'], [], 401); } try { $getArea = DB::table('S002V01TAREA') ->where('AREA_COAL', '=', $idWarehouse) ->where('AREA_NULI', '=', $line) ->get([ 'AREA_COAR AS CODIGO_AREA', 'AREA_NOAR AS NOMBRE_AREA', 'AREA_COME AS COMENTARIOS', 'AREA_ESTA AS ESTADO', 'AREA_USRE AS USUARIO_REGISTRA', 'AREA_FERE AS FECHA_REGISTRA', 'AREA_USMO AS USUARIO_MODIFICA', 'AREA_FEMO AS FECHA_MODIFICA', ]); $arrArea = json_decode(json_encode($getArea), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } foreach ($arrArea as $key => $value) { try { $countStock = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->where('UBAR_COAL', '=', $idWarehouse) ->where('UBAR_COAR', '=', $value['CODIGO_AREA']) ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } $value['CANTIDAD_STOCK'] = $countStock; $arrArea[$key] = $value; } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrArea, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrArea = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArea); } public function getAreaById($idArea, $user, $line) { try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY001:'.$arrResponseCheckUser['msg'], [], 401); } try { $getArea = (array) DB::table('S002V01TAREA') ->where('AREA_COAR', '=', $idArea) ->where('AREA_NULI', '=', $line) ->first([ 'AREA_NOAR AS NOMBRE_AREA', 'AREA_COME AS COMENTARIOS', 'AREA_ESTA AS ESTADO', 'AREA_USRE AS USUARIO_REGISTRA', 'AREA_FERE AS FECHA_REGISTRA', 'AREA_USMO AS USUARIO_MODIFICA', 'AREA_FEMO AS FECHA_MODIFICA', ]); $arrArea = json_decode(json_encode($getArea), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArea); } public function getAreaByWarehouseActives($idWarehouse, $user, $line) { try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE001:'.$arrResponseCheckUser['msg'], [], 401); } try { $validateExists = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $line) ->where('ALMA_COAL', '=', $idWarehouse) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE002: Ocurrió un error al obtener el almacen.', $th->getMessage(), 406); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE003: El almacen no existe.', [], 401); } try { $getArea = DB::table('S002V01TAREA') ->where('AREA_COAL', '=', $idWarehouse) ->where('AREA_NULI', '=', $line) ->where('AREA_ESTA', '=', 'Activo') ->get([ 'AREA_COAR AS CODIGO_AREA', 'AREA_NOAR AS NOMBRE_AREA', 'AREA_COME AS COMENTARIOS', ]); $arrArea = json_decode(json_encode($getArea), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE004: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArea); } public function registerArea(Request $request) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'CODIGO_AREA' => 'required|string', 'NOMBRE_AREA' => 'required|string', 'COMENTARIOS' => 'nullable|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_AREA_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_AREA_REG001:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $validateExistWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ALMA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_REG002: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500); } if (!$validateExistWarehouse) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_REG003: El almacen no existe.', [], 406); } try { $validateExistCode = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAR', '=', $requestData['CODIGO_AREA']) ->where('AREA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_REG004: Ocurrió un error al verificar el código del área.', $th->getMessage(), 500); } if ($validateExistCode) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_REG005: El código del área ya se encuentra registrado.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TAREA')->insert([ 'AREA_COAL' => $requestData['CODIGO_ALMACEN'], 'AREA_COAR' => $requestData['CODIGO_AREA'], 'AREA_NOAR' => $requestData['NOMBRE_AREA'], 'AREA_COME' => $requestData['COMENTARIOS'], 'AREA_NULI' => $requestData['NUMERO_LINEA'], 'AREA_USRE' => $user, 'AREA_FERE' => $currentDate, 'AREA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_REG006: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_REG007: No se pudo guardar la información en la base de datos.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } public function updateArea(Request $request, $idArea) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'NOMBRE_AREA' => 'required|string', 'COMENTARIOS' => 'nullable|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_AREA_UPD000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD001:'.$arrResponseCheckUser['msg'], $arrResponseCheckUser['response'], 401); } $user = $arrResponseCheckUser['response']; try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD002: Ocurrió un error al desencriptar el área.', $th->getMessage(), 500); } try { $validateExistArea = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAR', '=', $idArea) ->where('AREA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD003: Ocurrió un error al verificar el código del área.', $th->getMessage(), 500); } if (!$validateExistArea) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD004: El área no existe.', [], 406); } try { $validateExistWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ALMA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD005: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500); } if (!$validateExistWarehouse) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD006: El almacen no existe.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('AREA_COAR', '=', $idArea) ->update([ 'AREA_NOAR' => $requestData['NOMBRE_AREA'], 'AREA_COME' => $requestData['COMENTARIOS'], 'AREA_USMO' => $user, 'AREA_FEMO' => $currentDate, 'AREA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD009: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_UPD010: No se pudo guardar la información en la base de datos.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } public function deleteArea(Request $request, $idArea) { $validator = Validator::make($request->all(), [ 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_AREA_DEL000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_DEL001: Ocurrió un error al desencriptar el nivel.', $th->getMessage(), 500); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_DEL002:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $arrArea = (array) DB::table('S002V01TAREA') ->where('AREA_COAR', '=', $idArea) ->where('AREA_ESTA', '=', 'Activo') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->first([ 'AREA_COAL', ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_DEL003: Ocurrió un error al obtener la información del área.', $th->getMessage(), 500); } if (empty($arrArea)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_DEL004: El área no existe.', [], 406); } try { $validateExists = DB::table('S002V01TUBAR') ->where('UBAR_COAL', '=', $arrArea['AREA_COAL']) ->where('UBAR_COZO', '=', $idArea) ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UBAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500); } if($validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_AREA_DEL006: No se puede eliminar debido a que existen artículos ubicados en el área.', [], 406); } try { $countLevel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $arrArea['AREA_COAL']) ->where('NIVE_COAR', '=', $idArea) ->where('NIVE_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL007: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500); } if ($countLevel > 0) { DB::rollBack(); $quantity = $countLevel === 1 ? 'existe 1 nivel activo' : 'existen '.$countLevel.' niveles activos'; return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL008: No se puede eliminar debido a que '.$quantity.'.', [], 406); } try { $countZones = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COAL', '=', $arrArea['AREA_COAL']) ->where('ZONA_COAR', '=', $idArea) ->where('ZONA_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL009: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500); } if ($countZones > 0) { DB::rollBack(); $quantity = $countZones === 1 ? 'existe 1 zona activa' : 'existen '.$countZones.' zonas activas'; return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL010: No se puede eliminar debido a que '.$quantity.'.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TAREA') ->where('AREA_COAR', '=', $idArea) ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->update([ 'AREA_ESTA' => 'Eliminado', 'AREA_USMO' => $user, 'AREA_FEMO' => $currentDate, 'AREA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL011: Ocurrió un error al eliminar el área.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL012: No se pudo eliminar el área.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa"); } public function getLevelByAreaWarehouse($idWarehouse, $idArea, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401); } try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY002:'.$arrResponseCheckUser['msg'], [], 401); } try { $getLevel = DB::table('S002V01TNIVE') ->where('NIVE_COAL', '=', $idWarehouse) ->where('NIVE_COAR', '=', $idArea) ->where('NIVE_NULI', '=', $line) ->get([ 'NIVE_CONI AS CODIGO_NIVEL', 'NIVE_NONI AS NOMBRE_NIVEL', 'NIVE_COME AS COMENTARIOS', 'NIVE_ESTA AS ESTADO', 'NIVE_USRE AS USUARIO_REGISTRA', 'NIVE_FERE AS FECHA_REGISTRA', 'NIVE_USMO AS USUARIO_MODIFICA', 'NIVE_FEMO AS FECHA_MODIFICA', ]); $arrLevel = json_decode(json_encode($getLevel), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY003: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } foreach ($arrLevel as $key => $value) { try { $countStock = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->where('UBAR_COAL', '=', $idWarehouse) ->where('UBAR_COAR', '=', $idArea) ->where('UBAR_CONI', '=', $value['CODIGO_NIVEL']) ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } $value['CANTIDAD_STOCK'] = $countStock; $arrLevel[$key] = $value; } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrLevel, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrLevel = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLevel); } public function getLevelById( $idLevel, $user, $line ) { try { $idLevel = $this->encController->decrypt($idLevel); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY001:'.$arrResponseCheckUser['msg'], [], 401); } try { $getLevel = (array) DB::table('S002V01TNIVE') ->where('NIVE_CONI', '=', $idLevel) ->where('NIVE_NULI', '=', $line) ->first([ 'NIVE_NONI AS NOMBRE_NIVEL', 'NIVE_COME AS COMENTARIOS', 'NIVE_ESTA AS ESTADO', 'NIVE_USRE AS USUARIO_REGISTRA', 'NIVE_FERE AS FECHA_REGISTRA', 'NIVE_USMO AS USUARIO_MODIFICA', 'NIVE_FEMO AS FECHA_MODIFICA', ]); $arrLevel = json_decode(json_encode($getLevel), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLevel); } public function getLevelByAreaWarehouseActives($idWarehouse, $idArea, $user, $line) { try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE002:'.$arrResponseCheckUser['msg'], [], 401); } try { $validateExists = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $line) ->where('ALMA_COAL', '=', $idWarehouse) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE003: Ocurrió un error al obtener el almacen.', $th->getMessage(), 406); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE004: El almacen no existe.', [], 401); } try { $validateExists = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $line) ->where('AREA_COAL', '=', $idWarehouse) ->where('AREA_COAR', '=', $idArea) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE005: Ocurrió un error al obtener el área.', $th->getMessage(), 406); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE006: El área no existe.', [], 401); } try { $getLevel = DB::table('S002V01TNIVE') ->where('NIVE_COAL', '=', $idWarehouse) ->where('NIVE_COAR', '=', $idArea) ->where('NIVE_NULI', '=', $line) ->where('NIVE_ESTA', '=', 'Activo') ->get([ 'NIVE_CONI AS CODIGO_NIVEL', 'NIVE_NONI AS NOMBRE_NIVEL', 'NIVE_COME AS COMENTARIOS', ]); $arrLevel = json_decode(json_encode($getLevel), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE007: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLevel); } public function registerLevel(Request $request) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'CODIGO_AREA' => 'required|string', 'CODIGO_NIVEL' => 'required|string', 'NOMBRE_NIVEL' => 'required|string', 'COMENTARIOS' => 'nullable|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_LEVEL_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG001:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $validateExistWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ALMA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG002: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500); } if (!$validateExistWarehouse) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG003: El almacen no existe.', [], 406); } try { $validateExistArea = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('AREA_COAR', '=', $requestData['CODIGO_AREA']) ->where('AREA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG004: Ocurrió un error al verificar el área.', $th->getMessage(), 500); } if (!$validateExistArea) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG005: El área no existe.', [], 406); } try { $validateExistLevel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA']) ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG006: Ocurrió un error al verificar el código del nivel.', $th->getMessage(), 406); } if ($validateExistLevel) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG007: El código del nivel ya existe.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TNIVE')->insert([ 'NIVE_NULI' => $requestData['NUMERO_LINEA'], 'NIVE_COAL' => $requestData['CODIGO_ALMACEN'], 'NIVE_COAR' => $requestData['CODIGO_AREA'], 'NIVE_CONI' => $requestData['CODIGO_NIVEL'], 'NIVE_NONI' => $requestData['NOMBRE_NIVEL'], 'NIVE_COME' => $requestData['COMENTARIOS'], 'NIVE_USRE' => $user, 'NIVE_FERE' => $currentDate, 'NIVE_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG008: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG009: No se pudo guardar la información en la base de datos.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } public function updateLevel(Request $request, $idLevel) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'NOMBRE_NIVEL' => 'required|string', 'COMENTARIOS' => 'nullable|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_LEVEL_UPD000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idLevel = $this->encController->decrypt($idLevel); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD001: Ocurrió un error al desencriptar el área.', $th->getMessage(), 500); } try { $validateExistLevel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_CONI', '=', $idLevel) ->where('NIVE_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD002: Ocurrió un error al verificar el código del área.', $th->getMessage(), 500); } if (!$validateExistLevel) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD003: El área no existe.', [], 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD004:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $validateExistWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ALMA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD005: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500); } if (!$validateExistWarehouse) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD006: El almacen no existe.', [], 406); } try { $validateExistArea = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('AREA_COAR', '=', $requestData['CODIGO_AREA']) ->where('AREA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD007: Ocurrió un error al verificar el área.', $th->getMessage(), 500); } if (!$validateExistArea) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD008: El área no existe.', [], 406); } try { $validateExistLevel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA']) ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD009: Ocurrió un error al verificar el código del nivel.', $th->getMessage(), 406); } if ($validateExistLevel) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD010: El código del nivel ya existe.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA']) ->where('NIVE_CONI', '=', $idLevel) ->update([ 'NIVE_NONI' => $requestData['NOMBRE_NIVEL'], 'NIVE_COME' => $requestData['COMENTARIOS'], 'NIVE_USMO' => $user, 'NIVE_FEMO' => $currentDate, 'NIVE_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD011: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD012: No se pudo guardar la información en la base de datos.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa"); } public function deleteLevel(Request $request, $idLevel) { $validator = Validator::make($request->all(), [ 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_LEVEL_DEL000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idLevel = $this->encController->decrypt($idLevel); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL001: Ocurrió un error al desencriptar el nivel.', $th->getMessage(), 500); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL002:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $arrLevel = (array) DB::table('S002V01TNIVE') ->where('NIVE_CONI', '=', $idLevel) ->where('NIVE_ESTA', '=', 'Activo') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->first([ 'NIVE_COAL', 'NIVE_COAR' ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL003: Ocurrió un error al obtener la información del nivel.', $th->getMessage(), 500); } if (empty($arrLevel)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL004: El nivel no existe.', [], 406); } try { $validateExists = DB::table('S002V01TUBAR') ->where('UBAR_COAL', '=', $arrLevel['NIVE_COAL']) ->where('UBAR_COAR', '=', $arrLevel['NIVE_COAR']) ->where('UBAR_COZO', '=', $idLevel) ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UBAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500); } if($validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL006: No se puede eliminar debido a que existen artículos ubicados en el nivel.', [], 406); } try { $countZones = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COAL', '=', $arrLevel['NIVE_COAL']) ->where('ZONA_COAR', '=', $arrLevel['NIVE_COAR']) ->where('ZONA_CONI', '=', $idLevel) ->where('ZONA_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL007: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500); } if ($countZones > 0) { DB::rollBack(); $quantity = $countZones === 1 ? 'existe 1 zona activa' : 'existen '.$countZones.' zonas activas'; return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL008: No se puede eliminar debido a que '.$quantity.'.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TNIVE') ->where('NIVE_CONI', '=', $idLevel) ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->update([ 'NIVE_ESTA' => 'Eliminado', 'NIVE_USMO' => $user, 'NIVE_FEMO' => $currentDate, 'NIVE_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL009: Ocurrió un error al eliminar el nivel.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL010: No se pudo eliminar el nivel.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa"); } public function getZoneByLevelAreaWarehouse($idWarehouse, $idArea, $idLevel, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401); } try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406); } try { $idLevel = $this->encController->decrypt($idLevel); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY002: Ocurrió un error al desencriptar el ID del nivel', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY003:'.$arrResponseCheckUser['msg'], [], 401); } try { $getZone = DB::table('S002V01TZONA') ->where('ZONA_COAL', '=', $idWarehouse) ->where('ZONA_COAR', '=', $idArea) ->where('ZONA_CONI', '=', $idLevel) ->where('ZONA_NULI', '=', $line) ->get([ 'ZONA_COZO AS CODIGO_ZONA', 'ZONA_NOZO AS NOMBRE_ZONA', 'ZONA_COME AS COMENTARIOS', 'ZONA_ESTA AS ESTADO', 'ZONA_USRE AS USUARIO_REGISTRA', 'ZONA_FERE AS FECHA_REGISTRA', 'ZONA_USMO AS USUARIO_MODIFICA', 'ZONA_FEMO AS FECHA_MODIFICA', ]); $arrZone = json_decode(json_encode($getZone), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY004: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } foreach ($arrZone as $key => $value) { try { $countStock = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->where('UBAR_COAL', '=', $idWarehouse) ->where('UBAR_COAR', '=', $idArea) ->where('UBAR_CONI', '=', $idLevel) ->where('UBAR_COZO', '=', $value['CODIGO_ZONA']) ->count(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse( true, "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.", $th->getMessage(), 500 ); } $value['CANTIDAD_STOCK'] = $countStock; $arrZone[$key] = $value; } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrZone, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrZone = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrZone); } public function getZoneById($idZone, $user, $line) { try { $idZone = $this->encController->decrypt($idZone); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY001:'.$arrResponseCheckUser['msg'], [], 401); } try { $getZone = (array) DB::table('S002V01TZONA') ->where('ZONA_COZO', '=', $idZone) ->where('ZONA_NULI', '=', $line) ->first([ 'ZONA_NOZO AS NOMBRE_ZONA', 'ZONA_COME AS COMENTARIOS', 'ZONA_ESTA AS ESTADO', 'ZONA_USRE AS USUARIO_REGISTRA', 'ZONA_FERE AS FECHA_REGISTRA', 'ZONA_USMO AS USUARIO_MODIFICA', 'ZONA_FEMO AS FECHA_MODIFICA', ]); $arrZone = json_decode(json_encode($getZone), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrZone); } public function getZoneByLevelAreaWarehouseActive($idWarehouse, $idArea, $idLevel, $user, $line) { try { $idWarehouse = $this->encController->decrypt($idWarehouse); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406); } try { $idArea = $this->encController->decrypt($idArea); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406); } try { $idLevel = $this->encController->decrypt($idLevel); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE002: Ocurrió un error al desencriptar el ID del nivel', $th->getMessage(), 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE003:'.$arrResponseCheckUser['msg'], [], 401); } try { $validateExists = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $line) ->where('ALMA_COAL', '=', $idWarehouse) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE004: Ocurrió un error al obtener el almacen.', $th->getMessage(), 406); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE005: El almacen no existe.', [], 401); } try { $validateExists = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $line) ->where('AREA_COAL', '=', $idWarehouse) ->where('AREA_COAR', '=', $idArea) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE006: Ocurrió un error al obtener el área.', $th->getMessage(), 406); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE007: El área no existe.', [], 401); } try { $validateExists = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $line) ->where('NIVE_COAL', '=', $idWarehouse) ->where('NIVE_COAR', '=', $idArea) ->where('NIVE_CONI', '=', $idLevel) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE008: Ocurrió un error al obtener el nivel.', $th->getMessage(), 406); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE009: El nivel no existe.', [], 401); } try { $getZone = DB::table('S002V01TZONA') ->where('ZONA_COAL', '=', $idWarehouse) ->where('ZONA_COAR', '=', $idArea) ->where('ZONA_CONI', '=', $idLevel) ->where('ZONA_NULI', '=', $line) ->where('ZONA_ESTA', '=', 'Activo') ->get([ 'ZONA_COZO AS CODIGO_ZONA', 'ZONA_NOZO AS NOMBRE_ZONA', 'ZONA_COME AS COMENTARIOS', ]); $arrZone = json_decode(json_encode($getZone), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE010: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrZone); } public function registerZone(Request $request) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'CODIGO_AREA' => 'required|string', 'CODIGO_NIVEL' => 'required|string', 'CODIGO_ZONA' => 'required|string', 'NOMBRE_ZONA' => 'required|string', 'COMENTARIOS' => 'nullable|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_ZONE_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_ZONE_REG001:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $validateExistWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ALMA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG002: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500); } if (!$validateExistWarehouse) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG003: El almacen no existe.', [], 406); } try { $validateExistArea = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('AREA_COAR', '=', $requestData['CODIGO_AREA']) ->where('AREA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG004: Ocurrió un error al verificar el área.', $th->getMessage(), 500); } if (!$validateExistArea) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG005: El área no existe.', [], 406); } try { $validateExistNivel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA']) ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL']) ->where('NIVE_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG006: Ocurrió un error al verificar el nivel.', $th->getMessage(), 500); } if (!$validateExistNivel) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG007: El nivel no existe.', [], 406); } try { $validateExistZone = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ZONA_COAR', '=', $requestData['CODIGO_AREA']) ->where('ZONA_CONI', '=', $requestData['CODIGO_NIVEL']) ->where('ZONA_COZO', '=', $requestData['CODIGO_ZONA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG008: Ocurrió un error al verificar el código de la zona.', $th->getMessage(), 406); } if ($validateExistZone) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG009: El código de la zona ya existe.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TZONA')->insert([ 'ZONA_NULI' => $requestData['NUMERO_LINEA'], 'ZONA_COAL' => $requestData['CODIGO_ALMACEN'], 'ZONA_COAR' => $requestData['CODIGO_AREA'], 'ZONA_CONI' => $requestData['CODIGO_NIVEL'], 'ZONA_COZO' => $requestData['CODIGO_ZONA'], 'ZONA_NOZO' => $requestData['NOMBRE_ZONA'], 'ZONA_COME' => $requestData['COMENTARIOS'], 'ZONA_USRE' => $user, 'ZONA_FERE' => $currentDate, 'ZONA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG010: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_REG011: No se pudo guardar la información en la base de datos.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } public function updateZone(Request $request, $idZone) { $validator = Validator::make($request->all(), [ 'CODIGO_ALMACEN' => 'required|string', 'CODIGO_AREA' => 'required|string', 'CODIGO_NIVEL' => 'required|string', 'NOMBRE_ZONA' => 'required|string', 'COMENTARIOS' => 'nullable|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_ZONE_UPD000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idZone = $this->encController->decrypt($idZone); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD001: Ocurrió un error al desencriptar la zona.', $th->getMessage(), 500); } try { $validateExistLevel = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COZO', '=', $idZone) ->where('ZONA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD002: Ocurrió un error al verificar el código de la zona.', $th->getMessage(), 500); } if (!$validateExistLevel) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD003: El área no existe.', [], 406); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD004:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $validateExistWarehouse = DB::table('S002V01TALMA') ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ALMA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD005: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500); } if (!$validateExistWarehouse) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD006: El almacen no existe.', [], 406); } try { $validateExistArea = DB::table('S002V01TAREA') ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('AREA_COAR', '=', $requestData['CODIGO_AREA']) ->where('AREA_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD007: Ocurrió un error al verificar el área.', $th->getMessage(), 500); } if (!$validateExistArea) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD008: El área no existe.', [], 406); } try { $validateExistNivel = DB::table('S002V01TNIVE') ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA']) ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL']) ->where('NIVE_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD009: Ocurrió un error al verificar el nivel.', $th->getMessage(), 500); } if (!$validateExistNivel) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD010: El nivel no existe.', [], 406); } try { $validateExistZone = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ZONA_COAR', '=', $requestData['CODIGO_AREA']) ->where('ZONA_CONI', '=', $requestData['CODIGO_NIVEL']) ->where('ZONA_COZO', '=', $requestData['CODIGO_ZONA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD011: Ocurrió un error al verificar el código de la zona.', $th->getMessage(), 406); } if ($validateExistZone) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD012: El código de la zona ya existe.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TZONA') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ZONA_COAL', '=', $requestData['CODIGO_ALMACEN']) ->where('ZONA_COAR', '=', $requestData['CODIGO_AREA']) ->where('ZONA_CONI', '=', $requestData['CODIGO_NIVEL']) ->where('ZONA_COZO', '=', $idZone) ->update([ 'ZONA_NOZO' => $requestData['NOMBRE_ZONA'], 'ZONA_COME' => $requestData['COMENTARIOS'], 'ZONA_USMO' => $user, 'ZONA_FEMO' => $currentDate, 'ZONA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD013: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD014: No se pudo guardar la información en la base de datos.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa"); } public function deleteZone(Request $request, $idZone) { $validator = Validator::make($request->all(), [ 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "ERR_ZONE_DEL000: Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); try { $idZone = $this->encController->decrypt($idZone); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL001: Ocurrió un error al desencriptar la zona.', $th->getMessage(), 500); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL002:'.$arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $arrZone = (array) DB::table('S002V01TZONA') ->where('ZONA_COZO', '=', $idZone) ->where('ZONA_ESTA', '=', 'Activo') ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->first([ 'ZONA_COAL', 'ZONA_COAR', 'ZONA_CONI', ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL003: Ocurrió un error al obtener la información de la zona.', $th->getMessage(), 500); } if (empty($arrZone)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL004: La zona no existe.', [], 406); } try { $validateExists = DB::table('S002V01TUBAR') ->where('UBAR_COAL', '=', $arrZone['ZONA_COAL']) ->where('UBAR_COAR', '=', $arrZone['ZONA_COAR']) ->where('UBAR_CONI', '=', $arrZone['ZONA_CONI']) ->where('UBAR_COZO', '=', $idZone) ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UBAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500); } if($validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL006: No se puede eliminar debido a que existen artículos ubicados en la zona.', [], 406); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TZONA') ->where('ZONA_COZO', '=', $idZone) ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->update([ 'ZONA_ESTA' => 'Eliminado', 'ZONA_USMO' => $user, 'ZONA_FEMO' => $currentDate, 'ZONA_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL007: Ocurrió un error al eliminar la zona.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL008: No se pudo eliminar la zona.', [], 406); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa"); } // FUNCIÓN RECEPCIÓN DE ARTÍCULOS public function registerToStock(Request $request) { $validator = Validator::make($request->all(), [ 'WAREHOUSE' => 'required|string', 'AREA' => 'required|string', 'LEVEL' => 'required|string', 'ZONE' => 'required|string', 'ORDER' => 'required|string', 'PRE_CODIFICATE' => 'required|array', 'ID_INFORMATION' => 'required|integer', 'FAMILIA' => 'required|string', 'SUBFAMILIA' => 'required|string', 'MODELO' => 'required|string', 'CODIGO_MODELO' => 'required|string', 'NUMBER_ITEMS' => 'required|integer', 'CODIGO_BARRAS' => 'required|string', 'FECHA_VENCIMIENTO' => 'nullable|string', 'IMAGES' => 'required|json', 'PRE_GENERATED_CODE' => 'required|string', 'REPARABLE' => 'required|boolean', 'CONSUMIBLE' => 'required|boolean', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } DB::beginTransaction(); $requestData = $request->all(); // Se desencripta y se verifica si el usuario existe $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $idInformation = intval($requestData['ID_INFORMATION']); if($idInformation <= 0){ goto noDescription; } try { $infoAdquisition = (array) DB::table('S002V01TINAR') ->where([ ['INAR_IDIN', '=', $requestData['ID_INFORMATION']], ['INAR_NULI', '=', $requestData['NUMERO_LINEA']], ]) ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE') ->join('S002V01TUNID', 'UNID_IDUN', '=', 'DEAR_IDUN') ->first([ 'DEAR_CAAR AS CANTIDAD_ARTICULOS', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la adquisición.', $th->getMessage(), 404); } if (empty($infoAdquisition)) { return $this->responseController->makeResponse(true, 'No existe la información de la adquisición.', [], 404); } noDescription: $infoAdquisition['CANTIDAD_ARTICULOS'] = $idInformation <= 0 ? 1 : intval($infoAdquisition['CANTIDAD_ARTICULOS']); $requestData['NUMBER_ITEMS'] = intval($requestData['NUMBER_ITEMS']); $amountArticle = $infoAdquisition['CANTIDAD_ARTICULOS'] * $requestData['NUMBER_ITEMS']; // Se verifica la precodificación if (count($requestData['PRE_CODIFICATE']) !== $amountArticle) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La cantidad registrada de la precodificación no es igual la cantidad de artículos seleccionados.', [$requestData['PRE_CODIFICATE'], $requestData['NUMBER_ITEMS']], 500); } // Se obtiene la información encriptada try { $idWarehouse = $this->encController->decrypt($requestData['WAREHOUSE']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el almacen.', $th->getMessage(), 500); } if ($idWarehouse === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La encriptación del almacen no es correcta.', [], 500); } try { $idArea = $this->encController->decrypt($requestData['AREA']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el área.', $th->getMessage(), 500); } if ($idArea === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La encriptacipon del área no es correcta.', [], 500); } try { $idLevel = $this->encController->decrypt($requestData['LEVEL']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el nivel.', $th->getMessage(), 500); } if ($idLevel === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La encriptación del nivel no es correcta.', [], 500); } try { $idZone = $this->encController->decrypt($requestData['ZONE']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la zona.', $th->getMessage(), 500); } if ($idZone === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La encriptación de la zona no es correcta.', [], 500); } try { $idFamily = $this->encController->decrypt($requestData['FAMILIA']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la familia.', $th->getMessage(), 500); } if ($idFamily === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La encriptación de la familia no es correcta.', [], 500); } try { $idSubfamily = $this->encController->decrypt($requestData['SUBFAMILIA']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la subfamilia.', $th->getMessage(), 500); } if ($idSubfamily === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La encriptación de la subfamilia no es correcta.', [], 500); } // Se verifica que la información exista try { $validateWarehouse = DB::table('S002V01TALMA') ->where('ALMA_COAL', '=', $idWarehouse) ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el almacen existe.', $th->getMessage(), 500); } if ($validateWarehouse === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El almacen no existe.', [], 500); } try { $validateArea = DB::table('S002V01TAREA') ->where('AREA_COAL', '=', $idWarehouse) ->where('AREA_COAR', '=', $idArea) ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el área existe.', $th->getMessage(), 500); } if ($validateArea === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El área no existe.', [], 500); } try { $validateLevel = DB::table('S002V01TNIVE') ->where('NIVE_COAL', '=', $idWarehouse) ->where('NIVE_COAR', '=', $idArea) ->where('NIVE_CONI', '=', $idLevel) ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el nivel existe.', $th->getMessage(), 500); } if ($validateLevel === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El nivel no existe.', [], 500); } try { $validateZone = DB::table('S002V01TZONA') ->where('ZONA_COAL', '=', $idWarehouse) ->where('ZONA_COAR', '=', $idArea) ->where('ZONA_CONI', '=', $idLevel) ->where('ZONA_COZO', '=', $idZone) ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la zona existe.', $th->getMessage(), 500); } if ($validateZone === false) { return $this->responseController->makeResponse(true, 'La zona no existe.', [], 500); } try { $validateFamily = DB::table('S002V01TFAMI') ->where('FAMI_COFA', '=', $idFamily) ->where('FAMI_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la familia existe.', $th->getMessage(), 500); } if ($validateFamily === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La familia no existe.', [], 500); } try { $validateSubfamily = DB::table('S002V01TSUBF') ->where('SUBF_COFA', '=', $idFamily) ->where('SUBF_COSU', '=', $idSubfamily) ->where('SUBF_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la subfamilia existe.', $th->getMessage(), 500); } if ($validateSubfamily === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La subfamilia no existe.', [], 500); } try { $orden = (array) DB::table('S002V01TORCO') ->where('ORCO_NUOR', '=', $requestData['ORDER']) ->where('ORCO_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ORCO_ESTA', '=', 'Recibido') ->first([ 'ORCO_IDLI AS ID_LINEA_SOLICITUD', 'ORCO_IDDE AS ID_DESCRIPCION', ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la orden de compra.', $th->getMessage(), 500); } if (is_null($orden)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La orden de compra no existe.', [], 500); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); if($idInformation <= 0){ goto noInformation; } try { $info = DB::table('S002V01TARSE') ->where('ARSE_IDIN', '=', $requestData['ID_INFORMATION']) ->where('ARSE_ESTA', '=', 'Activo') ->where('ARSE_IDLI', '=', $orden['ID_LINEA_SOLICITUD']) ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ARTI_NULI', '=', $requestData['NUMERO_LINEA']) ->where('DEAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UNID_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ARSE_ESTA', '=', 'Activo') ->where('ARTI_ESTA', '=', 'Activo') ->where('DEAR_ESTA', '=', 'Activo') ->where('UNID_ESTA', '=', 'Activo') ->where('INAR_ESTA', '=', 'Activo') ->where('INAR_CODI', '=', $requestData['CODIGO_MODELO']) ->where('INAR_MODE', '=', $requestData['MODELO']) ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'ARSE_IDAR') ->join('S002V01TINAR', 'INAR_IDIN', '=', 'ARSE_IDIN') ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE') ->join('S002V01TUNID', 'UNID_IDUN', '=', 'DEAR_IDUN') ->limit($requestData['NUMBER_ITEMS']) ->get([ 'ARSE_IDAS AS NUMERO_SELECCIONADO', 'ARTI_IDAR AS ID_ARTICULO', 'ARTI_COFA AS CODIGO_FAMILIA', 'ARTI_COSU AS CODIGO_SUBFAMILIA', 'ARTI_CODI AS CODIGO_ARTICULO', 'ARTI_NOMB AS NOMBRE_ARTICULO', 'DEAR_IDDE AS ID_DESCRIPCION', 'DEAR_IMAG AS IMAGENES', 'DEAR_DESC AS DESCRIPCION', 'DEAR_CARA AS CARACTERISTICAS', 'DEAR_COWE AS COMPRA_WEB', 'DEAR_NUPR AS NUMERO_PROVEEDOR', 'UNID_IDUN AS ID_UNIDAD', 'UNID_NOMB AS NOMBRE_UNIDAD', 'UNID_ACRO AS ACRONIMO_UNIDAD', 'INAR_IDIN AS ID_INFORMACION', 'INAR_CODI AS CODIGO_INFORMACION', 'INAR_MODE AS MODELO_INFORMACION', 'INAR_COMO AS CODIGO_MONEDA', 'INAR_PREC AS PRECIO', 'INAR_MOMI AS MONTO_MINIMO', 'INAR_CARA AS CARACTERISTICAS', ]); $info = json_decode(json_encode($info), true); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de los productos.', $th->getMessage(), 500); } if ( is_null($info) || empty($info) ) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No existen artículos asociados a la orden de compra.', [], 500); } // Se verifica que existan los datos suficientes para hacer el traslado. if ( count($info) !== $requestData['NUMBER_ITEMS']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La cantidad de artículos en la orden de compra no corresponde a la cantidad de artículos seleccionados a Stock.', [count($info), $requestData['NUMBER_ITEMS']], 500); } noInformation: // Se verifica los códigos de barras $uniqueBarcode = false; $arrBarcode = explode(',', $requestData['CODIGO_BARRAS']); if ( count($arrBarcode) === 0) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No hay códigos de barras registrados.', [], 500); } else if (count($arrBarcode) === $requestData['NUMBER_ITEMS']) { $uniqueBarcode = false; } else if (array_key_exists(0, $arrBarcode) && count($arrBarcode) === 1 && $arrBarcode[0] !== '' ) { $uniqueBarcode = true; } else { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error con los códigos de barras registrados.', [], 500); } // Se verifica que los códigos de barras del formulario no sean repetidos $temp_array = array_unique($arrBarcode); $duplicates = sizeof($temp_array) != sizeof($arrBarcode); if ($duplicates) { return $this->responseController->makeResponse(true, 'Los códigos de barras no se pueden repetir.', [], 400); } // Se verifican que los códigos de barras no se repitan foreach ($arrBarcode as $key => $barcode) { try { $validateBarcode = DB::table('S002V01TSTAR') ->where('STAR_COBA', '=', $barcode) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar los códigos de barras.', $th->getMessage(), 500); } if ($validateBarcode === true) { return $this->responseController->makeResponse(true, 'El código '.$barcode.' ya se encuentra registrado', [], 500); } } // Se verifica la fecha de vencimientos $arrDueDate = array(); $uniqueDueDate = false; if ($requestData['FECHA_VENCIMIENTO'] !== '' && !is_null($requestData['FECHA_VENCIMIENTO'])) { $arrDueDate = explode(',', $requestData['FECHA_VENCIMIENTO']); if ( count($arrDueDate) === 0) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No hay fechas de vencimientos registradas.', [], 500); } else if (count($arrDueDate) === $requestData['NUMBER_ITEMS']) { $uniqueDueDate = false; } else if (array_key_exists(0, $arrDueDate) && count($arrDueDate) === 1 && $arrDueDate[0] !== '' ) { $uniqueDueDate = true; } else { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error con las fechas de vencimientos registrados.', [], 500); } } // Se obtiene la fecha actual $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); $idInfoStock = null; if(!isset($info)){ goto noStockInfo; } try { $infoStock = (array) DB::table('S002V01TINST') ->where('INST_COFA', '=', $idFamily) ->where('INST_COSU', '=', $idSubfamily) ->where('INST_ARTI', '=', $info[0]['ID_ARTICULO']) ->where('INST_MODE', '=', $requestData['MODELO']) ->where('INST_COMO', '=', $requestData['CODIGO_MODELO']) ->where('INST_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INST_ESTA', '=', 'Activo') ->first([ 'INST_IDIS AS ID_INFO_STOCK' ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar la información del stock.', $th->getMessage(), 500); } noStockInfo: if (empty($infoStock) || is_null($infoStock)) { // Se obtiene el arreglo de las imagenes $imagesArr = json_decode($requestData['IMAGES'], true); // Se verifica que el arreglo contenga imagenes if(count($imagesArr) < 1){ DB::rollBack(); return $this->responseController->makeResponse(true, 'El arreglo de la galería de imágenes está vacío.', [], 400); } $imagesGallery = []; // Se iteran las imagenes foreach($imagesArr as $imageFile){ // Se verifica que tenga un formato correcto if(!array_key_exists('type', $imageFile)){ DB::rollBack(); return $this->responseController->makeResponse(true, 'El arreglo de la galería de imágenes tiene un formato inválido.', [], 400); // Si la imagen es nueva, entonces... }else if($imageFile['type'] == 'Nuevo'){ // Se obtiene el ID de la imagen $tempFileID = $this->encController->decrypt($imageFile['id']); // Se obtiene la información registrada en la tabla de archivos temporales $tempFile = DB::table('S002V01TARTE')->where([ ['ARTE_IDAR', '=', $tempFileID], ['ARTE_NULI', '=', $requestData['NUMERO_LINEA']] ])->first(); // La imagen es colocada en su posición final $finalFile = $this->documentManagementController->moveFinalFile($requestData['NUMERO_LINEA'], 'GEEQ', 'FO', $tempFile, $user); // Si ocurrió un error, entonces se manda el error if(!$finalFile[0]){ return $this->responseController->makeResponse(true, $finalFile[1], [], 400); } // La información es guardada en un arreglo $imagesGallery[] = $finalFile[1]; }else{ // Se desencripta el id de la imagen $fileID = $this->encController->decrypt($imageFile['id']); // Es guardada en un arreglo $imagesGallery[] = $fileID; } } // El arreglo de las imagenes es pasada en formato string $imagesGalleryStr = json_encode($imagesGallery); try { $idArtitle = isset($info) ? $info[0]['ID_ARTICULO'] : 0; $idInsert = DB::table('S002V01TINST')->insertGetId([ 'INST_NULI' => $requestData['NUMERO_LINEA'], 'INST_COFA' => $idFamily, 'INST_COSU' => $idSubfamily, 'INST_ARTI' => $idArtitle, 'INST_MODE' => $requestData['MODELO'], 'INST_COMO' => $requestData['CODIGO_MODELO'], 'INST_IMAG' => $imagesGalleryStr, 'INST_USRE' => $user, 'INST_FERE' => $currentDate, 'INST_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar la información del stock.', $th->getMessage(), 500); } if ($idInsert === false || is_null($idInsert)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo insertar la información del stock.', [], 500); } $idInfoStock = $idInsert; } else { $idInfoStock = $infoStock['ID_INFO_STOCK']; } if (is_null($idInfoStock)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo obtener el ID de la información del Stock.', [], 500); } for ($i=0; $i < $requestData['NUMBER_ITEMS']; $i++) { $dueDate = null; if (count($arrDueDate) > 0 && $uniqueDueDate === true) { $dueDate = $arrDueDate[0]; } else if (count($arrDueDate) > 0 && $uniqueDueDate === false) { $dueDate = $arrDueDate[$i]; } if (!is_null($dueDate) && str_contains($dueDate, 'T')) { $dueDate = explode('T', $dueDate)[0]; } try { $preCodificate = $this->encController->decrypt($requestData['PRE_CODIFICATE'][$i]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el identificador de la pre-codificación.', $th->getMessage(), 500); } if ($preCodificate === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo desencriptar el identificador de la pre-codificación.', [], 500); } try { $tiad = isset($info) ? 'Por pedido' : 'Sin Pedido'; $idun = isset($info) ? $info[$i]['ID_UNIDAD'] : 0; $nupr = isset($info) ? $info[$i]['NUMERO_PROVEEDOR'] : 0; $prad = isset($info) ? $info[$i]['PRECIO'] : 0; $como = isset($info) ? $info[$i]['CODIGO_MONEDA'] : 0; $idInsertStAr = DB::table('S002V01TSTAR')->insertGetId([ 'STAR_NULI' => $requestData['NUMERO_LINEA'], 'STAR_IDIS' => $idInfoStock, 'STAR_COBA' => $uniqueBarcode === true ? $arrBarcode[0] : $arrBarcode[$i], 'STAR_FEVE' => $dueDate, 'STAR_IDUN' => $idun, 'STAR_NUPR' => $nupr, 'STAR_TIAD' => $tiad, 'STAR_IDPC' => $preCodificate, 'STAR_CONS' => $requestData['CONSUMIBLE'] ? 'Si' : 'No', 'STAR_REPA' => $requestData['REPARABLE'] ? 'Si' : 'No', 'STAR_PRAD' => $prad, 'STAR_COMO' => $como, 'STAR_ESTA' => 'Pendiente', 'STAR_USRE' => $user, 'STAR_FERE' => $currentDate, 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar el equipamiento.', $th->getMessage(), 500); } if ($idInsertStAr === false || is_null($idInsertStAr)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo registrar el equipamiento.', [], 500); } try { $preCodeCodificate = $this->encController->decrypt($requestData['PRE_GENERATED_CODE']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el pre-código generado', $th->getMessage(), 500); } if ( $preCodeCodificate === false ) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo desencriptar el pre-código del equipamientos.', [], 500); } try { $validateInsertUbAr = DB::table('S002V01TUBAR')->insert([ 'UBAR_NULI' => $requestData['NUMERO_LINEA'], 'UBAR_COAL' => $idWarehouse, 'UBAR_COAR' => $idArea, 'UBAR_CONI' => $idLevel, 'UBAR_COZO' => $idZone, 'UBAR_IDST' => $idInsertStAr, 'UBAR_COUB' => $preCodeCodificate, 'UBAR_ESTA' => 'Pendiente', 'UBAR_USRE' => $user, 'UBAR_FERE' => $currentDate, 'UBAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar la ubicación del artículo.', $th->getMessage(), 500); } if ( $validateInsertUbAr === false ) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo registrar la ubicación del artículo.', [], 500); } try { $idas = isset($info) ? $info[$i]['NUMERO_SELECCIONADO'] : 0; $idar = isset($info) ? $info[$i]['ID_ARTICULO'] : 0; $nupr = isset($info) ? $info[$i]['NUMERO_PROVEEDOR'] : 0; $idli = array_key_exists('ID_LINEA_SOLICITUD', $orden) ? $orden['ID_LINEA_SOLICITUD'] : 0; $validateUpdateArSe = DB::table('S002V01TARSE') ->where('ARSE_IDAS', '=', $idas) ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ARSE_IDLI', '=', $idli) ->where('ARSE_IDAR', '=', $idar) ->where('ARSE_NUPR', '=', $nupr) ->where('ARSE_IDIN', '=', $requestData['ID_INFORMATION']) ->where('ARSE_ESTA', '=', 'Activo') ->update([ 'ARSE_ESTA' => 'Guardado', 'ARSE_USMO' => $user, 'ARSE_FEMO' => $currentDate, 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el artículo seleccionado.', $th->getMessage(), 500); } if ($validateUpdateArSe === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo modificar el artículo seleccionado.', [], 500); } } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } // FUNCIÓN INTERCAMBIO DE ARTICULOS ENTRE ALMACENES public function getCurrentLocationArtitles($user, $line) { try { $arrStockArtitle = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->orderBy('ID_STOCK', 'DESC') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_IDIS AS ID_INFORMACION_STOCK', 'FAMI_COFA AS CODIGO_FAMILIA', 'FAMI_NOFA AS NOMBRE_FAMILIA', 'SUBF_COSU AS CODIGO_SUBFAMILIA', 'SUBF_NOSU AS NOMBRE_SUBFAMILIA', 'INST_ARTI AS ARTITULO', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_IMAG AS IMAGENES', 'UBAR_COUB AS CODIGO', DB::raw('CONCAT(ALMA_NOAL, " (", ALMA_COAL, ")") AS NOMBRE_ALMACEN'), DB::raw('CONCAT(AREA_NOAR, " (", AREA_COAR, ")") AS NOMBRE_AREA'), DB::raw('CONCAT(NIVE_NONI, " (", NIVE_CONI, ")") AS NOMBRE_NIVEL'), DB::raw('CONCAT(ZONA_NOZO, " (", ZONA_COZO, ")") AS NOMBRE_ZONA'), ]); $arrStockArtitle = json_decode(json_encode($arrStockArtitle), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStockArtitle as $key => $stockArtitle) { $imagesGallery = []; $arrImages = json_decode($stockArtitle['IMAGENES']); foreach($arrImages as $image) { $imageCodeEnc = $this->encController->encrypt($image); $response = $this->documentManagementController->privateGetPublicDocumentURL( $imageCodeEnc, $user, $line ); if($response['error']){ return $this->responseController->makeresponse(true, $response['msg'], [], 500); } $imagesGallery[] = $response['response']['public_uri']; } $stockArtitle['IMAGENES'] = $imagesGallery; $arrStockArtitle[$key] = $stockArtitle; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStockArtitle); } // FUNCIÓN PARA JOSÉ LUIS public function getInfoStock($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStockArtitle = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'STAR_CONS AS CONSUMIBLE', 'STAR_REPA AS REPARABLE', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStockArtitle); } public function moveToStock(Request $request, string $idStock ) { $validator = Validator::make($request->all(), [ 'ALMACEN' => 'required|string', 'AREA' => 'required|string', 'NIVEL' => 'required|string', 'ZONA' => 'required|string', 'FAMILIA' => 'required|string', 'SUBFAMILIA' => 'required|string', 'LINEA' => 'required|string', 'TIPO' => 'required|string', 'MODELO' => 'required|string', 'ID_EQUIPMENTO' => 'required|string', 'STATUS' => 'required|string', 'CODIGO_EQUIPAMIENTO' => 'required|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrInfoRegistro = array(); $arrToWorkflow = array(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; // Se obtiene el identificador del stock $idStock = $this->encController->decrypt($idStock); if ($idStock === false) { return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el stock.', [], 406); } // Se obtiene el valor del almacen $requestData['ALMACEN'] = $this->encController->decrypt($requestData['ALMACEN']); if ($requestData['ALMACEN'] === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del almacen.', [], 406); } // Se obtiene el valor del area $requestData['AREA'] = $this->encController->decrypt($requestData['AREA']); if ($requestData['AREA'] === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del área.', [], 406); } // Se obtiene el valor del nivel $requestData['NIVEL'] = $this->encController->decrypt($requestData['NIVEL']); if ($requestData['NIVEL'] === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del nivel.', [], 406); } // Se obtiene el valor de la zona $requestData['ZONA'] = $this->encController->decrypt($requestData['ZONA']); if ($requestData['ZONA'] === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID de la zona.', [], 406); } // Se verifica el código del artículo que sea válido $codeVerified = $this->verifyPreCode($requestData); if ($codeVerified !== $requestData['CODIGO_EQUIPAMIENTO']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El código generado no coincide con el código verificado a partir de la información del formulario.', [], 406); } // Se verifica que el código no sea el mismo que el anterior if ($requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'] === $requestData['CODIGO_EQUIPAMIENTO']) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Los códigos no deben ser los mismos.', [], 406); } // Se verifica que la información del almacen exista try { $validateWarehouse = DB::table('S002V01TALMA') ->where('ALMA_COAL', '=', $requestData['ALMACEN']) ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el almacen existe.', $th->getMessage(), 500); } if ($validateWarehouse === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El almacen no existe.', [], 500); } // Se verifica que la informacion del área exista try { $validateArea = DB::table('S002V01TAREA') ->where('AREA_COAL', '=', $requestData['ALMACEN']) ->where('AREA_COAR', '=', $requestData['AREA']) ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el área existe.', $th->getMessage(), 500); } if ($validateArea === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El área no existe.', [], 500); } // Se verifica que la información del nivel exista try { $validateLevel = DB::table('S002V01TNIVE') ->where('NIVE_COAL', '=', $requestData['ALMACEN']) ->where('NIVE_COAR', '=', $requestData['AREA']) ->where('NIVE_CONI', '=', $requestData['NIVEL']) ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el nivel existe.', $th->getMessage(), 500); } if ($validateLevel === false) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El nivel no existe.', [], 500); } // Se verifica que la información de la zona try { $validateZone = DB::table('S002V01TZONA') ->where('ZONA_COAL', '=', $requestData['ALMACEN']) ->where('ZONA_COAR', '=', $requestData['AREA']) ->where('ZONA_CONI', '=', $requestData['NIVEL']) ->where('ZONA_COZO', '=', $requestData['ZONA']) ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA']) ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la zona existe.', $th->getMessage(), 500); } if ($validateZone === false) { return $this->responseController->makeResponse(true, 'La zona no existe.', [], 500); } $arrToWorkflow[] = [ 'ANTERIOR_CODIGO_EQUIPAMIENTO' => $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'], 'NUEVO_CODIGO_EQUIPAMIENTO' => $requestData['CODIGO_EQUIPAMIENTO'], 'ALMACEN' => $requestData['ALMACEN'], 'AREA' => $requestData['AREA'], 'NIVEL' => $requestData['NIVEL'], 'ZONA' => $requestData['ZONA'], ]; $strToWorkflow = json_encode($arrToWorkflow); $encToWorkflow = $this->encController->encrypt($strToWorkflow); $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TUBAR') ->where('UBAR_IDST', '=', $idStock) ->where('UBAR_COUB', '=', $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO']) ->where('UBAR_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->update([ 'UBAR_ESTA' => 'Obsoleto', 'UBAR_USMO' => $user, 'UBAR_FEMO' => $currentDate, 'UBAR_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el estado actual del código del stock.', $th->getMessage(), 406); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo modificar el estado actual del código del stock.', [], 406); } try { $idUbication = DB::table('S002V01TUBAR')->insertGetId([ 'UBAR_NULI' => $requestData['NUMERO_LINEA'], 'UBAR_COAL' => $requestData['ALMACEN'], 'UBAR_COAR' => $requestData['AREA'], 'UBAR_CONI' => $requestData['NIVEL'], 'UBAR_COZO' => $requestData['ZONA'], 'UBAR_IDST' => $idStock, 'UBAR_COUB' => $requestData['CODIGO_EQUIPAMIENTO'], 'UBAR_ESTA' => 'Workflow', 'UBAR_USRE' => $user, 'UBAR_FERE' => $currentDate, 'UBAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar la nueva ubicación del artículo.', $th->getMessage(), 406); } if (!$idUbication) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo insertar la nueva ubicación del artículo.', [], 406); } $arrInfoRegistro['S002V01TUBAR'][] = [ 'UBAR_IDUB' => $idUbication, 'UBAR_IDST' => $idStock, 'UBAR_COUB' => $requestData['CODIGO_EQUIPAMIENTO'], ]; try { $equipment = (array) DB::table('S002V01TEQUI') ->where('EQUI_COEQ', '=', $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO']) ->where('EQUI_NULI', '=', $requestData['NUMERO_LINEA']) ->first(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del artículo.', $th->getMessage(), 406); } if (is_null($equipment) || empty($equipment)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se se pudo obtener la información del equipamiento.', [], 406); } $strHistorial = $equipment['EQUI_HICO']; $arrHistorial = json_decode($strHistorial, true); $arrHistorial[] = [ "FECHA" => $currentDate, "PADRE" => null, "CODIGO" => $requestData['CODIGO_EQUIPAMIENTO'], ]; $strHistorial = json_encode($arrHistorial); try { $validateUpdate = DB::table('S002V01TEQUI') ->where('EQUI_COEQ', '=', $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO']) ->where('EQUI_NULI', '=', $requestData['NUMERO_LINEA']) ->update([ 'EQUI_COEQ' => $requestData['CODIGO_EQUIPAMIENTO'], 'EQUI_ALMA' => $requestData['ALMACEN'], 'EQUI_AREA' => $requestData['AREA'], 'EQUI_NIVE' => $requestData['NIVEL'], 'EQUI_ZONA' => $requestData['ZONA'], 'EQUI_HICO' => $strHistorial, 'EQUI_USMO' => $user, 'EQUI_FEMO' => $currentDate, 'EQUI_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el equipamiento.', $th->getMessage(), 406); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo modificar el equipamiento.', [], 406); } try { $existsEquipmentWorkflow = DB::table('S002V01TEQWO') ->where('EQWO_COEQ', '=', $requestData['CODIGO_EQUIPAMIENTO']) ->where('EQWO_NULI', '=', $requestData['NUMERO_LINEA']) ->where('EQWO_ESTA', '=', 'En Workflow') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el estado del equipamiento.', $th->getMessage(), 406); } if ( !$existsEquipmentWorkflow ) { try { $idEquipmentWorkflow = DB::table('S002V01TEQWO')->insertGetId([ 'EQWO_NULI' => $requestData['NUMERO_LINEA'], 'EQWO_COEQ' => $requestData['CODIGO_EQUIPAMIENTO'], 'EQWO_ESTA' => 'En Workflow', 'EQWO_USRE' => $user, 'EQWO_FERE' => $currentDate, 'EQWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar el equipamiento en el workflow.', $th->getMessage(), 406); } if (!$idEquipmentWorkflow) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo registrar el equipamiento en el workflow.', [], 406); } $arrInfoRegistro['S002V01TEQWO'][] = [ 'EQWO_IDEW' => $idEquipmentWorkflow, 'EQWO_COEQ' => $requestData['CODIGO_EQUIPAMIENTO'], ]; } else { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo hacer el intercambio si el equipamiento se encuentra en proceso de validación.', [], 406); } $strInfoRegistro = json_encode($arrInfoRegistro); $encInfoRegistro = $this->encController->encrypt($strInfoRegistro); /* TABLA: S002V01TPRWO [ { "TABLA": "S002V01TEQWO", "CAMPO_ESTADO": "EQWO_ESTA", "NUMERO_LINEA": "EQWO_NULI", "CAMBIO_ESTADO": "Finalizado", "FECHA_MODIFICA": "EQWO_FEMO", "FECHA_REGISTRA": "EQWO_FERE", "USUARIO_MODIFICA": "EQWO_USMO", "USUARIO_REGISTRA": "EQWO_USRE" }, { "TABLA": "S002V01TUBAR", "CAMPO_ESTADO": "UBAR_ESTA", "NUMERO_LINEA": "UBAR_NULI", "CAMBIO_ESTADO": "Activo", "FECHA_MODIFICA": "UBAR_FEMO", "FECHA_REGISTRA": "UBAR_FERE", "USUARIO_MODIFICA": "UBAR_USMO", "USUARIO_REGISTRA": "UBAR_USRE" } ] */ $arrResponseRequestWorkflow = $this->processManagementController->registerRequestWorkflow(2, $encToWorkflow, $encInfoRegistro, $user, $requestData['NUMERO_LINEA']); if ($arrResponseRequestWorkflow['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseRequestWorkflow['msg'], $arrResponseRequestWorkflow['response'], 500); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } private function verifyPreCode(array $parameters) { $siteTag = ''; $site = ['LINEA', 'AREA', 'NIVEL']; foreach($site as $ctrl){ $val = $parameters[$ctrl]; if($ctrl == 'LINE'){ $val = intval($val) < 10 ? "0$val" : "$val"; } $siteTag .= $val.'.'; } $siteTag = substr($siteTag, 0, -1); $areaTag = ''; $area = ['ALMACEN', 'ZONA']; foreach($area as $ctrl){ $val = $parameters[$ctrl]; $areaTag .= $val.'.'; } $areaTag = substr($areaTag, 0, -1); $technicalSpecificationTag = ''; $technicalSpecification = ['FAMILIA', 'SUBFAMILIA', 'STATUS']; foreach($technicalSpecification as $ctrl){ $val = $parameters[$ctrl]; $technicalSpecificationTag .= $val.'.'; } $technicalSpecificationTag = substr($technicalSpecificationTag, 0, -1); $equipmentIdentifierTag = ''; $equipmentIdentifier = ['TIPO', 'MODELO', 'ID_EQUIPMENTO']; foreach($equipmentIdentifier as $ctrl){ $val = $parameters[$ctrl]; if($ctrl == 'MODELO'){ $val = $this->processElement($val, 'model'); }else if($ctrl == 'TIPO'){ $val = $this->processElement($val, 'element'); } $equipmentIdentifierTag .= $val.'-'; } $equipmentIdentifierTag = substr($equipmentIdentifierTag, 0, -1); $code = $siteTag.'-'.$areaTag.'_'.$technicalSpecificationTag.'.'.$equipmentIdentifierTag; return $code; } private function processElement(string $value, string $type) : string { $value = strtoupper($value); $validVal0 = $this->functionsController->unaccent($value); $CONNECTORS = ['DE', 'PARA', 'Y', 'O', 'DEL', 'EL', 'LA', 'LOS', 'POR', 'EN']; $valueArr1 = explode(' ', $validVal0); $validVal1 = []; foreach($valueArr1 as $word){ if(!in_array($word, $CONNECTORS)){ $validVal1[] = $word; } } $validLength = count($validVal1); $validVal2 = ""; if($validLength < 1){ return "ERROR"; }else if($validLength == 1){ if(strlen($validVal1[0]) < 5){ $validVal2 = $validVal1[0]; for($i = strlen($validVal1[0]); $i < 5; $i++){ if($type == 'model'){ $validVal2 = "X$validVal2"; }else{ $validVal2 = $validVal2 . "X"; } } }else{ $validVal2 = substr($validVal1[0], 0, 5); } }else if($validLength == 2){ $word1 = ""; if(strlen($validVal1[0]) < 2){ if($type == 'model'){ $word1 = "X$validVal1[0]"; }else{ $word1 = $validVal1[0] . "X"; } }else{ $word1 = substr($validVal1[0], 0, 2); } $word2 = ""; if(strlen($validVal1[1]) < 3){ $word2 = $validVal1[1]; for($i = strlen($validVal1[1]); $i < 3; $i++){ if($type == 'model'){ $word2 = "X$word2"; }else{ $word2 = $word2 . "X"; } } }else{ $word2 = substr($validVal1[1], 0, 3); } $validVal2 = $word1 . $word2; }else if($validLength == 3){ $word1 = ""; if(strlen($validVal1[0]) < 2){ if($type == 'model'){ $word1 = "X$validVal1[0]"; }else{ $word1 = $validVal1[0] . "X"; } }else{ $word1 = substr($validVal1[0], 0, 2); } $word2 = substr($validVal1[1], 0, 1); $word3 = ""; if(strlen($validVal1[2]) < 2){ if($type == 'model'){ $word3 = "X$validVal1[2]"; }else{ $word3 = $validVal1[2] . "X"; } }else{ $word3 = substr($validVal1[2], 0, 2); } $validVal2 = $word1 . $word2 . $word3; }else if($validLength == 4){ $word1 = ""; if(strlen($validVal1[0]) < 2){ if($type == 'model'){ $word1 = "X$validVal1[0]"; }else{ $word1 = $validVal1[0] . "X"; } }else{ $word1 = substr($validVal1[0], 0, 2); } $word2 = substr($validVal1[1], 0, 1); $word3 = substr($validVal1[2], 0, 1); $word4 = substr($validVal1[3], 0, 1); $validVal2 = $word1 . $word2 . $word3 . $word4; }else if($validLength >= 5){ $word1 = substr($validVal1[0], 0, 1); $word2 = substr($validVal1[1], 0, 1); $word3 = substr($validVal1[2], 0, 1); $word4 = substr($validVal1[3], 0, 1); $word5 = substr($validVal1[4], 0, 1); $validVal2 = $word1 . $word2 . $word3 . $word4 . $word5; }else{ return "ERROR"; } return $validVal2; } public function getLocationStock($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrLocation = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->whereOr('UBAR_ESTA', '=', 'Otro') ->get([ DB::raw("CONCAT('#', UBAR_IDST) AS ID_STOCK"), DB::raw("CONCAT('#', UBAR_IDUB) AS ID_UBICACION "), 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'UBAR_ESTA AS ESTADO', 'UBAR_USRE AS USUARIO_REGISTRA', 'UBAR_FERE AS FECHA_REGISTRA', 'UBAR_USMO AS USUARIO_MODIFICA', 'UBAR_FEMO AS FECHA_MODIFICA', ]); $arrLocation = json_decode(json_encode($arrLocation), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el emplazamiento del stock.', $th->getMessage(), 500); } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrLocation, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrLocation = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLocation); } public function getLocationByStock($idStock, $user, $line) { $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrLocation = DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_IDST', '=', $idStock) ->orderBy('UBAR_IDUB', 'DESC') ->get([ DB::raw("CONCAT('#', UBAR_IDUB) AS ID_UBICACION "), 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'UBAR_ESTA AS ESTADO', 'UBAR_USRE AS USUARIO_REGISTRA', 'UBAR_FERE AS FECHA_REGISTRA', 'UBAR_USMO AS USUARIO_MODIFICA', 'UBAR_FEMO AS FECHA_MODIFICA', ]); $arrLocation = json_decode(json_encode($arrLocation), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el emplazamiento del stock.', $th->getMessage(), 500); } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrLocation, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrLocation = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLocation); } public function getDetaisLocation($idStock, $idLocation, $user, $line) { $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401); } $idLocation = $this->encController->decrypt($idLocation); if (is_null($idLocation)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la ubicación.', [], 401); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrLocation = (array) DB::table('S002V01TUBAR') ->where('UBAR_NULI', '=', $line) ->where('UBAR_IDST', '=', $idStock) ->where('UBAR_IDUB', '=', $idLocation) ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->first([ 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', DB::raw('CONCAT(ALMA_NOAL, " (", ALMA_COAL, ")") AS ALMACEN'), DB::raw('CONCAT(AREA_NOAR, " (", AREA_COAL, ")") AS AREA'), DB::raw('CONCAT(NIVE_NONI, " (", NIVE_CONI, ")") AS NIVEL'), DB::raw('CONCAT(ZONA_NOZO, " (", ZONA_COZO, ")") AS ZONA'), 'UBAR_ESTA AS ESTADO', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el emplazamiento del stock.', $th->getMessage(), 500); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLocation); } public function search(Request $request) { $validator = Validator::make($request->all(), [ 'ID_STOCK' => 'nullable|string', 'CODIGO_EQUIPAMIENTO' => 'nullable|string', 'ID_UBICACION' => 'nullable|string', 'FAMILIA' => 'nullable|string', 'SUBFAMILIA' => 'nullable|string', 'MODELO' => 'nullable|string', 'CODIGO_MODELO' => 'nullable|string', 'ALMACEN' => 'nullable|string', 'AREA' => 'nullable|string', 'NIVEL' => 'nullable|string', 'ZONA' => 'nullable|string', 'TIPO_ADQUISICION' => 'nullable|string', 'NUMERO_PROVEEDOR' => 'nullable|string', 'CODIGO_BARRAS' => 'nullable|string', 'FECHA_VENCIMIENTO' => 'nullable|string', 'TASA_ROTACION' => 'nullable|string', 'STOCK_MINIMO' => 'nullable|string', 'STOCK_MAXIMO' => 'nullable|string', 'ESTADO' => 'nullable|string', 'CONSUMIBLE' => 'nullable|string', 'REPARABLE' => 'nullable|string', 'USUARIO' => 'nullable|string', 'NUMERO_LINEA' => 'nullable|string', ]); if ($validator->fails()) { return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrClausules = [ 'FAMILIA' => 'INST_COFA', 'SUBFAMILIA' => 'INST_COSU', 'MODELO' => 'INST_MODE', 'CODIGO_MODELO' => 'INST_COMO', 'STOCK_MINIMO' => 'INST_STMI', 'STOCK_MAXIMO' => 'INST_STMA', 'ID_STOCK' => 'STAR_IDST', 'CODIGO_BARRAS' => 'STAR_COBA', 'FECHA_VENCIMIENTO' => 'STAR_FEVE', 'NUMERO_PROVEEDOR' => 'STAR_NUPR', 'TIPO_ADQUISICION' => 'STAR_TIAD', 'CONSUMIBLE' => 'STAR_CONS', 'REPARABLE' => 'STAR_REPA', 'ESTADO' => 'STAR_ESTA', 'ID_UBICACION' => 'UBAR_IDUB', 'ALMACEN' => 'UBAR_COAL', 'AREA' => 'UBAR_COAR', 'NIVEL' => 'UBAR_CONI', 'ZONA' => 'UBAR_COZO', 'CODIGO_EQUIPAMIENTO' => 'UBAR_COUB', ]; $arrWhere = array(); foreach ($requestData as $key => $value) { if (!is_null($value) && $key !== 'USUARIO' && $key !== 'NUMERO_LINEA') { $column = $arrClausules[$key]; $arrWhere[$column] = $value; } } if (empty($arrWhere)) { return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", []); } try { $arrInfo = DB::table('S002V01TSTAR') ->where($arrWhere) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INST_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_IMAG AS IMAGENES', 'UBAR_COUB AS CODIGO', ]); $arrInfo = json_decode(json_encode($arrInfo), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500); } foreach ($arrInfo as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrInfo[$key]['IMAGENES'] = $arrUrlImage; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInfo); } public function getInfoByStock($idStock, $user, $line) { $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrInfo = (array) DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $line) ->where('INST_NULI', '=', $line) ->where('UBAR_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->first([ DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'), DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'), 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'STAR_IDST AS ID_STOCK', 'STAR_COBA AS CODIGO_BARRAS', 'STAR_FEVE AS FECHA_VENCIMIENTO', DB::raw('CONCAT(PROV_NOCO, " (", PROV_NUPR, ")") AS NUMERO_PROVEEDOR'), 'STAR_TIAD AS TIPO_ADQUISICION', 'STAR_CONS AS CONSUMIBLE', 'STAR_REPA AS REPARABLE', 'STAR_ESTA AS ESTADO', 'UBAR_IDUB AS ID_UBICACION', DB::raw('CONCAT(ALMA_NOAL, " (", ALMA_COAL, ")") AS ALMACEN'), DB::raw('CONCAT(AREA_NOAR, " (", AREA_COAR, ")") AS AREA'), DB::raw('CONCAT(NIVE_NONI, " (", NIVE_CONI, ")") AS NIVEL'), DB::raw('CONCAT(ZONA_NOZO, " (", ZONA_COZO, ")") AS ZONA'), 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', ]); $arrInfo = json_decode(json_encode($arrInfo), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500); } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInfo); } public function getMaxMinStock($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrInfoStock = DB::table('S002V01TINST') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->get([ 'INST_IDIS AS ID_INFORMACION_STOCK', DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'), DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'), 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'INST_IMAG AS IMAGENES', ]); $arrInfoStock = json_decode(json_encode($arrInfoStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrInfoStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrInfoStock[$key]['IMAGENES'] = $arrUrlImage; try { $countStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_IDIS', '=', $info['ID_INFORMACION_STOCK']) ->where('STAR_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } $arrInfoStock[$key]['CANTIDAD_ACTUAL'] = $countStock; $stateStock = ''; if ($countStock < $info['STOCK_MINIMO'] && !is_null($info['STOCK_MINIMO'])) { $stateStock = 'Menor al Stock Requerido'; } else if ($countStock > $info['STOCK_MAXIMO'] && !is_null($info['STOCK_MAXIMO'])) { $stateStock = 'Exedente al Stock Requerido'; } else if (is_null($info['STOCK_MINIMO']) && is_null($info['STOCK_MAXIMO'])) { $stateStock = 'No aplica'; } else { $stateStock = 'Stock Normal'; } if (is_null($info['STOCK_MINIMO'])) { $arrInfoStock[$key]['STOCK_MINIMO'] = 'Sin Definir'; } if (is_null($info['STOCK_MAXIMO'])) { $arrInfoStock[$key]['STOCK_MAXIMO'] = 'Sin Definir'; } $arrInfoStock[$key]['ESTADO'] = $stateStock; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInfoStock); } public function updateStockMaxMin(Request $request, $idInfo) { $validator = Validator::make($request->all(), [ 'STOCK_MINIMO' => 'required|integer', 'STOCK_MAXIMO' => 'required|integer', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $idInfo = $this->encController->decrypt($idInfo); if (is_null($idInfo)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $validateExist = DB::table('S002V01TINST') ->where('INST_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INST_IDIS', '=', $idInfo) ->where('INST_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si existe el artículo.', $th->getMessage(), 500); } if (!$validateExist) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El artículo no existe.', [], 401); } try { $stockMin = intval($requestData['STOCK_MINIMO']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error con el formato del stock mínimo.', $th->getMessage(), 500); } try { $stockMax = intval($requestData['STOCK_MAXIMO']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error con el formato del stock mínimo.', $th->getMessage(), 500); } if ($stockMin < 0) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La cantidad del stock mínimo no debe ser menor a 0.', [], 401); } if ($stockMax < 0) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La cantidad del stock máximo no debe ser menos a 0.', [], 401); } if ($stockMin > $stockMax) { DB::rollBack(); return $this->responseController->makeResponse(true, 'La cantidad del stock mínimo no debe ser mayos al stock máximo.', [], 401); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TINST') ->where('INST_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INST_IDIS', '=', $idInfo) ->where('INST_ESTA', '=', 'Activo') ->update([ 'INST_STMI' => $stockMin, 'INST_STMA' => $stockMax, 'INST_USMO' => $user, 'INST_FEMO' => $currentDate, 'INST_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el stock mínimo y máximo.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo modificar el stock mínimo y máximo.', [], 401); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa"); } public function getStockBarcode($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'STAR_COBA AS CODIGO_BARRA', 'INST_IMAG AS IMAGENES', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock); } public function updateStockBarcode(Request $request, $idStock) { $validator = Validator::make($request->all(), [ 'BARCODE' => 'required|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $validateExists = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500); } if (!$validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->update([ 'STAR_COBA' => $requestData['BARCODE'], 'STAR_USMO' => $user, 'STAR_FEMO' => $currentDate, 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error modificar el código de barra.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo modificar el código de barra.', [], 500); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa"); } public function getStockDueDate($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'STAR_FEVE AS FECHA_VENCIMIENTO', 'INST_IMAG AS IMAGENES', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; if (is_null($info['FECHA_VENCIMIENTO'])) { $arrStock[$key]['FECHA_VENCIMIENTO'] = 'Ninguno'; } } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock); } public function updateDueDateStock(Request $request, $idStock) { $validator = Validator::make($request->all(), [ 'FECHA_VENCIMIENTO' => 'required|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $validateExists = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500); } if (!$validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateUpdate = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->update([ 'STAR_FEVE' => $requestData['FECHA_VENCIMIENTO'], 'STAR_USMO' => $user, 'STAR_FEMO' => $currentDate, 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error modificar la fecha de vencimiento.', $th->getMessage(), 500); } if (!$validateUpdate) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo modificar la fecha de vencimiento.', [], 500); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa"); } public function getDescriptionSheetStock($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'FAMI_NOFA AS FAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'INST_IMAG AS IMAGENES', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock); } public function createDescriptionSheetStockXLS($idStock, $user, $line) { $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $arrStock = (array) DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $line) ->where('INST_NULI', '=', $line) ->where('UBAR_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_ESTA', '=', 'Activo') ->where('STAR_ESTA', '=', 'Activo') ->leftJoin('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->leftJoin('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->leftJoin('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->leftJoin('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->leftJoin('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->leftJoin('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->leftJoin('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->leftJoin('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->leftJoin('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->first([ 'FAMI_COFA AS CODIGO_FAMILIA', 'FAMI_NOFA AS FAMILIA', 'SUBF_COSU AS CODIGO_SUBFAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'STAR_IDST AS ID_STOCK', 'STAR_COBA AS CODIGO_BARRAS', 'STAR_FEVE AS FECHA_VENCIMIENTO', 'STAR_NUPR AS NUMERO_PROVEEDOR', 'PROV_NOCO AS PROVEEDOR', 'STAR_TIAD AS TIPO_ADQUISICION', 'STAR_CONS AS CONSUMIBLE', 'STAR_REPA AS REPARABLE', 'STAR_ESTA AS ESTADO', 'UBAR_IDUB AS ID_UBICACION', 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'AREA_COAR AS CODIGO_AREA', 'AREA_NOAR AS NOMBRE_AREA', 'NIVE_CONI AS CODIGO_NIVEL', 'NIVE_NONI AS NOMBRE_NIVEL', 'ZONA_COZO AS CODIGO_ZONA', 'ZONA_NOZO AS NOMBRE_ZONA', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500); } if (empty($arrStock) === 0) { return $this->responseController->makeResponse(true, "No se encontró información del stock.", [], 500); } $spreadsheet = new Spreadsheet(); $activeWorksheet = $spreadsheet->getActiveSheet()->setTitle($arrStock['ID_STOCK']); $cell = 1; $activeWorksheet->setCellValue("A$cell", 'Código del Equipamiento'); $activeWorksheet->setCellValue("B$cell", $arrStock['CODIGO_EQUIPAMIENTO']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", 'Familia'); $activeWorksheet->setCellValue("B$cell", $arrStock['FAMILIA'].' ('.$arrStock['CODIGO_FAMILIA'].')'); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", 'Subfamilia'); $activeWorksheet->setCellValue("B$cell", $arrStock['SUBFAMILIA'].' ('.$arrStock['CODIGO_SUBFAMILIA'].')'); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", 'Modelo'); $activeWorksheet->setCellValue("B$cell", $arrStock['MODELO']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", 'Código Modelo'); $activeWorksheet->setCellValue("B$cell", $arrStock['CODIGO_MODELO']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", 'Tipo de Adquisición'); $activeWorksheet->setCellValue("B$cell", $arrStock['TIPO_ADQUISICION']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; if (!is_null($arrStock['NUMERO_PROVEEDOR'])) { $activeWorksheet->setCellValue("A$cell", 'Proveedor'); $activeWorksheet->setCellValue("B$cell", $arrStock['PROVEEDOR'].' ('.$arrStock['NUMERO_PROVEEDOR'].')'); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; } if (!is_null($arrStock['FECHA_VENCIMIENTO'])) { $activeWorksheet->setCellValue("A$cell", 'Fecha de Vencimiento'); $activeWorksheet->setCellValue("B$cell", $arrStock['FECHA_VENCIMIENTO']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; } $activeWorksheet->setCellValue("A$cell", 'Código de Barras'); $activeWorksheet->setCellValue("B$cell", $arrStock['CODIGO_BARRAS']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; if ( array_key_exists('TASA_ROTACION', $arrStock) ) { $activeWorksheet->setCellValue("A$cell", 'Tasa de Rotación'); $activeWorksheet->setCellValue("B$cell", $arrStock['TASA_ROTACION']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; } $activeWorksheet->setCellValue("A$cell", 'Stock Mínimo'); $activeWorksheet->setCellValue("B$cell", is_null($arrStock['STOCK_MINIMO']) ? 'Sin Definir' : $arrStock['STOCK_MINIMO']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", 'Stock Máximo'); $activeWorksheet->setCellValue("B$cell", is_null($arrStock['STOCK_MAXIMO']) ? 'Sin Definir' : $arrStock['STOCK_MAXIMO']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", '¿Es consumible?'); $activeWorksheet->setCellValue("B$cell", $arrStock['CONSUMIBLE']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->setCellValue("A$cell", '¿Es reparable?'); $activeWorksheet->setCellValue("B$cell", $arrStock['REPARABLE']); $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true); $cell++; $activeWorksheet->getColumnDimension("A")->setAutoSize(true); $activeWorksheet->getColumnDimension("B")->setAutoSize(true); $nuli = $this->resourcesController->formatSecuence($line, 2); $como = 'GIST'; // Código del módulo $cldo = 'IN'; // Código de la clasificación $fecr = date('ymd'); // Fecha en la se carga el archivo try { $arrSecuence = (array) DB::table('S002V01TAFAL') ->where('AFAL_COMO', '=', $como) ->where('AFAL_CLDO', '=', $cldo) ->where('AFAL_NULI', '=', $line) ->orderBy('AFAL_NUSE', 'desc') ->first([ 'AFAL_NUSE' ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET020: Ocurrió un error al obtener la información de la secuencia.", $th->getMessage(), 500 ); } $nuse = 1; // Secuencia del documento if ( !empty( $arrSecuence ) && !is_null( $arrSecuence ) ) { $nuse = intval( $arrSecuence['AFAL_NUSE'] ) + 1; } $nuse = $this->resourcesController->formatSecuence($nuse, 6); $nuve = $this->resourcesController->formatSecuence('1', 2); $noar = 'ficha_de_stock_'.$arrStock['ID_STOCK']; $exte = 'xlsx'; if ($_SERVER['SERVER_NAME'] === '192.168.100.105') { $filePath = $this->resourcesController->pathService.'\\public\\public_files\\'; // API JEAN } else { $filePath = $this->resourcesController->pathService.'\\public_files\\'; // API QA } $fileName = $nuli.'-'.$como.'-'.$cldo.'-'.$fecr.'-'.$nuse.'='.$nuve.'='.$noar.'.'.$exte; $tempFile = $filePath.$fileName; if ( file_exists( $tempFile ) ) { if ( !unlink( $tempFile ) ) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET021: Ocurrió un error al eliminar el siguiente archivo: " . $tempFile, [], 500 ); } } try { $writer = new Xlsx($spreadsheet); ob_start(); $writer->save('php://output'); $base64 = base64_encode(ob_get_clean()); $validate = \File::put( $tempFile, base64_decode($base64)); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET022: Ocurrió un error al guardar el documento.", $th->getMessage(), 500 ); } $ubic = Storage::putFile('files', new File($tempFile)); $ubic = str_replace("/", "\\", $ubic); if ($_SERVER['SERVER_NAME'] === '192.168.100.105') { $ubic = $this->resourcesController->pathService."\\storage\\app\\" . $ubic; } else { $ubic = $this->resourcesController->pathService."\\storage\\app\\" . $ubic; } $tama = filesize($ubic); $usac = json_encode([$user]); $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TAFAL')->insert([ 'AFAL_NULI' => $line, 'AFAL_COMO' => $como, 'AFAL_CLDO' => $cldo, 'AFAL_FECR' => $fecr, 'AFAL_NUSE' => $nuse, 'AFAL_NUVE' => $nuve, 'AFAL_NOAR' => $noar, 'AFAL_EXTE' => $exte, 'AFAL_TAMA' => $tama, 'AFAL_UBIC' => $ubic, 'AFAL_USAC' => $usac, 'AFAL_USRE' => $user, 'AFAL_FERE' => $currentDate, ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET023: Ocurrió un error guardar los datos a la tabla final de archivos.", $th->getMessage(), 500 ); } if ( !$validateInsert ) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET024: No se pudo guardar la ficha del proveedor en la base de datos.", [], 500 ); } $encCode = $this->encController->encrypt($fileName); try { $validateInsert = DB::table('S002V01TDOST')->insert([ 'DOST_NULI' => $line, 'DOST_IDST' => $idStock, 'DOST_NODO' => 'Ficha de Stock #'.$arrStock['ID_STOCK'], 'DOST_CODO' => $encCode, 'DOST_EXTE' => $exte, 'DOST_TAMA' => $tama, 'DOST_CLAS' => 'IN', 'DOST_VERS' => 1, 'DOST_USRE' => $user, 'DOST_FERE' => $currentDate, 'DOST_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "Ocurrió un error guardar los datos a la tabla final de archivos.", $th->getMessage(), 500 ); } if (!$validateInsert) { return $this->responseController->makeResponse( true, "No se pudo guardar la ficha del proveedor en la base de datos.", [], 500 ); } if ($_SERVER['SERVER_NAME'] === '192.168.100.105') { $urlPublic = 'http://192.168.100.105:8000/public_files/' . $fileName; } else { $urlPublic = $this->functionsController->getApiURI().'sam/public_files/' . $fileName; } return $this->responseController->makeResponse(false, "EXITO: Modificación Exitosa", [ 'url' => $urlPublic ]); } public function createDescriptionSheetStockPDF($idStock, $user, $line) { $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401); } $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $arrStock = (array) DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $line) ->where('INST_NULI', '=', $line) ->where('UBAR_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_ESTA', '=', 'Activo') ->where('STAR_ESTA', '=', 'Activo') ->leftJoin('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->leftJoin('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->leftJoin('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->leftJoin('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->leftJoin('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->leftJoin('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->leftJoin('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->leftJoin('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->leftJoin('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->first([ 'FAMI_COFA AS CODIGO_FAMILIA', 'FAMI_NOFA AS FAMILIA', 'SUBF_COSU AS CODIGO_SUBFAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'STAR_IDST AS ID_STOCK', 'STAR_COBA AS CODIGO_BARRAS', 'STAR_FEVE AS FECHA_VENCIMIENTO', 'PROV_NUPR AS NUMERO_PROVEEDOR', 'PROV_NOCO AS PROVEEDOR', 'STAR_TIAD AS TIPO_ADQUISICION', 'STAR_CONS AS CONSUMIBLE', 'STAR_REPA AS REPARABLE', 'STAR_ESTA AS ESTADO', 'UBAR_IDUB AS ID_UBICACION', 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'AREA_COAR AS CODIGO_AREA', 'AREA_NOAR AS NOMBRE_AREA', 'NIVE_CONI AS CODIGO_NIVEL', 'NIVE_NONI AS NOMBRE_NIVEL', 'ZONA_COZO AS CODIGO_ZONA', 'ZONA_NOZO AS NOMBRE_ZONA', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500); } if (empty($arrStock) === 0) { return $this->responseController->makeResponse(true, "No se encontró información del stock.", [], 500); } $html = ' Document '; $html.='
Código del Equipamiento '.$arrStock['CODIGO_EQUIPAMIENTO'].'
'; $html.='
Familia '.$arrStock['FAMILIA'].' ('.$arrStock['CODIGO_FAMILIA'].')'.'
'; $html.='
Subfamilia '.$arrStock['SUBFAMILIA'].' ('.$arrStock['CODIGO_SUBFAMILIA'].')'.'
'; $html.='
Modelo '.$arrStock['MODELO'].'
'; $html.='
Código Modelo '.$arrStock['CODIGO_MODELO'].'
'; $html.='
Tipo de Adquisición '.$arrStock['TIPO_ADQUISICION'].'
'; $html.='
Proveedor '.$arrStock['PROVEEDOR'].' ('.$arrStock['NUMERO_PROVEEDOR'].')'.'
'; $html.='
Fecha de Vencimiento '.$arrStock['FECHA_VENCIMIENTO'].'
'; $html.='
Código de Barras '.$arrStock['CODIGO_BARRAS'].'
'; if ( array_key_exists('TASA_ROTACION', $arrStock) ) { $html.='
Tasa de Rotación '.$arrStock['TASA_ROTACION'].'
'; } $html.='
Stock Mínimo '.is_null($arrStock['STOCK_MINIMO']) ? 'Sin Definir' : $arrStock['STOCK_MINIMO'].'
'; $html.='
Stock Máximo '.is_null($arrStock['STOCK_MAXIMO']) ? 'Sin Definir' : $arrStock['STOCK_MAXIMO'].'
'; $html.='
¿Es consumible? '.$arrStock['CONSUMIBLE'].'
'; $html.='
¿Es reparable? '.$arrStock['REPARABLE'].'
'; $html.=''; $nuli = $this->resourcesController->formatSecuence($line, 2); $como = 'GIST'; // Código del módulo $cldo = 'IN'; // Código de la clasificación $fecr = date('ymd'); // Fecha en la se carga el archivo try { $arrSecuence = (array) DB::table('S002V01TAFAL') ->where('AFAL_COMO', '=', $como) ->where('AFAL_CLDO', '=', $cldo) ->where('AFAL_NULI', '=', $line) ->orderBy('AFAL_NUSE', 'desc') ->first([ 'AFAL_NUSE' ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET020: Ocurrió un error al obtener la información de la secuencia.", $th->getMessage(), 500 ); } $nuse = 1; // Secuencia del documento if ( !empty( $arrSecuence ) && !is_null( $arrSecuence ) ) { $nuse = intval( $arrSecuence['AFAL_NUSE'] ) + 1; } $nuse = $this->resourcesController->formatSecuence($nuse, 6); $nuve = $this->resourcesController->formatSecuence('1', 2); $noar = 'ficha_de_adquisición_' . $arrStock['ID_STOCK']; $nuli = $this->resourcesController->formatSecuence($line, 2); $como = 'GIST'; // Código del módulo $cldo = 'IN'; // Código de la clasificación $fecr = date('ymd'); // Fecha en la se carga el archivo try { $arrSecuence = (array) DB::table('S002V01TAFAL') ->where('AFAL_COMO', '=', $como) ->where('AFAL_CLDO', '=', $cldo) ->where('AFAL_NULI', '=', $line) ->orderBy('AFAL_NUSE', 'desc') ->first([ 'AFAL_NUSE' ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET020: Ocurrió un error al obtener la información de la secuencia.", $th->getMessage(), 500 ); } $nuse = 1; // Secuencia del documento if ( !empty( $arrSecuence ) && !is_null( $arrSecuence ) ) { $nuse = intval( $arrSecuence['AFAL_NUSE'] ) + 1; } $nuse = $this->resourcesController->formatSecuence($nuse, 6); $nuve = $this->resourcesController->formatSecuence('1', 2); $noar = 'ficha_de_stock_' . $arrStock['ID_STOCK']; $exte = 'pdf'; if ($_SERVER['SERVER_NAME'] === '192.168.100.105') { $filePath = $this->resourcesController->pathService.'\\public\\public_files\\'; // API JEAN } else { $filePath = $this->resourcesController->pathService.'\\public_files\\'; // API QA } $fileName = $nuli.'-'.$como.'-'.$cldo.'-'.$fecr.'-'.$nuse.'='.$nuve.'='.$noar.'.'.$exte; $tempFile = $filePath . $fileName; $dompdf = new Dompdf(); $dompdf ->loadHtml($html); $dompdf->setPaper('A4', 'landscape'); $dompdf->render(); $output = $dompdf->output(); file_put_contents($tempFile, $output); $ubic = Storage::putFile('files', new File($tempFile)); $ubic = str_replace("/", "\\", $ubic); if ($_SERVER['SERVER_NAME'] === '192.168.100.105') { $ubic = $this->resourcesController->pathService."\\storage\\app\\" . $ubic; } else { $ubic = $this->resourcesController->pathService."\\storage\\app\\" . $ubic; } $tama = filesize($ubic); $usac = json_encode([$user]); $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TAFAL')->insert([ 'AFAL_NULI' => $line, 'AFAL_COMO' => $como, 'AFAL_CLDO' => $cldo, 'AFAL_FECR' => $fecr, 'AFAL_NUSE' => $nuse, 'AFAL_NUVE' => $nuve, 'AFAL_NOAR' => $noar, 'AFAL_EXTE' => $exte, 'AFAL_TAMA' => $tama, 'AFAL_UBIC' => $ubic, 'AFAL_USAC' => $usac, 'AFAL_USRE' => $user, 'AFAL_FERE' => $currentDate, ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET023: Ocurrió un error guardar los datos a la tabla final de archivos.", $th->getMessage(), 500 ); } if ( !$validateInsert ) { return $this->responseController->makeResponse( true, "ERR_PROVIDER_SHEET024: No se pudo guardar la ficha del proveedor en la base de datos.", [], 500 ); } $encCode = $this->encController->encrypt($fileName); try { $validateInsert = DB::table('S002V01TDOST')->insert([ 'DOST_NULI' => $line, 'DOST_IDST' => $idStock, 'DOST_NODO' => 'Ficha de Stock #'.$arrStock['ID_STOCK'], 'DOST_CODO' => $encCode, 'DOST_EXTE' => $exte, 'DOST_TAMA' => $tama, 'DOST_CLAS' => 'IN', 'DOST_VERS' => 1, 'DOST_USRE' => $user, 'DOST_FERE' => $currentDate, 'DOST_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "Ocurrió un error guardar los datos a la tabla final de archivos.", $th->getMessage(), 500 ); } if (!$validateInsert) { return $this->responseController->makeResponse( true, "No se pudo guardar la ficha del proveedor en la base de datos.", [], 500 ); } if ($_SERVER['SERVER_NAME'] === '192.168.100.105') { $urlPublic = 'http://192.168.100.105:8000/public_files/' . $fileName; } else { $urlPublic = $this->functionsController->getApiURI().'sam/public_files/' . $fileName; } return $this->responseController->makeResponse(false, "EXITO: Modificación Exitosa", [ 'url' => $urlPublic ]); } public function getDocumentAssociation($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'FAMI_NOFA AS FAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'INST_IMAG AS IMAGENES', 'STAR_NUPR AS NUMERO_PROVEEDOR', 'STAR_TIAD AS TIPO_ADQUISICION', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $stock) { $arrImages = json_decode($stock['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; try { $count = DB::table('S002V01TDOST') ->where('DOST_IDST', '=', $stock['ID_STOCK']) ->where('DOST_NULI', '=', $line) ->where('DOST_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la cantidad de documentos.', $th->getMessage(), 500); } $arrStock[$key]['CANTIDAD_DOCUMENTOS'] = $count; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta ExitosaA", $arrStock); } public function getDocumentsByStock($idStock, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $stock = (array) DB::table('S002V01TUBAR') ->where([ ['UBAR_IDST', '=', $idStock], ['UBAR_ESTA', '=', 'Activo'], ['UBAR_NULI', '=', $line], ]) ->first([ 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el código del equipamento del stock.', $th->getMessage(), 401); } if (is_null($stock)) { return $this->responseController->makeResponse(true, 'No se pudo obtener el código del equipamento del stock.', [], 401); } try { $equip = (array) DB::table('S002V01TEQUI') ->where([ ['EQUI_COEQ', '=', $stock['CODIGO_EQUIPAMIENTO']], ['EQUI_NULI', '=', $line], ]) ->first([ 'EQUI_DORE AS DOCUMENTOS', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error obtener el códigos del documento del equipamiento.', $th->getMessage(), 401); } if (is_null($equip)) { return $this->responseController->makeResponse(true, 'No se pudo obtener el códigos del documento del equipamiento.', [], 401); } $arrDocuments = json_decode($equip['DOCUMENTOS'], true); $documentsFn = []; foreach($arrDocuments as $document){ $codeArr = explode('=',$document); $codeArr0 = explode('-', $codeArr[0]); $file = DB::table('S002V01TAFAL')->where([ ['AFAL_NULI', '=', $line], ['AFAL_COMO', '=', $codeArr0[1]], ['AFAL_CLDO', '=', $codeArr0[2]], ['AFAL_FECR', '=', $codeArr0[3]], ['AFAL_NUSE', '=', $codeArr0[4]], ['AFAL_NUVE', '=', $codeArr[1]], ])->first(); if(is_null($file)){ return $this->responseController->makeResponse(true, "El archivo $document no está registrado.", [], 404); } $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($this->encController->encrypt($document), $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], $responseDocument['response'], 500); } $url = $responseDocument['response']['public_uri']; $documentsFn[] = [ 'ID' => $this->encController->encrypt($document), 'URL' => $url, 'DOCUMENTO' => $file->AFAL_NOAR, 'CLASIFICACION' => $this->resourcesController->arrClasificateDocument[$file->AFAL_CLDO], 'EXTENSION' => $file->AFAL_EXTE, 'VERSION' => $file->AFAL_NUVE, 'TAMANO' => $this->resourcesController->formatBytes($file->AFAL_TAMA), 'ESTADO' => $file->AFAL_ESTA, 'USUARIO_REGISTRA' => $file->AFAL_USRE, 'FECHA_REGISTRA' => $file->AFAL_FERE, 'USUARIO_MODIFICA' => $file->AFAL_USMO, 'FECHA_MODIFICA' => $file->AFAL_FEMO, ]; } $stockDocuments = DB::table('S002V01TDOST')->select([ 'DOST_CODO AS CODIGO_DOCUMENTO' ])->where([ ['DOST_IDST', '=', $idStock], ['DOST_NULI', '=', $line], ])->get()->all(); foreach($stockDocuments as $stockDocument){ $codeDec = $this->encController->decrypt($stockDocument->CODIGO_DOCUMENTO); $codeArr0 = explode('.', $codeDec); if(count($codeArr0) == 2){ $exte = $codeArr0[1]; $codeArr1 = explode('=', $codeArr0[0]); if(count($codeArr1) == '3'){ $noar = $codeArr1[2]; $nuve = $codeArr1[1]; $codeArr2 = explode('-', $codeArr1[0]); if(count($codeArr2) == 5){ $como = $codeArr2[1]; $cldo = $codeArr2[2]; $fecr = $codeArr2[3]; $nuse = $codeArr2[4]; $documentBD = DB::table('S002V01TAFAL')->where([ ['AFAL_NULI', '=', $line], ['AFAL_COMO', '=', $como], ['AFAL_CLDO', '=', $cldo], ['AFAL_FECR', '=', $fecr], ['AFAL_NUSE', '=', $nuse], ['AFAL_NUVE', '=', $nuve], ['AFAL_NOAR', '=', $noar], ['AFAL_EXTE', '=', $exte], ])->first(); if(!is_null($documentBD)){ $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($this->encController->encrypt($document), $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], $responseDocument['response'], 500); } $url = $responseDocument['response']['public_uri']; $documentsFn[] = [ 'ID' => $this->encController->encrypt($stockDocument->CODIGO_DOCUMENTO), 'URL' => $url, 'DOCUMENTO' => $documentBD->AFAL_NOAR, 'CLASIFICACION' => $this->resourcesController->arrClasificateDocument[$documentBD->AFAL_CLDO], 'EXTENSION' => $documentBD->AFAL_EXTE, 'VERSION' => $documentBD->AFAL_NUVE, 'TAMANO' => $this->resourcesController->formatBytes($documentBD->AFAL_TAMA), 'ESTADO' => $documentBD->AFAL_ESTA, 'USUARIO_REGISTRA' => $documentBD->AFAL_USRE, 'FECHA_REGISTRA' => $documentBD->AFAL_FERE, 'USUARIO_MODIFICA' => $documentBD->AFAL_USMO, 'FECHA_MODIFICA' => $documentBD->AFAL_FEMO, ]; } } } } } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($documentsFn, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $documentsFn = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "EXITO: Consulta Exitosa", $documentsFn); } public function registerDocumentStock(Request $request) { $valitador = Validator::make($request->all(), [ 'ID_STOCK' => 'required|string', 'NOMBRE_ARCHIVO' => 'required|string', 'TIPO_ARCHIVO' => 'required|string', 'ARCHIVO' => 'required|string', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($valitador->fails()) { return $this->responseController->makeResponse( true, "ERR_DOCUMENT_ORDER_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($valitador->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; try { $idFile = $this->encController->decrypt($requestData['ARCHIVO']); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, "ERR_DOCUMENT_ORDER_REG002: Ocurrió un error al desencriptar el documento.", $th->getMessage(), 401); } $tempFile = DB::table('S002V01TARTE')->where([ ['ARTE_NULI', '=', $requestData['NUMERO_LINEA']], ['ARTE_IDAR', '=', $idFile], ])->first(); if(is_null($tempFile)){ return $this->responseController->makeResponse(true, 'ERR_DOCUMENT_ORDER_REG003: El archivo consultado no está registrado', [], 404); }else if($tempFile->ARTE_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'ERR_DOCUMENT_ORDER_REG004: El archivo consultado está eliminado', [], 404); } $fileResponse = $this->documentManagementController->moveFinalFile( intval($requestData['NUMERO_LINEA']), 'GEAD', $requestData['TIPO_ARCHIVO'], $tempFile, $user, ); if(!$fileResponse[0]){ return $this->responseController->makeResponse(true, 'ERR_DOCUMENT_ORDER_REG005: '.$fileResponse[1], [], 400); } $encCode = $this->encController->encrypt($fileResponse[1]); $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); var_dump($encCode); try { $validateInsert = DB::table('S002V01TDOST')->insert([ 'DOST_NULI' => $requestData['NUMERO_LINEA'], 'DOST_IDST' => $requestData['ID_STOCK'], 'DOST_NODO' => $requestData['NOMBRE_ARCHIVO'], 'DOST_CODO' => $encCode, 'DOST_EXTE' => $tempFile->ARTE_EXTE, 'DOST_TAMA' => $tempFile->ARTE_TAMA, 'DOST_CLAS' => $requestData['TIPO_ARCHIVO'], 'DOST_VERS' => 1, 'DOST_USRE' => $user, 'DOST_FERE' => $currentDate, 'DOST_FEAR' => DB::raw('CURRENT_TIMESTAMP') ]); } catch (\Throwable $th) { return $this->responseController->makeResponse( true, "Ocurrió un error guardar los datos a la tabla final de archivos.", $th->getMessage(), 500 ); } if (!$validateInsert) { return $this->responseController->makeResponse( true, "No se pudo guardar la ficha del proveedor en la base de datos.", [], 500 ); } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro de Documento Exitoso"); } public function getReplenishmentQuantitiesService($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_TIAD', '=', 'Por Pedido') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'FAMI_NOFA AS FAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'INST_IMAG AS IMAGENES', 'PROV_NUPR AS NUMERO_PROVEEDOR', 'PROV_NOCO AS NOMBRE_PROVEEDOR', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; $arrStock[$key]['CANTIDAD'] = 0; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock); } public function createRequestLine(Request $request) { $valitador = Validator::make($request->all(), [ 'REQUEST_LINE' => 'required|array', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($valitador->fails()) { return $this->responseController->makeResponse( true, "ERR_DOCUMENT_ORDER_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($valitador->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); $arrProviders = array(); $arrRequestData = array(); foreach ($requestData['REQUEST_LINE'] as $keyRequest => $request) { try { $validateInsert = DB::table('S002V01TCARE')->insert([ 'CARE_NULI' => $requestData['NUMERO_LINEA'], 'CARE_IDST' => $request['ID_STOCK'], 'CARE_CAAD' => $request['CANTIDAD'], 'CARE_USRE' => $user, 'CARE_FERE' => $currentDate, 'CARE_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al guar la información del reabastecimiento del stock.', $th->getMessage(), 500); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo guardar los datos del reabastecimiento dentro de la base de datos.', [], 500); } try { $arrStock = (array) DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $request['ID_STOCK']) ->where('STAR_TIAD', '=', 'Por Pedido') ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->first([ 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'FAMI_COFA AS FAMILIA', 'SUBF_COSU AS SUBFAMILIA', 'PROV_NUPR AS NUMERO_PROVEEDOR', ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } if (empty($arrStock)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se encontró la información del Stock', [], 500); } if ( !in_array($arrStock['NUMERO_PROVEEDOR'], $arrProviders) ) { $arrProviders[] = $arrStock['NUMERO_PROVEEDOR']; } $request['MODELO'] = $arrStock['MODELO']; $request['CODIGO_MODELO'] = $arrStock['CODIGO_MODELO']; $request['FAMILIA'] = $arrStock['FAMILIA']; $request['SUBFAMILIA'] = $arrStock['SUBFAMILIA']; $request['NUMERO_PROVEEDOR'] = $arrStock['NUMERO_PROVEEDOR']; try { $infoAdquisition = (array) DB::table('S002V01TINAR') ->where('INAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('INAR_CODI', '=', $arrStock['CODIGO_MODELO']) ->where('INAR_MODE', '=', $arrStock['MODELO']) ->where('INAR_ESTA', '=', 'Activo') ->where('DEAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('DEAR_NUPR', '=', $arrStock['NUMERO_PROVEEDOR']) ->where('DEAR_ESTA', '=', 'Activo') ->where('ARTI_NULI', '=', $requestData['NUMERO_LINEA']) ->where('ARTI_COFA', '=', $arrStock['FAMILIA']) ->where('ARTI_COSU', '=', $arrStock['SUBFAMILIA']) ->where('ARTI_ESTA', '=', 'Activo') ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE') ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'DEAR_IDAR') ->first([ 'ARTI_IDAR AS ID_ARTICULO', 'INAR_IDIN AS ID_INFORMACION', ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la adquisición.', $th->getMessage(), 500); } if (empty($infoAdquisition)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se encontró la información de la adquisición.', [], 500); } $request['ID_ARTICULO'] = $infoAdquisition['ID_ARTICULO']; $request['ID_INFORMACION'] = $infoAdquisition['ID_INFORMACION']; $arrRequestData[$keyRequest] = $request; } foreach ($arrProviders as $provider) { $contItemRequest = 1; foreach ($arrRequestData as $key => $value) { if ($provider === $value['NUMERO_PROVEEDOR']) { try { $idRequest = DB::table('S002V01TLINE')->insertGetId([ 'LINE_NULI' => $requestData['NUMERO_LINEA'], 'LINE_NUPR' => $value['NUMERO_PROVEEDOR'], 'LINE_ESTA' => 'En espera', 'LINE_USRE' => $user, 'LINE_FERE' => $currentDate, 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar la información en la línea de solicitud.', $th->getMessage(), 500); } if ($idRequest <= 0) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo insertar la información de la línea de solicitud.', [], 500); } for ($i=0; $i < $value['CANTIDAD']; $i++) { try { $validateInsert = DB::table('S002V01TARSE')->insert([ 'ARSE_IDAS' => $contItemRequest, 'ARSE_IDLI' => $idRequest, 'ARSE_ESTA' => 'Activo', 'ARSE_NULI' => $requestData['NUMERO_LINEA'], 'ARSE_IDAR' => $value['ID_ARTICULO'], 'ARSE_NUPR' => $value['NUMERO_PROVEEDOR'], 'ARSE_IDIN' => $value['ID_INFORMACION'], 'ARSE_USRE' => $user, 'ARSE_FERE' => $currentDate, 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar los artículos en la línea de solicitud.', $th->getMessage(), 500); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo insertar los artículos en la línea de solicitud.', [], 500); } $contItemRequest++; } } } } DB::commit(); return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso"); } public function getReplenishmentSuggestion($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrInfoStock = DB::table('S002V01TINST') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->leftJoin('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->leftJoin('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->leftJoin('S002V01TSTAR', 'STAR_IDIS', '=', 'INST_IDIS') ->get([ 'INST_IDIS AS ID_INFORMACION_STOCK', 'STAR_IDST AS ID_STOCK', DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'), DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'), 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'STAR_NUPR AS NUMERO_PROVEEDOR', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'INST_IMAG AS IMAGENES', ]); $arrInfoStock = json_decode(json_encode($arrInfoStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } $arrDataStock = array(); foreach ($arrInfoStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrInfoStock[$key]['IMAGENES'] = $arrUrlImage; try { $countStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_IDIS', '=', $info['ID_INFORMACION_STOCK']) ->where('STAR_ESTA', '=', 'Activo') ->count(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el stock.', $th->getMessage(), 500); } $arrInfoStock[$key]['CANTIDAD_ACTUAL'] = $countStock; if ($countStock < $info['STOCK_MINIMO'] && !is_null($info['STOCK_MINIMO'])) { $arrInfoStock[$key]['ESTADO'] = 'Menor al Stock Requerido'; $arrInfoStock[$key]['CANTIDAD_SUGERIDA'] = $info['STOCK_MINIMO'] - $countStock; $arrDataStock[] = $arrInfoStock[$key]; } } try { $arrReplanishment = DB::table('S002V01TCARE') ->where('CARE_NULI', '=', $line) ->where('CARE_ESTA', '=', 'Activo') ->leftJoin('S002V01TSTAR', 'STAR_IDST', '=', 'CARE_IDST') ->leftJoin('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->leftJoin('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->leftJoin('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->orderBy('CARE_CAAD', 'DESC') ->limit(5) ->get([ 'INST_IDIS AS ID_INFORMACION_STOCK', 'STAR_IDST AS ID_STOCK', DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'), DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'), 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'STAR_NUPR AS NUMERO_PROVEEDOR', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'INST_IMAG AS IMAGENES', 'CARE_CAAD AS CANTIDAD_SUGERIDA', ]); $arrReplanishment = json_decode(json_encode($arrReplanishment), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el reabastecimiento.', $th->getMessage(), 500); } foreach ($arrReplanishment as $key => $replanishment) { $arrImages = json_decode($replanishment['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrReplanishment[$key]['IMAGENES'] = $arrUrlImage; $arrReplanishment[$key]['ESTADO'] = 'Stock habitualmente pedido'; } // Se verifica los campos repetidos $arrIdDataStock = array_column($arrDataStock, 'ID_INFORMACION_STOCK'); $arrIdReplanishment = array_column($arrReplanishment, 'ID_INFORMACION_STOCK'); $arrRepeated = array_merge($arrIdDataStock, $arrIdReplanishment); $arrUnique = array_unique($arrRepeated); $arrValues = array_values($arrUnique); // Se unen con los estados para el resultado final $arrFinal = array(); foreach ($arrValues as $key => $value) { foreach ($arrDataStock as $dataStock) { if ($dataStock['ID_INFORMACION_STOCK'] === $value) { $arrFinal[$key] = $dataStock; } } foreach ($arrReplanishment as $replanishment) { if ($replanishment['ID_INFORMACION_STOCK'] === $value) { if (array_key_exists($key, $arrFinal)) { $arrFinal[$key]['ESTADO'] .= ' | '.$replanishment['ESTADO']; } else { $arrFinal[$key] = $replanishment; } } } } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrFinal); } public function getNomenclatureManagement($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_TIAD', '=', 'Por Pedido') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->leftJoin('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->leftJoin('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->leftJoin('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->leftJoin('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->leftJoin('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'FAMI_NOFA AS FAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'INST_IMAG AS IMAGENES', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock); } public function getDetailsNomenclature($idStock, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $validateExists = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500); } try { $info = (array) DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_TIAD', '=', 'Por Pedido') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->leftJoin('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->leftJoin('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->leftJoin('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->leftJoin('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->leftJoin('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->leftJoin('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->leftJoin('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->leftJoin('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->leftJoin('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->first([ 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'FAMI_COFA AS CODIGO_FAMILIA', 'FAMI_NOFA AS FAMILIA', 'SUBF_COSU AS CODIGO_SUBFAMILIA', 'SUBF_NOSU AS SUBFAMILIA', 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'AREA_COAR AS CODIGO_AREA', 'AREA_NOAR AS NOMBRE_AREA', 'NIVE_CONI AS CODIGO_NIVEL', 'NIVE_NONI AS NOMBRE_NIVEL', 'ZONA_COZO AS CODIGO_ZONA', 'ZONA_NOZO AS NOMBRE_ZONA', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500); } if (empty($info)) { return $this->responseController->makeResponse(true, 'No se encontró la información del código.', [], 500); } $codeEquipment = $info['CODIGO_EQUIPAMIENTO']; $arrStructureCode = explode('_', $codeEquipment); if ( count($arrStructureCode) !== 2 ) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la estructura del código.' [], 500); } $strLBS = $arrStructureCode[0]; $arrStructureLBS = explode('.', $strLBS); if (count($arrStructureLBS) !== 4) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la estructura del LBS.' [], 500); } $levelOccupation = $arrStructureLBS[2]; $arrStructureLevelOccupation = explode('-', $levelOccupation); if (count($arrStructureLevelOccupation) !== 2) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el nivel y la ocupación.', [], 500); } $codeSite = $arrStructureLBS[0]; $codeLocation = $arrStructureLBS[1]; $codeElement = $arrStructureLBS[3]; $codeLevel = $arrStructureLevelOccupation[0]; $codeOccupation = $arrStructureLevelOccupation[1]; $strPBS = $arrStructureCode[1]; $arrStructurePBS = explode('.', $strPBS); if ( count($arrStructurePBS) !== 4 ) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la estructura del PBS.', [], 500); } $typeModel = $arrStructurePBS[3]; $arrStructureTypeModel = explode('-', $typeModel); if (count($arrStructureTypeModel) !== 3) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener tipo y modelo.', [], 500); } $codeFamily = $arrStructurePBS[0]; $codeSubfamily = $arrStructurePBS[1]; $codeState = $arrStructurePBS[2]; $codeType = $arrStructureTypeModel[0]; $codeModel = $arrStructureTypeModel[1]; $arrClaves = array( 'CLAVE_SITIO' => $codeSite, 'SITIO' => 'Número de Línea 01', 'CLAVE_UBICACION' => $codeLocation, 'UBICACION' => $info['NOMBRE_AREA'], 'CLAVE_POSICION' => $codeElement, 'POSICION' => $info['NOMBRE_NIVEL'], 'CLAVE_OCUPACION' => $codeLevel, 'OCUPACION' => $info['NOMBRE_ALMACEN'], 'CLAVE_ELEMENTO' => $codeOccupation, 'ELEMENTO' => $info['NOMBRE_ZONA'], 'CLAVE_FAMILIA' => $codeFamily, 'FAMILIA' => $info['FAMILIA'], 'CLAVE_SUBFAMILIA' => $codeSubfamily, 'SUBFAMILIA' => $info['SUBFAMILIA'], 'CLAVE_ESTADO' => $codeState, 'ESTADO' => $this->resourcesController->arrStatesEquipment[$codeState], 'CLAVE_TIPO' => $codeType, 'TIPO' => $info['MODELO'], 'CLAVE_MODELO' => $codeModel, 'MODELO' => $info['CODIGO_MODELO'], ); return $this->responseController->makeResponse(false, 'ÉXITO: Consulta Exitosa.', $arrClaves); } public function getObjectProperties($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TSTAR') ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->get([ 'STAR_IDST AS ID_STOCK', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'INST_IMAG AS IMAGENES', 'FAMI_COFA AS CODIGO_FAMILIA', 'FAMI_NOFA AS FAMILIA', 'SUBF_COSU AS CODIGO_SUBFAMILIA', 'SUBF_NOSU AS SUBFAMILIA', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500); } foreach ($arrStock as $key => $info) { $arrImages = json_decode($info['IMAGENES']); $arrUrlImage = array(); foreach ($arrImages as $keyImages => $images) { $images = $this->encController->encrypt($images); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrUrlImage[] = $responseDocument['response']['public_uri']; } $arrStock[$key]['IMAGENES'] = $arrUrlImage; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock); } public function getDetailsObjectProperties($idStock, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $validateExists = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500); } if (!$validateExists) { return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500); } try { $arrStock = (array) DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $line) ->where('STAR_ESTA', '=', 'Activo') ->where('INST_NULI', '=', $line) ->where('INST_ESTA', '=', 'Activo') ->where('UBAR_NULI', '=', $line) ->where('UBAR_ESTA', '=', 'Activo') ->where('FAMI_NULI', '=', $line) ->where('FAMI_ESTA', '=', 'Activo') ->where('SUBF_NULI', '=', $line) ->where('SUBF_ESTA', '=', 'Activo') ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST') ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA') ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU') ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL') ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR') ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI') ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO') ->first([ 'STAR_COBA AS CODIGO_BARRA', 'STAR_FEVE AS FECHA_VENCIMIENTO', 'STAR_NUPR AS NUMERO_PROVEEDOR', 'STAR_TIAD AS TIPO_ADQUISICION', 'STAR_CONS AS CONSUMIBLE', 'STAR_REPA AS REPARABLE', 'STAR_ALTO AS ALTO', 'STAR_ANCH AS ANCHO', 'STAR_LARG AS LARGO', 'STAR_COLO AS COLOR', 'STAR_PRAD AS PRECIO_ADQUIRIDO', 'STAR_COMO AS CODIGO_MONEDA', 'INST_MODE AS MODELO', 'INST_COMO AS CODIGO_MODELO', 'INST_STMI AS STOCK_MINIMO', 'INST_STMA AS STOCK_MAXIMO', 'STAR_NIPE AS NIVEL_PELIGROSIDAD', 'INST_IMAG AS IMAGENES', 'UBAR_COUB AS CODIGO_EQUIPAMIENTO', 'FAMI_COFA AS CODIGO_FAMILIA', 'FAMI_NOFA AS NOMBRE_FAMILIA', 'SUBF_COSU AS CODIGO_SUBFAMILIA', 'SUBF_NOSU AS NOMBRE_SUBFAMILIA', 'ALMA_COAL AS CODIGO_ALMACEN', 'ALMA_NOAL AS NOMBRE_ALMACEN', 'AREA_COAR AS CODIGO_AREA', 'AREA_NOAR AS NOMBRE_AREA', 'NIVE_CONI AS CODIGO_NIVEL', 'NIVE_NONI AS NOMBRE_NIVEL', 'ZONA_COZO AS CODIGO_ZONA', 'ZONA_NOZO AS NOMBRE_ZONA', ]); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del stock.', $th->getMessage(), 500); } if (empty($arrStock)) { return $this->responseController->makeResponse(true, 'No existe información de stock.', [], 500); } $arrImages = array(); $arrImagesTemp = json_decode($arrStock['IMAGENES']); foreach ($arrImagesTemp as $key => $value) { $images = $this->encController->encrypt($value); $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line); if ($responseDocument['error']) { return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500); } $arrImages[] = $responseDocument['response']['public_uri']; } $arrStock['IMAGENES'] = $arrImages; if($arrStock['TIPO_ADQUISICION'] == 'Sin Pedido'){ $arrStock['DESCRIPCION_PROVEEDOR'] = null; $arrStock['CARACTERISTICA_PROVEEDOR'] = null; $arrStock['NOMBRE_PROVEEDOR'] = null; goto noAdquisition; } try { $infoAdquisition = (array) DB::table('S002V01TINAR') ->where('INAR_NULI', '=', $line) ->where('INAR_CODI', '=', $arrStock['CODIGO_MODELO']) ->where('INAR_MODE', '=', $arrStock['MODELO']) ->where('INAR_ESTA', '=', 'Activo') ->where('DEAR_NULI', '=', $line) ->where('DEAR_NUPR', '=', $arrStock['NUMERO_PROVEEDOR']) ->where('DEAR_ESTA', '=', 'Activo') ->where('ARTI_NULI', '=', $line) ->where('ARTI_COFA', '=', $arrStock['CODIGO_FAMILIA']) ->where('ARTI_COSU', '=', $arrStock['CODIGO_SUBFAMILIA']) ->where('ARTI_ESTA', '=', 'Activo') ->leftJoin('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE') ->leftJoin('S002V01TARTI', 'ARTI_IDAR', '=', 'DEAR_IDAR') ->leftJoin('S002V01TPROV', 'PROV_NUPR', '=', 'DEAR_NUPR') ->first([ 'DEAR_DESC AS DESCRIPCION_PROVEEDOR', 'DEAR_CARA AS CARACTERISTICA_PROVEEDOR', 'PROV_NOCO AS NOMBRE_PROVEEDOR', ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la adquisición.', $th->getMessage(), 500); } if (empty($infoAdquisition)) { /*DB::rollBack(); return $this->responseController->makeResponse(true, 'No se encontró la información de la adquisición.', [], 500);*/ $infoAdquisition = [ "DESCRIPCION_PROVEEDOR" => '-', "CARACTERISTICA_PROVEEDOR" => '-', "NOMBRE_PROVEEDOR" => '-', ]; } $arrGeneralInfo = array_merge($arrStock, $infoAdquisition); return $this->responseController->makeResponse(false, 'ÉXITO: Consulta Exitosa', $arrGeneralInfo); noAdquisition: return $this->responseController->makeResponse(false, 'ÉXITO: Consulta Exitosa', $arrStock); } public function saveInfoStock(Request $request, $idStock) { $valitador = Validator::make($request->all(), [ 'ALTO' => 'string|nullable', 'ANCHO' => 'string|nullable', 'LARGO' => 'string|nullable', 'COLOR' => 'string|nullable', 'NIVEL_PELIGROSIDAD' => 'string|nullable', 'TASA_ROTACION' => 'string|nullable', 'USUARIO' => 'required|string', 'NUMERO_LINEA' => 'required|integer', ]); if ($valitador->fails()) { return $this->responseController->makeResponse( true, "ERR_DOCUMENT_ORDER_REG000: Se encontraron uno o más errores.", $this->responseController->makeErrors($valitador->errors()->messages()), 401 ); } DB::beginTransaction(); $requestData = $request->all(); $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $user = $arrResponseCheckUser['response']; $idStock = $this->encController->decrypt($idStock); if (is_null($idStock)) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401); } try { $validateExists = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->exists(); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500); } if (!$validateExists) { DB::rollBack(); return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500); } $now = $this->functionsController->now(); $currentDate = $now->toDateTimeString(); try { $validateInsert = DB::table('S002V01TSTAR') ->where('STAR_IDST', '=', $idStock) ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA']) ->where('STAR_ESTA', '=', 'Activo') ->update([ 'STAR_ALTO' => $requestData['ALTO'], 'STAR_ANCH' => $requestData['ANCHO'], 'STAR_LARG' => $requestData['LARGO'], 'STAR_COLO' => $requestData['COLOR'], 'STAR_NIPE' => $requestData['NIVEL_PELIGROSIDAD'], 'STAR_USMO' => $user, 'STAR_FEMO' => $currentDate, 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'), ]); } catch (\Throwable $th) { DB::rollBack(); return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar los datos del stock.', $th->getMessage(), 500); } if (!$validateInsert) { DB::rollBack(); return $this->responseController->makeResponse(true, 'No se pudo insertar los datos del stock.', [], 500); } DB::commit(); return $this->responseController->makeResponse(false, 'ÉXITO: Registro Exitoso'); } public function getToolsAndSpare ($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { DB::rollBack(); return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrStock = DB::table('S002V01TINST') ->where([ ['INST_NULI', '=', $line], ])->get([ 'INST_IDIS AS ID', 'INST_MODE AS NOMB', 'INST_COMO AS MODE', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los artículos en stock.', $th->getMessage(), 500); } $arrTools = []; $arrSpares = []; foreach ($arrStock as $stock) { try { $idStockStr = "" . $stock["ID"] . ""; for($i = strlen($idStockStr); $i < 10; $i++){ $idStockStr = "0" . $idStockStr; } $items = DB::table('S002V01TSTAR') ->where([ ['STAR_NULI', '=', $line], ['STAR_IDIS', '=', $idStockStr], ]) ->leftJoin('S002V01TUNID', 'UNID_IDUN', '=', 'STAR_IDUN') ->get([ 'UNID_NOMB AS UNIT', 'STAR_CONS AS TYPE', ]); $items = json_decode(json_encode($items), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las herramientas y refacciones.', $th->getMessage(), 500); } $stock['CANTDISP'] = count($items); foreach ($items as $item) { if ($item['TYPE'] === 'Si') { $stock['TYPE'] = 'Refaccción'; } else { $stock['TYPE'] = 'Herramienta'; } $stock['UNIT'] = $item['UNIT']; } $stock['ID'] = $this->encController->encrypt("{$stock['ID']}"); if ($stock['TYPE'] === 'Refaccción') { $arrSpares[] = $stock; } else { $arrTools[] = $stock; } } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", [ 'HERRAMIENTAS' => $arrTools, 'REFACCIONES' => $arrSpares ]); } public function getArticleClassificateByWarehouse ($idWarehouse, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $idWarehouse = $this->encController->decrypt($idWarehouse); if (is_null($idWarehouse)) { return $this->responseController->makeResponse(true, "El identificador del almancen no fue encritpado correctamente", [], 500); } try { $arrStock = DB::table('S002V01TUBAR') ->where([ ['UBAR_COAL', '=', $idWarehouse], ['UBAR_ESTA', '=', 'Activo'], ['UBAR_NULI', '=', $line], ['STAR_ESTA', '=', 'Activo'], ]) ->leftJoin('S002V01TSTAR', 'STAR_IDST', '=', 'UBAR_IDST') ->leftJoin('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS') ->leftJoin('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR') ->leftJoin('S002V01TINAR', function($join) { $join->on('INAR_CODI', '=', 'INST_COMO') ->on('INAR_MODE', '=', 'INST_MODE'); }) ->get([ 'STAR_IDST AS ID_STOCK', 'PROV_NUPR AS NUMERO_PROVEEDOR', 'PROV_NOCO AS PROVEEDOR', 'INST_IDIS AS ID_INFORMACION', 'INST_MODE AS TIPO_EQUIPAMIENTO', 'INST_COMO AS MODELO_EQUIPAMIENTO', 'INAR_PREC AS PRECIO', 'INAR_COMO AS MONEDA', 'STAR_FERE AS FECHA_ADQUISICION', ]); $arrStock = json_decode(json_encode($arrStock), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "Ocurrió un error al obtener la información del almacen.", $th->getMessage(), 500); } $dateOneYearAgo = Carbon::now()->subYears(1); $dateHalfYearAgo = Carbon::now()->subMonth(6); $dateOneMonthAgo = Carbon::now()->subMonth(1); $arrClassificateOneYearAgo = []; $arrClassificateHalfYearAgo = []; $arrClassificateOneMonthAgo = []; $arrClassificate = []; foreach ($arrStock as $stock) { $providerExists = in_array($stock['NUMERO_PROVEEDOR'], array_column($arrClassificateOneYearAgo, 'NUMERO_PROVEEDOR')); $typeExists = in_array($stock['TIPO_EQUIPAMIENTO'], array_column($arrClassificateOneYearAgo, 'TIPO_EQUIPAMIENTO')); $modelExists = in_array($stock['MODELO_EQUIPAMIENTO'], array_column($arrClassificateOneYearAgo, 'MODELO_EQUIPAMIENTO')); if ($providerExists && $typeExists && $modelExists) { $index = array_search($stock['ID_INFORMACION'], array_column($arrClassificateOneYearAgo, 'ID_INFORMACION')); $arrClassificateOneYearAgo[$index]['CANTIDAD'] += 1; } else { $dateAdquisition = new Carbon($stock['FECHA_ADQUISICION']); if ($dateAdquisition->gte($dateOneYearAgo)) { $arrClassificateOneYearAgo[] = [ 'ID_INFORMACION' => $stock['ID_INFORMACION'], 'NUMERO_PROVEEDOR' => $stock['NUMERO_PROVEEDOR'], 'PROVEEDOR' => $stock['PROVEEDOR'], 'TIPO_EQUIPAMIENTO' => $stock['TIPO_EQUIPAMIENTO'], 'MODELO_EQUIPAMIENTO' => $stock['MODELO_EQUIPAMIENTO'], 'PRECIO' => $stock['PRECIO'], 'MONEDA' => $stock['MONEDA'], 'FECHA_ADQUISICION' => $stock['FECHA_ADQUISICION'], 'CANTIDAD' => 1, ]; } } $providerExists = in_array($stock['NUMERO_PROVEEDOR'], array_column($arrClassificateHalfYearAgo, 'NUMERO_PROVEEDOR')); $typeExists = in_array($stock['TIPO_EQUIPAMIENTO'], array_column($arrClassificateHalfYearAgo, 'TIPO_EQUIPAMIENTO')); $modelExists = in_array($stock['MODELO_EQUIPAMIENTO'], array_column($arrClassificateHalfYearAgo, 'MODELO_EQUIPAMIENTO')); if ($providerExists && $typeExists && $modelExists) { $index = array_search($stock['ID_INFORMACION'], array_column($arrClassificateHalfYearAgo, 'ID_INFORMACION')); $arrClassificateHalfYearAgo[$index]['CANTIDAD'] += 1; } else { $dateAdquisition = new Carbon($stock['FECHA_ADQUISICION']); if ($dateAdquisition->gte($dateHalfYearAgo)) { $arrClassificateHalfYearAgo[] = [ 'ID_INFORMACION' => $stock['ID_INFORMACION'], 'NUMERO_PROVEEDOR' => $stock['NUMERO_PROVEEDOR'], 'PROVEEDOR' => $stock['PROVEEDOR'], 'TIPO_EQUIPAMIENTO' => $stock['TIPO_EQUIPAMIENTO'], 'MODELO_EQUIPAMIENTO' => $stock['MODELO_EQUIPAMIENTO'], 'PRECIO' => $stock['PRECIO'], 'MONEDA' => $stock['MONEDA'], 'FECHA_ADQUISICION' => $stock['FECHA_ADQUISICION'], 'CANTIDAD' => 1, ]; } } $providerExists = in_array($stock['NUMERO_PROVEEDOR'], array_column($arrClassificateOneMonthAgo, 'NUMERO_PROVEEDOR')); $typeExists = in_array($stock['TIPO_EQUIPAMIENTO'], array_column($arrClassificateOneMonthAgo, 'TIPO_EQUIPAMIENTO')); $modelExists = in_array($stock['MODELO_EQUIPAMIENTO'], array_column($arrClassificateOneMonthAgo, 'MODELO_EQUIPAMIENTO')); if ($providerExists && $typeExists && $modelExists) { $index = array_search($stock['ID_INFORMACION'], array_column($arrClassificateOneMonthAgo, 'ID_INFORMACION')); $arrClassificateOneMonthAgo[$index]['CANTIDAD'] += 1; } else { $dateAdquisition = new Carbon($stock['FECHA_ADQUISICION']); if ($dateAdquisition->gte($dateOneMonthAgo)) { $arrClassificateOneMonthAgo[] = [ 'ID_INFORMACION' => $stock['ID_INFORMACION'], 'NUMERO_PROVEEDOR' => $stock['NUMERO_PROVEEDOR'], 'PROVEEDOR' => $stock['PROVEEDOR'], 'TIPO_EQUIPAMIENTO' => $stock['TIPO_EQUIPAMIENTO'], 'MODELO_EQUIPAMIENTO' => $stock['MODELO_EQUIPAMIENTO'], 'PRECIO' => $stock['PRECIO'], 'MONEDA' => $stock['MONEDA'], 'FECHA_ADQUISICION' => $stock['FECHA_ADQUISICION'], 'CANTIDAD' => 1, ]; } } $providerExists = in_array($stock['NUMERO_PROVEEDOR'], array_column($arrClassificate, 'NUMERO_PROVEEDOR')); $typeExists = in_array($stock['TIPO_EQUIPAMIENTO'], array_column($arrClassificate, 'TIPO_EQUIPAMIENTO')); $modelExists = in_array($stock['MODELO_EQUIPAMIENTO'], array_column($arrClassificate, 'MODELO_EQUIPAMIENTO')); if ($providerExists && $typeExists && $modelExists) { $index = array_search($stock['ID_INFORMACION'], array_column($arrClassificate, 'ID_INFORMACION')); $arrClassificate[$index]['CANTIDAD'] += 1; } else { $arrClassificate[] = [ 'ID_INFORMACION' => $stock['ID_INFORMACION'], 'NUMERO_PROVEEDOR' => $stock['NUMERO_PROVEEDOR'], 'PROVEEDOR' => $stock['PROVEEDOR'], 'TIPO_EQUIPAMIENTO' => $stock['TIPO_EQUIPAMIENTO'], 'MODELO_EQUIPAMIENTO' => $stock['MODELO_EQUIPAMIENTO'], 'PRECIO' => $stock['PRECIO'], 'MONEDA' => $stock['MONEDA'], 'FECHA_ADQUISICION' => $stock['FECHA_ADQUISICION'], 'CANTIDAD' => 1, ]; } } foreach ($arrClassificate as $key => $classificate) { foreach ($arrClassificateOneYearAgo as $classificateTemp) { if ($classificate['ID_INFORMACION'] === $classificateTemp['ID_INFORMACION']) { $classificate['TASA_ROTACION_ANUAL'] = ($classificateTemp['PRECIO'] * $classificateTemp['CANTIDAD']) / $classificate['CANTIDAD']; } } foreach ($arrClassificateHalfYearAgo as $classificateTemp) { if ($classificate['ID_INFORMACION'] === $classificateTemp['ID_INFORMACION']) { $classificate['TASA_ROTACION_SEMESTRAL'] = ($classificateTemp['PRECIO'] * $classificateTemp['CANTIDAD']) / $classificate['CANTIDAD']; } } foreach ($arrClassificateOneMonthAgo as $classificateTemp) { if ($classificate['ID_INFORMACION'] === $classificateTemp['ID_INFORMACION']) { $classificate['TASA_ROTACION_MENSUAL'] = ($classificateTemp['PRECIO'] * $classificateTemp['CANTIDAD']) / $classificate['CANTIDAD']; } } $classificate['PROVEEDOR'] = "{$classificate['PROVEEDOR']} ({$classificate['NUMERO_PROVEEDOR']})"; $arrClassificate[$key] = $classificate; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrClassificate); } public function getValueStockByPeriod ($idWarehouse, $user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } $idWarehouse = $this->encController->decrypt($idWarehouse); if (is_null($idWarehouse)) { return $this->responseController->makeResponse(true, "El identificador del almancen no fue encritpado correctamente", [], 500); } try { $arrInformation = DB::table('S002V01TVAST') ->where([ ['VAST_COAL', '=', $idWarehouse], ['VAST_NULI', '=', $line], ['VAST_ESTA', '=', 'Estado'], ]) ->get([ 'VAST_IDVS AS ID_VALOR', 'VAST_INME AS INFORMACION_VALOR', 'VAST_PERI AS PERIODO', 'VAST_FERE AS USUARIO_REGISTRA', 'VAST_USRE AS FECHA_REGISTRA', 'VAST_FEMO AS USUARIO_MODIFICA', 'VAST_USMO AS FECHA_MODIFICA', ]); $arrInformation = json_decode(json_encode($arrInformation), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, "", $th->getMessage(), 500); } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrInformation, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrInformation = $responseCheckLatestUpdate['response']; return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInformation); } public function getArticlesWithoutMovements($user, $line) { $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line); if ($arrResponseCheckUser['error']) { return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401); } try { $arrArticles = DB::table('S002V01TUBAR') ->where([ ['UBAR_NULI', '=', $line], ['UBAR_ESTA', '=', 'Activo'], ]) ->distinct('UBAR_IDST') ->orderBy('UBAR_FERE', 'DESC') ->get([ 'UBAR_IDST AS ID_STOCK', 'UBAR_FERE AS FECHA_REGISTRA', 'UBAR_USRE AS USUARIO_REGISTRA', 'UBAR_FEMO AS FECHA_MODIFICA', 'UBAR_USMO AS USUARIO_MODIFICA', ]); $arrArticles = json_decode(json_encode($arrArticles), true); } catch (\Throwable $th) { return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los artículos.', $th->getMessage(), 401); } $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrArticles, $line); if ($responseCheckLatestUpdate['error']) { return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500); } $arrArticles = $responseCheckLatestUpdate['response']; $currentDate = Carbon::now(); foreach ($arrArticles as $key => $article) { $dateStock = new Carbon($article['FECHA_MODIFICA']); $diff = $currentDate->diff($dateStock); $article['DIFERENCIA_ANIOS'] = $diff->y; $article['DIFERENCIA_MES'] = $diff->m; $article['DIFERENCIA_DIAS'] = $diff->d; $arrArticles[$key] = $article; } return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArticles); } }