Example #1
0
        public HttpResponse <List <GastoResponse> > Pendientes()
        {
            using (var db = new GeviApiContext())
            {
                var gastosPendientes = db.Gastos
                                       .Where(g => g.Estado == Estado.PENDIENTE_APROBACION)
                                       .Include(g => g.Viaje.Proyecto)
                                       .Include(g => g.Tipo)
                                       .Include(g => g.Empleado)
                                       .Include(g => g.Moneda)
                                       .ToList();

                var response = new List <GastoResponse>();

                foreach (var g in gastosPendientes)
                {
                    var nuevo = new GastoResponse()
                    {
                        Id       = g.Id,
                        Estado   = g.Estado,
                        Fecha    = g.Fecha,
                        Moneda   = g.Moneda?.Nombre,
                        Tipo     = g.Tipo?.Nombre,
                        Total    = g.Total,
                        Empleado = g.Empleado?.Nombre,
                        Proyecto = g.Viaje?.Proyecto?.Nombre,
                        ViajeId  = g.Viaje == null ? 0 : g.Viaje.Id
                    };

                    response.Add(nuevo);
                }

                return(newHttpListResponse(response));
            }
        }
        public HttpResponse <List <UsuarioResponse> > Todos()
        {
            using (var db = new GeviApiContext())
            {
                var usuarios = db.Usuarios.ToList();

                var response = new List <UsuarioResponse>();

                foreach (var u in usuarios)
                {
                    var nuevo = new UsuarioResponse()
                    {
                        Id            = u.Id,
                        Email         = u.Email,
                        EsEmpleado    = u is Empleado,
                        FechaRegistro = u.FechaRegistro,
                        Nombre        = u.Nombre
                    };

                    response.Add(nuevo);
                }

                return(newHttpListResponse(response));
            }
        }
Example #3
0
        public HttpResponse <List <ProyectoResponse> > Todos()
        {
            using (var db = new GeviApiContext())
            {
                var proyectos = db.Proyectos
                                .Include(p => p.Cliente)
                                .ToList();

                var response = new List <ProyectoResponse>();

                foreach (var p in proyectos)
                {
                    var nuevo = new ProyectoResponse()
                    {
                        Id          = p.Id,
                        Nombre      = p.Nombre,
                        FechaInicio = p.FechaInicio,
                        Cliente     = p.Cliente?.Nombre
                    };

                    response.Add(nuevo);
                }

                return(newHttpListResponse(response));
            }
        }
Example #4
0
        public HttpResponse <ProyectoResponse> BorrarProyecto(ProyectoRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El proyecto que se intenta borrar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var pro = db.Proyectos
                          .Where(p => p.Nombre.Equals(request.Nombre))
                          .Include(c => c.Cliente)
                          .FirstOrDefault();

                if (pro == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el Proyecto")));
                }

                var viajes = db.Viajes
                             .Where(v => v.Proyecto.Id == pro.Id)
                             .Include(v => v.Empleado)
                             .Include(v => v.Gastos)
                             .Include(v => v.Proyecto)
                             .ToList();

                var response = new ProyectoResponse()
                {
                    Id          = pro.Id,
                    Nombre      = pro.Nombre,
                    FechaInicio = pro.FechaInicio,
                    Cliente     = pro.Cliente?.Nombre
                };

                if (viajes != null)
                {
                    foreach (var v in viajes)
                    {
                        var gastos = db.Gastos
                                     .Where(g => g.Viaje.Id == v.Id)
                                     .ToList();

                        if (gastos != null)
                        {
                            foreach (var g in gastos)
                            {
                                db.Gastos.Remove(g);
                                db.SaveChanges();
                            }
                        }
                        db.Viajes.Remove(v);
                        db.SaveChanges();
                    }
                }
                db.Proyectos.Remove(pro);
                db.SaveChanges();

                return(newHttpResponse(response));
            }
        }
        public HttpResponse <List <ViajeResponse> > Pendientes()
        {
            using (var db = new GeviApiContext())
            {
                var viajes = db.Viajes
                             .Where(v => v.Estado == Estado.PENDIENTE_APROBACION)
                             .Include(v => v.Empleado)
                             .Include(v => v.Gastos.Select(g => g.Tipo))
                             .Include(v => v.Gastos.Select(g => g.Moneda))
                             .Include(v => v.Proyecto.Cliente)
                             .ToList();

                var response = new List <ViajeResponse>();

                foreach (var v in viajes)
                {
                    var nuevo = new ViajeResponse()
                    {
                        Id                    = v.Id,
                        EmpleadoId            = v.Empleado.Id,
                        Estado                = v.Estado,
                        FechaFin              = v.FechaFin,
                        FechaInicio           = v.FechaInicio,
                        Gastos                = null,
                        Proyecto              = v.Proyecto?.Nombre,
                        ClienteProyectoNombre = v.Proyecto?.Cliente?.Nombre,
                        EmpleadoNombre        = v.Empleado?.Nombre
                    };

                    if (v.Gastos != null)
                    {
                        var gastosRespone = new List <GastoResponse>();

                        foreach (var g in v.Gastos)
                        {
                            var nuevoGastoResponse = new GastoResponse()
                            {
                                Id       = g.Id,
                                Estado   = g.Estado,
                                Fecha    = g.Fecha,
                                Moneda   = g.Moneda?.Nombre,
                                Tipo     = g.Tipo?.Nombre,
                                ViajeId  = v.Id,
                                Proyecto = g.Viaje?.Proyecto?.Nombre,
                                Total    = g.Total,
                                Empleado = g.Empleado?.Nombre
                            };

                            gastosRespone.Add(nuevoGastoResponse);
                        }

                        nuevo.Gastos = gastosRespone;
                    }

                    response.Add(nuevo);
                }

                return(newHttpListResponse(response));
            }
        }
        private bool esValido(ViajeRequest viaje, GeviApiContext ctx, Empleado emp)
        {
            var res = ctx.Viajes
                      .Where(v => v.Empleado.Email.Equals(emp.Email))
                      .ToList();

            bool esValido = true;

            if (res.Count != 0)
            {
                foreach (var v in res)
                {
                    if (esValido)
                    {
                        var inicioViajeNuevoValido = NotBetween(viaje.FechaInicio, v.FechaInicio, v.FechaFin);
                        var finViajeNuevoValido    = NotBetween(viaje.FechaFin, v.FechaInicio, v.FechaFin);

                        if (inicioViajeNuevoValido && finViajeNuevoValido)
                        {
                            var inicioViajeExistenteValido = NotBetween(v.FechaInicio, viaje.FechaInicio, viaje.FechaFin);
                            var finViajeExistenteValido    = NotBetween(v.FechaFin, viaje.FechaInicio, viaje.FechaFin);

                            esValido = inicioViajeExistenteValido && finViajeExistenteValido;
                        }
                        else
                        {
                            esValido = false;
                        }
                    }
                }
            }

            return(esValido);
        }
