Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a04ea831

Von Tamino Steinert vor 5 Monaten hinzugefügt

  • ID a04ea8317415a60616201d6d9311c13b5089c038
  • Vorgänger 8fdd7686

Beleg laden für Auftrag, Lieferschein und Reklamation angleichen

Setze die init-Objekte neu wenn neues Beleg-Objekt dem Controllers
zugewiesen wird. Die Funktion 'action_edit' ist nur zuständig fürs
initiale Laden eines bestehenden Belegs.

Unterschiede anzeigen:

SL/Controller/DeliveryOrder.pm
# edit an existing order
sub action_edit {
my ($self) = @_;
die "No 'id' was given." unless $::form->{id};
if ($::form->{id}) {
$self->load_order;
} else {
# this is to edit an order from an unsaved order object
# 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);
}
# 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_DELIVERY_ORDER_SAVE()
)->token;
}
}
$self->load_order;
$self->pre_render();
$self->render(
......
$self->order(SL::DB::DeliveryOrder->new(id => $::form->{id})->load);
# Add an empty custom shipto to the order, so that the dialog can render the cvar inputs.
# You need a custom shipto object to call cvars_by_config to get the cvars.
$self->order->custom_shipto(SL::DB::Shipto->new(module => 'DO', custom_variables => [])) if !$self->order->custom_shipto;
$self->order->prepare_stock_info($_) for $self->order->items;
$self->reinit_after_new_order();
return $self->order;
}
......
if ($order->shipto) {
$self->is_custom_shipto_to_delete(1);
} else {
my $custom_shipto = $order->custom_shipto ?
$order->custom_shipto
: $order->custom_shipto(
SL::DB::Shipto->new(module => 'DO', custom_variables => [])
);
my $custom_shipto =
$order->custom_shipto
|| $order->custom_shipto(
SL::DB::Shipto->new(module => 'DO', custom_variables => [])
);
my $shipto_cvars = {
map { my ($key) = m{^shiptocvar_(.+)}; $key => delete $form->{$_}}
......
delete $::form->{form_validity_token};
}
sub workflow_sales_or_request_for_quotation {
my ($self, $destination_type) = @_;
# always save
$self->save();
my $delivery_order = SL::Model::Record->new_from_workflow(
$self->order, $destination_type
);
$self->order($delivery_order);
$self->{converted_from_oe_id} = delete $::form->{id};
$self->reinit_after_new_order();
$self->render(
'delivery_order/form',
title => $self->get_title_for('edit'),
%{$self->{template_args}}
);
}
sub reinit_after_new_order {
my ($self) = @_;
# change form type
$::form->{type} = $self->order->type;
$self->type($self->init_type);
$self->cv ($self->init_cv);
$self->type_data($self->init_type_data);
$self->cv($self->init_cv);
$self->check_auth;
$self->setup_custom_shipto_from_form($self->order, $::form);
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);
......
$item->{render_second_row} = 1;
}
$self->order->prepare_stock_info($_) for $self->order->items;
$self->get_unalterable_data();
}
SL/Controller/Order.pm
$self->order($order);
$self->action_edit();
$self->reinit_after_new_order();
$self->action_add();
}
sub action_add_from_email_journal {
......
# edit an existing order
sub action_edit {
my ($self) = @_;
die "No 'id' was given." unless $::form->{id};
if ($::form->{id}) {
$self->load_order;
if ($self->order->is_sales && $::lx_office_conf{imap_client}->{enabled}) {
my $imap_client = SL::IMAPClient->new(%{$::lx_office_conf{imap_client}});
if ($imap_client) {
$imap_client->update_email_files_for_record(record => $self->order);
}
}
} else {
# this is to edit an order from an unsaved order object
# 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);
}
# 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 };
$self->load_order;
if (!$::form->{form_validity_token}) {
$::form->{form_validity_token} = SL::DB::ValidityToken->create(scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE())->token;
if ($self->order->is_sales && $::lx_office_conf{imap_client}->{enabled}) {
my $imap_client = SL::IMAPClient->new(%{$::lx_office_conf{imap_client}});
if ($imap_client) {
$imap_client->update_email_files_for_record(record => $self->order);
}
}
$self->recalc();
$self->pre_render();
$self->render(
'order/form',
......
my $target_type = SALES_ORDER_TYPE();
my $order = SL::Model::Record->new_from_workflow_multi(\@multi_orders, $target_type, sort_sources_by => 'transdate');
$self->order($order);
$self->reinit_after_new_order();
$self->action_edit();
$self->action_add();
}
# delete the order
......
$self->order(SL::DB::Order->new(id => $::form->{id})->load);
# Add an empty custom shipto to the order, so that the dialog can render the cvar inputs.
# You need a custom shipto object to call cvars_by_config to get the cvars.
$self->order->custom_shipto(SL::DB::Shipto->new(module => 'OE', custom_variables => [])) if !$self->order->custom_shipto;
$self->reinit_after_new_order();
return $self->order;
}
......
if ($order->shipto) {
$self->is_custom_shipto_to_delete(1);
} else {
my $custom_shipto = $order->custom_shipto || $order->custom_shipto(SL::DB::Shipto->new(module => 'OE', custom_variables => []));
my $custom_shipto =
$order->custom_shipto
|| $order->custom_shipto(
SL::DB::Shipto->new(module => 'OE', custom_variables => [])
);
my $shipto_cvars = {map { my ($key) = m{^shiptocvar_(.+)}; $key => delete $form->{$_}} grep { m{^shiptocvar_} } keys %$form};
my $shipto_attrs = {map { $_ => delete $form->{$_}} grep { m{^shipto} } keys %$form};
......
$::form->{type} = $self->order->type;
$self->type($self->init_type);
$self->type_data($self->init_type_data);
$self->cv ($self->init_cv);
$self->cv($self->init_cv);
$self->check_auth;
$self->setup_custom_shipto_from_form($self->order, $::form);
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);
bin/mozilla/io.pl
require SL::Controller::Order;
my $c = SL::Controller::Order->new(order => $order);
$c->setup_custom_shipto_from_form($order, $::form);
$c->action_edit();
$c->reinit_after_new_order();
$c->action_add();
$main::lxdebug->leave_sub();
$::dispatcher->end_request;

Auch abrufbar als: Unified diff