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); }
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."))); } } } } } }