Example #7
0
        public HttpResponse <ProyectoResponse> ModificarProyecto(ProyectoRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El Proyecto que se intenta modificar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var pro = db.Proyectos
                          .Where(p => p.Nombre.Equals(request.Nombre))
                          .Include(p => p.Cliente)
                          .FirstOrDefault();

                if (pro == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el Proyecto")));
                }

                if (pro.Cliente != null &&
                    pro.Cliente.Nombre.Equals(request.ClienteNombre) &&
                    pro.Nombre.Equals(request.Nombre) &&
                    pro.FechaInicio == request.FechaInicio)
                {
                    return(newHttpErrorResponse(new Error("El proyecto no se modifico")));
                }

                var cli = db.Clientes
                          .Where(c => c.Nombre.Equals(request.ClienteNombre))
                          .Include(c => c.Proyectos)
                          .Include(c => c.Tipo)
                          .FirstOrDefault();
                if (cli != null)
                {
                    pro.Nombre      = request.Nombre;
                    pro.FechaInicio = request.FechaInicio;
                    pro.Cliente     = cli;

                    db.Entry(pro).State = EntityState.Modified;
                    db.SaveChanges();

                    var response = new ProyectoResponse()
                    {
                        Id          = pro.Id,
                        Nombre      = pro.Nombre,
                        FechaInicio = pro.FechaInicio,
                        Cliente     = pro.Cliente?.Nombre
                    };

                    return(newHttpResponse(response));
                }

                return(newHttpErrorResponse(new Error("No existe el cliente")));
            }
        }
        public HttpResponse <UsuarioResponse> CambiarContrasenia(UsuarioRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El usuario que se intenta modificar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var usuario = db.Usuarios
                              .Where(u => u.Id == request.UsuarioId)
                              .FirstOrDefault();

                if (usuario == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el usuario")));
                }

                var encryptionManager = new EncryptionManager();

                var nuevaContraseniaEncriptada = encryptionManager.Encryptdata(request.Contrasenia);
                var viejaContraseniaEncriptada = encryptionManager.Encryptdata(request.ContraseniaVieja);

                if (!usuario.Contrasenia.Equals(viejaContraseniaEncriptada))
                {
                    return(newHttpErrorResponse(new Error("La contraseña actual no es correcta")));
                }

                if (nuevaContraseniaEncriptada == viejaContraseniaEncriptada)
                {
                    return(newHttpErrorResponse(new Error("La nueva contraseña no puede ser igual a la anterior")));
                }

                usuario.Contrasenia = nuevaContraseniaEncriptada;

                db.Entry(usuario).State = EntityState.Modified;
                db.SaveChanges();

                var response = new UsuarioResponse()
                {
                    Id            = usuario.Id,
                    Nombre        = usuario.Nombre,
                    Email         = usuario.Email,
                    EsEmpleado    = usuario is Empleado,
                    FechaRegistro = usuario.FechaRegistro
                };

                return(newHttpResponse(response));
            }
        }
Example #9
0
        public HttpResponse <ProyectoResponse> NuevoProyecto(ProyectoRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El Proyecto que se intenta ingresar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var cli = db.Clientes
                          .Where(c => c.Nombre.Equals(request.ClienteNombre))
                          .Include(c => c.Proyectos)
                          .Include(c => c.Tipo)
                          .FirstOrDefault();

                if (cli != null)
                {
                    var nuevo = new Proyecto()
                    {
                        Nombre      = request.Nombre,
                        Cliente     = cli,
                        FechaInicio = request.FechaInicio
                    };

                    try
                    {
                        db.Proyectos.Add(nuevo);
                        db.SaveChanges();
                    }
                    catch (DbUpdateException)
                    {
                        return(newHttpErrorResponse(new Error("Ya existe un Proyecto con ese nombre.")));
                    }

                    var response = new ProyectoResponse()
                    {
                        Id          = nuevo.Id,
                        Nombre      = nuevo.Nombre,
                        FechaInicio = nuevo.FechaInicio,
                        Cliente     = nuevo.Cliente?.Nombre
                    };

                    return(newHttpResponse(response));
                }

                return(newHttpErrorResponse(new Error("No existe el cliente.")));
            }
        }
