Ejemplo n.º 1
0
        public async Task <IActionResult> PutTravelApprovalRequest(int id, TravelApprovalRequestDTO travelApprovalRequestDto)
        {
            if (id != travelApprovalRequestDto.Id)
            {
                return(BadRequest());
            }

            var travelApprovalRequest = await _context.TravelApprovalRequests.FindAsync(id);

            travelApprovalRequest.Id              = travelApprovalRequestDto.Id;
            travelApprovalRequest.EmployeeId      = travelApprovalRequestDto.EmployeeId;
            travelApprovalRequest.TravelStartDate = travelApprovalRequestDto.TravelStartDate;
            travelApprovalRequest.TravelEndDate   = travelApprovalRequestDto.TravelEndDate;

            _context.TravelApprovalRequests.Update(travelApprovalRequest);
            //_context.Entry(projectDto).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TravelApprovalRequestExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Ejemplo n.º 2
0
        private async Task DepartmentTravelRequest(TravelApprovalRequestDTO travelApprovalRequestDto)
        {
            //Add oned entry to the TravelApprovalRequestTracker for Department based Request
            //Here project ID will be null

            int empid                    = travelApprovalRequestDto.EmployeeId;
            int empApprGroupId           = _context.Employees.Find(empid).ApprovalGroupId;
            int costCentre               = _context.Projects.Find(travelApprovalRequestDto.ProjectId).CostCentreId;
            int projManagerid            = _context.ProjectManagements.Find(travelApprovalRequestDto.ProjectId).EmployeeId;
            var getEmpApproversAllLevels = _context.ApprovalRoleMaps.Where(a => a.ApprovalGroupId == empApprGroupId).ToList().OrderBy(a => a.ApprovalLevel);

            foreach (ApprovalRoleMap ApprMap in getEmpApproversAllLevels)
            {
                int role_id  = ApprMap.RoleId;
                var approver = _context.Employees.Where(e => e.RoleId == role_id).FirstOrDefault();

                /// Step 2: Enter a Record in Travel Approval Request Tracker (table)

                _context.TravelApprovalStatusTrackers.Add(new TravelApprovalStatusTracker
                {
                    EmployeeId = travelApprovalRequestDto.EmployeeId,
                    TravelApprovalRequestId = travelApprovalRequestDto.Id,
                    DepartmentId            = approver.DepartmentId,
                    ProjectId            = null,
                    RoleId               = approver.RoleId,
                    ReqDate              = DateTime.Now,
                    FinalApprovedDate    = null,
                    ApprovalStatusTypeId = (int)ApprovalStatus.Pending //1-Pending, 2-Approved, 3-Rejected
                });

                //##### 5. Send email to the Approver
                //Multiple instance for Department
                //####################################

                var      approverMailAddress = approver.Email;
                string   subject             = "Expense Claim Approval Request " + travelApprovalRequestDto.Id.ToString();
                Employee emp = _context.Employees.Find(travelApprovalRequestDto.EmployeeId);
                var      expenseReimClaimReq = _context.ExpenseReimburseRequests.Find(travelApprovalRequestDto.Id);
                string   content             = "Travel Request Approval sought by " + emp.FirstName + "/nfor the purpose of " + travelApprovalRequestDto.TravelPurpose;
                var      messagemail         = new Message(new string[] { approverMailAddress }, subject, content);

                await _emailSender.SendEmailAsync(messagemail);

                //repeat for each approver
            }
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <IEnumerable <TravelApprovalRequestDTO> > > GetTravelApprovalRequest()
        {
            List <TravelApprovalRequestDTO> ListTravelRequestDTO = new List <TravelApprovalRequestDTO>();

            var travelrequests = await _context.TravelApprovalRequests.ToListAsync();

            foreach (TravelApprovalRequest travelrequest in travelrequests)
            {
                TravelApprovalRequestDTO travelApprovalRequestDTO = new TravelApprovalRequestDTO();

                travelApprovalRequestDTO.Id              = travelrequest.Id;
                travelApprovalRequestDTO.EmployeeId      = travelrequest.EmployeeId;
                travelApprovalRequestDTO.TravelStartDate = travelrequest.TravelStartDate;
                travelApprovalRequestDTO.TravelEndDate   = travelrequest.TravelEndDate;

                ListTravelRequestDTO.Add(travelApprovalRequestDTO);
            }

            return(ListTravelRequestDTO);
        }
Ejemplo n.º 4
0
        public async Task <ActionResult <TravelApprovalRequestDTO> > GetTravelApprovalRequest(int id)
        {
            var travelrequest = await _context.TravelApprovalRequests.FindAsync(id);

            TravelApprovalRequestDTO travelApprovalRequestDTO = new TravelApprovalRequestDTO();

            travelApprovalRequestDTO.Id              = travelrequest.Id;
            travelApprovalRequestDTO.EmployeeId      = travelrequest.EmployeeId;
            travelApprovalRequestDTO.TravelStartDate = travelrequest.TravelStartDate;
            travelApprovalRequestDTO.TravelEndDate   = travelrequest.TravelEndDate;

            if (travelrequest == null)
            {
                return(NotFound());
            }

            travelApprovalRequestDTO.Id              = travelrequest.Id;
            travelApprovalRequestDTO.EmployeeId      = travelrequest.EmployeeId;
            travelApprovalRequestDTO.TravelStartDate = travelrequest.TravelStartDate;
            travelApprovalRequestDTO.TravelEndDate   = travelrequest.TravelEndDate;


            return(travelApprovalRequestDTO);
        }
Ejemplo n.º 5
0
        private async Task ProjectTravelRequest(TravelApprovalRequestDTO travelApprovalRequestDto)
        {
            //Add oned entry to the TravelApprovalRequestTracker for PROJECT based Request
            //Here Department ID will be null

            int costCentre = _context.Projects.Find(travelApprovalRequestDto.ProjectId).CostCentreId;

            int projManagerid = _context.ProjectManagements.Find(travelApprovalRequestDto.ProjectId).EmployeeId;

            var approver = _context.Employees.Find(projManagerid);

            _context.TravelApprovalStatusTrackers.Add(new TravelApprovalStatusTracker()
            {
                EmployeeId = travelApprovalRequestDto.EmployeeId,
                TravelApprovalRequestId = travelApprovalRequestDto.Id,
                DepartmentId            = null,
                ProjectId            = travelApprovalRequestDto.ProjectId.Value,
                RoleId               = approver.RoleId,
                ReqDate              = DateTime.Now,
                FinalApprovedDate    = null,
                ApprovalStatusTypeId = (int)ApprovalStatus.Pending //1-Pending, 2-Approved, 3-Rejected
            });

            //##### 5. Send email to the Approver
            //Single instance for Project
            //####################################

            var      approverMailAddress = approver.Email;
            string   subject             = "Expense Claim Approval Request " + travelApprovalRequestDto.Id.ToString();
            Employee emp = _context.Employees.Find(travelApprovalRequestDto.EmployeeId);
            var      expenseReimClaimReq = _context.ExpenseReimburseRequests.Find(travelApprovalRequestDto.Id);
            string   content             = "Travel Request Approval sought by " + emp.FirstName + "/nfor the purpose of " + travelApprovalRequestDto.TravelPurpose;
            var      messagemail         = new Message(new string[] { approverMailAddress }, subject, content);

            await _emailSender.SendEmailAsync(messagemail);
        }
Ejemplo n.º 6
0
        public async Task <ActionResult <TravelApprovalRequest> > PostTravelApprovalRequest(TravelApprovalRequestDTO travelApprovalRequestDto)
        {
            /// Step 1 : enter a record in TravelApprovalRequest table

            TravelApprovalRequest travelApprovalRequest = new TravelApprovalRequest();

            travelApprovalRequest.Id              = travelApprovalRequestDto.Id;
            travelApprovalRequest.EmployeeId      = travelApprovalRequestDto.EmployeeId;
            travelApprovalRequest.TravelStartDate = travelApprovalRequestDto.TravelStartDate;
            travelApprovalRequest.TravelEndDate   = travelApprovalRequestDto.TravelEndDate;
            travelApprovalRequest.ProjectId       = travelApprovalRequestDto.ProjectId;
            travelApprovalRequest.SubProjectId    = travelApprovalRequestDto.SubProjectId;
            travelApprovalRequest.WorkTaskId      = travelApprovalRequestDto.WorkTaskId;

            _context.TravelApprovalRequests.Add(travelApprovalRequest);
            await _context.SaveChangesAsync();

            //Check if the Requestor is raising Travel reques on behalf of Project (Or) department
            //Process the travel request appropriately
            if (travelApprovalRequestDto.ProjectId == null)
            {
                await Task.Run(() => ProjectTravelRequest(travelApprovalRequestDto));
            }
            else
            {
                await Task.Run(() => DepartmentTravelRequest(travelApprovalRequestDto));
            }



            return(CreatedAtAction("GetGetTravelApprovalRequest", new { id = travelApprovalRequest.Id }, travelApprovalRequest));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// This is option 2 : DEPARTMENT BASED CASH ADVANCE REQUEST
        /// </summary>
        /// <param name="travelApprovalRequestDto"></param>

        private async Task DepartmentTravelRequest(TravelApprovalRequestDTO travelApprovalRequestDto)
        {
            //### 1. If Employee Eligible for Cash Claim enter a record and reduce the available amount for next claim
            #region

            int      reqEmpid              = travelApprovalRequestDto.EmployeeId;
            Employee reqEmp                = _context.Employees.Find(reqEmpid);
            int      reqApprGroupId        = reqEmp.ApprovalGroupId;
            int      reqRoleId             = reqEmp.RoleId;
            int      maxApprLevel          = _context.ApprovalRoleMaps.Include("ApprovalLevel").Where(a => a.ApprovalGroupId == reqApprGroupId).ToList().Select(x => x.ApprovalLevel).Max(a => a.Level);
            int      reqApprLevel          = _context.ApprovalRoleMaps.Include("ApprovalLevel").Where(a => a.ApprovalGroupId == reqApprGroupId && a.RoleId == reqRoleId).Select(x => x.ApprovalLevel).FirstOrDefault().Level;
            bool     isSelfApprovedRequest = false;

            var travelApprovalRequest = new TravelApprovalRequest()
            {
                EmployeeId           = reqEmpid,
                TravelStartDate      = travelApprovalRequestDto.TravelStartDate,
                TravelEndDate        = travelApprovalRequestDto.TravelEndDate,
                TravelPurpose        = travelApprovalRequestDto.TravelPurpose,
                ReqRaisedDate        = DateTime.Now,
                DepartmentId         = _context.Employees.Find(reqEmpid).DepartmentId,
                ProjectId            = travelApprovalRequestDto.ProjectId,
                SubProjectId         = travelApprovalRequestDto.SubProjectId,
                WorkTaskId           = travelApprovalRequestDto.WorkTaskId,
                CostCenterId         = _context.Departments.Find(_context.Employees.Find(reqEmpid).DepartmentId).CostCenterId,
                ApprovalStatusTypeId = (int)EApprovalStatus.Pending,
                Comments             = "Travel Request In Process!"
            };
            _context.TravelApprovalRequests.Add(travelApprovalRequest);
            await _context.SaveChangesAsync();

            //get the saved record Id
            travelApprovalRequestDto.Id = travelApprovalRequest.Id;

            #endregion


            #region
            //##### STEP 3. ClaimsApprovalTracker to be updated for all the allowed Approvers

            ///////////////////////////// Check if self Approved Request /////////////////////////////


            //if highest approver is requesting Petty cash request himself
            if (maxApprLevel == reqApprLevel)
            {
                isSelfApprovedRequest = true;
            }
            //////////////////////////////////////////////////////////////////////////////////////////


            var getEmpClaimApproversAllLevels = _context.ApprovalRoleMaps
                                                .Include(a => a.ApprovalLevel)
                                                .Where(a => a.ApprovalGroupId == reqApprGroupId)
                                                .OrderBy(o => o.ApprovalLevel.Level).ToList();
            bool isFirstApprover = true;

            if (isSelfApprovedRequest)
            {
                TravelApprovalStatusTracker travelApprovalStatusTracker = new()
                {
                    EmployeeId = travelApprovalRequestDto.EmployeeId,
                    TravelApprovalRequestId = travelApprovalRequestDto.Id,
                    TravelStartDate         = travelApprovalRequestDto.TravelStartDate,
                    TravelEndDate           = travelApprovalRequestDto.TravelEndDate,
                    DepartmentId            = _context.Employees.Find(travelApprovalRequestDto.EmployeeId).DepartmentId,
                    ProjectId            = null,
                    RoleId               = _context.Employees.Find(travelApprovalRequestDto.EmployeeId).RoleId,
                    ApprovalLevelId      = reqApprLevel,
                    ApprovalGroupId      = reqApprGroupId,
                    ReqDate              = DateTime.Now,
                    FinalApprovedDate    = DateTime.Now,
                    ApprovalStatusTypeId = (int)EApprovalStatus.Approved,
                    Comments             = "Travel Request in Proceess"
                };

                _context.TravelApprovalStatusTrackers.Add(travelApprovalStatusTracker);
                travelApprovalRequest.ApprovalStatusTypeId = (int)EApprovalStatus.Approved;
                _context.TravelApprovalRequests.Update(travelApprovalRequest);
                await _context.SaveChangesAsync();
            }
            else
            {
                foreach (ApprovalRoleMap ApprMap in getEmpClaimApproversAllLevels)
                {
                    int role_id  = ApprMap.RoleId;
                    var approver = _context.Employees.Where(e => e.RoleId == role_id && e.ApprovalGroupId == reqApprGroupId).FirstOrDefault();
                    if (approver == null)
                    {
                        continue;
                    }

                    int approverLevelid = _context.ApprovalRoleMaps.Where(x => x.RoleId == approver.RoleId && x.ApprovalGroupId == reqApprGroupId).FirstOrDefault().ApprovalLevelId;
                    int approverLevel   = _context.ApprovalLevels.Find(approverLevelid).Level;

                    if (reqApprLevel >= approverLevel)
                    {
                        continue;
                    }


                    TravelApprovalStatusTracker travelApprovalStatusTracker = new()
                    {
                        EmployeeId = travelApprovalRequestDto.EmployeeId,
                        TravelApprovalRequestId = travelApprovalRequestDto.Id,
                        TravelStartDate         = travelApprovalRequestDto.TravelStartDate,
                        TravelEndDate           = travelApprovalRequestDto.TravelEndDate,
                        DepartmentId            = _context.Employees.Find(travelApprovalRequestDto.EmployeeId).DepartmentId,
                        ProjectId            = null,
                        RoleId               = approver.RoleId,
                        ApprovalLevelId      = ApprMap.ApprovalLevelId,
                        ApprovalGroupId      = reqApprGroupId,
                        ReqDate              = DateTime.Now,
                        FinalApprovedDate    = null,
                        ApprovalStatusTypeId = isFirstApprover ? (int)EApprovalStatus.Pending : (int)EApprovalStatus.Initiating,
                        Comments             = "Travel Request in Proceess"
                                               //1-Initiating, 2-Pending, 3-InReview, 4-Approved, 5-Rejected
                    };


                    _context.TravelApprovalStatusTrackers.Add(travelApprovalStatusTracker);
                    await _context.SaveChangesAsync();


                    if (isFirstApprover)
                    {
                        //##### 4. Send email to the Approver
                        //####################################
                        var      approverMailAddress = approver.Email;
                        string   subject             = "Travel Approval Request No# " + travelApprovalRequestDto.Id.ToString();
                        Employee emp = await _context.Employees.FindAsync(travelApprovalRequestDto.EmployeeId);

                        var    pettycashreq = _context.TravelApprovalRequests.Find(travelApprovalRequestDto.Id);
                        string content      = "Travel Approval Request sought by " + emp.FirstName + "<br/>Travel Request Deetails <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);
                    }

                    //first approver will be added as Pending, other approvers will be with In Approval Queue
                    isFirstApprover = false;
                }
            }


            #endregion


            await _context.SaveChangesAsync();
        }
    }
Ejemplo n.º 8
0
        /// <summary>
        /// This is the option 1 : : PROJECT BASED TRAVEL REQUEST
        /// </summary>
        /// <param name="travelApprovalRequestDto"></param>
        /// <param name="travelApprovalRequestDto"></param>
        private async Task <IActionResult> ProjectTravelRequest(TravelApprovalRequestDTO travelApprovalRequestDTO)
        {
            #region
            int  costCenterId          = _context.Projects.Find(travelApprovalRequestDTO.ProjectId).CostCenterId;
            int  projManagerid         = _context.Projects.Find(travelApprovalRequestDTO.ProjectId).ProjectManagerId;
            var  approver              = _context.Employees.Find(projManagerid);
            int  reqEmpid              = travelApprovalRequestDTO.EmployeeId;
            int  maxApprLevel          = _context.ApprovalRoleMaps.Max(a => a.ApprovalLevelId);
            int  empApprLevel          = _context.ApprovalRoleMaps.Where(a => a.RoleId == _context.Employees.Find(reqEmpid).RoleId).FirstOrDefault().Id;
            bool isSelfApprovedRequest = false;
            #endregion

            //### 1. If Employee Travel Request enter a record in TravelApprovalRequestTracker
            #region
            TravelApprovalRequest travelApprovalRequest = new();

            travelApprovalRequest.Id                   = travelApprovalRequestDTO.Id;
            travelApprovalRequest.EmployeeId           = travelApprovalRequestDTO.EmployeeId;
            travelApprovalRequest.TravelStartDate      = travelApprovalRequestDTO.TravelStartDate;
            travelApprovalRequest.TravelEndDate        = travelApprovalRequestDTO.TravelEndDate;
            travelApprovalRequest.TravelPurpose        = travelApprovalRequestDTO.TravelPurpose;
            travelApprovalRequest.ReqRaisedDate        = DateTime.Now;
            travelApprovalRequest.DepartmentId         = travelApprovalRequestDTO.DepartmentId;
            travelApprovalRequest.ProjectId            = travelApprovalRequestDTO.ProjectId;
            travelApprovalRequest.SubProjectId         = travelApprovalRequestDTO.SubProjectId;
            travelApprovalRequest.WorkTaskId           = travelApprovalRequestDTO.WorkTaskId;
            travelApprovalRequest.CostCenterId         = _context.Projects.Find(travelApprovalRequestDTO.ProjectId).CostCenterId;
            travelApprovalRequest.ApprovalStatusTypeId = (int)EApprovalStatus.Pending;
            travelApprovalRequest.Comments             = "Travel Request In Process!";


            _context.TravelApprovalRequests.Add(travelApprovalRequest);

            await _context.SaveChangesAsync();

            //get the saved record Id
            travelApprovalRequestDTO.Id = travelApprovalRequest.Id;
            #endregion

            //##### 3. Add an entry to ClaimApproval Status tracker
            //get costcenterID based on project
            #region

            ///////////////////////////// Check if self Approved Request /////////////////////////////

            //if highest approver is requesting Petty cash request himself
            if (maxApprLevel == empApprLevel || projManagerid == reqEmpid)
            {
                isSelfApprovedRequest = true;
            }
            //////////////////////////////////////////////////////////////////////////////////////////
            TravelApprovalStatusTracker travelApprovalStatusTracker = new();
            if (isSelfApprovedRequest)
            {
                travelApprovalStatusTracker.EmployeeId = travelApprovalRequestDTO.EmployeeId;
                travelApprovalStatusTracker.TravelApprovalRequestId = travelApprovalRequestDTO.Id;
                travelApprovalStatusTracker.TravelStartDate         = travelApprovalRequestDTO.TravelStartDate;
                travelApprovalStatusTracker.TravelEndDate           = travelApprovalRequestDTO.TravelEndDate;
                travelApprovalStatusTracker.DepartmentId            = null;
                travelApprovalStatusTracker.ProjManagerId           = projManagerid;
                travelApprovalStatusTracker.ProjectId            = travelApprovalRequestDTO.ProjectId;
                travelApprovalStatusTracker.RoleId               = approver.RoleId;
                travelApprovalStatusTracker.ApprovalGroupId      = _context.Employees.Find(travelApprovalRequestDTO.EmployeeId).ApprovalGroupId;
                travelApprovalStatusTracker.ApprovalLevelId      = 2; // default approval level is 2 for Project based request
                travelApprovalStatusTracker.ReqDate              = DateTime.Now;
                travelApprovalStatusTracker.FinalApprovedDate    = DateTime.Now;
                travelApprovalStatusTracker.ApprovalStatusTypeId = (int)EApprovalStatus.Approved; //1-Initiating; 2-Pending; 3-InReview; 4-Approved; 5-Rejected
                travelApprovalStatusTracker.Comments             = "Travel Request is Self Approved!";

                _context.TravelApprovalStatusTrackers.Add(travelApprovalStatusTracker);
                travelApprovalRequest.ApprovalStatusTypeId = (int)EApprovalStatus.Approved;
                _context.TravelApprovalRequests.Update(travelApprovalRequest);
                await _context.SaveChangesAsync();
            }
            else
            {
                travelApprovalStatusTracker.EmployeeId = travelApprovalRequestDTO.EmployeeId;
                travelApprovalStatusTracker.TravelApprovalRequestId = travelApprovalRequestDTO.Id;
                travelApprovalStatusTracker.TravelStartDate         = travelApprovalRequestDTO.TravelStartDate;
                travelApprovalStatusTracker.TravelEndDate           = travelApprovalRequestDTO.TravelEndDate;
                travelApprovalStatusTracker.DepartmentId            = null;
                travelApprovalStatusTracker.ProjManagerId           = projManagerid;
                travelApprovalStatusTracker.ProjectId = travelApprovalRequestDTO.ProjectId;
                travelApprovalStatusTracker.RoleId    = approver.RoleId;
                // get the next ProjectManager approval.
                travelApprovalStatusTracker.ApprovalGroupId      = _context.Employees.Find(travelApprovalRequestDTO.EmployeeId).ApprovalGroupId;
                travelApprovalStatusTracker.ApprovalLevelId      = 2; // default approval level is 2 for Project based request
                travelApprovalStatusTracker.ReqDate              = DateTime.Now;
                travelApprovalStatusTracker.FinalApprovedDate    = null;
                travelApprovalStatusTracker.ApprovalStatusTypeId = (int)EApprovalStatus.Pending; //1-Initiating, 2-Pending, 3-InReview, 4-Approved, 5-Rejected
                travelApprovalStatusTracker.Comments             = "Travel Request in Proceess";
            }



            _context.TravelApprovalStatusTrackers.Add(travelApprovalStatusTracker);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                throw;
            }
            #endregion


            //##### 4. Send email to the user
            //####################################
            #region
            if (isSelfApprovedRequest)
            {
                return(null);
            }
            var      approverMailAddress = approver.Email;
            string   subject             = "Travel Approval Request No# " + travelApprovalRequestDTO.Id.ToString();
            Employee emp = await _context.Employees.FindAsync(travelApprovalRequestDTO.EmployeeId);

            var    pettycashreq = _context.TravelApprovalRequests.Find(travelApprovalRequestDTO.Id);
            string content      = "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);

            #endregion



            await _context.SaveChangesAsync();

            return(Ok(new RespStatus {
                Status = "Success", Message = "Travel Request Created!"
            }));
        }
Ejemplo n.º 9
0
        public async Task <ActionResult <TravelApprovalRequest> > PostTravelApprovalRequest(TravelApprovalRequestDTO travelApprovalRequestDTO)
        {
            //Step ##1

            var dupReq = _context.TravelApprovalRequests.Where(
                t => t.TravelStartDate.Date == travelApprovalRequestDTO.TravelStartDate.Date &&
                t.TravelEndDate.Date == travelApprovalRequestDTO.TravelEndDate.Date &&
                t.EmployeeId == travelApprovalRequestDTO.EmployeeId &&
                t.TravelPurpose == travelApprovalRequestDTO.TravelPurpose).Count();

            if (dupReq != 0)
            {
                return(Conflict(new RespStatus {
                    Status = "Failure", Message = "Duplicate request cannot be created"
                }));
            }



            //##Step 2

            if (travelApprovalRequestDTO.ProjectId != null)
            {
                //Goes to Option 1 (Project)
                await Task.Run(() => ProjectTravelRequest(travelApprovalRequestDTO));
            }
            else
            {
                //Goes to Option 2 (Department)
                await Task.Run(() => DepartmentTravelRequest(travelApprovalRequestDTO));
            }


            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                throw;
            }

            return(Ok(new RespStatus {
                Status = "Success", Message = "Travel Request Created!"
            }));
        }
Ejemplo n.º 10
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!"
            }));
        }