private void SaveDataFields(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request, DomainClasses.Entities.Form form) { foreach (string prop in request.Form) { var fd = formScheme.FieldDefenitions.FirstOrDefault(x => x.Handle == prop); if (fd == null) { continue; } form.Fields.Add(new Field() { FieldDefenitionId = fd.Id, RawValue = _fieldFactoryPrvider.GetFieldFactory(fd.Type).CreateNew(fd.Title, request.Form[prop], fd.MetaData).Value ?? fd.DefaultValue, }); } }
private void SaveFileFields(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request, DomainClasses.Entities.Form form) { foreach (string prop in request.Files) { var file = request.Files[prop]; var fd = formScheme.FieldDefenitions.FirstOrDefault(x => x.Handle == prop); if (fd == null) { continue; } var fileSaveRes = _fileManager.Save(file, _formsBaseFolderPath + $"/{formScheme.Handle}/" + file.FileName); var data = new FileFieldDataWrapper(file, fileSaveRes.SavedFilePath, fileSaveRes.SavedFileName); form.Fields.Add(new Field() { FieldDefenitionId = fd.Id, RawValue = _fieldFactoryPrvider.GetFieldFactory(fd.Type).CreateNew(fd.Title, data, fd.MetaData).Value ?? fd.DefaultValue, }); } }
public static void UpdateOrCreateSubmitTime(string ip) { using (CmsContext db = new CmsContext()) { var now = DateTime.Now; var last = db.Set <FormSubmitRequest>().SingleOrDefault(e => e.ClientIP == ip); if (last != null) { last.LastSubmit = now; } else { last = new FormSubmitRequest { ClientIP = ip, LastSubmit = now }; db.Set <FormSubmitRequest>().Add(last); db.SaveChanges(); } } }
public async Task <FormSubmitResponse> SubmitNewForm(FormSubmitRequest request) { var formScheme = await _formSchemeDataService .Query .Include(x => x.FieldDefenitions) .FirstAsync(x => x.Handle == request.FormSchemeHandle); if (!HasRequestRequiredFileds(formScheme, request) || !AreAllFieldsValid(formScheme, request)) { return(new FormSubmitResponse() { Access = ResponseAccess.BadRequest, Message = "mising or invalid filed value Use CmsFormValidationFilterAttribute To See Details" }); } await HandleRequest(formScheme, request); return(new FormSubmitResponse() { Access = ResponseAccess.Granted }); }
public async Task <IActionResult> Submit([FromBody] FormSubmitRequest request, CancellationToken cancellationToken) { var clone = JsonConvert.DeserializeObject <FormSubmitRequest>(JsonConvert.SerializeObject(request)); if (clone.QualificationType != "other") { clone.QualificationTypeText = string.Empty; } if (clone.TeacherSpeech == false) { clone.TeacherSpeechText = string.Empty; } if (clone.TeacherWriting == false) { clone.TeacherWritingText = string.Empty; } if (clone.TeacherScreen == false) { clone.TeacherScreenText = string.Empty; } if (clone.StudentNotes == false) { clone.StudentNotesText = string.Empty; } if (clone.StudentQuestions == false) { clone.StudentQuestionsText = string.Empty; } if (clone.StudyProcess == false) { clone.StudyProcessText = string.Empty; } if (clone.LabParticipation == false) { clone.LabParticipationText = string.Empty; } if (clone.PcUsage == false) { clone.PcUsageText = string.Empty; } if (clone.Keyboard == false) { clone.KeyboardText = string.Empty; } if (clone.Mouse == false) { clone.MouseText = string.Empty; } if (clone.Screen == false) { clone.ScreenText = string.Empty; } if (clone.Speakers == false) { clone.SpeakersText = string.Empty; } var validationResult = await new FormSubmitRequestValidator(this._context).ValidateAsync(clone, cancellationToken); if (!validationResult.IsValid) { throw new ValidationException(validationResult.Errors); } this._context.FormSubmissions.Add(new FormSubmission { Data = JsonConvert.SerializeObject(clone) }); await using (var transaction = await this._context.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted, cancellationToken)) { await InsertOrUpdateStudent(this._context, this._postalCodeProviderService, clone, cancellationToken); await this._context.SaveChangesAsync(cancellationToken); await transaction.CommitAsync(cancellationToken); } return(this.Ok(true)); }
private static async Task InsertOrUpdateStudent(EducationContext _context, IPostalCodeProviderService service, FormSubmitRequest request, CancellationToken cancellationToken) { var country = await _context.Countries.Where(x => x.Code == "GR").SingleAsync(cancellationToken); var student = await _context.Students .Where(x => x.RegistrationId == request.StudentId) .FirstOrDefaultAsync(cancellationToken); if (student == null) { _context.Students.Add(student = new Student { RegistrationId = request.StudentId }); } var postalCode = await service.GetPostalCodeAsync(request.PostalCode, cancellationToken); student.Gender = Enum.TryParse(request.Gender, out Gender _gender) ? _gender : Gender.Unspecified; student.DepartmentId = await _context.Departments.Where(x => x.Code == request.Department).Select(x => x.Id).FirstOrDefaultAsync(cancellationToken); student.Name = request.Name; student.Surname = request.Surname; student.Email = request.Email; student.Mobile = request.Mobile; student.Phone = request.Phone; student.PostalCode = postalCode.Code; student.Address = request.Address; student.City = postalCode.Area; student.Prefecture = postalCode.Prefecture; student.CountryId = country.Id; }
private async Task HandleRequest(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request) { var form = new DomainClasses.Entities.Form() { Fields = new List <Field>(), FormSchemeId = formScheme.Id }; SaveDataFields(formScheme, request, form); SaveFileFields(formScheme, request, form); await BaseBeforeAddAsync(form, request.RequestOwner); await _formDataSrv.AddAsync(form); await BaseAfterAddAsync(form, request.RequestOwner); }
private bool HasRequestRequiredFileds(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request) { var requiredProps = formScheme.FieldDefenitions.Where(x => x.IsRequired).Select(x => x.Handle); var requestProps = request.Form.AllKeys.ToList(); requestProps.AddRange(request.Files.AllKeys); var @is = true; foreach (var prop in requiredProps) { if (!requestProps.Contains(prop)) { @is = false; } } return(@is); }
private bool AreAllFormFieldsValid(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request) { bool @is = true; foreach (string prop in request.Form) { var fd = formScheme.FieldDefenitions.FirstOrDefault(x => x.Handle == prop); if (fd == null) { continue; } if (!_fieldFactoryPrvider.GetFieldFactory(fd.Type).IsValidForField(request.Form[prop], fd.MetaData)) { @is = false; } } return(@is); }
private bool AreAllFieldsValid(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request) { return(AreAllFormFieldsValid(formScheme, request) && AreAllFileFieldsValid(formScheme, request)); }