Example #10
0
        public HttpResponse <ClienteResponse> BuscarCliente(ClienteRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El cliente que se intenta buscar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var cli = db.Clientes
                          .Where(c => c.Nombre.Equals(request.Nombre))
                          .Include(c => c.Proyectos)
                          .FirstOrDefault();

                if (cli == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el cliente")));
                }

                var response = new ClienteResponse()
                {
                    Id        = cli.Id,
                    Nombre    = cli.Nombre,
                    Proyectos = null,
                    Tipo      = cli.Tipo
                };

                if (cli.Proyectos != null)
                {
                    var proyectosResponse = new List <ProyectoResponse>();

                    foreach (var p in cli.Proyectos)
                    {
                        var nuevoProyResponse = new ProyectoResponse()
                        {
                            Id      = p.Id,
                            Nombre  = p.Nombre,
                            Cliente = cli.Nombre
                        };
                        proyectosResponse.Add(nuevoProyResponse);
                    }
                    response.Proyectos = proyectosResponse;
                }

                return(newHttpResponse(response));
            }
        }
Example #11
0
        public HttpResponse <List <ClienteResponse> > Todos()
        {
            using (var db = new GeviApiContext())
            {
                var clientes = db.Clientes
                               .Include(c => c.Proyectos)
                               .Include(c => c.Tipo)
                               .ToList();

                var response = new List <ClienteResponse>();

                foreach (var c in clientes)
                {
                    var nuevo = new ClienteResponse()
                    {
                        Id        = c.Id,
                        Nombre    = c.Nombre,
                        Tipo      = c.Tipo,
                        Proyectos = null
                    };

                    if (c.Proyectos != null)
                    {
                        var proyectoRespone = new List <ProyectoResponse>();

                        foreach (var p in c.Proyectos)
                        {
                            var nuevoProyectoResponse = new ProyectoResponse()
                            {
                                Id      = p.Id,
                                Nombre  = p.Nombre,
                                Cliente = p.Cliente?.Nombre
                            };

                            proyectoRespone.Add(nuevoProyectoResponse);
                        }

                        nuevo.Proyectos = proyectoRespone;
                    }

                    response.Add(nuevo);
                }

                return(newHttpListResponse(response));
            }
        }
Example #12
0
        public HttpResponse <GastoResponse> ValidarGasto(ValidacionRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El gasto que se intenta validar es invalido")));
            }

            using (var db = new GeviApiContext())
            {
                var gasto = db.Gastos
                            .Where(g => g.Id == request.Id)
                            .Include(g => g.Tipo)
                            .Include(g => g.Empleado)
                            .Include(g => g.Viaje.Proyecto)
                            .Include(g => g.Moneda)
                            .FirstOrDefault();

                if (gasto != null)
                {
                    gasto.Estado          = request.Estado;
                    db.Entry(gasto).State = EntityState.Modified;
                    db.SaveChanges();

                    var response = new GastoResponse()
                    {
                        Id       = gasto.Id,
                        Moneda   = gasto.Moneda?.Nombre,
                        Estado   = gasto.Estado,
                        Fecha    = gasto.Fecha,
                        Tipo     = gasto.Tipo?.Nombre,
                        Total    = gasto.Total,
                        Empleado = gasto.Empleado?.Nombre,
                        Proyecto = gasto.Viaje?.Proyecto?.Nombre,
                        ViajeId  = gasto.Viaje == null ? 0 : gasto.Viaje.Id
                    };

                    return(newHttpResponse(response));
                }

                return(newHttpErrorResponse(new Error("No existe el gasto")));
            }
        }
