Ejemplo n.º 1
0
        public async Task <IActionResult> Put(
            [FromRoute] int jobApplicationId,
            [FromBody] JobApplicationWithStateReq request)
        {
            bool found = await _jobApplicationService.EditAsync(jobApplicationId, request);

            if (!found)
            {
                return(StatusCode(404));
            }
            return(StatusCode(204));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Edit JobApplication
        /// </summary>
        /// <param name="jobApplicationId">JobApplication ID</param>
        /// <param name="model">JobApplication DTO</param>
        /// <returns>Bool if JobApplication was found</returns>
        public async Task <bool> EditAsync(int jobApplicationId, JobApplicationWithStateReq model)
        {
            // route id and model id differs
            if (jobApplicationId != model.JobApplicationId)
            {
                throw new AppLogicException("Neplatný požadavek");
            }

            var jobApplication = await _context.JobApplications
                                 .Include(ja => ja.JobOffer)
                                 .FirstAsync(ja => ja.JobApplicationId == jobApplicationId);

            // job application not found
            if (jobApplication == null)
            {
                return(false);
            }

            // check if the transition between states is valid
            bool toPenErr = model.State == JobApplicationStates.Pending;
            bool toAppErr = (model.State == JobApplicationStates.Approved) &&
                            (jobApplication.State != JobApplicationStates.Pending);
            bool toDenErr = (model.State == JobApplicationStates.Denied) &&
                            (jobApplication.State != JobApplicationStates.Pending);
            bool toAbsErr = (model.State == JobApplicationStates.Absent) &&
                            ((jobApplication.State != JobApplicationStates.Attended) &&
                             (jobApplication.State != JobApplicationStates.Approved));
            bool toAttErr = (model.State == JobApplicationStates.Attended) &&
                            ((jobApplication.State != JobApplicationStates.Absent) &&
                             (jobApplication.State != JobApplicationStates.Approved));

            if (toPenErr || toAppErr || toDenErr || toAbsErr || toAttErr)
            {
                throw new AppLogicException("Nevalidní přechod mezi stavy přihlášky");
            }

            // when approving/denying application
            if (model.State == JobApplicationStates.Approved || model.State == JobApplicationStates.Denied)
            {
                // check if job offer has aleready begun
                if (jobApplication.JobOffer.Start <= DateTime.UtcNow)
                {
                    throw new AppLogicException("Brigáda již započala");
                }

                int freeSpaces = await _jobOfferService.GetFreeSpacesAsync(jobApplication.JobOffer.JobOfferId);

                if (freeSpaces < 1)
                {
                    throw new AppLogicException("Již nejsou volná místa");
                }
            }
            // when setting absent/attended state
            else if (model.State == JobApplicationStates.Absent || model.State == JobApplicationStates.Attended)
            {
                // check if job offer has already ended
                if (jobApplication.JobOffer.End > DateTime.UtcNow)
                {
                    throw new AppLogicException("Brigáda ještě neskončila");
                }
            }

            // edit job application
            jobApplication.State = model.State;
            await _context.SaveChangesAsync();

            return(true);
        }