示例#1
0
        /// <summary>
        /// Add a leave for a future date in normal way
        /// </summary>
        /// <param name="leave"></param>
        /// <returns></returns>
        public HttpResponseMessage Post([FromBody] leav leave)
        {
            try
            {
                using (ebuilderEntities entities = new ebuilderEntities())
                {
                    if (DateTime.Compare(leave.date, DateTime.Today) < 0)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid field date"));
                    }


                    //check whether a leave exists for the given day for the employee
                    var entity = entities.leavs.FirstOrDefault(l => l.EID == leave.EID && l.date == leave.date);

                    if (entity != null)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Leave Already exists"));
                    }


                    leave.jobCategory = entities.employees.FirstOrDefault(e => e.EID == leave.EID).jobCategory;

                    //Check whether the leaveCategory exists
                    var maxLeaves = entities.leave_type.FirstOrDefault(lt => lt.leaveCategory == leave.leaveCategory && lt.jobCategory == leave.jobCategory).maxAllowed;
                    if (maxLeaves == 0)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Incompatible leave type"));
                    }

                    //check whether the maximum allowed leaves for the period has been taken
                    var leavesTaken = entities.leavs.Where(l => l.EID == leave.EID && l.leaveCategory == leave.leaveCategory && l.date.Year == leave.date.Year).Count();
                    if (leavesTaken >= maxLeaves)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No leaves available"));
                    }

                    leave.leaveCategory = leave.leaveCategory.ToLower();
                    entities.leavs.Add(leave);
                    var man = entities.employees.FirstOrDefault(e => e.EID == leave.EID);

                    entities.Entry(man).Collection("employees").Load();
                    if (man.employees.Any())
                    {
                        foreach (var m in man.employees)
                        {
                            approval app = new approval();
                            app.ManagerID = m.EID;
                            app.LID       = leave.LID;
                            app.status    = "pending";
                            entities.approvals.Add(app);
                        }
                        var message = Request.CreateResponse(HttpStatusCode.OK, leave);
                        entities.SaveChanges();
                        message.Headers.Location = new Uri(Request.RequestUri + leave.LID.ToString());
                        return(message);
                    }
                    else if (leave.jobCategory == "HR Admin")
                    {
                        var message = Request.CreateResponse(HttpStatusCode.OK, leave);
                        entities.SaveChanges();
                        message.Headers.Location = new Uri(Request.RequestUri + leave.LID.ToString());
                        return(message);
                    }
                    else
                    {
                        var message = Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Error occured");
                        return(message);
                    }
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex));
            }
        }