Example #13
0
        public HttpResponse <ClienteResponse> NuevoCliente(ClienteRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El cliente que se intenta ingresar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var tipoCli = db.TipoClientes
                              .Where(tc => tc.Nombre == request.Tipo)
                              .FirstOrDefault();

                var nuevo = new Cliente()
                {
                    Nombre    = request.Nombre,
                    Proyectos = null,
                    Tipo      = tipoCli
                };

                try
                {
                    db.Clientes.Add(nuevo);
                    db.SaveChanges();
                }
                catch (DbUpdateException)
                {
                    return(newHttpErrorResponse(new Error("Ya existe un cliente con ese nombre.")));
                }

                var response = new ClienteResponse()
                {
                    Id        = nuevo.Id,
                    Nombre    = nuevo.Nombre,
                    Proyectos = null,
                    Tipo      = tipoCli
                };

                return(newHttpResponse(response));
            }
        }
        public HttpResponse <UsuarioResponse> ModificarUsuario(UsuarioRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El usuario que se intenta modificar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var usuario = db.Usuarios
                              .Where(u => u.Id == request.UsuarioId)
                              .FirstOrDefault();

                if (usuario == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el usuario")));
                }

                usuario.Nombre = request.Nombre;
                usuario.Email  = request.Email;

                db.Entry(usuario).State = EntityState.Modified;
                db.SaveChanges();

                var response = new UsuarioResponse()
                {
                    Id            = usuario.Id,
                    Nombre        = usuario.Nombre,
                    Email         = usuario.Email,
                    EsEmpleado    = usuario is Empleado,
                    FechaRegistro = usuario.FechaRegistro
                };

                return(newHttpResponse(response));
            }
        }
        public HttpResponse <List <ViajeResponse> > EntreFechas(ListadoViajesRequest request)
        {
            using (var db = new GeviApiContext())
            {
                var viajes = db.Viajes
                             .Where(v => (!request.FechaInicio.Equals(DateTime.MinValue) ? v.FechaInicio >= request.FechaInicio : true) &&
                                    (!request.FechaFin.Equals(DateTime.MinValue) ? v.FechaFin <= request.FechaFin : true) &&
                                    (!String.IsNullOrEmpty(request.ClienteNombre) && (v.Proyecto != null) && (v.Proyecto.Cliente != null) ? v.Proyecto.Cliente.Nombre.Equals(request.ClienteNombre) : true))
                             .Include(v => v.Empleado)
                             .Include(v => v.Gastos.Select(g => g.Tipo))
                             .Include(v => v.Gastos.Select(g => g.Moneda))
                             .Include(v => v.Proyecto.Cliente)
                             .ToList();

                var response = new List <ViajeResponse>();

                foreach (var v in viajes)
                {
                    var nuevo = new ViajeResponse()
                    {
                        Id                    = v.Id,
                        EmpleadoId            = v.Empleado.Id,
                        Estado                = v.Estado,
                        FechaFin              = v.FechaFin,
                        FechaInicio           = v.FechaInicio,
                        Gastos                = null,
                        Proyecto              = v.Proyecto?.Nombre,
                        ClienteProyectoNombre = v.Proyecto?.Cliente?.Nombre,
                        EmpleadoNombre        = v.Empleado.Nombre
                    };

                    if (v.Gastos != null)
                    {
                        var gastosRespone = new List <GastoResponse>();

                        foreach (var g in v.Gastos)
                        {
                            var nuevoGastoResponse = new GastoResponse()
                            {
                                Id       = g.Id,
                                Estado   = g.Estado,
                                Fecha    = g.Fecha,
                                Moneda   = g.Moneda?.Nombre,
                                Tipo     = g.Tipo?.Nombre,
                                ViajeId  = v.Id,
                                Proyecto = g.Viaje?.Proyecto?.Nombre,
                                Total    = g.Total,
                                Empleado = g.Empleado?.Nombre
                            };

                            gastosRespone.Add(nuevoGastoResponse);
                        }

                        nuevo.Gastos = gastosRespone;
                    }

                    response.Add(nuevo);
                }

                return(newHttpListResponse(response));
            }
        }
