public function updateConductoresEnTurno(Request $request, $ruta_id)
 {
     $noty = new NotificacionController();
     $data = $request->json()->all();
     $turnos_actuales = [];
     $ruta = Ruta::find($ruta_id);
     foreach ($data['turnos'] as $turno) {
         $turnos_actuales[$turno['conductor_id']] = ['turno' => $turno['turno']];
     }
     if ($ruta->toUpdateTurnos()->sync($turnos_actuales)) {
         $ruta = $ruta->destino->ciudad;
         foreach ($data['turnos'] as $turno) {
             if ($request['accion'] == 'agregar') {
                 $mensaje = "Has sido agregado a la ruta hacia {$ruta->nombre} en el turno " . $turno['turno'];
                 $noty->enviarNotificacionConductores($mensaje, $turno['conductor_id'], 'Actualizacion turno', $ruta_id);
             }
             if ($request['accion'] == 'quitar') {
                 $mensaje = "Has sido removido de los turnos de la ruta hacia {$ruta->nombre}";
                 $noty->enviarNotificacionConductores($mensaje, $turno['conductor_id'], 'Actualizacion turno', $ruta_id);
             }
             if ($request['accion'] == 'default') {
                 $mensaje = "Estas en el turno " . $turno['turno'] . " en la ruta hacia {$ruta->nombre}";
                 $noty->enviarNotificacionConductores($mensaje, $turno['conductor_id'], 'Actualizacion turno', $ruta_id);
             }
         }
         return response()->json(['mensaje' => 'turnos modifcados'], 201);
     } else {
         return response()->json(['mensajError' => 'error al actualizar lso turnos'], 400);
     }
 }
 public function crearViaje($conductor_id, $ruta_id, $deducciones)
 {
     $viaje = new Viaje();
     $totalD = 0;
     $noty = new NotificacionController();
     $viaje->conductor_id = $conductor_id;
     $viaje->ruta_id = $ruta_id;
     $viaje->fecha = date("Y-m-d");
     $pasajeros = Pasajero::select('*')->where('conductor_id', $conductor_id)->where('estado', '=', 'Asignado')->get();
     $giros = Giro::select('*')->where('conductor_id', $conductor_id)->where('estado', '=', 'Asignado')->get();
     $paquetes = Paquete::select('*')->where('conductor_id', $conductor_id)->where('estado', '=', 'Asignado')->get();
     if ($viaje->save()) {
         $noty->enviarNotificacionConductores('La central a autorizado tu salida, acercate a secretaria para recivir la planilla.', $conductor_id, 'Despacho');
         foreach ($pasajeros as $pasajero) {
             $viaje->pasajeros()->attach($pasajero['id']);
             $noty->enviarNotificacionClientes('El conductor a salido a recogerlo, pronto pasara por usted, sea paciente', $pasajero['identificacion'], 'Busqueda');
             $viaje['datos'] = DB::table('datos_solicitudes_pasajeros')->where('identificacion', $pasajero->identificacion)->join('solicitudes_cliente', 'datos_solicitudes_pasajeros.solicitud_id', '=', 'solicitudes_cliente.id')->select('solicitudes_cliente.estado', 'solicitudes_cliente.id', 'solicitudes_cliente.cliente_id')->where('solicitudes_cliente.estado', '<>', 'f')->get();
             foreach ($viaje['datos'] as $dato) {
                 DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'v']);
                 $noty->enviarNotificacionClientes('El vehiculo a salido de la central, por favor se paciente', $dato->cliente_id, 'Vehiculo en camino');
             }
         }
         foreach ($giros as $giro) {
             $viaje->giros()->attach($giro['id']);
             $viaje['datos'] = DB::table('datos_solicitudes_girospaquetes')->join('solicitudes_cliente', 'datos_solicitudes_girospaquetes.solicitud_id', '=', 'solicitudes_cliente.id')->join('clientes', 'solicitudes_cliente.cliente_id', '=', 'clientes.id')->join('giros', 'datos_solicitudes_girospaquetes.destinatario', '=', 'giros.nombre_receptor')->select('solicitudes_cliente.id', 'solicitudes_cliente.estado', 'solicitudes_cliente.cliente_id', 'clientes.identificacion')->where('clientes.identificacion', $giro->ide_remitente)->where('solicitudes_cliente.tipo', 'giro')->where('solicitudes_cliente.estado', '<>', 'f')->get();
             foreach ($viaje['datos'] as $dato) {
                 DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'v']);
                 $noty->enviarNotificacionClientes('El vehiculo a salido de la central, por favor se paciente', $dato->cliente_id, 'Vehiculo en camino');
             }
         }
         foreach ($paquetes as $paquete) {
             $viaje->paquetes()->attach($paquete['id']);
             $viaje['datos'] = DB::table('datos_solicitudes_girospaquetes')->join('solicitudes_cliente', 'datos_solicitudes_girospaquetes.solicitud_id', '=', 'solicitudes_cliente.id')->join('clientes', 'solicitudes_cliente.cliente_id', '=', 'clientes.id')->join('paquetes', 'datos_solicitudes_girospaquetes.destinatario', '=', 'paquetes.nombre_receptor')->select('solicitudes_cliente.id', 'solicitudes_cliente.estado', 'solicitudes_cliente.cliente_id', 'clientes.identificacion')->where('clientes.identificacion', $paquete->ide_remitente)->where('solicitudes_cliente.tipo', 'paquete')->where('solicitudes_cliente.estado', '<>', 'f')->get();
             foreach ($viaje['datos'] as $dato) {
                 DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'v']);
                 $noty->enviarNotificacionClientes('El vehiculo a salido de la central, por favor se paciente', $dato->cliente_id, 'Vehiculo en camino');
             }
         }
         foreach ($deducciones as $deduccion) {
             $viaje->deducciones()->attach($deduccion['id']);
             if ($deduccion['nombre'] == 'PASAJE') {
                 $valorP = $deduccion['valor'];
             }
             if ($deduccion['nombre'] != 'PASAJE') {
                 $totalD += $deduccion['valor'];
             }
         }
         $total = $totalD + count($pasajeros) * $valorP;
         $this->crearPlanilla($viaje->id, $viaje->conductor_id, $total);
         $planilla = $this->generarDatosPlanilla($viaje->id);
         $estado = Conductor::find($viaje->conductor_id);
         $estado->estado = 'En ruta';
         $estado->save();
         return array('viaje' => $viaje, 'planilla' => $planilla);
     } else {
         return 'No se pudo crear el viaje';
     }
 }
 /**
  * Store a newly created resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return \Illuminate\Http\Response
  */
 public function store(Request $request, $empresa_id)
 {
     $noty = new NotificacionController();
     $conductores = \DB::table('usuarios')->select('reg_id')->where('rol_id', 4)->get();
     $i = 0;
     $reg_ids = [];
     foreach ($conductores as $reg_id) {
         $reg_ids[$i] = $reg_id->reg_id;
         $i++;
     }
     $mensaje = 'La empresa ha agendado una nueva actividad';
     //        try{
     $data = $request->json()->all();
     $noty->enviarNotificacionConductores($mensaje, $reg_ids, 'Acividad');
     $actividad = new Actividad($data);
     if (!Empresa::find($empresa_id)->agendaActividades()->save($actividad)) {
         return response()->json(['mensajeError' => 'no se ha podido almacenar el registro'], 400);
     }
     return response()->json(['mensaje' => 'se guardo correctamente el registro'], 201);
     //        } catch (\Exception $exc) {
     //            return response()->json(array("exception"=>$exc->getMessage()), 400);
     //        }
 }
 public function finalizarViaje(Request $request)
 {
     $noty = new NotificacionController();
     $conductor = DB::table('viajes')->where('conductor_id', $request['id'])->where('estado', 'En ruta')->first();
     if ($conductor) {
         $viaje = Viaje::find($conductor->id);
         if ($viaje) {
             if ($viaje->update(['estado' => 'Finalizado'])) {
                 foreach ($viaje->pasajeros as $pasajero) {
                     $pasajero->estado = 'Finalizado';
                     if ($pasajero->save()) {
                         $viaje['datos'] = DB::table('datos_solicitudes_pasajeros')->where('identificacion', $pasajero->identificacion)->join('solicitudes_cliente', 'datos_solicitudes_pasajeros.solicitud_id', '=', 'solicitudes_cliente.id')->select('solicitudes_cliente.estado', 'solicitudes_cliente.id', 'solicitudes_cliente.cliente_id')->where('solicitudes_cliente.estado', '<>', 'f')->get();
                         foreach ($viaje['datos'] as $dato) {
                             DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'f']);
                             $noty->enviarNotificacionClientes('Finalizo su solicitud, gracias por haber echo uso de nuestro servicio', $dato->cliente_id, 'Finalizado');
                         }
                     }
                 }
                 foreach ($viaje->giros as $giro) {
                     $giro->estado = 'Finalizado';
                     if ($giro->save()) {
                         $viaje['datos'] = DB::table('datos_solicitudes_girospaquetes')->join('solicitudes_cliente', 'datos_solicitudes_girospaquetes.solicitud_id', '=', 'solicitudes_cliente.id')->join('clientes', 'solicitudes_cliente.cliente_id', '=', 'clientes.id')->join('giros', 'datos_solicitudes_girospaquetes.destinatario', '=', 'giros.nombre_receptor')->select('solicitudes_cliente.id', 'solicitudes_cliente.estado', 'solicitudes_cliente.cliente_id', 'clientes.identificacion')->where('clientes.identificacion', $giro->ide_remitente)->where('solicitudes_cliente.tipo', 'giro')->where('solicitudes_cliente.estado', '<>', 'f')->get();
                         foreach ($viaje['datos'] as $dato) {
                             DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'f']);
                             $noty->enviarNotificacionClientes('Finalizo su solicitud, gracias por haber echo uso de nuestro servicio', $dato->cliente_id, 'Finalizado');
                         }
                     }
                 }
                 foreach ($viaje->paquetes as $paquete) {
                     $paquete->estado = 'Finalizado';
                     if ($paquete->save()) {
                         $viaje['datos'] = DB::table('datos_solicitudes_girospaquetes')->join('solicitudes_cliente', 'datos_solicitudes_girospaquetes.solicitud_id', '=', 'solicitudes_cliente.id')->join('clientes', 'solicitudes_cliente.cliente_id', '=', 'clientes.id')->join('paquetes', 'datos_solicitudes_girospaquetes.destinatario', '=', 'paquetes.nombre_receptor')->select('solicitudes_cliente.id', 'solicitudes_cliente.estado', 'solicitudes_cliente.cliente_id', 'clientes.identificacion')->where('clientes.identificacion', $paquete->ide_remitente)->where('solicitudes_cliente.tipo', 'paquete')->where('solicitudes_cliente.estado', '<>', 'f')->get();
                         foreach ($viaje['datos'] as $dato) {
                             DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'f']);
                             $noty->enviarNotificacionClientes('Finalizo su solicitud, gracias por haber echo uso de nuestro servicio', $dato->cliente_id, 'Finalizado');
                         }
                     }
                 }
             }
         } else {
             return JsonResponse::create('No existe un viaje para esta id');
         }
     } else {
         return JsonResponse::create('No se encontro el viaje asociado al conductor');
     }
     return JsonResponse::create($viaje);
 }
 public function moverPasajero(Request $request, $pasajero_id)
 {
     $noty = new NotificacionController();
     $pasajero = $this->show($pasajero_id);
     if ($pasajero->conductor_id) {
         json_decode($noty->enviarNotificacionConductores('Se te fue retirado un pasajero que se te habia asignado', $pasajero->conductor_id, 'Pasajero'));
     }
     $pasajero->conductor_id = $request->conductor_id;
     $pasajero->estado = 'Asignado';
     if ($pasajero->save()) {
         return JsonResponse::create(array('message' => 'Se movio el pasajero conrrectamente de conductor.', json_decode($noty->enviarNotificacionConductores('Se te asigno un nuevo pasajero', $request->conductor_id, 'Pasajero'))));
     }
 }
 public function rechazarSolicitud(Request $request, $solicitud_id)
 {
     $noty = new NotificacionController();
     $solicitud = Solicitud::find($solicitud_id);
     $solicitud->estado = 'r';
     $message = $request->causa_rechazo;
     $solicitud->causa_rechazo = $message;
     if ($solicitud->save()) {
         $noty->enviarNotificacionClientes($message, $solicitud->cliente_id, 'Rechazo');
         return JsonResponse::create(array('message' => 'Se rechazo la solicitud correctamente'));
     } else {
         return JsonResponse::create(array('message' => 'Ocurrio un error al rechazar la solicitud '));
     }
 }
 private function despachoEmpresaNormal($data)
 {
     $noty = new NotificacionController();
     $viaje = new Viaje();
     $viaje->conductor_id = $data['conductor']['id'];
     $viaje->ruta_id = $data['ruta']['id'];
     $viaje->fecha = date("Y-m-d");
     $viaje->save();
     if ($viaje) {
         $noty->enviarNotificacionConductores('La central a autorizado tu salida, acercate a secretaria para recivir la planilla.', $viaje->conductor_id, 'Despacho');
         $pasajeros = Pasajero::select('*')->where('conductor_id', $viaje->conductor_id)->where('estado', '=', 'Asignado')->get();
         $giros = Giro::select('*')->where('conductor_id', $viaje->conductor_id)->where('estado', '=', 'Asignado')->get();
         $paquetes = Paquete::select('*')->where('conductor_id', $viaje->conductor_id)->where('estado', '=', 'Asignado')->get();
         foreach ($pasajeros as $pasajero) {
             $viaje->pasajeros()->attach($pasajero['id']);
             $noty->enviarNotificacionClientes('El conductor a salido a recogerlo, pronto pasara por usted, sea paciente', $pasajero['identificacion'], 'Busqueda');
             $viaje['datos'] = \DB::table('datos_solicitudes_pasajeros')->where('identificacion', $pasajero->identificacion)->join('solicitudes_cliente', 'datos_solicitudes_pasajeros.solicitud_id', '=', 'solicitudes_cliente.id')->select('solicitudes_cliente.estado', 'solicitudes_cliente.id', 'solicitudes_cliente.cliente_id')->where('solicitudes_cliente.estado', '<>', 'f')->get();
             foreach ($viaje['datos'] as $dato) {
                 \DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'v']);
                 $noty->enviarNotificacionClientes('El vehiculo a salido de la central, por favor se paciente', $dato->cliente_id, 'Vehiculo en camino');
             }
         }
         foreach ($giros as $giro) {
             $viaje->giros()->attach($giro['id']);
             $viaje['datos'] = \DB::table('datos_solicitudes_girospaquetes')->join('solicitudes_cliente', 'datos_solicitudes_girospaquetes.solicitud_id', '=', 'solicitudes_cliente.id')->join('clientes', 'solicitudes_cliente.cliente_id', '=', 'clientes.id')->join('giros', 'datos_solicitudes_girospaquetes.destinatario', '=', 'giros.nombre_receptor')->select('solicitudes_cliente.id', 'solicitudes_cliente.estado', 'solicitudes_cliente.cliente_id', 'clientes.identificacion')->where('clientes.identificacion', $giro->ide_remitente)->where('solicitudes_cliente.tipo', 'giro')->where('solicitudes_cliente.estado', '<>', 'f')->get();
             foreach ($viaje['datos'] as $dato) {
                 \DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'v']);
                 $noty->enviarNotificacionClientes('El vehiculo a salido de la central, por favor se paciente', $dato->cliente_id, 'Vehiculo en camino');
             }
         }
         foreach ($paquetes as $paquete) {
             $viaje->paquetes()->attach($paquete['id']);
             $viaje['datos'] = \DB::table('datos_solicitudes_girospaquetes')->join('solicitudes_cliente', 'datos_solicitudes_girospaquetes.solicitud_id', '=', 'solicitudes_cliente.id')->join('clientes', 'solicitudes_cliente.cliente_id', '=', 'clientes.id')->join('paquetes', 'datos_solicitudes_girospaquetes.destinatario', '=', 'paquetes.nombre_receptor')->select('solicitudes_cliente.id', 'solicitudes_cliente.estado', 'solicitudes_cliente.cliente_id', 'clientes.identificacion')->where('clientes.identificacion', $paquete->ide_remitente)->where('solicitudes_cliente.tipo', 'paquete')->where('solicitudes_cliente.estado', '<>', 'f')->get();
             foreach ($viaje['datos'] as $dato) {
                 \DB::table('solicitudes_cliente')->where('id', $dato->id)->update(['estado' => 'v']);
                 $noty->enviarNotificacionClientes('El vehiculo a salido de la central, por favor se paciente', $dato->cliente_id, 'Vehiculo en camino');
             }
         }
         $totalD = 0;
         foreach ($data['deducciones'] as $deduccion) {
             $viaje->deducciones()->attach($deduccion['id']);
             if ($deduccion['nombre'] == 'PASAJE') {
                 //                    $valorP = $deduccion['valor'];
                 $valorP = 17000;
             }
             if ($deduccion['nombre'] != 'PASAJE') {
                 //                    $totalD += $deduccion['valor'];
                 //                    $totalD += $deduccion['valor'];
             }
         }
         $total = $totalD + count($pasajeros) * $valorP;
         $cPlanilla = $this->crearPlanillaNormal($viaje->id, $data['central_id'], $total);
         if ($cPlanilla) {
             $estado = Conductor::find($viaje->conductor_id);
             $estado->estado = 'En ruta';
             $estado->save();
             if ($estado) {
                 return $cPlanilla;
             } else {
                 return JsonResponse::create('No se pudo actualizar el estado del conductor');
             }
         } else {
             return JsonResponse::create('Error al crear la planilla');
         }
     } else {
         $viaje->pasajeros()->detach();
         $viaje->paquetes()->detach();
         $viaje->giros()->detach();
         $viaje->delete();
         return JsonResponse::create('Ocurrio un error en la generacion del viaje');
     }
 }