public UploadViewModel(IAssessment assessment, UploadPostbackModel model)
     : this(assessment)
 {
     this.WorksheetNumber = model.WorksheetNumber;
     this.SurnameColumn = model.SurnameColumn;
     this.ForenamesColumn = model.ForenamesColumn;
     this.ResultColumn = model.ResultColumn;
     this.StartRow = model.StartRow;
 }
        public ActionResult Upload(Guid id, HttpPostedFileBase fileToImport, UploadPostbackModel model)
        {
            var assessment = this.assessmentsRepo.Open(id);

            if (fileToImport == null)
            {
                ModelState.AddModelError("fileToImport", "No file selected");
            }

            if (!ModelState.IsValid)
            {
                var viewModel = new UploadViewModel(assessment, model);
                return this.View(viewModel);
            }

            if (fileToImport != null)
            {
                using (var memoryStream = new MemoryStream())
                {
                    fileToImport.InputStream.CopyTo(memoryStream);
                    memoryStream.Position = 0;
                    var parseResult = AssessmentParser.Parse(
                        memoryStream,
                        model.WorksheetNumber,
                        model.SurnameColumn,
                        model.ForenamesColumn,
                        model.ResultColumn,
                        model.StartRow);

                    foreach (var resultRow in parseResult.Results)
                    {
                        var newCandidateId = assessment.AddCandidate(resultRow.Surname, resultRow.Forenames);
                        if (resultRow.Result.HasValue)
                        {
                            assessment.SetCandidateResult(newCandidateId, resultRow.Result.Value);
                        }
                    }
                }
            }

            return this.RedirectToAction("Edit", "AssessmentEditor", new { id });
        }