Example #16
0
        public HttpResponse <GastoResponse> NuevoGasto(GastoRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El gasto que se intenta ingresar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var empleado = db.Usuarios
                               .OfType <Empleado>()
                               .Where(u => u is Empleado && u.Id == request.EmpleadoId)
                               .Include(u => u.Viajes)
                               .FirstOrDefault();
                if (empleado != null)
                {
                    var viaje = db.Viajes
                                .Where(v => v.Id == request.ViajeId)
                                .Include(v => v.Proyecto)
                                .Include(v => v.Gastos)
                                .Include(v => v.Empleado)
                                .FirstOrDefault();
                    if (viaje != null &&
                        request.Fecha >= viaje.FechaInicio &&
                        request.Fecha <= viaje.FechaFin)
                    {
                        var tipo = db.TipoGastos
                                   .Where(t => t.Nombre.Equals(request.Tipo))
                                   .FirstOrDefault();

                        var moneda = db.Monedas
                                     .Where(m => m.Nombre.Equals(request.MonedaNombre))
                                     .FirstOrDefault();

                        var nuevo = new Gasto()
                        {
                            Estado   = request.Estado,
                            Fecha    = request.Fecha,
                            Moneda   = moneda,
                            Tipo     = tipo,
                            Empleado = empleado,
                            Viaje    = viaje,
                            Total    = request.Total
                        };

                        try
                        {
                            db.Gastos.Add(nuevo);
                            db.SaveChanges();
                        }
                        catch (DbUpdateException)
                        {
                            return(newHttpErrorResponse(new Error("Error al ingresar nuevo gasto.")));
                        }

                        var response = new GastoResponse()
                        {
                            Id       = nuevo.Id,
                            Estado   = nuevo.Estado,
                            Fecha    = nuevo.Fecha,
                            Moneda   = nuevo.Moneda?.Nombre,
                            Tipo     = nuevo.Tipo?.Nombre,
                            ViajeId  = nuevo.Viaje == null ? 0 : nuevo.Viaje.Id,
                            Proyecto = nuevo.Viaje?.Proyecto?.Nombre,
                            Empleado = nuevo.Empleado?.Nombre,
                            Total    = nuevo.Total
                        };

                        return(newHttpResponse(response));
                    }
                    else
                    {
                        if (viaje == null)
                        {
                            return(newHttpErrorResponse(new Error("El viaje no existe")));
                        }
                        else
                        {
                            return(newHttpErrorResponse(new Error("La fecha del gasto debe pertenecer al viaje")));
                        }
                    }
                }

                return(newHttpErrorResponse(new Error("El empleado no existe")));
            }
        }
        public HttpResponse <List <ViajeResponse> > Historial(ViajeRequest request)
        {
            using (var db = new GeviApiContext())
            {
                var empleado = db.Usuarios
                               .OfType <Empleado>()
                               .Where(u => u is Empleado && u.Id == request.EmpleadoId)
                               .Include(u => u.Viajes.Select(v => v.Proyecto.Cliente))
                               .Include(u => u.Viajes.Select(v => v.Gastos.Select(g => g.Tipo)))
                               .Include(u => u.Viajes.Select(v => v.Gastos.Select(g => g.Moneda)))
                               .FirstOrDefault();

                if (empleado != null)
                {
                    var viajes = empleado?.Viajes;

                    var response = new List <ViajeResponse>();

                    if (viajes != null)
                    {
                        foreach (var v in viajes)
                        {
                            var nuevo = new ViajeResponse()
                            {
                                Id                    = v.Id,
                                EmpleadoId            = request.EmpleadoId,
                                Estado                = v.Estado,
                                FechaFin              = v.FechaFin,
                                FechaInicio           = v.FechaInicio,
                                Gastos                = null,
                                Proyecto              = v.Proyecto?.Nombre,
                                ClienteProyectoNombre = v.Proyecto.Cliente.Nombre,
                                EmpleadoNombre        = empleado.Nombre
                            };

                            if (v.Gastos != null)
                            {
                                var gastosRespone = new List <GastoResponse>();

                                foreach (var g in v.Gastos)
                                {
                                    var nuevoGastoResponse = new GastoResponse()
                                    {
                                        Id       = g.Id,
                                        Estado   = g.Estado,
                                        Fecha    = g.Fecha,
                                        Moneda   = g.Moneda?.Nombre,
                                        Tipo     = g.Tipo?.Nombre,
                                        ViajeId  = v.Id,
                                        Proyecto = g.Viaje?.Proyecto?.Nombre,
                                        Total    = g.Total,
                                        Empleado = g.Empleado?.Nombre
                                    };

                                    gastosRespone.Add(nuevoGastoResponse);
                                }

                                nuevo.Gastos = gastosRespone;
                            }

                            response.Add(nuevo);
                        }
                    }
                    return(newHttpListResponse(response));
                }

                return(newHttpErrorListResponse(new Error("No existe el empleado")));
            }
        }
        public HttpResponse <ViajeResponse> NuevoViaje(ViajeRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El viaje que se intenta ingresar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var empleado = db.Usuarios
                               .OfType <Empleado>()
                               .Where(u => u is Empleado && u.Id == request.EmpleadoId)
                               .Include(u => u.Viajes)
                               .FirstOrDefault();

                var proyecto = db.Proyectos
                               .Where(p => p.Nombre.Equals(request.ProyectoNombre))
                               .Include(p => p.Cliente)
                               .FirstOrDefault();

                if (request?.FechaInicio < request?.FechaFin && empleado != null && proyecto != null && esValido(request, db, empleado))
                {
                    var nuevo = new Viaje()
                    {
                        Empleado    = empleado,
                        Estado      = Estado.PENDIENTE_APROBACION,
                        FechaInicio = request.FechaInicio,
                        FechaFin    = request.FechaFin,
                        Gastos      = null,
                        Proyecto    = proyecto
                    };

                    try
                    {
                        db.Viajes.Add(nuevo);
                        db.SaveChanges();
                    }
                    catch (DbUpdateException)
                    {
                        return(newHttpErrorResponse(new Error("Error al ingresar el viaje.")));
                    }

                    var response = new ViajeResponse()
                    {
                        Id                    = nuevo.Id,
                        EmpleadoId            = empleado.Id,
                        Estado                = Estado.PENDIENTE_APROBACION,
                        FechaInicio           = request.FechaInicio,
                        FechaFin              = request.FechaFin,
                        Gastos                = null,
                        Proyecto              = proyecto?.Nombre,
                        EmpleadoNombre        = empleado?.Nombre,
                        ClienteProyectoNombre = proyecto?.Cliente?.Nombre
                    };

                    return(newHttpResponse(response));
                }
                else
                {
                    if (request?.FechaInicio >= request?.FechaFin)
                    {
                        return(newHttpErrorResponse(new Error("La fecha de inicio debe ser mayor a la de fin")));
                    }
                    else
                    {
                        if (empleado == null)
                        {
                            return(newHttpErrorResponse(new Error("No existe el empleado")));
                        }
                        else
                        {
                            if (proyecto == null)
                            {
                                return(newHttpErrorResponse(new Error("No existe el proyecto")));
                            }
                            else
                            {
                                return(newHttpErrorResponse(new Error("Ya existe un viaje en esa fecha para el empleado.")));
                            }
                        }
                    }
                }
            }
        }
        public HttpResponse <ViajeResponse> ValidarViaje(ValidacionRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("La request es invalida.")));
            }

            using (var db = new GeviApiContext())
            {
                var viaje = db.Viajes
                            .Where(v => v.Id == request.Id)
                            .Include(u => u.Empleado)
                            .Include(w => w.Proyecto.Cliente)
                            .FirstOrDefault();

                if (viaje != null)
                {
                    viaje.Estado          = request.Estado;
                    db.Entry(viaje).State = EntityState.Modified;
                    db.SaveChanges();

                    var response = new ViajeResponse()
                    {
                        Id                    = viaje.Id,
                        EmpleadoId            = viaje.Empleado.Id,
                        EmpleadoNombre        = viaje.Empleado?.Nombre,
                        Estado                = request.Estado,
                        FechaInicio           = viaje.FechaInicio,
                        FechaFin              = viaje.FechaFin,
                        Gastos                = null,
                        Proyecto              = viaje.Proyecto?.Nombre,
                        ClienteProyectoNombre = viaje.Proyecto?.Cliente?.Nombre
                    };

                    if (viaje.Gastos != null)
                    {
                        var gastos = new List <GastoResponse>();

                        foreach (var g in viaje.Gastos)
                        {
                            var nuevoGasto = new GastoResponse()
                            {
                                Id       = g.Id,
                                Estado   = g.Estado,
                                Fecha    = g.Fecha,
                                Moneda   = g.Moneda?.Nombre,
                                Tipo     = g.Tipo?.Nombre,
                                Total    = g.Total,
                                ViajeId  = viaje.Id,
                                Proyecto = g.Viaje?.Proyecto?.Nombre,
                                Empleado = g.Empleado?.Nombre
                            };

                            gastos.Add(nuevoGasto);
                        }

                        response.Gastos = gastos;
                    }

                    return(newHttpResponse(response));
                }
                return(newHttpErrorResponse(new Error("No existe el viaje")));
            }
        }
