Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 7c24733f

Von Tamino Steinert vor 4 Monaten hinzugefügt

  • ID 7c24733f6c076d17f50055712070c149e72a6ee2
  • Vorgänger b2f213b2
  • Nachfolger 53a98e07

FIX: S:C:Order: Daten über Workflows vollständig und korrekt laden

Helferfunktion für Neuinitialisierung nach Änderung des
Auftrag-Objektes

Unterschiede anzeigen:

SL/Controller/Order.pm
sub action_add {
my ($self) = @_;
$self->order(SL::Model::Record->update_after_new($self->order));
$self->pre_render();
if (!$::form->{form_validity_token}) {
......
my $order = SL::Model::Record->new_from_workflow($record, $self->type, %flags);
$self->order($order);
# Warn on order locked items if they are not wanted for this record type
if ($self->type_data->no_order_locked_parts) {
my @order_locked_positions = map { $_->position } grep { $_->part->order_locked } @{ $self->order->items_sorted };
flash('warning', t8('This record contains not orderable items at position #1', join ', ', @order_locked_positions)) if @order_locked_positions;
}
$self->recalc();
$self->pre_render();
if (!$::form->{form_validity_token}) {
$::form->{form_validity_token} = SL::DB::ValidityToken->create(scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE())->token;
}
$self->reinit_after_new_order();
$self->render(
'order/form',
title => $self->type_data->text('add'),
%{$self->{template_args}}
);
$self->action_add();
}
sub action_add_from_purchase_basket {
......
$_ ->{converted_from_orderitems_id} = $_ ->{ RECORD_ITEM_ID() } for @{ $self->order->items_sorted };
}
# set item ids to new fake id, to identify them as new items
foreach my $item (@{$self->order->items_sorted}) {
$item->{new_fake_id} = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
}
if ($from_side eq 'sales' && $to_side eq 'purchase') {
if ($::form->{use_shipto}) {
$self->order->custom_shipto($custom_shipto) if $custom_shipto;
......
}
}
# change form type
$::form->{type} = $destination_type;
$self->type($self->init_type);
$self->type_data($self->init_type_data);
$self->cv ($self->init_cv);
$self->check_auth;
# Warn on order locked items if they are not wanted for this record type
if ($self->type_data->no_order_locked_parts) {
my @order_locked_positions = map { $_->position } grep { $_->part->order_locked } @{ $self->order->items_sorted };
flash('warning', t8('This record contains not orderable items at position #1', join ', ', @order_locked_positions)) if @order_locked_positions;
}
$self->recalc();
$self->get_unalterable_data();
$self->pre_render();
$self->reinit_after_new_order();
# trigger rendering values for second row as hidden, because they
# are loaded only on demand. So we need to keep the values from the
# source.
$_->{render_second_row} = 1 for @{ $self->order->items_sorted };
if (!$::form->{form_validity_token}) {
$::form->{form_validity_token} = SL::DB::ValidityToken->create(scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE())->token;
}
$self->render(
'order/form',
title => $self->type_data->text('edit'),
%{$self->{template_args}}
);
$self->action_add;
}
# set form elements in respect to a changed customer or vendor
......
sub action_return_from_create_part {
my ($self) = @_;
$self->{created_part} = SL::DB::Part->new(id => delete $::form->{new_parts_id})->load if $::form->{new_parts_id};
$self->{created_part} = SL::DB::Part->new(
id => delete $::form->{new_parts_id}
)->load if $::form->{new_parts_id};
$::auth->restore_form_from_session(delete $::form->{previousform});
# set item ids to new fake id, to identify them as new items
foreach my $item (@{$self->order->items_sorted}) {
$item->{new_fake_id} = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
}
$self->recalc();
$self->get_unalterable_data();
$self->pre_render();
$self->order($self->init_order);
$self->reinit_after_new_order();
# trigger rendering values for second row/longdescription as hidden,
# because they are loaded only on demand. So we need to keep the values
# from the source.
$_->{render_second_row} = 1 for @{ $self->order->items_sorted };
$_->{render_longdescription} = 1 for @{ $self->order->items_sorted };
if (!$::form->{form_validity_token}) {
$::form->{form_validity_token} = SL::DB::ValidityToken->create(scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE())->token;
if ($self->order->id) {
$self->action_edit;
} else {
$self->action_add;
}
$self->render(
'order/form',
title => $self->type_data->text('edit'),
%{$self->{template_args}}
);
}
# load the second row for one or more items
......
# be retrieved via items until the order is saved. Adding empty items to new
# order here solves this problem.
my $order;
$order = SL::DB::Order->new(id => $::form->{id})->load(with => [ 'orderitems', 'orderitems.part' ]) if $::form->{id};
$order ||= SL::DB::Order->new(orderitems => [],
record_type => $::form->{type},
currency_id => $::instance_conf->get_currency_id(),);
if ($::form->{id}) {
$order = SL::DB::Order->new(
id => $::form->{id}
)->load(
with => [
'orderitems',
'orderitems.part',
]
);
} else {
$order = SL::DB::Order->new(
orderitems => [],
record_type => $::form->{type},
currency_id => $::instance_conf->get_currency_id(),
);
$order = SL::Model::Record->update_after_new($order)
}
my $cv_id_method = $order->type_data->properties('customervendor'). '_id';
if (!$::form->{id} && $::form->{$cv_id_method}) {
......
delete $::form->{form_validity_token};
}
sub reinit_after_new_order {
my ($self) = @_;
# change form type
$::form->{type} = $self->order->type;
$self->type($self->init_type);
$self->type_data($self->init_type_data);
$self->cv ($self->init_cv);
$self->check_auth;
foreach my $item (@{$self->order->items_sorted}) {
# set item ids to new fake id, to identify them as new items
$item->{new_fake_id} = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
# trigger rendering values for second row as hidden, because they
# are loaded only on demand. So we need to keep the values from the
# source.
$item->{render_second_row} = 1;
}
# Warn on order locked items if they are not wanted for this record type
if ($self->type_data->no_order_locked_parts) {
my @order_locked_positions =
map { $_->position }
grep { $_->part->order_locked }
@{ $self->order->items_sorted };
flash('warning', t8(
'This record contains not orderable items at position #1',
join ', ', @order_locked_positions)
) if @order_locked_positions;
}
$self->get_unalterable_data();
$self->recalc();
}
sub pre_render {
my ($self) = @_;

Auch abrufbar als: Unified diff