/// <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)); } }