Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 10c6ffbe

Von Bernd Bleßmann vor mehr als 1 Jahr hinzugefügt

  • ID 10c6ffbe4510d8028abada2b175d1ee73dd41bac
  • Vorgänger 0da48299
  • Nachfolger 4cdc96b6

Order-Controller: Model::Record->save verwenden

Unterschiede anzeigen:

SL/Controller/Order.pm
use SL::DB::AuthUser;
use SL::DB::History;
use SL::DB::Order;
use SL::DB::OrderItem;
use SL::DB::Default;
use SL::DB::Unit;
use SL::DB::Part;
......
sub action_save {
my ($self) = @_;
my $errors = $self->save();
if (scalar @{ $errors }) {
$self->js->flash('error', $_) foreach @{ $errors };
return $self->js->render();
}
$self->save();
my $text = $self->type eq sales_order_intake_type() ? $::locale->text('The order intake has been saved')
: $self->type eq sales_order_type() ? $::locale->text('The order confirmation has been saved')
......
SL::DB->client->with_transaction(
sub {
SL::Model::Record->increment_subversion($self->order);
# Todo: Call SL::Model::Record->save when implemented
# SL::Model::Record->save($self->order);
my $errors = $self->save();
die join "\n", @{ $errors } if scalar @{ $errors };
$self->save();
1;
}
);
......
sub action_print {
my ($self) = @_;
my $errors = $self->save();
if (scalar @{ $errors }) {
$self->js->flash('error', $_) foreach @{ $errors };
return $self->js->render();
}
$self->save();
$self->js_reset_order_and_item_ids_after_save;
......
sub action_preview_pdf {
my ($self) = @_;
my $errors = $self->save();
if (scalar @{ $errors }) {
$self->js->flash('error', $_) foreach @{ $errors };
return $self->js->render();
}
$self->save();
$self->js_reset_order_and_item_ids_after_save;
......
my ($self) = @_;
if (!$self->is_final_version) {
my $errors = $self->save();
if (scalar @{ $errors }) {
$self->js->flash('error', $_) foreach @{ $errors };
return $self->js->render();
}
$self->save();
$self->js_reset_order_and_item_ids_after_save;
}
......
my ($self) = @_;
if (!$self->is_final_version) {
my $errors = $self->save();
if (scalar @{ $errors }) {
eval {
$self->save();
1;
} or do {
$self->js->run('kivi.Order.close_email_dialog');
$self->js->flash('error', $_) foreach @{ $errors };
return $self->js->render();
}
die $EVAL_ERROR;
};
$self->js_reset_order_and_item_ids_after_save;
}
......
sub action_save_and_reclamation {
my ($self) = @_;
# cann't use save_and_redirect_to, because id is set!
my $errors = $self->save();
if (scalar @{ $errors }) {
$self->js->flash('error', $_) foreach @{ $errors };
return $self->js->render();
}
# can't use save_and_redirect_to, because id is set!
$self->save();
my $to_type = $self->order->is_sales ? 'sales_reclamation'
: 'purchase_reclamation';
......
sub save {
my ($self) = @_;
$self->recalc();
$self->get_unalterable_data();
my $errors = [];
my $db = $self->order->db;
if (scalar @{$self->order->items} == 0 && !grep { $self->type eq $_ } @{$::instance_conf->get_allowed_documents_with_no_positions() || []}) {
return [t8('The action you\'ve chosen has not been executed because the document does not contain any item yet.')];
}
......
$self->order->add_phone_notes($phone_note) if $is_new;
}
# create first version if none exists
$self->order->add_order_version(SL::DB::OrderVersion->new(version => 1)) if !$self->order->order_version;
my @converted_from_oe_ids;
if ($::form->{converted_from_oe_id}) {
@converted_from_oe_ids = split ' ', $::form->{converted_from_oe_id};
......
}
my $is_new = !$self->order->id;
$db->with_transaction(sub {
my $validity_token;
if (!$self->order->id) {
$validity_token = SL::DB::Manager::ValidityToken->fetch_valid_token(
scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE(),
token => $::form->{form_validity_token},
);
die $::locale->text('The form is not valid anymore.') if !$validity_token;
}
# delete custom shipto if it is to be deleted or if it is empty
if ($self->order->custom_shipto && ($self->is_custom_shipto_to_delete || $self->order->custom_shipto->is_empty)) {
$self->order->custom_shipto->delete if $self->order->custom_shipto->shipto_id;
$self->order->custom_shipto(undef);
}
SL::DB::OrderItem->new(id => $_)->delete for @{$self->item_ids_to_delete || []};
$self->order->save(cascade => 1);
# create first version if none exists
SL::DB::OrderVersion->new(oe_id => $self->order->id, version => 1)->save unless scalar @{ $self->order->order_version };
# link records
if (@converted_from_oe_ids) {
$self->link_requirement_specs_linking_to_created_from_objects(@converted_from_oe_ids);
}
$self->set_project_in_linked_requirement_specs if $self->order->globalproject_id;
my $items_to_delete = scalar @{ $self->item_ids_to_delete || [] }
? SL::DB::Manager::OrderItem->get_all(where => [id => $self->item_ids_to_delete])
: undef;
# Close reachable sales order intakes in the from-workflow if this is a sales order
if (sales_order_type() eq $self->type) {
my $lr = $self->order->linked_records(direction => 'from', recursive => 1);
$lr = [grep { 'SL::DB::Order' eq ref $_ && !$_->closed && $_->is_type('sales_order_intake')} @$lr];
if (@$lr) {
SL::DB::Manager::Order->update_all(set => {closed => 1},
where => [id => [map {$_->id} @$lr]]);
}
}
$self->save_history('SAVED');
$validity_token->delete if $validity_token;
delete $::form->{form_validity_token};
1;
}) || push(@{$errors}, $db->error);
SL::Model::Record->save($self->order,
with_validity_token => { scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE(), token => $::form->{form_validity_token} },
delete_custom_shipto => $self->is_custom_shipto_to_delete || $self->order->custom_shipto->is_empty,
items_to_delete => $items_to_delete,
history => { snumbers => $self->get_history_snumbers() },
);
if ($is_new && $self->order->is_sales) {
my $imap_client = SL::IMAPClient->new();
......
}
}
return $errors;
delete $::form->{form_validity_token};
}
sub pre_render {
......
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();
}
$self->save();
my $text = $self->type eq sales_order_intake_type() ? $::locale->text('The order intake has been saved')
: $self->type eq sales_order_type() ? $::locale->text('The order confirmation has been saved')

Auch abrufbar als: Unified diff