示例#1
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));
            }
        }
示例#2
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));
            }
        }
示例#4
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.")));
            }
        }
示例#5
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")));
            }
        }
示例#6
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 <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")));
            }
        }
示例#10
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));
            }
        }
示例#11
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 <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));
            }
        }
示例#13
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")));
            }
        }