public ActionResult Disagree(ulong id)
        {
            DBQuery dbq = new DBQuery();
            Boolean result = false;
            result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.rejectedByDeputy, DateTime.Now);
            if (result)
            {
                VacationRequest vr = dbq.SelectVacationRequest(id);
                CommunicationManagement.EmailService message = new CommunicationManagement.EmailService();
                message.sendMessage(vr, CommunicationManagement.EmailService.CONFIRMATION_EMAIL_REJECTED);

                TempData["success"] = "Die Vertretungsanfrage wurde abgelehnt.";
            }
            else
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!";
            }

            int lastError = ErrorState.ErrorStateInstance.getLastError();
            if (lastError != ErrorState.OK)
            {
                TempData["error"] = ErrorState.ErrorStateInstance.getErrorMessage(lastError);
            }

            return RedirectToAction("Index", "VacationRequests");
        }
Esempio n. 2
0
        /// <summary>
        /// informs the respective persons about the new status
        /// </summary>
        /// <param name="VacationRequest">VacationRequest of the Requester</param>
        /// <param name="message">Content of email</param>
        /// <returns></returns>
        public void sendMessage(VacationRequest vacationRequest, String message)
        {
            DBQuery dbq = new DBQuery();

            if (message.Equals("SUBMISSION"))
            {
                Employee deputy = dbq.SelectDeputy(vacationRequest.getEmployeeID());
                Employee divisionManager = dbq.SelectDivisionManager(vacationRequest.getEmployeeID());

                // TODO: implement Email sending procedure

            }
            else if (message.Equals("AGREED"))
            {
                Employee divisionManager = dbq.SelectDivisionManager(vacationRequest.getEmployeeID());
                Employee requester = dbq.SelectRequester(vacationRequest.getVacationRequestID());

                // TODO: implement Email sending procedure
            }
            else if (message.Equals("PERMITTED"))
            {

            }
            else if (message.Equals("REJECTED"))
            {
                Employee requester = dbq.SelectRequester(vacationRequest.getVacationRequestID());

                // TODO: implement Email sending procedure

            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public List<PendingVacationRequestViewItem> GetPendingRequests()
        {
            String currentUserId = User.Identity.GetUserId();
            List<String> statesListWithShiftPartner = new List<string> { DBQuery.AGREED, DBQuery.REJECTED_BY_DEPUTY };
            List<String> statesListWithoutShiftPartner = new List<string> { DBQuery.SUBMITTED };

            DBQuery dbq = new DBQuery();

            var DivisionVacationRequestList = new List<PendingVacationRequestViewItem>();
            var SortedDivisionVacationRequestList = new List<PendingVacationRequestViewItem>();
            var EmployeeList = new List<Employee>();

            EmployeeList.AddRange(dbq.SelectEmployeesOfDivision(currentUserId));
            if (EmployeeList.Count() > 0)
            {
                foreach (Employee e in EmployeeList)
                {
                    // look for all employees of division but Division Manager self
                    if (!e.getEmployeeID().Equals(currentUserId))
                    {
                        var vrList = new List<VacationManagement.VacationRequest>();
                        String requesterName = e.getFullName();
                        String deputyID = dbq.SelectShiftPartner(e.getEmployeeID());
                        int remainingVacationDays = dbq.SelectRemainingVacationDays(e.getEmployeeID());

                        // has shiftpartner
                        if (!deputyID.Equals("null"))
                        {
                            String deputyName = dbq.SelectEmployeeFullName(deputyID);

                            foreach (string s in statesListWithShiftPartner)
                            {
                                vrList.AddRange(dbq.SelectVacationRequestsInState(e.getEmployeeID(), s));
                            }
                            foreach (VacationManagement.VacationRequest vr in vrList)
                            {
                                DivisionVacationRequestList.Add(new PendingVacationRequestViewItem(vr, requesterName, deputyName, remainingVacationDays));
                            }
                        }
                        else
                        {
                            String deputyName = "-";
                            foreach (string s in statesListWithoutShiftPartner)
                            {
                                vrList.AddRange(dbq.SelectVacationRequestsInState(e.getEmployeeID(), s));
                            }
                            foreach (VacationManagement.VacationRequest vr in vrList)
                            {
                                DivisionVacationRequestList.Add(new PendingVacationRequestViewItem(vr, requesterName, deputyName, remainingVacationDays));
                            }
                        }
                    }
                }
                // Sort all Vacation Requests by Startdate, Ascending
               SortedDivisionVacationRequestList = DivisionVacationRequestList.OrderBy(c => c.getVacationStartDate()).ToList();
            }
            return SortedDivisionVacationRequestList;
        }
Esempio n. 4
0
        public ActionResult ShowVacationSummary()
        {
            
            String currentUserId = User.Identity.GetUserId();

            DBQuery dbq = new DBQuery();
            int remaining = dbq.SelectRemainingVacationDays(currentUserId);
            int total = dbq.SelectVacationDaysTotal(currentUserId);
            int prevYear = dbq.SelectVacationDaysPreviousYear(currentUserId);
            GUIManagement.VacationEntitlementViewItem summary = new GUIManagement.VacationEntitlementViewItem(currentUserId,remaining,total,prevYear);


            return View(summary);
        }
        // POST: VacationRequests/Delete/5
        public ActionResult Cancel(ulong id)
        {
            DBQuery dbq = new DBQuery();

            Boolean result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.canceled, DateTime.Now);
            if (result)
            {
                VacationRequest vr = dbq.SelectVacationRequest(id);
                //Restore Net Vacation Days of VacationRequest to Employee's VacationEntitlement
                result = RestoreVacationDaysInEmployeeVacationEntitlement(vr);
                if (result)
                {
                    TempData["success"] = "Der Urlaubsantrag wurde erfolgreich storniert.";
                }
                else
                {
                    ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                    //TempData["error"] = "Die Gutschrift der Urlaubstage konnte nicht durchgeführt werden!";
                }
                // set NetVacationDays of cancelled VacationRequest to zero
                result = ClearNetVacationDaysOfCanceledVacationRequest(vr.getVacationRequestID());
                if (!result)
                {
                    ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                }
                // remove any VacationPeriodOverlapNotes in VacationRequests of ShiftPartner, if applicable
                if (vr.getVacationPeriodOverlapNote())
                {
                    result = RemoveVacationPeriodOverlapNote(vr);
                    if (!result)
                    {
                        ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                    }
                }
            }
            else
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!";
            }

            int lastError = ErrorState.ErrorStateInstance.getLastError();
            if (lastError != ErrorState.OK)
            {
                TempData["error"] = "Der Urlaubsantrag konnte nicht storniert werden. Grund: " + ErrorState.ErrorStateInstance.getErrorMessage(lastError);
            }

            return RedirectToAction("Index");
        }
        /// <summary>
        /// Dependent on the checktype, method checks either for overlaps between the new submitted vacation request and DB-stored lock periods,
        /// or between overlaps with a vacation request by the deputy
        /// </summary>
        /// <param name="CheckType"> an int value that choose the test type</param>
        /// <returns> true if no lock or overlap is present, else false</returns>
        public Boolean Validate(int CheckType)
        {
            Boolean result = true; // assumes that no locks or overlaps exist

            switch (CheckType)
            {
                case CHECK_CATEGORY_LOCK_PERIOD:
                    DBQuery dbqLock = new DBQuery();
                    // the DB Query checks whether on ore more lock period(s) lie(s) in vacation request time period
                    var lockList = dbqLock.SelectLockPeriods(_vacationRequest);
                    if (lockList.Count() > 0)
                    {
                        result = false;
                    }
                    break;

                case CHECK_CATEGORY_VACATION_OVERLAP_PERIOD:
                    DBQuery dbqDeputy = new DBQuery();
                    String deputyID = dbqDeputy.SelectDeputy(_vacationRequest);
                    if ( !deputyID.Equals("null") && deputyID != String.Empty)
                    {
                        var overlapList = dbqDeputy.SelectUncanceledEmployeeVacationRequestInTimePeriod(_vacationRequest, deputyID);
                        if (overlapList.Count() > 0)
                        {
                            foreach (var i in overlapList)
                            {
                                //change OverlapNote of existing VacationRequest of Deputy
                                DBQuery dbq = new DBQuery();
                                dbq.UpdateVacationRequestPeriodOverlapNote(i.Item1, true);
                            }
                            result = false;
                        }
                    }
                    break;
                default: break;
            }
            return result;
        }
 private Boolean RestoreVacationDaysInEmployeeVacationEntitlement(VacationRequest vacationRequest)
 {
     Boolean result = false;
     DBQuery dbq = new DBQuery();
     int netWorkingDays = vacationRequest.getNetVacationDays();
     int remainingVacationDays = dbq.SelectRemainingVacationDays(vacationRequest.getEmployeeID());
     result = dbq.UpdateRemainingVacationDays(vacationRequest.getEmployeeID(), netWorkingDays + remainingVacationDays);
     return result;
 }
        /// <summary>
        /// Removes the TRUE-flag in all vacation requests of the shift partner, if the given vacation request is cancelled by its requester.
        /// Use requester ID of vacation request to identity the shiftpartner and startdate and enddate to retrieve vacation requests of the deputy
        /// </summary>
        /// <param name="vacationRequest">use requesterID to find deputy, use time period to specify overlap time period </param>
        /// <returns>TRUE if successful, else FALSE</returns>
        private Boolean RemoveVacationPeriodOverlapNote(VacationRequest vacationRequest)
        {
            Boolean result = true;
            DBQuery dbq = new DBQuery();

            String deputyID = dbq.SelectDeputy(vacationRequest);
            if (!deputyID.Equals("null") && deputyID != String.Empty)
            {
                var overlapList = dbq.SelectUncanceledEmployeeVacationRequestInTimePeriod(vacationRequest, deputyID);
                if (overlapList.Count > 0)
                {
                    foreach (var i in overlapList)
                    {
                        //change OverlapNote of existing VacationRequest of Deputy
                        result = dbq.UpdateVacationRequestPeriodOverlapNote(i.Item1, false);
                        if (!result) break;
                    }
                }
            }
            return result;
        }
 private Boolean ClearNetVacationDaysOfCanceledVacationRequest(ulong vacationRequestID)
 {
     Boolean result = false;
     DBQuery dbq = new DBQuery();
     result = dbq.UpdateNetVacationDays(vacationRequestID, 0);
     return result;
 }
        public List<EmployeeVacationRequestViewItem> GetVacationRequests()
        {
            String currentUserId = User.Identity.GetUserId();

            List<GUIManagement.EmployeeVacationRequestViewItem> resultList = new List<GUIManagement.EmployeeVacationRequestViewItem>();
            DBQuery dbq = new DBQuery();

            List<VacationManagement.VacationRequest> vacationRequestList = dbq.SelectAllVacationRequestsOfEmployee(currentUserId);

            String shiftPartnerID = dbq.SelectShiftPartner(currentUserId);
            String shiftParterName = "-";

            if (shiftPartnerID != null)
            {
                Employee shiftPartner = dbq.SelectDeputy(currentUserId);
                shiftParterName = dbq.SelectEmployeeFullName(shiftPartner.getEmployeeID());
            }

            foreach (VacationManagement.VacationRequest vr in vacationRequestList)
            {
                var employeeVacationRequest = new GUIManagement.EmployeeVacationRequestViewItem(vr, shiftParterName);
                resultList.Add(employeeVacationRequest);
            }
            return resultList;
        }
        public List<AllVacationRequestViewItem> GetAllVacationRequests()
        {
            List<GUIManagement.AllVacationRequestViewItem> resultList = new List<GUIManagement.AllVacationRequestViewItem>();
            DBQuery dbq = new DBQuery();

            List<VacationManagement.VacationRequest> vacationRequestList = dbq.SelectAllVacationRequestsOfDivision(1);              // hier muss eine Funktionr ein der die Bereichsid übermittelt

            string requesterFullName = "-";

            foreach (VacationManagement.VacationRequest vr in vacationRequestList)
            {
                requesterFullName = dbq.SelectEmployeeFullName(vr.getEmployeeID());
                var employeeVacationRequest = new GUIManagement.AllVacationRequestViewItem(vr, requesterFullName);
                resultList.Add(employeeVacationRequest);
            }
            return resultList;
        }
        public ActionResult Delete(ulong id)
        {
            DBQuery dbq = new DBQuery();

            VacationRequest vr = dbq.SelectVacationRequest(id);
            int netWorkingDays = vr.getNetVacationDays();
            int remainingVacationDays = dbq.SelectRemainingVacationDays(vr.getEmployeeID());
            Boolean update = dbq.UpdateRemainingVacationDays(vr.getEmployeeID(), netWorkingDays + remainingVacationDays);
            if (update)
            {
                Boolean result = dbq.DeleteVacationRequest(id);
                if (result)
                {
                    ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                    TempData["success"] = "Der Urlaubsantrag wurde erfolgreich gelöscht";
                }
                else
                {
                    ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                    //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!";
                }
            }
            else
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!";
            }

            int lastError = ErrorState.ErrorStateInstance.getLastError();
            if (lastError != ErrorState.OK)
            {
                TempData["error"] = "Der Urlaubsantrag konnte nicht gelöscht werden. Grund: " + ErrorState.ErrorStateInstance.getErrorMessage(lastError);
            }

            return RedirectToAction("All");
        }
