Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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
                }));
            }
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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());
        }