//crear notificacion cuando una carrera es atendida //se envia al cliente la informacion del taxista y del vehiculo, asi como la posicion donde se encuentra y el tiempo //aproximado de recogida public static void crearNotificaciones(int idCarrera) { CabspotDB db = new CabspotDB(); notificacionCliente notificacion = new notificacionCliente(); var carrera = db.carreras.Find(idCarrera); var taxista = db.taxistas.Find(carrera.idTaxista); var vehiculo = taxista.vehiculos.Where(x => x.activo).First(); //respuesta json a almacenar en bd respuestaCarera respuesta = new respuestaCarera(); respuesta.idCarrera = idCarrera; respuesta.nombreTaxista = taxista.personas.nombres + " " + taxista.personas.apellidos; respuesta.ubicacion = taxista.latitudActual + "," + taxista.longitudActual; respuesta.vehiculo = vehiculo.marca + " " + vehiculo.modelo + " " + vehiculo.anio; respuesta.colorVehiculo = vehiculo.color; notificacion.idCliente = (int)carrera.idCliente; notificacion.codigoTaxista = taxista.codigoTaxista; notificacion.nombreTaxista = taxista.personas.nombres + " " + taxista.personas.apellidos; notificacion.ubicacionTaxista = Utilidades.getAddress((double)taxista.latitudActual, (double)taxista.longitudActual); notificacion.vehiculo = vehiculo.marca + " " + vehiculo.modelo + " " + vehiculo.anio + " [" + vehiculo.color + "]"; notificacion.tiempoAproximadoRecogida = Utilidades.getTravelTime((double)carrera.latitudOrigen, (double)carrera.longitudOrigen, (double)taxista.latitudActual, (double)taxista.longitudActual); try { db.notificacionCliente.Add(notificacion); db.SaveChangesAsync(); } catch (Exception e) { } }
//crear solicitudes a taxistas cercanos a la ubicacion del cliente public static bool solicitudTaxista(carreras carrera) { // var taxistasDisponibles = new List <taxistas>(); //buscar taxistas en un radio de 5km a la ubicacion del cliente y que estan disponibles foreach (taxistas tax in db.taxistas) { string coordOrigen = tax.latitudActual + "," + tax.longitudActual; string coordDestino = carrera.latitudOrigen + "," + carrera.longitudOrigen; if (Utilidades.getDistance((double)tax.latitudActual, (double)tax.longitudActual, carrera.latitudOrigen, carrera.longitudOrigen) < Constantes.RADIO_DISTANCIA) { taxistasDisponibles.Add(tax); } } //hay por lo menos un taxista en la zona del cliente if (taxistasDisponibles.Count() > 0) { List <solicitudes> solicitudesNuevas = new List <solicitudes>(); //crear solicitudes foreach (var t in taxistasDisponibles) { solicitudes solicitud = new solicitudes(); solicitud.idCarrera = carrera.idCarrera; solicitud.fechaSolicitud = DateTime.Now; solicitud.idEstadoSolicitud = 51; //en espera solicitud.idTaxista = t.idTaxista; solicitudesNuevas.Add(solicitud); } try { db.solicitudes.AddRange(solicitudesNuevas); db.SaveChangesAsync(); //generar notificaciones crearNotificaciones(taxistasDisponibles, solicitudesNuevas); return(true); } catch (Exception e) { return(false); } } else { return(false); } }
private static void crearNotificaciones(List <taxistas> taxistasDisponibles, List <solicitudes> solicitudes) { CabspotDB db = new CabspotDB(); List <notificacionTaxista> notificaciones = new List <notificacionTaxista>(); foreach (taxistas t in taxistasDisponibles) { foreach (solicitudes s in solicitudes) { //trama json (idSolicitud y direciones origen y destino) var solicitudesTaxista = db.solicitudes.Where(x => x.idTaxista == t.idTaxista && x.idSolicitud == s.idSolicitud) .Select(x => new { x.idSolicitud, x.carreras.latitudOrigen, x.carreras.longitudOrigen, x.carreras.latitudDestino, x.carreras.longitudDestino, x.carreras.metodopago.metodoPago }); if (solicitudesTaxista.Count() > 0) { var solicitud = solicitudesTaxista.First(); notificacionTaxista notificacion = new notificacionTaxista(); notificacion.idTaxista = t.idTaxista; notificacion.metodoPago = solicitud.metodoPago; notificacion.ubicacionDestino = Utilidades.getAddress(solicitud.latitudDestino, solicitud.longitudDestino); notificacion.ubicacionOrigen = Utilidades.getAddress(solicitud.latitudOrigen, solicitud.longitudOrigen);; notificaciones.Add(notificacion); break; } } } try { db.notificacionTaxista.AddRange(notificaciones); db.SaveChangesAsync(); } catch (Exception e) { } }