+sub save_and_redirect_to {
+ my ($self, %params) = @_;
+
+ my $errors = $self->save();
+
+ if (scalar @{ $errors }) {
+ $self->js->flash('error', $_) foreach @{ $errors };
+ return $self->js->render();
+ }
+
+ my $text = $self->type eq sales_order_type() ? $::locale->text('The order has been saved')
+ : $self->type eq purchase_order_type() ? $::locale->text('The order has been saved')
+ : $self->type eq sales_quotation_type() ? $::locale->text('The quotation has been saved')
+ : $self->type eq request_quotation_type() ? $::locale->text('The rfq has been saved')
+ : '';
+ flash_later('info', $text);
+
+ $self->redirect_to(%params, id => $self->order->id);
+}
+
+sub save_history {
+ my ($self, $addition) = @_;
+
+ my $number_type = $self->order->type =~ m{order} ? 'ordnumber' : 'quonumber';
+ my $snumbers = $number_type . '_' . $self->order->$number_type;
+
+ SL::DB::History->new(
+ trans_id => $self->order->id,
+ employee_id => SL::DB::Manager::Employee->current->id,
+ what_done => $self->order->type,
+ snumbers => $snumbers,
+ addition => $addition,
+ )->save;
+}
+
+sub store_pdf_to_webdav_and_filemanagement {
+ my($order, $content, $filename) = @_;
+
+ my @errors;
+
+ # copy file to webdav folder
+ if ($order->number && $::instance_conf->get_webdav_documents) {
+ my $webdav = SL::Webdav->new(
+ type => $order->type,
+ number => $order->number,
+ );
+ my $webdav_file = SL::Webdav::File->new(
+ webdav => $webdav,
+ filename => $filename,
+ );
+ eval {
+ $webdav_file->store(data => \$content);
+ 1;
+ } or do {
+ push @errors, t8('Storing PDF to webdav folder failed: #1', $@);
+ };
+ }
+ if ($order->id && $::instance_conf->get_doc_storage) {
+ eval {
+ SL::File->save(object_id => $order->id,
+ object_type => $order->type,
+ mime_type => 'application/pdf',
+ source => 'created',
+ file_type => 'document',
+ file_name => $filename,
+ file_contents => $content);
+ 1;
+ } or do {
+ push @errors, t8('Storing PDF in storage backend failed: #1', $@);
+ };
+ }
+
+ return @errors;
+}
+
+sub link_requirement_specs_linking_to_created_from_objects {
+ my ($self, @converted_from_oe_ids) = @_;
+
+ return unless @converted_from_oe_ids;
+
+ my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => \@converted_from_oe_ids ]);
+ foreach my $rs_order (@{ $rs_orders }) {
+ SL::DB::RequirementSpecOrder->new(
+ order_id => $self->order->id,
+ requirement_spec_id => $rs_order->requirement_spec_id,
+ version_id => $rs_order->version_id,
+ )->save;
+ }
+}
+
+sub set_project_in_linked_requirement_specs {
+ my ($self) = @_;
+
+ my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => $self->order->id ]);
+ foreach my $rs_order (@{ $rs_orders }) {
+ next if $rs_order->requirement_spec->project_id == $self->order->globalproject_id;
+
+ $rs_order->requirement_spec->update_attributes(project_id => $self->order->globalproject_id);
+ }
+}
+