public function postSaveplan() { if (Request::ajax()) { if (Input::get('savePlanAll') != '') { $post = Input::get('savePlanAll'); //Resultado del proceso $saveActu = array(); //Todos los datos $dataArray = explode("|^~", $post); /** * $genArray[0]: empresa_id * $genArray[1]: celula_id * $genArray[2]: tecnico id * $genArray[3]: fecha agenda: dd/mm/yyyy */ $genArray = explode("|", $dataArray[0]); $actuArray = explode("|^", $dataArray[1]); foreach ($actuArray as $key => $val) { $dbCommit = true; DB::beginTransaction(); /** * $data[0]: 'Averia' o 'Provision' * $data[1]: codigo (requerimiento o averia) * $data[2]: id_gestion (''=temporal, num=gestionada) * $data[3]: horario_id * $data[4]: 1=coordinado,0=no coordinado * $data[5]: Latitud * $data[6]: Longitud */ $data = explode("|", $val); /** * Validar si temporal cambio a gestionado */ if (trim($data[2]) == '' or trim($data[2]) == 0) { $arrTmpGes = DB::table('ultimos_movimientos')->where('codactu', $data[1])->first(); $arrTmpGes = Helpers::stdToArray($arrTmpGes); if (count($arrTmpGes) > 0 and isset($arrTmpGes['gestion_id'])) { //ID de gestion $data[2] = $arrTmpGes['gestion_id']; $data[4] = $arrTmpGes['coordinado']; } } $date = substr($genArray[3], 6, 4) . "-" . substr($genArray[3], 3, 2) . "-" . substr($genArray[3], 0, 2); $dia_agenda = date('N', strtotime($date)); $tablatmp = Config::get("wpsi.db.tmp_" . strtolower($data[0])); $tmpdata = array(); //$actividad_id = 0; $tmptable = new Tmptable(); $celula = explode("_", $genArray[1]); //Origen Temporal if ($data[0] == "Averia") { //$actividad_id = 1; $tmpdata = $tmptable->getAveria($data[1]); } if ($data[0] == "Provision") { //$actividad_id = 2; $tmpdata = $tmptable->getProvision($data[1]); } $actividad = DB::table('actividades')->where('nombre', $data[0])->first(); //Horario $horario = DB::table('horarios')->where('id', $data[3])->first(); //Tecnico $objTecnico = DB::table('tecnicos')->where('id', $genArray[2])->first(); //Componentes $arrComponentes = array(); $cmp = Helpers::ruta('cat_componente/cargar', 'POST', array('codactu' => $data[1]), false); $cmp = Helpers::stdToArray($cmp); if ($cmp["rst"] == 1 and count($cmp["datos"]) > 0) { foreach ($cmp["datos"] as $val) { $arrComponentes[] = $val["nombre"]; } } //Respuesta GestionMovimiento $rgm = array(); if ($data[2] == 0) { if (isset($tmpdata[0])) { //Temporal $savedata = $tmpdata[0]; $savedata->actividad = $data[0]; $savedata->actividad_id = $actividad->id; $savedata->nombre_cliente_critico = $savedata->nombre_cliente; $savedata->telefono_cliente_critico = $savedata->telefono; $savedata->celular_cliente_critico = $savedata->telefono; $quiebre = DB::table('quiebres')->where('apocope', $savedata->quiebre)->first(); $empresa = DB::table('empresas')->where('nombre', $savedata->eecc_final)->first(); $zonal = DB::table('zonales')->where('abreviatura', $savedata->zonal)->first(); $tecnico = DB::table('tecnicos')->where('carnet_tmp', $savedata->zonal)->first(); $savedata->quiebre_id = $quiebre->id; $savedata->empresa_id = $genArray[0]; $savedata->zonal_id = $zonal->id; //Motivo gestion $savedata->estado = 2; $savedata->motivo = 1; $savedata->submotivo = 1; $savedata->flag_tecnico = 1; $savedata->horario_id = $data[3]; $savedata->dia_id = $dia_agenda; $savedata->fecha_agenda = $date; $savedata->celula = $celula[1]; $savedata->tecnico = $genArray[2]; $savedata->hora_agenda = $horario->horario; $savedata->duration = 2; $savedata->carnet = $objTecnico->carnet_tmp; $savedata->coordinado2 = 'NO'; $savedata->velocidad = ""; $velocidad = explode("|", $savedata->paquete); if (isset($velocidad[2])) { $savedata->velocidad = $velocidad[2]; } $savedata->estado_agendamiento = '1-1'; $savedata->submodulo_id = 1; $savedata->y = $data[5]; $savedata->x = $data[6]; $savedata->componente_text = $arrComponentes; //Grabar gestión $rgm = Helpers::ruta('gestion_movimiento/crear', 'POST', Helpers::stdToArray($savedata), false); $rgm = Helpers::stdToArray($rgm); $saveActu[$data[0]][$data[1]] = $rgm; /** * Validar si se enviará a officetrack */ $valida = array(); //Si cumple con el envio a OT acitividad + quiebre $valida["actividad_id"] = $savedata->actividad_id; $valida["quiebre_id"] = $savedata->quiebre_id; //El estado del tecnico de officetrack $valida["tecnico_id"] = $savedata->tecnico; $valida["celula_id"] = $savedata->celula; //El estado de Agendamiento para officetrack $valida["motivo_id"] = 1; $valida["submotivo_id"] = 1; $valida["estado_id"] = 2; //Si anteriormente se realizó una transacción OT $valida["transmision"] = 0; $rvalida = Helpers::ruta('officetrack/validar', 'POST', $valida, false); //Puede enviar a OT y Grabó en DB if ($rvalida == "1" and $rgm['rst'] == "1") { //Recuperar ID de gestion $savedata->gestion_id = $rgm['gestion_id']; $otdata["otdata"] = Helpers::stdToArray($savedata); $rot = Helpers::ruta('officetrack/enviartarea', 'POST', $otdata, false); $rot = Helpers::stdToArray($rot); $saveActu[$data[0]][$data[1]]['officetrack'] = $rot['officetrack']; } else { $saveActu[$data[0]][$data[1]]['officetrack'] = "Envio no valido"; $dbCommit = false; $rgm["msj"] = "Envio no valido"; $geserror = ""; if (isset($rgm['err'])) { $geserror = base64_decode($rgm['err']); } $rgm["err"] = base64_encode($rgm["msj"] . $rvalida . $geserror); } unset($savedata); } } else { if ($data[2] > 0) { //Origen Gestionado $geoplan = new Geoplan(); $ultimo = $geoplan->getUltimoMovimiento($data[2]); $gesmov = $ultimo["datos"][0]; if (isset($tmpdata[0])) { $savedata = Helpers::stdToArray($tmpdata[0]); } $ultimov = DB::table('ultimos_movimientos')->where('gestion_id', $data[2])->first(); $savedata = Helpers::stdToArray($ultimov); //Coordinado con cliente if ($data[4] == 1) { $horario = DB::table('horarios')->where('id', $ultimov->horario_id)->first(); $data[3] = $horario->id; $dia_agenda = $ultimov->dia_id; $date = $ultimov->fecha_agenda; } $savedata["actividad"] = $data[0]; $savedata["actividad_id"] = $actividad->id; $savedata["gestion_id"] = $data[2]; $savedata["empresa_id"] = $genArray[0]; $savedata["zonal_id"] = $gesmov->zonal_id; $savedata["estado"] = 2; $savedata["motivo"] = 1; $savedata["submotivo"] = 1; $savedata["observacion2"] = ""; $savedata["coordinado2"] = ""; $savedata["flag_tecnico"] = 1; $savedata["horario_id"] = $data[3]; $savedata["dia_id"] = $dia_agenda; $savedata["fecha_agenda"] = $date; $savedata["celula"] = $celula[1]; $savedata["tecnico"] = $genArray[2]; $savedata["hora_agenda"] = $horario->horario; $savedata["duration"] = 60; $savedata["estado_agendamiento"] = '1-1'; $savedata["submodulo_id"] = 1; $savedata["y"] = $data[5]; $savedata["x"] = $data[6]; $savedata["componente_text"] = $arrComponentes; //Datos faltantes para officetrack if (!isset($savedata["quiebre"])) { $quiebre = DB::table('quiebres')->where('id', $savedata["quiebre_id"])->first(); $savedata["quiebre"] = $quiebre->apocope; } if (!isset($savedata["eecc_final"])) { $quiebre = DB::table('empresas')->where('id', $savedata["empresa_id"])->first(); $savedata["eecc_final"] = $quiebre->nombre; } if (!isset($savedata["cr_observacion"])) { $savedata["cr_observacion"] = $savedata["observacion"]; } if (!isset($savedata["carnet"])) { $savedata["carnet"] = $objTecnico->carnet_tmp; } $savedata["velocidad"] = ""; if (isset($savedata["paquete"])) { $velocidad = explode("|", $savedata["paquete"]); if (isset($velocidad[2])) { $savedata["velocidad"] = $velocidad[2]; } } /** * Validar si se enviará a officetrack */ $valida = array(); //Si cumple con el envio a OT acitividad + quiebre $valida["actividad_id"] = $actividad->id; $valida["quiebre_id"] = $gesmov->quiebre_id; //El estado del tecnico de officetrack $valida["tecnico_id"] = $genArray[2]; $valida["celula_id"] = $celula[1]; //El estado de Agendamiento para officetrack $valida["motivo_id"] = 1; $valida["submotivo_id"] = 1; $valida["estado_id"] = 2; //Si anteriormente se realizó una transacción OT $valida["transmision"] = $gesmov->transmision; $rvalida = Helpers::ruta('officetrack/validar', 'POST', $valida, false); //Grabar gestión $rgm = Helpers::ruta('gestion_movimiento/crear', 'POST', Helpers::stdToArray($savedata), false); $rgm = Helpers::stdToArray($rgm); $saveActu[$data[0]][$data[1]] = $rgm; //Envia a OT y Grabó gestión if ($rvalida == "1" and $rgm['rst'] == "1") { $otdata["otdata"] = $savedata; $rot = Helpers::ruta('officetrack/enviartarea', 'POST', $otdata, false); $rot = Helpers::stdToArray($rot); $saveActu[$data[0]][$data[1]]["officetrack"] = $rot['officetrack']; } else { $saveActu[$data[0]][$data[1]]["officetrack"] = "Envio no valido"; $dbCommit = false; $rgm["msj"] = "Envio no valido"; $geserror = ""; if (isset($rgm['err'])) { $geserror = base64_decode($rgm['err']); } $rgm["err"] = base64_encode($rgm["msj"] . $rvalida . $geserror); } unset($savedata); } } //Commit o Rollback if ($dbCommit) { DB::commit(); } else { DB::rollback(); $custom["code"] = "R001"; $custom["file"] = __FILE__; $custom["line"] = __LINE__; $custom["message"] = base64_decode($rgm["err"]); $custom["trace"] = "RollBack Geo Planificacion"; $custom["usuario_id"] = Auth::user()->id; $custom["date"] = date("Y-m-d H:i:s"); $this->_errorController->saveCustomError($custom); $saveActu[$data[0]][$data[1]]["rst"] = 2; $saveActu[$data[0]][$data[1]]["msj"] = "No se registra movimiento"; } } return json_encode($saveActu); } } }
/** * devolver la distancia de la tarea al punto x, y * POST /api/distanciaactu * @param int gestion_id * @param int actu * @param int x * @param int y * @return Response */ public function postDistanciaactu() { if ((Input::has('gestion_id') || Input::has('actu')) && Input::has('x') && Input::has('y')) { $gestionId = Input::get('gestion_id', ''); $actu = Input::get('actu', ''); $x = Input::get('x'); $y = Input::get('y'); $distancia = 0; //query if ($gestionId !== '') { $gestionDetalle = GestionDetalle::Where('gestion_id', $gestionId)->first(); $tabla = 'gestiones_detalles'; $gestionX = $gestionDetalle->x; $gestionY = $gestionDetalle->y; } elseif ($actu !== '') { $tmptable = new Tmptable(); $tmpdata = $tmptable->getAveria($actu); if (isset($tmpdata[0])) { //return averia x,y $tabla = 'tmp_averia'; $gestionX = $tmpdata[0]->x; $gestionY = $tmpdata[0]->y; } else { $tmpdata = $tmptable->getProvision($actu); if (isset($tmpdata[0])) { //return averia x,y $tabla = 'tmp_provision'; $gestionX = $tmpdata[0]->x; $gestionY = $tmpdata[0]->y; } else { return Response::json(array('rst' => 0, 'error' => 'no se encontro x,y para este codigo')); } } } //distancia $distancia = sqrt(pow($gestionX - $x, 2) + pow($gestionY - $y, 2)); //metros $distancia = $distancia * 100000; return Response::json(array('rst' => 1, 'tabla' => $tabla, 'distancia' => $distancia)); } else { return Response::json(array('rst' => 0, 'error' => 'parametros incorrectos')); } }