Example #20
0
        public HttpResponse <EstadisticasResponse> GetEstadisticas(EstadisticasRequest request)
        {
            if (request == null)
            {
                return(newHttpEstadisticasErrorResponse(new Error("Los parametros pasados son invalidos.")));
            }

            using (var db = new GeviApiContext())
            {
                var totalTransporte = db.Gastos
                                      .Where(g => g.Estado == Estado.APROBADO &&
                                             (!String.IsNullOrEmpty(request.ClienteNombre) &&
                                              (g.Viaje != null) && (g.Viaje.Proyecto != null) &&
                                              (g.Viaje.Proyecto.Cliente != null) ? g.Viaje.Proyecto.Cliente.Nombre.Equals(request.ClienteNombre) : true) &&
                                             (request.EmpleadoId > 0 && (g.Empleado != null) ? g.Empleado.Id == request.EmpleadoId : true) &&
                                             (!request.FechaInicio.Equals(DateTime.MinValue) ? g.Fecha >= request.FechaInicio : true) &&
                                             (!request.FechaFin.Equals(DateTime.MinValue) ? g.Fecha <= request.FechaFin : true))
                                      .Where(g => g.Tipo.Nombre.Equals("TRANSPORTE"))
                                      .Include(g => g.Empleado)
                                      .Include(g => g.Tipo)
                                      .Include(g => g.Viaje)
                                      .ToList()
                                      .Select(g => g.Total)
                                      .Sum();

                var totalGastronomico = db.Gastos
                                        .Where(g => g.Estado == Estado.APROBADO &&
                                               (!String.IsNullOrEmpty(request.ClienteNombre) &&
                                                (g.Viaje != null) && (g.Viaje.Proyecto != null) &&
                                                (g.Viaje.Proyecto.Cliente != null) ? g.Viaje.Proyecto.Cliente.Nombre.Equals(request.ClienteNombre) : true) &&
                                               (request.EmpleadoId > 0 && (g.Empleado != null) ? g.Empleado.Id == request.EmpleadoId : true) &&
                                               (!request.FechaInicio.Equals(DateTime.MinValue) ? g.Fecha >= request.FechaInicio : true) &&
                                               (!request.FechaFin.Equals(DateTime.MinValue) ? g.Fecha <= request.FechaFin : true))
                                        .Where(g => g.Tipo.Nombre.Equals("GASTRONOMICO"))
                                        .Include(g => g.Empleado)
                                        .Include(g => g.Tipo)
                                        .Include(g => g.Viaje)
                                        .ToList()
                                        .Select(g => g.Total)
                                        .Sum();

                var totalTelefonia = db.Gastos
                                     .Where(g => g.Estado == Estado.APROBADO &&
                                            (!String.IsNullOrEmpty(request.ClienteNombre) &&
                                             (g.Viaje != null) && (g.Viaje.Proyecto != null) &&
                                             (g.Viaje.Proyecto.Cliente != null) ? g.Viaje.Proyecto.Cliente.Nombre.Equals(request.ClienteNombre) : true) &&
                                            (request.EmpleadoId > 0 && (g.Empleado != null) ? g.Empleado.Id == request.EmpleadoId : true) &&
                                            (!request.FechaInicio.Equals(DateTime.MinValue) ? g.Fecha >= request.FechaInicio : true) &&
                                            (!request.FechaFin.Equals(DateTime.MinValue) ? g.Fecha <= request.FechaFin : true))
                                     .Where(g => g.Tipo.Nombre.Equals("TELEFONIA"))
                                     .Include(g => g.Empleado)
                                     .Include(g => g.Tipo)
                                     .Include(g => g.Viaje)
                                     .ToList()
                                     .Select(g => g.Total)
                                     .Sum();

                var totalOtros = db.Gastos
                                 .Where(g => g.Estado == Estado.APROBADO &&
                                        (!String.IsNullOrEmpty(request.ClienteNombre) &&
                                         (g.Viaje != null) && (g.Viaje.Proyecto != null) &&
                                         (g.Viaje.Proyecto.Cliente != null) ? g.Viaje.Proyecto.Cliente.Nombre.Equals(request.ClienteNombre) : true) &&
                                        (request.EmpleadoId > 0 && (g.Empleado != null) ? g.Empleado.Id == request.EmpleadoId : true) &&
                                        (!request.FechaInicio.Equals(DateTime.MinValue) ? g.Fecha >= request.FechaInicio : true) &&
                                        (!request.FechaFin.Equals(DateTime.MinValue) ? g.Fecha <= request.FechaFin : true))
                                 .Where(g => g.Tipo.Nombre.Equals("OTROS"))
                                 .Include(g => g.Empleado)
                                 .Include(g => g.Tipo)
                                 .Include(g => g.Viaje)
                                 .ToList()
                                 .Select(g => g.Total)
                                 .Sum();


                var response = new EstadisticasResponse()
                {
                    TotalTransporte   = totalTransporte,
                    TotalGastronomico = totalGastronomico,
                    TotalTelefonia    = totalTelefonia,
                    TotalOtros        = totalOtros
                };

                return(newHttpEstadisticasResponse(response));
            }
        }
        public HttpResponse <UsuarioResponse> NuevoUsuario(UsuarioRequest usuario)
        {
            if (usuario == null)
            {
                return(newHttpErrorResponse(new Error("El usuario que se intenta ingresar es invalido.")));
            }

            Usuario nuevo = null;

            switch (usuario.EsEmpleado)
            {
            case true:
                nuevo = new Empleado()
                {
                    Email         = usuario.Email,
                    Contrasenia   = usuario.Contrasenia,
                    Nombre        = usuario.Nombre,
                    FechaRegistro = DateTime.Now,
                    Viajes        = null
                };
                break;

            case false:
                nuevo = new Administrativo()
                {
                    Email         = usuario.Email,
                    Contrasenia   = usuario.Contrasenia,
                    Nombre        = usuario.Nombre,
                    FechaRegistro = DateTime.Now
                };
                break;

            default:
                break;
            }
            var encryptionManager = new EncryptionManager();

            nuevo.Contrasenia = encryptionManager.Encryptdata(nuevo.Contrasenia);

            using (var db = new GeviApiContext())
            {
                try
                {
                    db.Usuarios.Add(nuevo);
                    db.SaveChanges();
                }
                catch (DbUpdateException)
                {
                    return(newHttpErrorResponse(new Error("Ya existe un usuario con ese email.")));
                }

                var response = new UsuarioResponse()
                {
                    Id            = nuevo.Id,
                    Email         = nuevo.Email,
                    Nombre        = nuevo.Nombre,
                    EsEmpleado    = nuevo is Empleado,
                    FechaRegistro = DateTime.Today
                };

                return(newHttpResponse(response));
            }
        }
