public async Task <ActionResult <TravelApprovalStatusTracker> > PostTravelApprovalStatusTracker(TravelApprovalStatusTracker travelApprovalStatusTracker) { _context.TravelApprovalStatusTrackers.Add(travelApprovalStatusTracker); await _context.SaveChangesAsync(); return(CreatedAtAction("GetTravelApprovalStatusTracker", new { id = travelApprovalStatusTracker.Id }, travelApprovalStatusTracker)); }
public async Task <IActionResult> PutTravelApprovalRequest(int id, TravelApprovalRequestDTO travelApprovalRequestDTO) { if (id != travelApprovalRequestDTO.Id) { return(Conflict(new RespStatus { Status = "Failure", Message = "Travel Id is invalid" })); } var travelApprovalRequest = await _context.TravelApprovalRequests.FindAsync(id); ///update the Wallet of the employe to reflect the changes int ApprovedCount = _context.TravelApprovalStatusTrackers.Where(e => e.TravelApprovalRequestId == travelApprovalRequest.Id && e.ApprovalStatusTypeId == (int)EApprovalStatus.Approved).Count(); if (ApprovedCount != 0) { return(Conflict(new RespStatus { Status = "Failure", Message = "Travel Requests cant be Edited after Approval!" })); } travelApprovalRequest.Id = travelApprovalRequestDTO.Id; travelApprovalRequest.EmployeeId = travelApprovalRequestDTO.EmployeeId; travelApprovalRequest.TravelStartDate = travelApprovalRequestDTO.TravelStartDate; travelApprovalRequest.TravelEndDate = travelApprovalRequestDTO.TravelEndDate; travelApprovalRequest.TravelPurpose = travelApprovalRequestDTO.TravelPurpose; travelApprovalRequest.ReqRaisedDate = DateTime.Now; if (travelApprovalRequestDTO.DepartmentId != null) { travelApprovalRequest.DepartmentId = travelApprovalRequestDTO.DepartmentId; } if (travelApprovalRequestDTO.ProjectId != null) { travelApprovalRequest.ProjectId = travelApprovalRequestDTO.ProjectId; travelApprovalRequest.SubProjectId = travelApprovalRequestDTO.SubProjectId; travelApprovalRequest.WorkTaskId = travelApprovalRequestDTO.WorkTaskId; } _context.TravelApprovalRequests.Update(travelApprovalRequest); //now update the TravelApprovalStatus Trackers var travelStatusTrackers = _context.TravelApprovalStatusTrackers.Where(e => e.TravelApprovalRequestId == travelApprovalRequest.Id).OrderBy(o => o.Id).ToList(); bool IsFirstEmail = true; foreach (var travel in travelStatusTrackers) { TravelApprovalStatusTracker travelStatusItem = await _context.TravelApprovalStatusTrackers.FindAsync(travel.Id); travelStatusItem.TravelStartDate = travelApprovalRequestDTO.TravelStartDate; travelStatusItem.TravelEndDate = travelApprovalRequestDTO.TravelEndDate; if (travelApprovalRequestDTO.DepartmentId != null) { travelStatusItem.DepartmentId = travelApprovalRequestDTO.DepartmentId; } if (travelApprovalRequestDTO.ProjectId != null) { travelStatusItem.ProjectId = travelApprovalRequestDTO.ProjectId; travelStatusItem.SubProjectId = travelApprovalRequestDTO.SubProjectId; travelStatusItem.WorkTaskId = travelApprovalRequestDTO.WorkTaskId; } travelStatusItem.ReqDate = DateTime.Now; _context.TravelApprovalStatusTrackers.Update(travelStatusItem); if (IsFirstEmail) { var approver = _context.Employees.Where(e => e.RoleId == travelStatusItem.RoleId && e.ApprovalGroupId == travelStatusItem.ApprovalGroupId).FirstOrDefault(); var approverMailAddress = approver.Email; string subject = "(Modified) Travel Approval Request No# " + travelApprovalRequestDTO.Id.ToString(); Employee emp = await _context.Employees.FindAsync(travelApprovalRequestDTO.EmployeeId); var pettycashreq = _context.TravelApprovalRequests.Find(travelApprovalRequestDTO.Id); string content = "(Modified)Travel Approval Request sought by " + emp.FirstName + "<br/>Travel Request Details <br/>Start Date: " + travelApprovalRequestDTO.TravelStartDate + "<br/>End Date: " + travelApprovalRequestDTO.TravelEndDate + "<br/>Travel Purpose: " + travelApprovalRequestDTO.TravelPurpose; var messagemail = new Message(new string[] { approverMailAddress }, subject, content); await _emailSender.SendEmailAsync(messagemail); IsFirstEmail = false; } } //_context.Entry(travelApprovalRequest).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { throw; } return(Ok(new RespStatus { Status = "Success", Message = "Travel Approval Request Updated!" })); }