public EmployeeVacationRequestsViewModel GetEmployeeVacationRequests(Guid idEmployee)
        {
            EmployeeVacationRequestsViewModel employeeVacationRequestsViewModel = new EmployeeVacationRequestsViewModel();
            Employee dbemployee = dbContext.Employees.FirstOrDefault(x => x.IDEmployee == idEmployee);

            if (dbemployee != null)
            {
                employeeVacationRequestsViewModel.FullName         = dbemployee.FirstName + " " + dbemployee.LastName;
                employeeVacationRequestsViewModel.Position         = (PositionEnum)dbemployee.Position;
                employeeVacationRequestsViewModel.TeamName         = dbemployee.Team.Name;
                employeeVacationRequestsViewModel.BusinessUnitName = dbemployee.BusinessUnit.Name;
                employeeVacationRequestsViewModel.HiringDate       = dbemployee.HiringDate;
                employeeVacationRequestsViewModel.TotalDaysOff     = dbemployee.TotalDaysOff;
                employeeVacationRequestsViewModel.DaysOffLeft      = dbemployee.DaysOffLeft;

                IQueryable <VacationRequest> dbEmployeeVacationRequests = dbContext.VacationRequests.Where(x => x.IDEmployee == idEmployee);
                foreach (VacationRequest dbVacation in dbEmployeeVacationRequests)
                {
                    VacationRequestModel vacationRequestModel = new VacationRequestModel();
                    vacationRequestModel.Reason         = dbVacation.Reason;
                    vacationRequestModel.StartDate      = dbVacation.StartDate;
                    vacationRequestModel.EndDate        = dbVacation.EndDate;
                    vacationRequestModel.DaysRequested  = dbVacation.DaysRequested;
                    vacationRequestModel.FirstApproval  = (ApprovalStatusEnum)dbVacation.FirstApproval;
                    vacationRequestModel.SecondApproval = (ApprovalStatusEnum)dbVacation.SecondApproval;
                    vacationRequestModel.Status         = (ApprovalStatusEnum)dbVacation.Status;
                    employeeVacationRequestsViewModel.EmployeeVacations.Add(vacationRequestModel);
                }
            }
            return(employeeVacationRequestsViewModel);
        }
        public ActionResult Create(FormCollection collection)
        {
            EmployeeModel current = employeeRepository.GetEmployeeByUserId(User.Identity.GetUserId());

            ViewData["idEmployee"] = current.IDEmployee;
            try
            {
                VacationRequestModel vacationRequestModel = new VacationRequestModel();
                if (current.Position == PositionEnum.BusinessUnitManager)
                {
                    vacationRequestModel.FirstApproval = ApprovalStatusEnum.Approved;
                }
                else
                {
                    vacationRequestModel.FirstApproval = ApprovalStatusEnum.Pending;
                }
                UpdateModel(vacationRequestModel);
                if (vacationRequestModel.DaysRequested > current.DaysOffLeft || vacationRequestModel.DaysRequested > current.TotalDaysOff)
                {
                    return(View("RequestNotValid"));
                }
                vacationRequestRepository.InsertVacationRequest(vacationRequestModel);
                return(RedirectToAction("MyProfile", "Employee"));
            }
            catch
            {
                return(View("CreateVacationRequest"));
            }
        }
        /// <summary>
        /// Update VacationRequest
        /// </summary>
        /// <param name="vacationRequest">VacationRequestModel</param>
        /// <returns>true on success</returns>
        public bool Update(VacationRequestModel vacationRequest)
        {
            if (vacationRequest == null)
            {
                throw new ArgumentNullException("vacationRequest");
            }

            using (var dataContext = new Database(DbName))
            {
                dataContext.Update(vacationRequest);
                return(true);
            }
        }
        /// <summary>
        /// Add VacationRequest
        /// </summary>
        /// <param name="vacationRequest">Object VacationRequestModel</param>
        /// <returns>Return the employee ID inserted, an error text if something wrong happens</returns>
        public string Add(VacationRequestModel vacationRequest)
        {
            if (vacationRequest == null)
            {
                throw new ArgumentNullException("vacationRequest");
            }

            using (var dataContext = new Database(DbName))
            {
                dataContext.Insert(vacationRequest);
                return(vacationRequest.Id.ToString());
            }
        }
        public ActionResult Edit(Guid id, FormCollection collection)
        {
            try
            {
                VacationRequestModel vacationRequestModel = new VacationRequestModel();
                UpdateModel(vacationRequestModel);
                if (vacationRequestModel.FirstApproval == ApprovalStatusEnum.Approved && vacationRequestModel.SecondApproval == ApprovalStatusEnum.Approved)
                {
                    vacationRequestModel.Status = ApprovalStatusEnum.Approved;
                    vacationRequestRepository.UpdateVacationRequest(vacationRequestModel);
                }
                if (vacationRequestModel.FirstApproval == ApprovalStatusEnum.Rejected && vacationRequestModel.SecondApproval == ApprovalStatusEnum.Rejected)
                {
                    vacationRequestModel.Status = ApprovalStatusEnum.Rejected;
                    vacationRequestRepository.UpdateVacationRequest(vacationRequestModel);
                }
                if (vacationRequestModel.FirstApproval == ApprovalStatusEnum.Rejected || vacationRequestModel.SecondApproval == ApprovalStatusEnum.Rejected)
                {
                    vacationRequestModel.Status = ApprovalStatusEnum.Rejected;
                    vacationRequestRepository.UpdateVacationRequest(vacationRequestModel);
                }
                if (vacationRequestModel.FirstApproval == ApprovalStatusEnum.Pending || vacationRequestModel.SecondApproval == ApprovalStatusEnum.Pending)
                {
                    vacationRequestModel.Status = ApprovalStatusEnum.Pending;
                    vacationRequestRepository.UpdateVacationRequest(vacationRequestModel);
                }

                List <VacationRequestModel> approvedVacations = vacationRequestRepository.GetAllApprovedVacationRequestsByEmployeeId(vacationRequestModel.IDEmployee);
                int totalDaysApproved = 0;
                foreach (VacationRequestModel vacation in approvedVacations)
                {
                    totalDaysApproved = totalDaysApproved + vacation.DaysRequested;
                }
                EmployeeModel employee = employeeRepository.GetEmployeeByID(vacationRequestModel.IDEmployee);
                employee.DaysOffLeft = employee.TotalDaysOff - totalDaysApproved;
                UpdateModel(employee);
                employeeRepository.UpdateEmployee(employee);

                return(RedirectToAction("Index", "Home"));
            }
            catch
            {
                return(View("EditVacationRequest"));
            }
        }
        public void UpdateVacationRequest(VacationRequestModel vacationRequestModel)
        {
            VacationRequest dbExistingVacationRequest = dbContext.VacationRequests.FirstOrDefault(x => x.IDVacationRequest == vacationRequestModel.IDVacationRequest);

            if (dbExistingVacationRequest != null)
            {
                dbExistingVacationRequest.IDVacationRequest = vacationRequestModel.IDVacationRequest;
                dbExistingVacationRequest.IDEmployee        = vacationRequestModel.IDEmployee;
                dbExistingVacationRequest.Reason            = vacationRequestModel.Reason;
                dbExistingVacationRequest.StartDate         = vacationRequestModel.StartDate;
                dbExistingVacationRequest.EndDate           = vacationRequestModel.EndDate;
                dbExistingVacationRequest.DaysRequested     = vacationRequestModel.DaysRequested;
                dbExistingVacationRequest.FirstApproval     = (int)vacationRequestModel.FirstApproval;
                dbExistingVacationRequest.SecondApproval    = (int)vacationRequestModel.SecondApproval;
                dbExistingVacationRequest.Status            = (int)vacationRequestModel.Status;
                dbContext.SubmitChanges();
            }
        }
        /// <summary>
        /// Delete VacationRequest
        /// </summary>
        /// <param name="id">VacationRequestModel Id</param>
        /// <returns>true on success</returns>
        public bool Delete(int id)
        {
            if (id < 1)
            {
                throw new ArgumentException("id");
            }

            var model = new VacationRequestModel()
            {
                Id = id
            };

            using (var dataContext = new Database(DbName))
            {
                dataContext.Delete(model);
                return(true);
            }
        }
        private VacationRequest MapModelToDbObject(VacationRequestModel vacationRequestModel)
        {
            VacationRequest dbVacationRequest = new VacationRequest();

            if (vacationRequestModel != null)
            {
                dbVacationRequest.IDVacationRequest = vacationRequestModel.IDVacationRequest;
                dbVacationRequest.IDEmployee        = vacationRequestModel.IDEmployee;
                dbVacationRequest.Reason            = vacationRequestModel.Reason;
                dbVacationRequest.StartDate         = vacationRequestModel.StartDate;
                dbVacationRequest.EndDate           = vacationRequestModel.EndDate;
                dbVacationRequest.DaysRequested     = vacationRequestModel.DaysRequested;
                dbVacationRequest.FirstApproval     = (int)vacationRequestModel.FirstApproval;
                dbVacationRequest.SecondApproval    = (int)vacationRequestModel.SecondApproval;
                dbVacationRequest.Status            = (int)vacationRequestModel.Status;
                return(dbVacationRequest);
            }
            return(null);
        }
        private VacationRequestModel MapDbObjectToModel(VacationRequest dbVacationRequest)
        {
            VacationRequestModel vacationRequestModel = new VacationRequestModel();

            if (dbVacationRequest != null)
            {
                vacationRequestModel.IDVacationRequest = dbVacationRequest.IDVacationRequest;
                vacationRequestModel.IDEmployee        = dbVacationRequest.IDEmployee;
                vacationRequestModel.EmployeeFullName  = dbVacationRequest.Employee.FirstName + " " + dbVacationRequest.Employee.LastName;
                vacationRequestModel.Reason            = dbVacationRequest.Reason;
                vacationRequestModel.StartDate         = dbVacationRequest.StartDate;
                vacationRequestModel.EndDate           = dbVacationRequest.EndDate;
                vacationRequestModel.DaysRequested     = dbVacationRequest.DaysRequested;
                vacationRequestModel.FirstApproval     = (ApprovalStatusEnum)dbVacationRequest.FirstApproval;
                vacationRequestModel.SecondApproval    = (ApprovalStatusEnum)dbVacationRequest.SecondApproval;
                vacationRequestModel.Status            = (ApprovalStatusEnum)dbVacationRequest.Status;
                return(vacationRequestModel);
            }
            return(null);
        }
        public void InsertVacationRequest(VacationRequestModel vacationRequestModel)
        {
            vacationRequestModel.IDVacationRequest = Guid.NewGuid();
            vacationRequestModel.SecondApproval    = ApprovalStatusEnum.Pending;
            vacationRequestModel.Status            = ApprovalStatusEnum.Pending;
            VacationRequest dbVacationRequest = new VacationRequest();

            if (vacationRequestModel != null)
            {
                dbVacationRequest.IDVacationRequest = vacationRequestModel.IDVacationRequest;
                dbVacationRequest.IDEmployee        = vacationRequestModel.IDEmployee;
                dbVacationRequest.Reason            = vacationRequestModel.Reason;
                dbVacationRequest.StartDate         = vacationRequestModel.StartDate;
                dbVacationRequest.EndDate           = vacationRequestModel.EndDate;
                dbVacationRequest.DaysRequested     = vacationRequestModel.DaysRequested;
                dbVacationRequest.FirstApproval     = (int)vacationRequestModel.FirstApproval;
                dbVacationRequest.SecondApproval    = (int)vacationRequestModel.SecondApproval;
                dbVacationRequest.Status            = (int)vacationRequestModel.Status;
            }
            dbContext.VacationRequests.InsertOnSubmit(dbVacationRequest);
            dbContext.SubmitChanges();
        }
        // GET: VacationRequest/Delete/5
        public ActionResult Delete(Guid id)
        {
            VacationRequestModel vacationRequestModel = vacationRequestRepository.GetVacationRequestById(id);

            return(View("DeleteVacationRequest", vacationRequestModel));
        }