Esempio n. 13
0
        /// <summary>
        /// Calculates the needed vacation days for the desired holiday period. Weekends and holidays are deducted.
        /// </summary>
        /// <param name="VacationRequest">VacationRequest of the Requester</param>
        /// <returns>number of needed vacation days</returns>
        public static int DetermineWorkingDaysInVacationRequest(VacationRequest VacationRequest)
        {
            int workingDays = 0;
            int holiDays = 0;
            int netWorkingDays = 0;

            //count weekdays between vacation start day and vacation end day
            int n = 0;
            while (VacationRequest.getVacationStartDate().AddDays(n) <= VacationRequest.getVacationEndDate()) // vacation start day == vacation start day is possible
            {
                if (VacationRequest.getVacationStartDate().AddDays(n).DayOfWeek != DayOfWeek.Saturday && VacationRequest.getVacationStartDate().AddDays(n).DayOfWeek != DayOfWeek.Sunday) //== no weekday
                {
                    workingDays++;
                }
                n++;
            }

            // check if holidays days are in the vacation period
            DBQuery dbq = new DBQuery();
            holiDays = dbq.SelectHolidays(VacationRequest);

            // correct required vacation days
            netWorkingDays = workingDays - holiDays;

            return netWorkingDays;
        }
        public ActionResult Reject(ulong id)
        {
            String currentUserId = User.Identity.GetUserId();
            DBQuery dbq = new DBQuery();
            Boolean result = false;

            result  = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.rejectedByDivisionManager, DateTime.Now);
            if (result)
            {
                // Restore VacationEntitlement to Employee
                VacationRequest vr = dbq.SelectVacationRequest(id);
                CommunicationManagement.EmailService message = new CommunicationManagement.EmailService();
                message.sendMessage(vr, CommunicationManagement.EmailService.CONFIRMATION_EMAIL_REJECTED);
                TempData["success"] = "Der Urlaubsantrag wurde abgelehnt.";
            }
            else
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                // TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!";
            }

            int lastError = ErrorState.ErrorStateInstance.getLastError();
            if (lastError != ErrorState.OK)
            {
                TempData["error"] = ErrorState.ErrorStateInstance.getErrorMessage(lastError);
            }

            return View("Index", GetAllPendingVacationRequestsOfDivision());
        }
        public ActionResult Permit(ulong id)
        {
            DBQuery dbq = new DBQuery();
            VacationRequest vr1 = dbq.SelectVacationRequest(id);
            Boolean result = false;

            // if vacationRequestStartDate is in the past then the status will be set to "taken"
            if (vr1.getVacationStartDate() < DateTime.Now)
            {
                result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.taken, DateTime.Now);
            }
            else
            {
                result = dbq.UpdateVacationRequestStatus(id, VacationRequestProcessingState.permitted, DateTime.Now);
            }
            if (result)
            {
                VacationRequest vr = dbq.SelectVacationRequest(id);
                CommunicationManagement.EmailService message = new CommunicationManagement.EmailService();
                message.sendMessage(vr, CommunicationManagement.EmailService.CONFIRMATION_EMAIL_PERMITTED);

                TempData["success"] = "Der Urlaubsantrag wurde befürwortet.";
            }
            else
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
                //TempData["error"] = "Die Änderung konnte nicht in die Datenbank übernommen werden!";
            }

            int lastError = ErrorState.ErrorStateInstance.getLastError();
            if (lastError != ErrorState.OK)
            {
                TempData["error"] = ErrorState.ErrorStateInstance.getErrorMessage(lastError);
            }

            return View("Index", GetAllPendingVacationRequestsOfDivision());
        }
        // GET: VacationReplacementRequests
        public ActionResult Index()
        {
            // identify logged-in user
            String currentUserId = User.Identity.GetUserId();

            DBQuery dbq = new DBQuery();
            var ReplacementReqList = new List<GUIManagement.VacationReplacementRequestViewItem>();

            String shiftPartnerID = dbq.SelectShiftPartner(currentUserId);

            if (shiftPartnerID != null)
            {
                var VRList = dbq.SelectSubmittedVacationRequestsOfShiftPartner(shiftPartnerID);
                String name = dbq.SelectEmployeeFullName(shiftPartnerID);

                foreach (VacationManagement.VacationRequest vr in VRList)
                {
                    GUIManagement.VacationReplacementRequestViewItem vrr = new GUIManagement.VacationReplacementRequestViewItem(vr, name);
                    ReplacementReqList.Add(vrr);
                }
            }
            else
            {
                // Labelausgabe GUI

            }
            return View(ReplacementReqList);
        }
        /// <summary>
        /// (1) checks if remaining vacation days of employee suffice, 
        /// (2) sets lock period flag if appropriate,
        /// (3) sets vacation period overlap flag if appropriate
        /// </summary>
        /// <param name="VacationRequest"> a vacation request, passed by reference</param>
        /// <returns></returns>
        public Boolean Validate(VacationRequest VacationRequest)
        {
            Boolean result = false;

            ///<remarks> this value must be numeric</remarks>
            //checks remaining vacation days
            DBQuery dbq = new DBQuery();
            int remainingVacationDays = dbq.SelectRemainingVacationDays(VacationRequest.getEmployeeID());

            // determine working days in vacation request
            int vacationWorkingDays = VacationRequest.DetermineWorkingDaysInVacationRequest(VacationRequest);

            // only proceed if time period of vacation request contains working days
            if (vacationWorkingDays > 0)
            {
                VacationRequest.setNetVacationDays(vacationWorkingDays);

                // Check  VacationRequest overlap with others already existing VacationRequests of Requester without state "canceled"
                var VRList = dbq.SelectUncanceledEmployeeVacationRequestInTimePeriod(VacationRequest, VacationRequest.getEmployeeID());

                Boolean overlap = false;
                Boolean insufficientRemainingVacationDays = false;

                if (VRList.Count > 0)
                {
                    overlap = true;
                    ErrorState.ErrorStateInstance.setError(ErrorState.OVERLAP_WITH_OWN_VACATION_REQUEST);
                }
                if (remainingVacationDays < vacationWorkingDays)
                {
                    insufficientRemainingVacationDays = true;
                    ErrorState.ErrorStateInstance.setError(ErrorState.INSUFFICIENT_REMAINING_VACATION_DAYS);
                }
                // if requester has enough remaining Vacation Days AND no submitted vacation request(s) in this time period, go ahead
                if (!insufficientRemainingVacationDays && !overlap)
                {
                    TimePeriodOverlapCheck check = new TimePeriodOverlapCheck(VacationRequest);

                    //check lock period
                    if (!check.Validate(TimePeriodOverlapCheck.CHECK_CATEGORY_LOCK_PERIOD))
                    {
                        //overlap existing
                        VacationRequest.setVacationLockPeriodNote(true);
                    }

                    //check overlap period with Deputy
                    if (!check.Validate(TimePeriodOverlapCheck.CHECK_CATEGORY_VACATION_OVERLAP_PERIOD))
                    {
                        //overlap existing
                        VacationRequest.setVacationPeriodOverlapNote(true);
                    }

                    if (VacationRequest.getVacationStartDate() < DateTime.Now)
                    {
                        //if VacationRequestEndDate is in past the new Processingstatus is: agreed, so the decision of the DivisionManager is the next step
                        VacationRequest.setVacationRequestProcessingState(VacationRequestProcessingState.agreed);
                    }
                    result = true;
                }
            }
            else
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.ZERO_NET_VACATION_DAYS_IN_VACATION_REQUEST);
            }
            return result;
        }
Esempio n. 18
0
        /// <summary>
        /// 1. writes an information email
        /// 2. writes vacation request in the database
        /// </summary>
        /// <returns>Boolean status if the insert into database was successful</returns>
        private Boolean SendDataToDB()
        {
            Boolean result = false;
            DBQuery dbq = new DBQuery();
            result = dbq.InsertNewVacationRequest(this);

            if (result)
            {
                int remainingVacationDays = dbq.SelectRemainingVacationDays(_employeeID) - this._netVacationDays;
                result = dbq.UpdateRemainingVacationDays(_employeeID, remainingVacationDays);
            }
            if (!result)
            {
                ErrorState.ErrorStateInstance.setError(ErrorState.DATABASE_ERROR);
            }
            return result;
        }