Example #22
0
        public HttpResponse <ClienteResponse> ModificarCliente(ClienteRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El cliente que se intenta modificar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var cli = db.Clientes
                          .Where(c => c.Nombre.Equals(request.Nombre))
                          .Include(c => c.Proyectos)
                          .Include(c => c.Tipo)
                          .FirstOrDefault();

                var tipo = db.TipoClientes
                           .Where(t => t.Nombre.Equals(request.Tipo))
                           .FirstOrDefault();

                if (cli == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el cliente")));
                }

                if (cli.Tipo == tipo)
                {
                    return(newHttpErrorResponse(new Error("El cliente ya es de ese tipo")));
                }

                cli.Nombre = request.Nombre;
                cli.Tipo   = tipo;

                db.Entry(cli).State = EntityState.Modified;
                db.SaveChanges();

                var response = new ClienteResponse()
                {
                    Id        = cli.Id,
                    Nombre    = cli.Nombre,
                    Tipo      = cli.Tipo,
                    Proyectos = null
                };

                if (cli.Proyectos != null)
                {
                    var proyectosResponse = new List <ProyectoResponse>();

                    foreach (var p in cli.Proyectos)
                    {
                        var nuevoProyResponse = new ProyectoResponse()
                        {
                            Id      = p.Id,
                            Nombre  = p.Nombre,
                            Cliente = cli.Nombre
                        };
                        proyectosResponse.Add(nuevoProyResponse);
                    }
                    response.Proyectos = proyectosResponse;
                }

                return(newHttpResponse(response));
            }
        }
        public HttpResponse <LoginResponse> Login(string username, string password)
        {
            var encryptionManager = new EncryptionManager();
            var pass = encryptionManager.Encryptdata(password);

            using (var db = new GeviApiContext())
            {
                var user = db.Usuarios
                           .Where(u => u.Email.Equals(username) && u.Contrasenia.Equals(pass))
                           .FirstOrDefault();

                if (user != null)
                {
                    #region cargarListas
                    var clientes = db.Clientes
                                   .Include(c => c.Proyectos)
                                   .Include(c => c.Tipo)
                                   .ToList();


                    var tipoClientes = db.TipoClientes.ToList();
                    var monedas      = db.Monedas.ToList();
                    var tipoGastos   = db.TipoGastos.ToList();

                    var clientesResponse     = new List <ClienteResponse>();
                    var tipoClientesResponse = new List <TipoResponse>();
                    var tipoGastosResponse   = new List <TipoResponse>();

                    foreach (var c in clientes)
                    {
                        var nuevoCliente = new ClienteResponse()
                        {
                            Id        = c.Id,
                            Nombre    = c.Nombre,
                            Proyectos = null, // lo devuelvo null porque no me interesa devolver los proyectos
                            Tipo      = c.Tipo
                        };

                        clientesResponse.Add(nuevoCliente);
                    }

                    foreach (var tc in tipoClientes)
                    {
                        var nuevoTipoCliente = new TipoResponse()
                        {
                            TipoNombre = tc.Nombre
                        };

                        tipoClientesResponse.Add(nuevoTipoCliente);
                    }

                    foreach (var tg in tipoGastos)
                    {
                        var nuevoTipoGasto = new TipoResponse()
                        {
                            TipoNombre = tg.Nombre
                        };

                        tipoGastosResponse.Add(nuevoTipoGasto);
                    }
                    #endregion

                    if (user is Empleado)
                    {
                        Empleado usuario = user as Empleado;

                        var viajes = db.Viajes
                                     .Where(v => v.Empleado.Id == usuario.Id)
                                     .Where(v => v.Estado == Estado.APROBADO)
                                     .Include(v => v.Empleado)
                                     .Include(v => v.Gastos)
                                     .Include(v => v.Proyecto)
                                     .ToList();

                        var response = new List <ViajeResponse>();

                        #region traerViajesDelEmpleado
                        if (viajes != null)
                        {
                            foreach (var v in viajes)
                            {
                                var nuevo = new ViajeResponse()
                                {
                                    Id          = v.Id,
                                    EmpleadoId  = usuario.Id,
                                    Estado      = v.Estado,
                                    FechaFin    = v.FechaFin,
                                    FechaInicio = v.FechaInicio,
                                    Gastos      = null,
                                    Proyecto    = v.Proyecto?.Nombre
                                };

                                if (v.Gastos != null)
                                {
                                    var gastosRespone = new List <GastoResponse>();

                                    foreach (var g in v.Gastos)
                                    {
                                        var nuevoGastoResponse = new GastoResponse()
                                        {
                                            Id       = g.Id,
                                            Estado   = g.Estado,
                                            Fecha    = g.Fecha,
                                            Moneda   = g.Moneda?.Nombre,
                                            Tipo     = g.Tipo?.Nombre,
                                            ViajeId  = v.Id,
                                            Proyecto = g.Viaje?.Proyecto?.Nombre,
                                            Total    = g.Total,
                                            Empleado = g.Empleado?.Nombre
                                        };

                                        gastosRespone.Add(nuevoGastoResponse);
                                    }

                                    nuevo.Gastos = gastosRespone;
                                }

                                response.Add(nuevo);
                            }
                        }
                        #endregion

                        return(newHttpResponse(new LoginResponse()
                        {
                            Id = user.Id,
                            Email = user.Email,
                            FechaRegistro = user.FechaRegistro,
                            Nombre = user.Nombre,
                            Clientes = clientesResponse,
                            Monedas = monedas,
                            TipoClientes = tipoClientesResponse,
                            TipoGastos = tipoGastosResponse,
                            EsEmpleado = user is Empleado,
                            ViajesAprobados = response
                        }));
                    }

                    if (user is Administrativo)
                    {
                        var empleados = db.Usuarios
                                        .OfType <Empleado>()
                                        .ToList();

                        return(newHttpResponse(new LoginResponse()
                        {
                            Id = user.Id,
                            Email = user.Email,
                            FechaRegistro = user.FechaRegistro,
                            Nombre = user.Nombre,
                            Clientes = clientesResponse,
                            Monedas = monedas,
                            TipoClientes = tipoClientesResponse,
                            TipoGastos = tipoGastosResponse,
                            EsEmpleado = user is Empleado,
                            Empleados = empleados
                        }));
                    }

                    return(newHttpResponse(new LoginResponse()
                    {
                        Id = user.Id,
                        Email = user.Email,
                        FechaRegistro = user.FechaRegistro,
                        Nombre = user.Nombre,
                        Clientes = clientesResponse,
                        Monedas = monedas,
                        TipoClientes = tipoClientesResponse,
                        TipoGastos = tipoGastosResponse,
                        EsEmpleado = user is Empleado
                    }));
                }
                else
                {
                    return(newHttpErrorResponse(new Error("Login invalido. Verifique las credenciales.")));
                }
            }
        }
