Beispiel #1
0
        public async Task <IActionResult> Update(Guid?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var enrolling = await _enrollingService.GetEnrollingIncludingEnrollmentAndFieldInputsAsync(id.Value);

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

            var enrollment = await _enrollmentService.GetEnrollmentIncludingFieldsAndChoicesAsync(enrolling.Enrollment.Id);

            if (enrollment.EndTime < DateTime.Now ||
                enrollment.Status != Models.ActivityState.Active)
            {
                return(View("AlreadyClosed", enrollment));
            }

            var employee = await _employeeService.GetAsync(enrolling.EmployeeNo);

            var model = new EnrollingUpdateViewModel
            {
                Enrolling    = enrolling,
                Enrollment   = enrollment,
                EmployeeNo   = enrolling.EmployeeNo,
                EmailAddress = employee.EmailAddress,
                Name         = employee.ChineseName
            };

            return(View(model));
        }
Beispiel #2
0
        public async Task <IActionResult> Update(Guid id, EnrollingUpdateViewModel model)
        {
            var enrolling = await _enrollingService.GetEnrollingIncludingEnrollmentAndFieldInputsAsync(id);

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

            model.Enrolling  = enrolling;
            model.Enrollment = await _enrollmentService.GetEnrollmentIncludingFieldsAndChoicesAsync(enrolling.Enrollment.Id);

            // check if self-enroll only
            var user = await _userSerivce.GetUserWithEmployeeInfoAsync(Guid.Parse(User.GetUserId()));

            if (model.Enrollment.SelfEnrollmentOnly && user.Employee.No != model.EmployeeNo)
            {
                return(View("SelfEnrollmentOnly", model));
            }

            // check required fields
            var requiredFields = model.Enrollment.ExtraFormFields.Where(f => f.IsRequired);

            if (requiredFields.Any())
            {
                foreach (var field in requiredFields)
                {
                    var key       = $"FieldInputs.{field.Id}";
                    var formField = (from item in Request.Form where item.Key == key select item).FirstOrDefault();
                    if (string.IsNullOrWhiteSpace(formField.Value))
                    {
                        ModelState.AddModelError(string.Empty, $"{field.Name} is required.");
                    }
                }
            }

            var fieldInputs = (from item in Request.Form
                               where item.Key.StartsWith("FieldInputs.")
                               select item).ToDictionary(item => item.Key, item => item.Value.ToString());

            if (ModelState.IsValid)
            {
                await _enrollingService.UpdateAsync(enrolling.Id,
                                                    model.EmployeeNo, fieldInputs, Guid.Parse(User.GetUserId()), User.GetUsername());

                return(RedirectToAction("Details", new { Id = enrolling.Id }));
            }

            // bind field inputs back to the view model
            if (fieldInputs != null)
            {
                enrolling.FieldInputs.Clear();
                foreach (var item in fieldInputs)
                {
                    var fieldId    = Guid.Parse(item.Key.Replace("FieldInputs.", string.Empty));
                    var fieldValue = item.Value ?? string.Empty; // not null

                    enrolling.FieldInputs.Add(new FieldInput
                    {
                        Id           = Guid.NewGuid(),
                        FieldEntryId = fieldId,
                        Input        = fieldValue
                    });
                }
            }

            return(View(model));
        }