Ejemplo n.º 1
0
        public async Task <Response <Employee> > AddLeavesAsync(int userId, ICollection <Leave> leaves)
        {
            var employee = await DbContext.Set <Employee>().Include(e => e.Leaves).FirstOrDefaultAsync(e => e.Id == userId);

            if (employee == null)
            {
                return(new Response <Employee>(HttpStatusCode.NotFound, $"Employee with id = {userId} not found"));
            }

            if (LeavesValidator.TryMergeLeaves(employee.Leaves.ToList(), leaves))
            {
                employee.Leaves = employee.Leaves.Concat(leaves).ToList();
                await DbContext.SaveChangesAsync();

                return(new Response <Employee>(employee));
            }

            return(new Response <Employee>(HttpStatusCode.BadRequest, "Transferred leave is not correct"));
        }
Ejemplo n.º 2
0
        public async Task <Response <Employee> > UpdateLeavesAsync(int userId, ICollection <Leave> leaves)
        {
            var employee = await DbContext.Set <Employee>().Include(e => e.Leaves).SingleOrDefaultAsync(e => e.Id == userId);

            if (employee == null)
            {
                return(new Response <Employee>(HttpStatusCode.NotFound, $"Employee with id = {userId} not found"));
            }

            try
            {
                foreach (Leave leave in leaves)
                {
                    leave.EmployeeId = employee.Id;
                    leave.Employee   = employee;
                    var currentLeave = employee.Leaves.SingleOrDefault(l => l.Id == leave.Id);
                    if (currentLeave == null)
                    {
                        return(new Response <Employee>(HttpStatusCode.NotFound, $"Leave with id = {leave.Id} not found"));
                    }
                    Mapper.Map(leave, currentLeave);
                    DbContext.Entry(currentLeave).State = EntityState.Modified;
                    DbContext.Set <Leave>().Update(currentLeave);
                }

                if (!LeavesValidator.ValidateLeaves(employee.Leaves.ToList()))
                {
                    return(new Response <Employee>(HttpStatusCode.BadRequest, "Transferred leave is not correct"));
                }

                await DbContext.SaveChangesAsync();
            }
            catch (Exception e)
            {
                return(new Response <Employee>(HttpStatusCode.InternalServerError, "Internal server error"));
            }

            return(new Response <Employee>(Mapper.Map <Employee>(employee)));
        }