Example #24
0
        public HttpResponse <ClienteResponse> BorrarCliente(ClienteRequest request)
        {
            if (request == null)
            {
                return(newHttpErrorResponse(new Error("El cliente que se intenta borrar es invalido.")));
            }

            using (var db = new GeviApiContext())
            {
                var cli = db.Clientes
                          .Where(c => c.Nombre == request.Nombre)
                          .Include(c => c.Proyectos.Select(p => p.Cliente))
                          .Include(c => c.Tipo)
                          .FirstOrDefault();

                if (cli == null)
                {
                    return(newHttpErrorResponse(new Error("No existe el cliente")));
                }

                var proyectos = db.Proyectos
                                .Where(p => p.Cliente.Id == cli.Id)
                                .Include(p => p.Cliente)
                                .ToList();

                var response = new ClienteResponse()
                {
                    Id        = cli.Id,
                    Nombre    = cli.Nombre,
                    Proyectos = null,
                    Tipo      = cli.Tipo
                };

                if (proyectos != null)
                {
                    var proyectosResponse = new List <ProyectoResponse>();

                    foreach (var p in proyectos)
                    {
                        var nuevoProyResponse = new ProyectoResponse()
                        {
                            Id      = p.Id,
                            Nombre  = p.Nombre,
                            Cliente = cli?.Nombre
                        };
                        proyectosResponse.Add(nuevoProyResponse);

                        var viajes = db.Viajes
                                     .Where(v => v.Proyecto.Id == p.Id)
                                     .Include(v => v.Proyecto)
                                     .ToList();

                        if (viajes != null)
                        {
                            foreach (var v in viajes)
                            {
                                db.Viajes.Remove(v);
                                db.SaveChanges();
                            }
                        }
                        db.Proyectos.Remove(p);
                        db.SaveChanges();
                    }

                    response.Proyectos = proyectosResponse;
                }

                db.Clientes.Remove(cli);
                db.SaveChanges();

                return(newHttpResponse(response));
            }
        }