public RespuestaSimple Solicitar(Models.Viajes o) { // Obtengo el siguiente Id a insertar o.ViajeId = Numeracion(); // Obtengo el cliente de la sesión o.ClienteId = Startup.Usuario.UsuarioId; o.ConductorId = null; // Seteo los valores default o.ViaFch = DateTime.Now; o.ViaFchHr = DateTime.Now; o.ViaEst = "SOL"; db.Insert(o); var viajesMat = new Services.Viajes_Mat(db); // Recorre los materiales para insertarlos foreach (var material in o.Materiales) { material.ViajeId = o.ViajeId; viajesMat.Insertar(material); } // Genera la bitácora new Services.Viajes_Bit(db).Insertar(o.ViajeId, o.ViaEst, ""); // Obtiene las volquetas disponibles junto con sus dispositivos var dispositivos = from volq in db.Volquetas from disp in db.Usuarios_Disp.InnerJoin(p => p.UsuarioId == volq.ConductorId) where volq.VolqEst == "LIB" select disp; var listaDispositivos = dispositivos.ToArray(); // Si hay conductores disponibles if (listaDispositivos.Length > 0) { // Envía la notificación a las volquetas var mensaje = new Services.Parametros(db).ObtenerValor("MSG-NUEVO-VIAJE"); var titulo = new Services.Parametros(db).ObtenerValor("MSG-NUEVO-VIAJE-TITULO"); new Services.Notificaciones(db).EnviarNotificacion(listaDispositivos, o.ViajeId, titulo, mensaje, Accion.NuevoViaje); } return(new RespuestaSimple(200, "", o.ViajeId)); }
public ActionResult <RespuestaSimple> LinkApps() { using (db = new VolquexDB()) { // Obtiene los links de las apps de los parámetros var paramService = new Services.Parametros(db); string android = paramService.ObtenerValor("APP-ANDROID"); string ios = paramService.ObtenerValor("APP-ANDROID"); // Construye la respuesta return(new RespuestaSimple(new { android, ios })); } }
public RespuestaSimple CambiarEstado(decimal viajeId, string estado) { var q = db.Viajes .Where(p => p.ViajeId == viajeId) .Set(p => p.ViaEst, estado); // Si es FINALIZADO, actualizo la hora de llegada también if (estado == "FIN") { q = q.Set(p => p.ViaFchHrLlegada, DateTime.Now); } q.Update(); // Cambia el estado a las ofertas var r = db.Viajes_Volq .Where(p => p.ViajeId == viajeId) .Set(p => p.ViaVolqEstViaje, estado); r.Update(); string obs = ""; // Si el estado es FINALIZADO if (estado == "FIN" || estado == "CAN") { // Cambia el estado a la volqueta también CambiarEstadoVolqueta(viajeId, "LIB"); // Obtengo los datos del viaje var viaje = Mostrar(viajeId); // Si es FINALIZADO notifico al cliente if (estado == "FIN") { var mensaje = new Services.Parametros(db).ObtenerValor("MSG-VIAJE-FINALIZADO"); var titulo = new Services.Parametros(db).ObtenerValor("MSG-VIAJE-FINALIZADO-TITULO"); new Services.Notificaciones(db).EnviarNotificacion(viaje.ClienteId, viajeId, titulo, mensaje, Accion.ViajeFinalizado); } // Si es CANCELADO if (estado == "CAN") { // Obtengo el tipo de usuario que cancela var usuarioCancela = new Services.Sesiones(db).Mostrar().fkusuarios1; // Si es CLIENTE, notifico al conductor if (usuarioCancela.UsuTipo == "CLI") { var mensaje = new Services.Parametros(db).ObtenerValor("MSG-CLIENTE-CANCELA"); var titulo = new Services.Parametros(db).ObtenerValor("MSG-CLIENTE-CANCELA-TITULO"); new Services.Notificaciones(db).EnviarNotificacion(viaje.ConductorId.GetValueOrDefault(), viajeId, titulo, mensaje, Accion.ViajeCancelado); obs = "Cancelado por el cliente"; } else { var mensaje = new Services.Parametros(db).ObtenerValor("MSG-CONDUCTOR-CANCELA"); var titulo = new Services.Parametros(db).ObtenerValor("MSG-CONDUCTOR-CANCELA-TITULO"); new Services.Notificaciones(db).EnviarNotificacion(viaje.ClienteId, viajeId, titulo, mensaje, Accion.ViajeCancelado); obs = "Cancelado por el conductor"; } } } // Genera la bitácora new Services.Viajes_Bit(db).Insertar(viajeId, estado, obs); return(new RespuestaSimple()); }
public RespuestaSimple AceptarOferta(decimal viajeId, int volquetaId) { db.BeginTransaction(); // Verifica si la volqueta está libre var lib = from p in db.Volquetas where p.VolquetaId == volquetaId where p.VolqEst == "LIB" select p.VolquetaId; // Si no retornó ningún registro if (lib.FirstOrDefault() == 0) { // Retorno error return(new RespuestaSimple(500, "La volqueta se encuentra en otro viaje. Intente más tarde.")); } // Actualiza el estado de la oferta db.Viajes_Volq .Where(p => p.ViajeId == viajeId) .Where(p => p.VolquetaId == volquetaId) .Set(p => p.ViaVolqEst, "ACE") .Set(p => p.ViaVolqEstViaje, "ACE") .Update(); // Obtiene el conductor y el precio aceptado var a = from p in db.Viajes_Volq where p.ViajeId == viajeId where p.VolquetaId == volquetaId select new Models.Viajes_Volq { ViajeVolquetaId = p.ViajeVolquetaId, ConductorId = p.fkviajesvolqvolquetas1.ConductorId, ViaVolqOferta = p.ViaVolqOferta }; var r = a.FirstOrDefault(); var conductorId = r.ConductorId; var viaVolqOferta = r.ViaVolqOferta; // Recorre los materiales del viaje var materiales = from mat in db.Viajes_Mat where mat.ViajeId == viajeId select mat; foreach (var material in materiales.ToArray()) { // Obtiene el precio ofertado de la volqueta var oferta = from ofe in db.Viajes_Volq_Mat where ofe.ViajeId == viajeId && ofe.ViajeVolquetaId == r.ViajeVolquetaId && ofe.MaterialId == material.MaterialId select ofe.ViaVolqMatPrecio; var precio = oferta.FirstOrDefault(); // Actualiza el precio y el importe en Viajes_Mat db.Viajes_Mat .Where(p => p.ViajeId == viajeId) .Where(p => p.MaterialId == material.MaterialId) .Set(p => p.ViaMatPrecio, precio) .Set(p => p.ViaMatImporte, imp => precio * imp.ViaMatCantidad) .Update(); } // Totaliza los materiales var sum = from viajesMat in db.Viajes_Mat where viajesMat.ViajeId == viajeId select viajesMat.ViaMatImporte; var total = sum.Sum(); // Actualiza el estado del viaje // Asigna la volqueta, el conductor y el precio aceptado // Actualiza el total del viaje db.Viajes .Where(p => p.ViajeId == viajeId) .Set(p => p.ViaEst, "ACE") .Set(p => p.VolquetaId, volquetaId) .Set(p => p.ConductorId, conductorId) .Set(p => p.ViaValorFlete, viaVolqOferta) .Set(p => p.ViaTotal, total + viaVolqOferta) .Update(); // Actualiza el estado de la volqueta db.Volquetas .Where(p => p.VolquetaId == volquetaId) .Set(p => p.VolqEst, "VIA") .Update(); db.CommitTransaction(); // Envía notificación a la volqueta var mensaje = new Services.Parametros(db).ObtenerValor("MSJ-ACEPTA-OFERTA"); var titulo = new Services.Parametros(db).ObtenerValor("MSJ-ACEPTA-OFERTA-TITULO"); new Services.Notificaciones(db).EnviarNotificacion(conductorId, viajeId, titulo, mensaje, Accion.OfertaAceptada); // Retorna el DTO (Data Transfer Object) return(new RespuestaSimple()); }