public async Task <ActionResult <TravelApprovalStatusTracker> > PostTravelApprovalStatusTracker(TravelApprovalStatusTracker travelApprovalStatusTracker)
        {
            _context.TravelApprovalStatusTrackers.Add(travelApprovalStatusTracker);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTravelApprovalStatusTracker", new { id = travelApprovalStatusTracker.Id }, travelApprovalStatusTracker));
        }
Exemple #2
0
        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!"
            }));
        }