responseController = new ResponseController(); $this->encryptionController = new EncryptionController(); $this->functionsController = new FunctionsController(); } public function getActivators($idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $activators = DB::table('S002V01TACTI')->select([ 'ACTI_IDAC AS ID_ACTIVADOR', 'ACTI_PRIO AS PRIORIDAD', 'ACTI_TIAC AS TIPO_ACTIVADOR', 'ACTI_CORE AS ID_CONTADOR', 'ACTI_ESTA AS ESTADO' ])->get()->all(); foreach($activators as $key=>$activator){ $activator->ID_ACTIVADOR = $this->encryptionController->encrypt($activator->ID_ACTIVADOR); $activator->ID_CONTADOR = $this->encryptionController->encrypt($activator->ID_CONTADOR); $activators[$key] = $activator; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GEAC', 'S002V01P01COAC', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó los activadores registrados.", $idUser, $nowStr, 'S002V01S02ACTI' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $activators); } public function getActivatorsByType($type, $idUser, $line){ DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $activators = DB::table('S002V01TACTI')->select([ 'ACTI_IDAC AS IDACTIVADOR', 'ACTI_PRIO AS PRIORIDAD', 'ACTI_TIAC AS TIPOACTIVACION', 'ACTI_COAC AS CONDICIONES' ])->where([ ['ACTI_NULI', '=', $line], ['ACTI_TIAC', '=', $type] ])->get()->all(); foreach($activators as $key=>$activator){ $activator->IDACTIVADOR = $this->encryptionController->encrypt($activator->IDACTIVADOR); $activator->PRIORIDAD = $this->encryptionController->encrypt($activator->PRIORIDAD); if($activator->TIPOACTIVACION == 'Medida' || $activator->TIPOACTIVACION == 'Valor'){ $activationConfigArr = json_decode($activator->CONDICIONES, true); $magnitude = DB::table('S002V01TMAGN')->where([ ['MAGN_NULI', '=', $line], ['MAGN_IDMA', '=', $activationConfigArr['magnitude']] ])->first(); $unit = DB::table('S002V01TLIME')->where([ ['LIME_NULI', '=', $line], ['LIME_IDME', '=', $activationConfigArr['unit']], ['LIME_MAGN', '=', $activationConfigArr['magnitude']], ])->first(); $activationConfigArr['magnitude'] = $magnitude->MAGN_MAGN . " (" . $activationConfigArr['magnitude'] . ")"; $activationConfigArr['unit'] = $unit->LIME_ACME . " - " . $unit->LIME_NOME . " (" . $activationConfigArr['unit'] . ")"; $activator->CONDICIONES = json_encode($activationConfigArr); } $activators[$key] = $activator; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GEAC', 'S002V01P01COAC', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó los contadores de tipo $type.", $idUser, $nowStr, 'S002V01S02ACTI' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $activators); } public function registerActivator(Request $request){ DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'priority' => 'required|string|in:1,2,3,4', 'type' => 'required|string|in:CA,SI,ME,VA', 'condition' => 'required|json', 'counter' => 'required|string' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } //$priorities = ['MA' => '1', 'AL' => '2', 'ME' => '3', 'BA' => '4']; $types = ['CA' => 'Calendario', 'SI' => 'Sintoma', 'ME' => 'Medida', 'VA' => 'Valor']; $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($form['counter']); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador relacionado no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_NULI', '=', $form['linea']], ['CONA_IDCO', '=', $idCounter] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador relacionado no está registrado.', [], 404); } $priority = $form['priority']; $type = $types[$form['type']]; $conditionArr = json_decode($form['condition'], true); if(count($conditionArr) == 0){ return $this->responseController->makeResponse(true, 'El arreglo de la condición de activación está vació.', [], 400); }else{ switch($form['type']){ case 'CA': if(count($conditionArr) != 5){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysCA = ['startDate', 'startHour', 'repeat', 'customRepeat', 'color']; foreach($keysCA as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } break; case 'SI': if(count($conditionArr) != 6){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysSI = ['sign', 'startDate', 'startHour', 'repeat', 'customRepeat', 'color']; foreach($keysSI as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } $idSymptom = $this->encryptionController->decrypt($conditionArr['sign']); if(!$idSymptom){ return $this->responseController->makeResponse(true, 'El ID del síntoma relacionado no está encriptado correctamente.', [], 400); } $symptom = DB::table('S002V01TLISI')->where([ ['LISI_IDSI', '=', $idSymptom], ['LISI_NULI', '=', $form['linea']] ])->first(); if(is_null($symptom)){ return $this->responseController->makeResponse(true, 'El síntoma relacionado no está registrado.', [], 404); }else if($symptom->LISI_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'El síntoma relacionado está eliminado.', [], 404); } $conditionArr['sign'] = $idSymptom; break; case 'ME': if(count($conditionArr) != 7){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysSI = ['minValue', 'maxValue', 'magnitude', 'customMagnitude', 'unit', 'customUnit', 'color']; foreach($keysSI as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } $idMagnitude = $this->encryptionController->decrypt($conditionArr['magnitude']); if(!$idMagnitude){ return $this->responseController->makeResponse(true, 'El ID de la magnitud relacionada no está encriptado correctamente.', [], 400); } $magnitude = DB::table('S002V01TMAGN')->where([ ['MAGN_NULI', '=', $form['linea']], ['MAGN_IDMA', '=', $idMagnitude] ])->first(); if(is_null($magnitude)){ return $this->responseController->makeResponse(true, 'La magnitud relacionada no está registrado.', [], 404); }else if($magnitude->MAGN_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La magnitud relacionada está eliminada.', [], 404); } $idUnit = $this->encryptionController->decrypt($conditionArr['unit']); if(!$idUnit){ return $this->responseController->makeResponse(true, 'El ID de la unidad relacionada no está encriptado correctamente.', [], 400); } $unit = DB::table('S002V01TLIME')->where([ ['LIME_IDME', '=', $idUnit], ['LIME_NULI', '=', $form['linea']], ['LIME_MAGN', '=', $idMagnitude], ])->first(); if(is_null($unit)){ return $this->responseController->makeResponse(true, 'La unidad relacionada no está registrado.', [], 404); }else if($unit->LIME_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La unidad relacionada está eliminada.', [], 404); } $conditionArr['magnitude'] = $idMagnitude ; $conditionArr['unit'] = $idUnit; break; case 'VA': if(count($conditionArr) != 7){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysVA = ['comparison', 'limitValue', 'magnitude', 'customMagnitude', 'unit', 'customUnit', 'color']; foreach($keysVA as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } $idMagnitude = $this->encryptionController->decrypt($conditionArr['magnitude']); if(!$idMagnitude){ return $this->responseController->makeResponse(true, 'El ID de la magnitud relacionada no está encriptado correctamente.', [], 400); } $magnitude = DB::table('S002V01TMAGN')->where([ ['MAGN_NULI', '=', $form['linea']], ['MAGN_IDMA', '=', $idMagnitude] ])->first(); if(is_null($magnitude)){ return $this->responseController->makeResponse(true, 'La magnitud relacionada no está registrado.', [], 404); }else if($magnitude->MAGN_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La magnitud relacionada está eliminada.', [], 404); } $idUnit = $this->encryptionController->decrypt($conditionArr['unit']); if(!$idUnit){ return $this->responseController->makeResponse(true, 'El ID de la unidad relacionada no está encriptado correctamente.', [], 400); } $unit = DB::table('S002V01TLIME')->where([ ['LIME_IDME', '=', $idUnit], ['LIME_NULI', '=', $form['linea']], ['LIME_MAGN', '=', $idMagnitude], ])->first(); if(is_null($unit)){ return $this->responseController->makeResponse(true, 'La unidad relacionada no está registrado.', [], 404); }else if($unit->LIME_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La unidad relacionada está eliminada.', [], 404); } $conditionArr['magnitude'] = $idMagnitude ; $conditionArr['unit'] = $idUnit; break; default: return $this->responseController->makeResponse(true, 'El tipo de contador es inválido.', [], 400); break; } } $conditionStr = json_encode($conditionArr); $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $idCont = DB::table('S002V01TACTI')->insertGetId([ 'ACTI_NULI' => $form['linea'], 'ACTI_PRIO' => $priority, 'ACTI_TIAC' => $type, 'ACTI_COAC' => $conditionStr, 'ACTI_CORE' => $idCounter, 'ACTI_USRE' => $idUser, 'ACTI_FERE' => $nowStr ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F01GEAC', 'S002V01P02REAC', 'Registro', "El usuario $name (" . $usr->USUA_IDUS . ") registró el contador #$idCont.", $idUser, $nowStr, 'S002V01S02ACTI' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.', ['IDCONT' => $idCont]); } public function getActivator($idActivator, $idUser, $line){ DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idActivator = $this->encryptionController->decrypt($idActivator); if(!$idActivator){ return $this->responseController->makeResponse(true, 'El ID del activador solicitado no está encriptado correctamente.', [], 400); } $activator = DB::table('S002V01TACTI')->select([ 'ACTI_IDAC AS IDACTIVADOR', 'ACTI_PRIO AS PRIORIDAD', 'ACTI_TIAC AS TIPOACTIVADOR', 'ACTI_COAC AS CONDICIONES', 'ACTI_CORE AS CONTADOR', 'ACTI_ESTA AS ESTADO', 'ACTI_USRE AS USRREG', 'ACTI_FERE AS FECREG', 'ACTI_USMO AS USRMOD', 'ACTI_FEMO AS FECMOD', ])->where([ ['ACTI_IDAC', '=', $idActivator], ['ACTI_NULI', '=', $line], ])->first(); if(is_null($activator)){ return $this->responseController->makeResponse(true, 'El activador solicitado no está registrado.', [], 404); } $activator->IDACTIVADOR = $this->encryptionController->encrypt($activator->IDACTIVADOR); $activator->CONTADOR = $this->encryptionController->encrypt($activator->CONTADOR); $conditionsArr = json_decode($activator->CONDICIONES, true); foreach($conditionsArr as $key=>$val){ $encryptedParams = ['sign', 'magnitude', 'unit']; if(in_array($key, $encryptedParams)){ switch($key){ case 'sign': $symptom = DB::table('S002V01TLISI')->where([ ['LISI_NULI', '=', $line], ['LISI_IDSI', '=', $val] ])->first(); $conditionsArr[$key] = $symptom->LISI_NOSI . " (" . $val . ")"; break; case 'magnitude': $magnitude = DB::table('S002V01TMAGN')->where([ ['MAGN_NULI', '=', $line], ['MAGN_IDMA', '=', $val] ])->first(); $conditionsArr[$key] = $magnitude->MAGN_MAGN . " (" . $val . ")"; break; case 'unit': $unit = DB::table('S002V01TLIME')->where([ ['LIME_NULI', '=', $line], ['LIME_IDME', '=', $val] ])->first(); $conditionsArr[$key] = $unit->LIME_NOME . " (" . $val . ") - " . $unit->LIME_ACME; break; } } } $activator->CONDICIONES = json_encode($conditionsArr); $usrReg = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $activator->USRREG] ])->first(); $nameReg = $this->functionsController->joinName($usrReg->USUA_NOMB, $usrReg->USUA_APPA, $usrReg->USUA_APMA); $activator->USRREG = $nameReg . " (" . $activator->USRREG . ")"; if(!is_null($activator->USRMOD)){ $usrMod = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $activator->USRMOD] ])->first(); $nameMod = $this->functionsController->joinName($usrMod->USUA_NOMB, $usrMod->USUA_APPA, $usrMod->USUA_APMA); $activator->USRMOD = $nameMod . " (" . $activator->USRMOD . ")"; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GEAC', 'S002V01P01COAC', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó la información del activador #$idActivator", $idUser, $nowStr, 'S002V01S02ACTI' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $activator); } public function registerCounter(Request $request) { DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'scada' => 'required|string', 'equipment' => 'required|string', 'time_interval' => 'required|numeric', 'time_interval_unit' => 'required|string|in:seg,min,hor,dia', 'time_interval_tolerance' => 'required|numeric', 'time_interval_tolerance_unit' => 'required|string|in:seg,min,hor,dia' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idSCADA = $this->encryptionController->decrypt($form['scada']); if(!$idSCADA){ return $this->responseController->makeResponse(true, 'El ID del SCADA relacionado no está encriptado correctamente.', [], 400); } $scada = DB::table('S002V01TLISC')->where([ ['LISC_IDSC', '=', $idSCADA], ['LISC_NULI', '=', $form['linea']], ])->first(); if(is_null($scada)){ return $this->responseController->makeResponse(true, 'El SCADA relacionado no está registrado.', [], 404); } $equipmentCode = $this->encryptionController->decrypt($form['equipment']); if(!$equipmentCode){ return $this->responseController->makeResponse(true, 'El código del equipamiento relacionado no está encriptado correctamente.', [], 400); } $equipment = DB::table('S002V01TEQUI')->where([ ['EQUI_NULI', '=', $form['linea']], ['EQUI_COEQ', '=', $equipmentCode], ])->first(); if(is_null($equipment)){ return $this->responseController->makeResponse(true, 'El equipamiento relacionado no está registrado.', [], 404); } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $idCont = DB::table('S002V01TCONA')->insertGetId([ 'CONA_NULI' => $form['linea'], 'CONA_INLE' => $form['time_interval'], 'CONA_UTIL' => $form['time_interval_unit'], 'CONA_TOIN' => $form['time_interval_tolerance'], 'CONA_UTTI' => $form['time_interval_tolerance_unit'], 'CONA_IDSC' => $idSCADA, 'CONA_COEQ' => $equipmentCode, 'CONA_COVI' => '[]', 'CONA_USRE' => $idUser, 'CONA_FERE' => $nowStr, ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P02RECO', 'Registro', "El usuario $name (" . $usr->USUA_IDUS . ") registró el contador #$idCont.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.'); } public function getCounters($idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $counters = DB::table('S002V01TCONA')->select([ 'CONA_IDCO AS ID_CONTADOR', 'CONA_IDSC AS ID_SCADA', 'LISC_NOSC AS SCADA', 'CONA_COEQ AS CODIGO_EQUIPAMIENTO', 'EQUI_TIPO AS TIPO_EQUIPAMIENTO', 'EQUI_MODE AS MODELO_EQUIPAMIENTO', 'EQUI_IDEQ AS ID_EQUIPAMIENTO', 'CONA_ESTA AS ESTADO', ])->join('S002V01TLISC', 'LISC_IDSC', '=', 'CONA_IDSC') ->join('S002V01TEQUI', 'EQUI_COEQ', '=', 'CONA_COEQ') ->get()->all(); foreach($counters as $key=>$counter){ $activators = DB::table('S002V01TACTI')->where([ ['ACTI_NULI', '=', $line], ['ACTI_CORE', '=', $counter->ID_CONTADOR] ])->get()->all(); $counter->ID_CONTADOR = $this->encryptionController->encrypt($counter->ID_CONTADOR); $counter->ID_SCADA = $this->encryptionController->encrypt($counter->ID_SCADA); $counter->CODIGO_EQUIPAMIENTO = $this->encryptionController->encrypt($counter->CODIGO_EQUIPAMIENTO); $counter->ID_EQUIPAMIENTO = $this->encryptionController->encrypt($counter->ID_EQUIPAMIENTO); $counter->TIENE_ACTIVADOR = count($activators) > 0; $counter->ACTIVADOR = count($activators) > 0 ? $this->encryptionController->encrypt($activators[0]->ACTI_IDAC) : null; $counters[$key] = $counter; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P01COCO', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó los contadores registrados.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $counters); } public function getCounter($idCounter, $idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($idCounter); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->select([ 'CONA_IDCO AS ID_CONTADOR', 'CONA_IDSC AS ID_SCADA', 'LISC_NOSC AS SCADA', 'CONA_COEQ AS CODIGO_EQUIPAMIENTO', 'EQUI_TIPO AS TIPO_EQUIPAMIENTO', 'EQUI_MODE AS MODELO_EQUIPAMIENTO', 'EQUI_IDEQ AS ID_EQUIPAMIENTO', 'CONA_INLE AS INTERVALO', 'CONA_UTIL AS UNIDAD_INTERVALO', 'CONA_TOIN AS TOLERANCIA_INTERVALO', 'CONA_UTTI AS UNIDAD_TOLERANCIA_INTERVALO', 'CONA_COVI AS CONTADORES_VINCULADOS', 'CONA_ESTA AS ESTADO', 'CONA_USRE AS USRREG', 'CONA_FERE AS FECREG', 'CONA_USMO AS USRMOD', 'CONA_FEMO AS FECMOD', ])->join('S002V01TLISC', 'LISC_IDSC', '=', 'CONA_IDSC') ->join('S002V01TEQUI', 'EQUI_COEQ', '=', 'CONA_COEQ') ->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $line] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador solicitado no está registrado.', [], 404); } $counter->ID_CONTADOR = $this->encryptionController->encrypt($counter->ID_CONTADOR); $counter->ID_SCADA = $this->encryptionController->encrypt($counter->ID_SCADA); $counter->CODIGO_EQUIPAMIENTO = $this->encryptionController->encrypt($counter->CODIGO_EQUIPAMIENTO); $counter->ID_EQUIPAMIENTO = $this->encryptionController->encrypt($counter->ID_EQUIPAMIENTO); $relatedCountersArr = json_decode($counter->CONTADORES_VINCULADOS, true); foreach($relatedCountersArr as $key=>$counterStr){ $counterStr = $this->encryptionController->encrypt($counterStr); $relatedCountersArr[$key] = $counterStr; } $relatedCountersStr = json_encode($relatedCountersArr); $counter->CONTADORES_VINCULADOS = $relatedCountersStr; $usrReg = DB::table('S002V01TUSUA')->where([ ['USUA_IDUS', '=', $counter->USRREG], ['USUA_NULI', '=', $line] ])->first(); $nameReg = $this->functionsController->joinName($usrReg->USUA_NOMB, $usrReg->USUA_APPA, $usrReg->USUA_APMA); $counter->USRREG = $nameReg . " (" . $counter->USRREG . ")"; if(!is_null($counter->USRMOD)){ $usrMod = DB::table('S002V01TUSUA')->where([ ['USUA_IDUS', '=', $counter->USRMOD], ['USUA_NULI', '=', $line] ])->first(); $nameMod = $this->functionsController->joinName($usrMod->USUA_NOMB, $usrMod->USUA_APPA, $usrMod->USUA_APMA); $counter->USRMOD = $nameMod . " (" . $counter->USRMOD . ")"; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P01COCO', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó el contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $counter); } public function updateCounter(Request $request) { DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'scada' => 'required|string', 'equipment' => 'required|string', 'id_counter' => 'required|string', 'time_interval' => 'required|numeric', 'time_interval_unit' => 'required|string|in:seg,min,hor,dia', 'time_interval_tolerance' => 'required|numeric', 'time_interval_tolerance_unit' => 'required|string|in:seg,min,hor,dia' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idSCADA = $this->encryptionController->decrypt($form['scada']); if(!$idSCADA){ return $this->responseController->makeResponse(true, 'El ID del SCADA relacionado no está encriptado correctamente.', [], 400); } $scada = DB::table('S002V01TLISC')->where([ ['LISC_IDSC', '=', $idSCADA], ['LISC_NULI', '=', $form['linea']], ])->first(); if(is_null($scada)){ return $this->responseController->makeResponse(true, 'El SCADA relacionado no está registrado.', [], 404); } $equipmentCode = $this->encryptionController->decrypt($form['equipment']); if(!$equipmentCode){ return $this->responseController->makeResponse(true, 'El código del equipamiento relacionado no está encriptado correctamente.', [], 400); } $equipment = DB::table('S002V01TEQUI')->where([ ['EQUI_NULI', '=', $form['linea']], ['EQUI_COEQ', '=', $equipmentCode], ])->first(); if(is_null($equipment)){ return $this->responseController->makeResponse(true, 'El equipamiento relacionado no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($form['id_counter']); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador seleccionado no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_NULI', '=', $form['linea']], ['CONA_IDCO', '=', $idCounter] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador seleccionado no está registrado.', [], 404); } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $form['linea']] ])->update([ 'CONA_INLE' => $form['time_interval'], 'CONA_UTIL' => $form['time_interval_unit'], 'CONA_TOIN' => $form['time_interval_tolerance'], 'CONA_UTTI' => $form['time_interval_tolerance_unit'], 'CONA_IDSC' => $idSCADA, 'CONA_USMO' => $idUser, 'CONA_FEMO' => $nowStr ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P02RECO', 'Actualización', "El usuario $name (" . $usr->USUA_IDUS . ") actualizó el contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.'); } public function deleteCounter(Request $request) { DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'id_counter' => 'required|string' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($form['id_counter']); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador seleccionado no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_NULI', '=', $form['linea']], ['CONA_IDCO', '=', $idCounter] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador seleccionado no está registrado.', [], 404); } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $form['linea']] ])->update([ 'CONA_ESTA' => 'Eliminado', 'CONA_USMO' => $idUser, 'CONA_FEMO' => $nowStr ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F02ELCO', '-', 'Eliminación', "El usuario $name (" . $usr->USUA_IDUS . ") eliminó el contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.'); } public function updateActivator(Request $request) { DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'priority' => 'required|string|in:1,2,3,4', 'type' => 'required|string|in:CA,SI,ME,VA', 'condition' => 'required|json', 'counter' => 'required|string', 'id_activator' => 'required|string' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } //$priorities = ['MA' => '1', 'AL' => '2', 'ME' => '3', 'BA' => '4']; $types = ['CA' => 'Calendario', 'SI' => 'Sintoma', 'ME' => 'Medida', 'VA' => 'Valor']; $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($form['counter']); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador relacionado no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_NULI', '=', $form['linea']], ['CONA_IDCO', '=', $idCounter] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador relacionado no está registrado.', [], 404); } $idActivator = $this->encryptionController->decrypt($form['id_activator']); if(!$idActivator){ return $this->responseController->makeResponse(true, 'El ID del activador seleccionado no está encriptado correctamente.', [], 400); } $activator = DB::table('S002V01TACTI')->where([ ['ACTI_IDAC', '=', $idActivator], ['ACTI_NULI', '=', $form['linea']] ])->first(); if(is_null($activator)){ return $this->responseController->makeResponse(true, 'El activador seleccionado no está registrado.', [], 404); } $priority = $form['priority']; $type = $types[$form['type']]; $conditionArr = json_decode($form['condition'], true); if(count($conditionArr) == 0){ return $this->responseController->makeResponse(true, 'El arreglo de la condición de activación está vació.', [], 400); }else{ switch($form['type']){ case 'CA': if(count($conditionArr) != 5){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysCA = ['startDate', 'startHour', 'repeat', 'customRepeat', 'color']; foreach($keysCA as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } break; case 'SI': if(count($conditionArr) != 6){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysSI = ['sign', 'startDate', 'startHour', 'repeat', 'customRepeat', 'color']; foreach($keysSI as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } $idSymptom = $this->encryptionController->decrypt($conditionArr['sign']); if(!$idSymptom){ return $this->responseController->makeResponse(true, 'El ID del síntoma relacionado no está encriptado correctamente.', [], 400); } $symptom = DB::table('S002V01TLISI')->where([ ['LISI_IDSI', '=', $idSymptom], ['LISI_NULI', '=', $form['linea']] ])->first(); if(is_null($symptom)){ return $this->responseController->makeResponse(true, 'El síntoma relacionado no está registrado.', [], 404); }else if($symptom->LISI_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'El síntoma relacionado está eliminado.', [], 404); } $conditionArr['sign'] = $idSymptom; break; case 'ME': if(count($conditionArr) != 7){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysSI = ['minValue', 'maxValue', 'magnitude', 'customMagnitude', 'unit', 'customUnit', 'color']; foreach($keysSI as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } $idMagnitude = $this->encryptionController->decrypt($conditionArr['magnitude']); if(!$idMagnitude){ return $this->responseController->makeResponse(true, 'El ID de la magnitud relacionada no está encriptado correctamente.', [], 400); } $magnitude = DB::table('S002V01TMAGN')->where([ ['MAGN_NULI', '=', $form['linea']], ['MAGN_IDMA', '=', $idMagnitude] ])->first(); if(is_null($magnitude)){ return $this->responseController->makeResponse(true, 'La magnitud relacionada no está registrado.', [], 404); }else if($magnitude->MAGN_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La magnitud relacionada está eliminada.', [], 404); } $idUnit = $this->encryptionController->decrypt($conditionArr['unit']); if(!$idUnit){ return $this->responseController->makeResponse(true, 'El ID de la unidad relacionada no está encriptado correctamente.', [], 400); } $unit = DB::table('S002V01TLIME')->where([ ['LIME_IDME', '=', $idUnit], ['LIME_NULI', '=', $form['linea']], ['LIME_MAGN', '=', $idMagnitude], ])->first(); if(is_null($unit)){ return $this->responseController->makeResponse(true, 'La unidad relacionada no está registrado.', [], 404); }else if($unit->LIME_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La unidad relacionada está eliminada.', [], 404); } $conditionArr['magnitude'] = $idMagnitude ; $conditionArr['unit'] = $idUnit; break; case 'VA': if(count($conditionArr) != 7){ return $this->responseController->makeResponse(true, 'El arreglo de la condición tiene un formato inválido.', [], 400); } $keysVA = ['comparison', 'limitValue', 'magnitude', 'customMagnitude', 'unit', 'customUnit', 'color']; foreach($keysVA as $key){ if(!array_key_exists($key, $conditionArr)){ return $this->responseController->makeResponse(true, "El arreglo de la condición no contiene el elemento '$key'.", [], 400); } } $idMagnitude = $this->encryptionController->decrypt($conditionArr['magnitude']); if(!$idMagnitude){ return $this->responseController->makeResponse(true, 'El ID de la magnitud relacionada no está encriptado correctamente.', [], 400); } $magnitude = DB::table('S002V01TMAGN')->where([ ['MAGN_NULI', '=', $form['linea']], ['MAGN_IDMA', '=', $idMagnitude] ])->first(); if(is_null($magnitude)){ return $this->responseController->makeResponse(true, 'La magnitud relacionada no está registrado.', [], 404); }else if($magnitude->MAGN_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La magnitud relacionada está eliminada.', [], 404); } $idUnit = $this->encryptionController->decrypt($conditionArr['unit']); if(!$idUnit){ return $this->responseController->makeResponse(true, 'El ID de la unidad relacionada no está encriptado correctamente.', [], 400); } $unit = DB::table('S002V01TLIME')->where([ ['LIME_IDME', '=', $idUnit], ['LIME_NULI', '=', $form['linea']], ['LIME_MAGN', '=', $idMagnitude], ])->first(); if(is_null($unit)){ return $this->responseController->makeResponse(true, 'La unidad relacionada no está registrado.', [], 404); }else if($unit->LIME_ESTA == 'Eliminado'){ return $this->responseController->makeResponse(true, 'La unidad relacionada está eliminada.', [], 404); } $conditionArr['magnitude'] = $idMagnitude ; $conditionArr['unit'] = $idUnit; break; default: return $this->responseController->makeResponse(true, 'El tipo de contador es inválido.', [], 400); break; } } $conditionStr = json_encode($conditionArr); $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); DB::table('S002V01TACTI')->where([ ['ACTI_IDAC', '=', $idActivator], ['ACTI_NULI', '=', $form['linea']] ])->update([ 'ACTI_PRIO' => $priority, 'ACTI_TIAC' => $type, 'ACTI_COAC' => $conditionStr, 'ACTI_CORE' => $idCounter, 'ACTI_USMO' => $idUser, 'ACTI_FEMO' => $nowStr ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F01GEAC', 'S002V01P02REAC', 'Actualización', "El usuario $name (" . $usr->USUA_IDUS . ") actualizó el activador #$idActivator.", $idUser, $nowStr, 'S002V01S02ACTI' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.'); } public function deleteActivator(Request $request) { DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'id_activator' => 'required|string' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idActivator = $this->encryptionController->decrypt($form['id_activator']); if(!$idActivator){ return $this->responseController->makeResponse(true, 'El ID del activador seleccionado no está encriptado correctamente.', [], 400); } $activator = DB::table('S002V01TACTI')->where([ ['ACTI_IDAC', '=', $idActivator], ['ACTI_NULI', '=', $form['linea']] ])->first(); if(is_null($activator)){ return $this->responseController->makeResponse(true, 'El activador seleccionado no está registrado.', [], 404); } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); DB::table('S002V01TACTI')->where([ ['ACTI_IDAC', '=', $idActivator], ['ACTI_NULI', '=', $form['linea']] ])->update([ 'ACTI_ESTA' => 'Eliminado', 'ACTI_USMO' => $idUser, 'ACTI_FEMO' => $nowStr ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F01GEAC', 'S002V01P02REAC', 'Eliminación', "El usuario $name (" . $usr->USUA_IDUS . ") eliminó el activador #$idActivator.", $idUser, $nowStr, 'S002V01S02ACTI' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.'); } public function getCountersByEquipment($equipmentCode, $idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $equipmentCode = $this->encryptionController->decrypt($equipmentCode); if(!$equipmentCode){ return $this->responseController->makeResponse(true, 'El código del equipamiento relacionado no está encriptado correctamente.', [], 400); } $equipment = DB::table('S002V01TEQUI')->where([ ['EQUI_COEQ', '=', $equipmentCode], ['EQUI_NULI', '=', $line] ])->first(); if(is_null($equipment)){ return $this->responseController->makeResponse(true, 'El equipamiento relacionado no está registrado.', [], 404); } $counters = DB::table('S002V01TCONA')->select([ 'CONA_IDCO AS ID_CONTADOR', 'ACTI_IDAC AS ID_ACTIVADOR', 'ACTI_PRIO AS PRIORIDAD', 'CONA_ESTA AS ESTADO', 'CONA_FERE AS FECREG', 'CONA_USRE AS USRREG', 'CONA_FEMO AS FECMOD', 'CONA_USMO AS USRMOD' ])->join('S002V01TACTI', 'ACTI_CORE', '=', 'CONA_IDCO')->where([ ['CONA_NULI', '=', $line], ['CONA_COEQ', '=', $equipmentCode] ])->orderBy('CONA_IDCO', 'asc')->get()->all(); foreach($counters as $key=>$counter){ $counter->ID_CONTADOR = $this->encryptionController->encrypt($counter->ID_CONTADOR); if(!is_null($counter->ID_ACTIVADOR)){ $counter->ID_ACTIVADOR = $this->encryptionController->encrypt($counter->ID_ACTIVADOR); } $usrReg = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $counter->USRREG] ])->first(); $nameReg = $this->functionsController->joinName($usrReg->USUA_NOMB, $usrReg->USUA_APPA, $usrReg->USUA_APMA); $counter->USRREG = $nameReg . " (" . $counter->USRREG . ")"; if(!is_null($counter->USRMOD)){ $usrMod = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $counter->USRMOD] ])->first(); $nameMod = $this->functionsController->joinName($usrMod->USUA_NOMB, $usrMod->USUA_APPA, $usrMod->USUA_APMA); $counter->USRMOD = $nameMod . " (" . $counter->USRMOD . ")"; } $counters[$key] = $counter; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P01COCO', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó los contadores relacionados al equipamiento $equipmentCode.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $counters); } public function getCounterLastMeasure($idCounter, $idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($idCounter); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $line] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador solicitado no está registrado.', [], 404); } $measure = DB::table('S002V01TMEDI')->select([ 'MEDI_IDME AS ID_MEDIDA', 'MEDI_CORE AS CONTADOR', 'MEDI_VALO AS VALOR', 'MEDI_WSRE AS ID_SERVICIO_WEB', 'LSWE_URLX AS URL_SERVICIO_WEB', 'MEDI_HORE AS HORA_REGISTRO', ])->join('S002V01TLSWE', 'LSWE_IDSW', '=', 'MEDI_WSRE')->where([ ['MEDI_NULI', '=', $line], ['MEDI_CORE', '=', $idCounter] ])->orderBy('MEDI_HORE', 'desc')->first(); if(!is_null($measure)){ $measure->ID_MEDIDA = $this->encryptionController->encrypt($measure->ID_MEDIDA); $measure->CONTADOR = $this->encryptionController->encrypt($measure->CONTADOR); $measure->ID_SERVICIO_WEB = $this->encryptionController->encrypt($measure->ID_SERVICIO_WEB); } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P01COCO', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó las medidas relacionadas al contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", is_null($measure) ? [] : [$measure]); } public function getCounterMeasures($idCounter, $order, $direction, $limit, $offset, $idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($idCounter); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $line] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador solicitado no está registrado.', [], 404); } $enabledOrders = [ 'ID_MEDIDA' => 'MEDI_IDME', 'VALOR' => 'MEDI_VALO', 'FECREG' => 'MEDI_HORE' ]; if(!isset($enabledOrders[$order])){ return $this->responseController->makeResponse(true, 'El orden solicitado para los registros es inválido.', [], 404); } $orderDB = $enabledOrders[$order]; $enbaledDirections = [ 'D' => 'desc', 'A' => 'asc' ]; if(!isset($enbaledDirections[$direction])){ return $this->responseController->makeResponse(true, 'La dirección del orden solicitado para los registros es inválida.', [], 404); } $directionDB = $enbaledDirections[$direction]; $limit = intval($limit); $offset = intval($offset); $measures = DB::table('S002V01TMEDI')->select([ 'MEDI_IDME AS ID_MEDIDA', 'MEDI_CORE AS CONTADOR', 'MEDI_VALO AS VALOR', 'MEDI_WSRE AS ID_SERVICIO_WEB', 'LSWE_URLX AS URL_SERVICIO_WEB', 'MEDI_HORE AS HORA_REGISTRO', ])->join('S002V01TLSWE', 'LSWE_IDSW', '=', 'MEDI_WSRE')->where([ ['MEDI_NULI', '=', $line], ['MEDI_CORE', '=', $idCounter] ])->orderBy($orderDB, $directionDB) ->offset($offset)->limit($limit)->get()->all(); foreach($measures as $key=>$measure){ $measure->ID_MEDIDA = $this->encryptionController->encrypt($measure->ID_MEDIDA); $measure->CONTADOR = $this->encryptionController->encrypt($measure->CONTADOR); $measure->ID_SERVICIO_WEB = $this->encryptionController->encrypt($measure->ID_SERVICIO_WEB); $measures[$key]; } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P01COCO', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó las medidas relacionadas al contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", $measures); } public function getCounterMeasuresLength($idCounter, $idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($idCounter); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $line] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador solicitado no está registrado.', [], 404); } $measures = DB::table('S002V01TMEDI')->select([ 'MEDI_IDME AS ID_MEDIDA', 'MEDI_CORE AS CONTADOR', 'MEDI_VALO AS VALOR', 'MEDI_WSRE AS ID_SERVICIO_WEB', 'LSWE_URLX AS URL_SERVICIO_WEB', 'MEDI_HORE AS HORA_REGISTRO', ])->join('S002V01TLSWE', 'LSWE_IDSW', '=', 'MEDI_WSRE')->where([ ['MEDI_NULI', '=', $line], ['MEDI_CORE', '=', $idCounter] ])->get()->all(); $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $line, 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P01COCO', 'Consulta', "El usuario $name (" . $usr->USUA_IDUS . ") consultó las medidas relacionadas al contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line); return $this->responseController->makeresponse(false, "EXITO", ['MEASURES_LENGTH' => count($measures)]); } public function getRelatedCounters($idCounter, $idUser, $line) { DB::enableQueryLog(); $idUser = $this->encryptionController->decrypt($idUser); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $line], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($idCounter); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $line] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador solicitado no está registrado.', [], 404); } var_dump($idCounter); } public function relateCounters(Request $request) { DB::enableQueryLog(); $validator = Validator::make($request->all(), [ 'id_user' => 'required|string', 'linea' => 'required|integer', 'id_counter' => 'required|string', 'related_counters' => 'required|json' ]); if($validator->fails()){ return $this->responseController->makeResponse( true, "Se encontraron uno o más errores.", $this->responseController->makeErrors( $validator->errors()->messages() ), 401 ); } $form = $request->all(); $idUser = $this->encryptionController->decrypt($form['id_user']); if(!$idUser){ return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400); } $usr = DB::table('S002V01TUSUA')->where([ ['USUA_NULI', '=', $form['linea']], ['USUA_IDUS', '=', $idUser], ])->first(); if(is_null($usr)){ return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404); } $idCounter = $this->encryptionController->decrypt($form['id_counter']); if(!$idCounter){ return $this->responseController->makeResponse(true, 'El ID del contador seleccionado no está encriptado correctamente.', [], 400); } $counter = DB::table('S002V01TCONA')->where([ ['CONA_NULI', '=', $form['linea']], ['CONA_IDCO', '=', $idCounter] ])->first(); if(is_null($counter)){ return $this->responseController->makeResponse(true, 'El contador seleccionado no está registrado.', [], 404); } $relatedCountersRegisteredArr = json_decode($counter->CONA_COVI, true); $relatedCountersArr = json_decode($form['related_counters'], true); if(!is_array($relatedCountersArr)){ return $this->responseController->makeResponse(true, 'El campo de contadores vinculados no es un arreglo.', [], 400); } $now = $this->functionsController->now(); $nowStr = $now->toDateTimeString(); $relatedCountersArrDec = []; foreach($relatedCountersArr as $relatedCounterEnc){ $relatedCounterDec = $this->encryptionController->decrypt($relatedCounterEnc); $relatedCounter = DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $relatedCounterDec], ['CONA_NULI', '=', $form['linea']] ])->first(); if(is_null($relatedCounter)){ return $this->responseController->makeResponse(true, "El contador #$relatedCounterDec no está registrado.", [], 404); } if(!in_array($relatedCounter, $relatedCountersRegisteredArr)){ $relatedCountersRegisteredArr[] = $relatedCounterDec; } $relatedCounterRelatedCountersArr = json_decode($relatedCounter->CONA_COVI); if(!in_array($idCounter, $relatedCounterRelatedCountersArr)){ $relatedCounterRelatedCountersArr[] = $idCounter; } $relatedCounterCOVI = json_encode($relatedCounterRelatedCountersArr); DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $relatedCounterDec], ['CONA_NULI', '=', $form['linea']] ])->update([ 'CONA_COVI' => $relatedCounterCOVI, 'CONA_USMO' => $idUser, 'CONA_FEMO' => $nowStr ]); $relatedCountersArrDec[] = $relatedCounterDec; } $countersWithRelation = DB::table('S002V01TCONA')->where('CONA_NULI', '=', $form['linea']) ->whereJsonContains('CONA_COVI', $idCounter)->get()->all(); foreach($countersWithRelation as $counterWithRelation){ if(!in_array($counterWithRelation->CONA_IDCO, $relatedCountersArrDec)){ $counterWithRelationRelatedCounters = json_decode($counterWithRelation->CONA_COVI, true); $counterWithRelationRelatedCountersFn = []; foreach($counterWithRelationRelatedCounters as $counterWithRelationRelatedCounter){ if($idCounter != $counterWithRelationRelatedCounter){ $counterWithRelationRelatedCountersFn[] = $counterWithRelationRelatedCounter; } } $counterWithRelationCOVI = json_encode($counterWithRelationRelatedCountersFn); DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $counterWithRelation->CONA_IDCO], ['CONA_NULI', '=', $form['linea']] ])->update([ 'CONA_COVI' => $counterWithRelationCOVI, 'CONA_USMO' => $idUser, 'CONA_FEMO' => $nowStr ]); } } $relatedCountersFn = []; foreach($relatedCountersRegisteredArr as $relatedCounterRegistered){ if(in_array($relatedCounterRegistered, $relatedCountersArrDec) && !in_array($relatedCounterRegistered, $relatedCountersFn)){ $relatedCountersFn[] = $relatedCounterRegistered; } } $covi = json_encode($relatedCountersFn); DB::table('S002V01TCONA')->where([ ['CONA_IDCO', '=', $idCounter], ['CONA_NULI', '=', $form['linea']] ])->update([ 'CONA_COVI' => $covi, 'CONA_USMO' => $idUser, 'CONA_FEMO' => $nowStr ]); $actions = DB::getQueryLog(); $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA); $idac = $this->functionsController->registerActivity( $form['linea'], 'S002V01M06COAC', 'S002V01F01GECO', 'S002V01P02RECO', 'Actualización', "El usuario $name (" . $usr->USUA_IDUS . ") actualizó los contadores vinculados al contador #$idCounter.", $idUser, $nowStr, 'S002V01S01CONT' ); $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']); return $this->responseController->makeResponse(false, 'EXITO.'); } }