+#
+# helpers
+#
+
+sub create_or_update {
+ my $self = shift;
+ my $is_new = !$self->requirement_spec->id;
+ my $params = delete($::form->{requirement_spec}) || { };
+ my $title = $is_new ? t8('Create a new requirement spec') : t8('Edit requirement spec');
+
+ $self->requirement_spec->assign_attributes(%{ $params });
+
+ my @errors = $self->requirement_spec->validate;
+
+ if (@errors) {
+ return SL::ClientJS->new->error(@errors)->render($self) if $::request->is_ajax;
+
+ flash('error', @errors);
+ $self->render('requirement_spec/new', title => $title);
+ return;
+ }
+
+ $self->requirement_spec->save;
+
+ if ($::request->is_ajax) {
+ my $html = $self->render('requirement_spec/_header', { output => 0 });
+ return SL::ClientJS->new
+ ->replaceWith('#requirement-spec-header', $html)
+ ->flash('info', t8('The requirement spec has been saved.'))
+ ->render($self);
+ }
+
+ flash_later('info', $is_new ? t8('The requirement spec has been created.') : t8('The requirement spec has been saved.'));
+ $self->redirect_to(action => 'show', id => $self->requirement_spec->id);
+}
+